in pkg/skoop/netstack/neigh.go [40:76]
func (n *Neighbour) ProbeNeigh(ip net.IP, linkIndex int) (*NeighResult, error) {
var in *Interface
for _, inf := range n.interfaces {
if inf.Index == linkIndex {
in = &inf
break
}
}
if in == nil {
return nil, fmt.Errorf("cannot found link: %v", linkIndex)
}
var (
matchNeigh *Neigh
)
result := &NeighResult{}
for _, neigh := range in.NeighInfo {
if neigh.LinkIndex == linkIndex && neigh.IP.Equal(ip) {
matchNeigh = &neigh
break
}
}
// no cache for neigh
if matchNeigh == nil {
return nil, nil
}
result.LLAddr = matchNeigh.HardwareAddr
result.State = matchNeigh.State
if result.State == NudPermanent {
for _, fdb := range in.FdbInfo {
if fdb.HardwareAddr.String() == matchNeigh.HardwareAddr.String() {
result.DST = fdb.IP
}
}
}
return result, nil
}