diff options
| author | Frank Blaschka <frank.blaschka@de.ibm.com> | 2009-01-08 13:50:20 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-01-08 13:50:20 -0500 |
| commit | cc883d16c3b7434c7da2c45b54a49c2a99e83db7 (patch) | |
| tree | 12ad0db6989cdbcae745cb09a33e4e7ded7383c6 /net | |
| parent | f52deb0e8408515ecf58c330c93fa99b8cb53cb4 (diff) | |
vlan: add neigh_setup
In case the real device has a neigh_setup function, this
neigh_setup function should be used for the vlan device.
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
| -rw-r--r-- | net/8021q/vlan_dev.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 89a3bbdfca3f..4a19acd3a32b 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
| @@ -546,6 +546,18 @@ static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
| 546 | return err; | 546 | return err; |
| 547 | } | 547 | } |
| 548 | 548 | ||
| 549 | static int vlan_dev_neigh_setup(struct net_device *dev, struct neigh_parms *pa) | ||
| 550 | { | ||
| 551 | struct net_device *real_dev = vlan_dev_info(dev)->real_dev; | ||
| 552 | const struct net_device_ops *ops = real_dev->netdev_ops; | ||
| 553 | int err = 0; | ||
| 554 | |||
| 555 | if (netif_device_present(real_dev) && ops->ndo_neigh_setup) | ||
| 556 | err = ops->ndo_neigh_setup(dev, pa); | ||
| 557 | |||
| 558 | return err; | ||
| 559 | } | ||
| 560 | |||
| 549 | static void vlan_dev_change_rx_flags(struct net_device *dev, int change) | 561 | static void vlan_dev_change_rx_flags(struct net_device *dev, int change) |
| 550 | { | 562 | { |
| 551 | struct net_device *real_dev = vlan_dev_info(dev)->real_dev; | 563 | struct net_device *real_dev = vlan_dev_info(dev)->real_dev; |
| @@ -713,6 +725,7 @@ static const struct net_device_ops vlan_netdev_ops = { | |||
| 713 | .ndo_set_multicast_list = vlan_dev_set_rx_mode, | 725 | .ndo_set_multicast_list = vlan_dev_set_rx_mode, |
| 714 | .ndo_change_rx_flags = vlan_dev_change_rx_flags, | 726 | .ndo_change_rx_flags = vlan_dev_change_rx_flags, |
| 715 | .ndo_do_ioctl = vlan_dev_ioctl, | 727 | .ndo_do_ioctl = vlan_dev_ioctl, |
| 728 | .ndo_neigh_setup = vlan_dev_neigh_setup, | ||
| 716 | }; | 729 | }; |
| 717 | 730 | ||
| 718 | static const struct net_device_ops vlan_netdev_accel_ops = { | 731 | static const struct net_device_ops vlan_netdev_accel_ops = { |
| @@ -728,6 +741,7 @@ static const struct net_device_ops vlan_netdev_accel_ops = { | |||
| 728 | .ndo_set_multicast_list = vlan_dev_set_rx_mode, | 741 | .ndo_set_multicast_list = vlan_dev_set_rx_mode, |
| 729 | .ndo_change_rx_flags = vlan_dev_change_rx_flags, | 742 | .ndo_change_rx_flags = vlan_dev_change_rx_flags, |
| 730 | .ndo_do_ioctl = vlan_dev_ioctl, | 743 | .ndo_do_ioctl = vlan_dev_ioctl, |
| 744 | .ndo_neigh_setup = vlan_dev_neigh_setup, | ||
| 731 | }; | 745 | }; |
| 732 | 746 | ||
| 733 | void vlan_setup(struct net_device *dev) | 747 | void vlan_setup(struct net_device *dev) |
