Handle kernel's l2miss notification in the overlay driver
Signed-off-by: Santhosh Manohar <santhosh@docker.com>
This commit is contained in:
parent
1f32a0a772
commit
83837617b4
1 changed files with 16 additions and 10 deletions
|
@ -645,19 +645,25 @@ func (n *network) watchMiss(nlSock *nl.NetlinkSocket) {
|
|||
continue
|
||||
}
|
||||
|
||||
if neigh.IP.To4() == nil {
|
||||
if neigh.HardwareAddr != nil {
|
||||
logrus.Debugf("Miss notification, l2 mac %v", neigh.HardwareAddr)
|
||||
}
|
||||
var (
|
||||
ip net.IP
|
||||
mac net.HardwareAddr
|
||||
)
|
||||
if neigh.IP.To4() != nil {
|
||||
ip = neigh.IP
|
||||
} else if neigh.HardwareAddr != nil {
|
||||
mac = []byte(neigh.HardwareAddr)
|
||||
ip = net.IP(mac[2:])
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
|
||||
// Not any of the network's subnets. Ignore.
|
||||
if !n.contains(neigh.IP) {
|
||||
if !n.contains(ip) {
|
||||
continue
|
||||
}
|
||||
|
||||
logrus.Debugf("miss notification for dest IP, %v", neigh.IP.String())
|
||||
logrus.Debugf("miss notification: dest IP %v, dest MAC %v", ip, mac)
|
||||
|
||||
if neigh.State&(netlink.NUD_STALE|netlink.NUD_INCOMPLETE) == 0 {
|
||||
continue
|
||||
|
@ -667,14 +673,14 @@ func (n *network) watchMiss(nlSock *nl.NetlinkSocket) {
|
|||
continue
|
||||
}
|
||||
|
||||
mac, IPmask, vtep, err := n.driver.resolvePeer(n.id, neigh.IP)
|
||||
mac, IPmask, vtep, err := n.driver.resolvePeer(n.id, ip)
|
||||
if err != nil {
|
||||
logrus.Errorf("could not resolve peer %q: %v", neigh.IP, err)
|
||||
logrus.Errorf("could not resolve peer %q: %v", ip, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if err := n.driver.peerAdd(n.id, "dummy", neigh.IP, IPmask, mac, vtep, true); err != nil {
|
||||
logrus.Errorf("could not add neighbor entry for missed peer %q: %v", neigh.IP, err)
|
||||
if err := n.driver.peerAdd(n.id, "dummy", ip, IPmask, mac, vtep, true); err != nil {
|
||||
logrus.Errorf("could not add neighbor entry for missed peer %q: %v", ip, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue