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 | |
| 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>
| -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. */ |
