diff options
author | Yan Burman <yanb@mellanox.com> | 2012-12-19 22:36:08 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-12-26 18:09:55 -0500 |
commit | af9b078e354614fad1e2e0cef04e216ae37cc389 (patch) | |
tree | b8f4b9d5912bb71130be2b2ed6429134b70f561a /drivers/net | |
parent | c3ae62af8e755ea68380fb5ce682e60079a4c388 (diff) |
net/vxlan: Use the underlying device index when joining/leaving multicast groups
The socket calls from vxlan to join/leave multicast group aren't
using the index of the underlying device, as a result the stack uses
the first interface that is up. This results in vxlan being non functional
over a device which isn't the 1st to be up.
Fix this by providing the iflink field to the vxlan instance
to the multicast calls.
Signed-off-by: Yan Burman <yanb@mellanox.com>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/vxlan.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 3b3fdf648ea7..40f2cc135a49 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -505,7 +505,8 @@ static int vxlan_join_group(struct net_device *dev) | |||
505 | struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id); | 505 | struct vxlan_net *vn = net_generic(dev_net(dev), vxlan_net_id); |
506 | struct sock *sk = vn->sock->sk; | 506 | struct sock *sk = vn->sock->sk; |
507 | struct ip_mreqn mreq = { | 507 | struct ip_mreqn mreq = { |
508 | .imr_multiaddr.s_addr = vxlan->gaddr, | 508 | .imr_multiaddr.s_addr = vxlan->gaddr, |
509 | .imr_ifindex = vxlan->link, | ||
509 | }; | 510 | }; |
510 | int err; | 511 | int err; |
511 | 512 | ||
@@ -532,7 +533,8 @@ static int vxlan_leave_group(struct net_device *dev) | |||
532 | int err = 0; | 533 | int err = 0; |
533 | struct sock *sk = vn->sock->sk; | 534 | struct sock *sk = vn->sock->sk; |
534 | struct ip_mreqn mreq = { | 535 | struct ip_mreqn mreq = { |
535 | .imr_multiaddr.s_addr = vxlan->gaddr, | 536 | .imr_multiaddr.s_addr = vxlan->gaddr, |
537 | .imr_ifindex = vxlan->link, | ||
536 | }; | 538 | }; |
537 | 539 | ||
538 | /* Only leave group when last vxlan is done. */ | 540 | /* Only leave group when last vxlan is done. */ |