vxlan: use appropriate family on L3 miss
authorVincent Bernat <vincent@bernat.im>
Fri, 10 Mar 2017 15:30:24 +0000 (16:30 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 13 Mar 2017 06:31:05 +0000 (23:31 -0700)
When sending a L3 miss, the family is set to AF_INET even for IPv6. This
causes userland (eg "ip monitor") to be confused. Ensure we send the
appropriate family in this case. For L2 miss, keep using AF_INET.

Signed-off-by: Vincent Bernat <vincent@bernat.im>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c

index e375560cc74e5ffc09553ddab5c6b657fe1cb6f0..168257aa8acea8fa48abb24d64b0625cec088afb 100644 (file)
@@ -276,9 +276,9 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan,
        send_eth = send_ip = true;
 
        if (type == RTM_GETNEIGH) {
-               ndm->ndm_family = AF_INET;
                send_ip = !vxlan_addr_any(&rdst->remote_ip);
                send_eth = !is_zero_ether_addr(fdb->eth_addr);
+               ndm->ndm_family = send_ip ? rdst->remote_ip.sa.sa_family : AF_INET;
        } else
                ndm->ndm_family = AF_BRIDGE;
        ndm->ndm_state = fdb->state;