func()

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
}