diff --git a/neigh.go b/neigh.go index 87aeaf9f..0e5eb90c 100644 --- a/neigh.go +++ b/neigh.go @@ -7,7 +7,7 @@ import ( // Neigh represents a link layer neighbor from netlink. type Neigh struct { - Link Link + LinkIndex int Family int State int Type int diff --git a/neigh_linux.go b/neigh_linux.go index 50c63c3a..12124066 100644 --- a/neigh_linux.go +++ b/neigh_linux.go @@ -104,7 +104,7 @@ func neighHandle(neigh *Neigh, req *nl.NetlinkRequest) error { msg := Ndmsg{ Family: uint8(family), - Index: uint32(neigh.Link.Attrs().Index), + Index: uint32(neigh.LinkIndex), State: uint16(neigh.State), Type: uint8(neigh.Type), Flags: uint8(neigh.Flags), @@ -163,17 +163,12 @@ func NeighList(linkIndex, family int) ([]Neigh, error) { func NeighDeserialize(m []byte) (*Neigh, error) { msg := deserializeNdmsg(m) - link, err := LinkByIndex(int(msg.Index)) - if err != nil { - return nil, err - } - neigh := Neigh{ - Family: int(msg.Family), - State: int(msg.State), - Type: int(msg.Type), - Flags: int(msg.Flags), - Link: link, + LinkIndex: int(msg.Index), + Family: int(msg.Family), + State: int(msg.State), + Type: int(msg.Type), + Flags: int(msg.Flags), } diff --git a/neigh_test.go b/neigh_test.go index 2e0bff43..510f012b 100644 --- a/neigh_test.go +++ b/neigh_test.go @@ -46,7 +46,7 @@ func TestNeighAddDel(t *testing.T) { // Add the arpTable for _, entry := range arpTable { err := NeighAdd(&Neigh{ - Link: &dummy, + LinkIndex: dummy.Index, State: NUD_REACHABLE, IP: entry.ip, HardwareAddr: entry.mac, @@ -74,7 +74,7 @@ func TestNeighAddDel(t *testing.T) { // Delete the arpTable for _, entry := range arpTable { err := NeighDel(&Neigh{ - Link: &dummy, + LinkIndex: dummy.Index, IP: entry.ip, HardwareAddr: entry.mac, }) diff --git a/route.go b/route.go index 57bf0e98..e92a9cf3 100644 --- a/route.go +++ b/route.go @@ -22,15 +22,14 @@ const ( // gateway. Advanced route parameters and non-main routing tables are // currently not supported. type Route struct { - Link Link - Scope Scope - Dst *net.IPNet - Src net.IP - Gw net.IP + LinkIndex int + Scope Scope + Dst *net.IPNet + Src net.IP + Gw net.IP } func (r Route) String() string { - base := r.Link.Attrs() - return fmt.Sprintf("{%s Dst: %s Src: %s Gw: %s}", base.Name, r.Dst.String(), + return fmt.Sprintf("{Ifindex: %d Dst: %s Src: %s Gw: %s}", r.LinkIndex, r.Dst.String(), r.Src, r.Gw) } diff --git a/route_linux.go b/route_linux.go index b499d607..2e502ff0 100644 --- a/route_linux.go +++ b/route_linux.go @@ -90,8 +90,7 @@ func routeHandle(route *Route, req *nl.NetlinkRequest) error { b = make([]byte, 4) native = nl.NativeEndian() ) - base := route.Link.Attrs() - native.PutUint32(b, uint32(base.Index)) + native.PutUint32(b, uint32(route.LinkIndex)) req.AddData(nl.NewRtAttr(syscall.RTA_OIF, b)) @@ -157,8 +156,7 @@ func RouteList(link Link, family int) ([]Route, error) { // Ignore routes from other interfaces continue } - resLink, _ := LinkByIndex(routeIndex) - route.Link = resLink + route.LinkIndex = routeIndex } } res = append(res, route) diff --git a/route_test.go b/route_test.go index 77afc6b8..c1cc16d2 100644 --- a/route_test.go +++ b/route_test.go @@ -24,7 +24,7 @@ func TestRouteAddDel(t *testing.T) { _, dst, err := net.ParseCIDR("192.168.0.0/24") ip := net.ParseIP("127.1.1.1") - route := Route{Link: link, Dst: dst, Src: ip} + route := Route{LinkIndex: link.Attrs().Index, Dst: dst, Src: ip} err = RouteAdd(&route) if err != nil { t.Fatal(err)