* [patch 0/2] vlan, qeth: neigh_setup
@ 2009-01-07 12:15 frank.blaschka
2009-01-07 12:15 ` [patch 1/2] vlan: add neigh_setup frank.blaschka
2009-01-07 12:15 ` [patch 2/2] qeth: convert to net_device_ops frank.blaschka
0 siblings, 2 replies; 5+ messages in thread
From: frank.blaschka @ 2009-01-07 12:15 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
Hi Dave,
the qeth_l3 driver uses the neigh_setup function to turn off ARP for
IPv4. But since the vlan driver does not support a neigh_setup
function I had to add an ugly hack to the qeth_l3_add_vid function
(set the neigh_setup function of the vlan device to the function of
the real device). With the new net_device_ops this hack will not work
any longer so I want to add neigh_setup to the vlan driver.
Following patches add the neigh_setup to vlan and change qeth to
use the net_device_ops. Do you see any problems?
Or is there a better way to turn off ARP for IPv4 (we still need
neighbour solicitation for IPv6 so IFF_NOARP is no option)?
Thanks,
Frank
--
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 1/2] vlan: add neigh_setup
2009-01-07 12:15 [patch 0/2] vlan, qeth: neigh_setup frank.blaschka
@ 2009-01-07 12:15 ` frank.blaschka
2009-01-08 18:50 ` David Miller
2009-01-07 12:15 ` [patch 2/2] qeth: convert to net_device_ops frank.blaschka
1 sibling, 1 reply; 5+ messages in thread
From: frank.blaschka @ 2009-01-07 12:15 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
[-- Attachment #1: vlan_neigh_setup.diff --]
[-- Type: text/plain, Size: 1652 bytes --]
From: Frank Blaschka <frank.blaschka@de.ibm.com>
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>
---
net/8021q/vlan_dev.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
Index: git_linus/net/8021q/vlan_dev.c
===================================================================
--- git_linus.orig/net/8021q/vlan_dev.c
+++ git_linus/net/8021q/vlan_dev.c
@@ -546,6 +546,18 @@ static int vlan_dev_ioctl(struct net_dev
return err;
}
+static int vlan_dev_neigh_setup(struct net_device *dev, struct neigh_parms *pa)
+{
+ struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
+ const struct net_device_ops *ops = real_dev->netdev_ops;
+ int err = 0;
+
+ if (netif_device_present(real_dev) && ops->ndo_neigh_setup)
+ err = ops->ndo_neigh_setup(dev, pa);
+
+ return err;
+}
+
static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
{
struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
@@ -713,6 +725,7 @@ static const struct net_device_ops vlan_
.ndo_set_multicast_list = vlan_dev_set_rx_mode,
.ndo_change_rx_flags = vlan_dev_change_rx_flags,
.ndo_do_ioctl = vlan_dev_ioctl,
+ .ndo_neigh_setup = vlan_dev_neigh_setup,
};
static const struct net_device_ops vlan_netdev_accel_ops = {
@@ -728,6 +741,7 @@ static const struct net_device_ops vlan_
.ndo_set_multicast_list = vlan_dev_set_rx_mode,
.ndo_change_rx_flags = vlan_dev_change_rx_flags,
.ndo_do_ioctl = vlan_dev_ioctl,
+ .ndo_neigh_setup = vlan_dev_neigh_setup,
};
void vlan_setup(struct net_device *dev)
--
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch 2/2] qeth: convert to net_device_ops
2009-01-07 12:15 [patch 0/2] vlan, qeth: neigh_setup frank.blaschka
2009-01-07 12:15 ` [patch 1/2] vlan: add neigh_setup frank.blaschka
@ 2009-01-07 12:15 ` frank.blaschka
2009-01-08 18:50 ` David Miller
1 sibling, 1 reply; 5+ messages in thread
From: frank.blaschka @ 2009-01-07 12:15 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-s390
[-- Attachment #1: qeth-devops.diff --]
[-- Type: text/plain, Size: 5398 bytes --]
From: Frank Blaschka <frank.blaschka@de.ibm.com>
qeth_l2, qeth_l3 convert to net_device_ops.
qeth_l3 remove vlan neigh_setup hack since it does not work any longer
with the new net_device_ops.
Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
---
drivers/s390/net/qeth_l2_main.c | 27 ++++++++++++--------
drivers/s390/net/qeth_l3_main.c | 53 +++++++++++++---------------------------
2 files changed, 34 insertions(+), 46 deletions(-)
Index: git_linus/drivers/s390/net/qeth_l2_main.c
===================================================================
--- git_linus.orig/drivers/s390/net/qeth_l2_main.c
+++ git_linus/drivers/s390/net/qeth_l2_main.c
@@ -916,6 +916,21 @@ static struct ethtool_ops qeth_l2_osn_op
.get_drvinfo = qeth_core_get_drvinfo,
};
+static struct net_device_ops qeth_l2_netdev_ops = {
+ .ndo_open = qeth_l2_open,
+ .ndo_stop = qeth_l2_stop,
+ .ndo_get_stats = qeth_get_stats,
+ .ndo_start_xmit = qeth_l2_hard_start_xmit,
+ .ndo_validate_addr = eth_validate_addr,
+ .ndo_set_multicast_list = qeth_l2_set_multicast_list,
+ .ndo_do_ioctl = qeth_l2_do_ioctl,
+ .ndo_set_mac_address = qeth_l2_set_mac_address,
+ .ndo_change_mtu = qeth_change_mtu,
+ .ndo_vlan_rx_add_vid = qeth_l2_vlan_rx_add_vid,
+ .ndo_vlan_rx_kill_vid = qeth_l2_vlan_rx_kill_vid,
+ .ndo_tx_timeout = qeth_tx_timeout,
+};
+
static int qeth_l2_setup_netdev(struct qeth_card *card)
{
switch (card->info.type) {
@@ -937,19 +952,9 @@ static int qeth_l2_setup_netdev(struct q
return -ENODEV;
card->dev->ml_priv = card;
- card->dev->tx_timeout = &qeth_tx_timeout;
card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
- card->dev->open = qeth_l2_open;
- card->dev->stop = qeth_l2_stop;
- card->dev->hard_start_xmit = qeth_l2_hard_start_xmit;
- card->dev->do_ioctl = qeth_l2_do_ioctl;
- card->dev->get_stats = qeth_get_stats;
- card->dev->change_mtu = qeth_change_mtu;
- card->dev->set_multicast_list = qeth_l2_set_multicast_list;
- card->dev->vlan_rx_kill_vid = qeth_l2_vlan_rx_kill_vid;
- card->dev->vlan_rx_add_vid = qeth_l2_vlan_rx_add_vid;
- card->dev->set_mac_address = qeth_l2_set_mac_address;
card->dev->mtu = card->info.initial_mtu;
+ card->dev->netdev_ops = &qeth_l2_netdev_ops;
if (card->info.type != QETH_CARD_TYPE_OSN)
SET_ETHTOOL_OPS(card->dev, &qeth_l2_ethtool_ops);
else
Index: git_linus/drivers/s390/net/qeth_l3_main.c
===================================================================
--- git_linus.orig/drivers/s390/net/qeth_l3_main.c
+++ git_linus/drivers/s390/net/qeth_l3_main.c
@@ -1829,28 +1829,6 @@ static void qeth_l3_vlan_rx_register(str
static void qeth_l3_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
{
- struct net_device *vlandev;
- struct qeth_card *card = dev->ml_priv;
- struct in_device *in_dev;
-
- if (card->info.type == QETH_CARD_TYPE_IQD)
- return;
-
- vlandev = vlan_group_get_device(card->vlangrp, vid);
- vlandev->neigh_setup = qeth_l3_neigh_setup;
-
- in_dev = in_dev_get(vlandev);
-#ifdef CONFIG_SYSCTL
- neigh_sysctl_unregister(in_dev->arp_parms);
-#endif
- neigh_parms_release(&arp_tbl, in_dev->arp_parms);
-
- in_dev->arp_parms = neigh_parms_alloc(vlandev, &arp_tbl);
-#ifdef CONFIG_SYSCTL
- neigh_sysctl_register(vlandev, in_dev->arp_parms, NET_IPV4,
- NET_IPV4_NEIGH, "ipv4", NULL, NULL);
-#endif
- in_dev_put(in_dev);
return;
}
@@ -2916,6 +2894,21 @@ qeth_l3_neigh_setup(struct net_device *d
return 0;
}
+static struct net_device_ops qeth_l3_netdev_ops = {
+ .ndo_open = qeth_l3_open,
+ .ndo_stop = qeth_l3_stop,
+ .ndo_get_stats = qeth_get_stats,
+ .ndo_start_xmit = qeth_l3_hard_start_xmit,
+ .ndo_validate_addr = eth_validate_addr,
+ .ndo_set_multicast_list = qeth_l3_set_multicast_list,
+ .ndo_do_ioctl = qeth_l3_do_ioctl,
+ .ndo_change_mtu = qeth_change_mtu,
+ .ndo_vlan_rx_register = qeth_l3_vlan_rx_register,
+ .ndo_vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid,
+ .ndo_vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid,
+ .ndo_tx_timeout = qeth_tx_timeout,
+};
+
static int qeth_l3_setup_netdev(struct qeth_card *card)
{
if (card->info.type == QETH_CARD_TYPE_OSAE) {
@@ -2930,7 +2923,8 @@ static int qeth_l3_setup_netdev(struct q
card->dev = alloc_etherdev(0);
if (!card->dev)
return -ENODEV;
- card->dev->neigh_setup = qeth_l3_neigh_setup;
+ qeth_l3_netdev_ops.ndo_neigh_setup =
+ qeth_l3_neigh_setup;
/*IPv6 address autoconfiguration stuff*/
qeth_l3_get_unique_id(card);
@@ -2947,21 +2941,10 @@ static int qeth_l3_setup_netdev(struct q
} else
return -ENODEV;
- card->dev->hard_start_xmit = qeth_l3_hard_start_xmit;
card->dev->ml_priv = card;
- card->dev->tx_timeout = &qeth_tx_timeout;
card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
- card->dev->open = qeth_l3_open;
- card->dev->stop = qeth_l3_stop;
- card->dev->do_ioctl = qeth_l3_do_ioctl;
- card->dev->get_stats = qeth_get_stats;
- card->dev->change_mtu = qeth_change_mtu;
- card->dev->set_multicast_list = qeth_l3_set_multicast_list;
- card->dev->vlan_rx_register = qeth_l3_vlan_rx_register;
- card->dev->vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid;
- card->dev->vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid;
card->dev->mtu = card->info.initial_mtu;
- card->dev->set_mac_address = NULL;
+ card->dev->netdev_ops = &qeth_l3_netdev_ops;
SET_ETHTOOL_OPS(card->dev, &qeth_l3_ethtool_ops);
card->dev->features |= NETIF_F_HW_VLAN_TX |
NETIF_F_HW_VLAN_RX |
--
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 1/2] vlan: add neigh_setup
2009-01-07 12:15 ` [patch 1/2] vlan: add neigh_setup frank.blaschka
@ 2009-01-08 18:50 ` David Miller
0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2009-01-08 18:50 UTC (permalink / raw)
To: frank.blaschka; +Cc: netdev, linux-s390
From: frank.blaschka@de.ibm.com
Date: Wed, 07 Jan 2009 13:15:51 +0100
> 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>
This looks fine, applied.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch 2/2] qeth: convert to net_device_ops
2009-01-07 12:15 ` [patch 2/2] qeth: convert to net_device_ops frank.blaschka
@ 2009-01-08 18:50 ` David Miller
0 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2009-01-08 18:50 UTC (permalink / raw)
To: frank.blaschka; +Cc: netdev, linux-s390
From: frank.blaschka@de.ibm.com
Date: Wed, 07 Jan 2009 13:15:52 +0100
> qeth_l2, qeth_l3 convert to net_device_ops.
> qeth_l3 remove vlan neigh_setup hack since it does not work any longer
> with the new net_device_ops.
>
> Signed-off-by: Frank Blaschka <frank.blaschka@de.ibm.com>
Also applied, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-01-08 18:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-07 12:15 [patch 0/2] vlan, qeth: neigh_setup frank.blaschka
2009-01-07 12:15 ` [patch 1/2] vlan: add neigh_setup frank.blaschka
2009-01-08 18:50 ` David Miller
2009-01-07 12:15 ` [patch 2/2] qeth: convert to net_device_ops frank.blaschka
2009-01-08 18:50 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).