Bug#636781: br2684: Routed mode interface cannot be activated
Package: linux-2.6
Version: 2.6.32-35
Tags: patch, fixed-upstream
Hello,
Due to a regression introduced in kernel 2.6.30, attempts to activate a
nasX interface created by br2684ctl in routed mode may fail because of
improper hardware address validation (a routed point-to-point interface
obviously has no hardware address). Activation works for a virtual ATM interface
created by atmtcp from atm-tools, but fails for the "real" ATM interface created
by my ADSL USB modem.
A workaround is to set a hardware address before activating the interface.
The bug was fixed upstream in kernel 2.6.33 by the following patch, which
has not been backported in upstream 2.6.32-stable yet (I have submitted a
request to include it).
Regards.
---------------
commit 2e302ebfeac04beb5a5d6af1ac583c6a1fb76d1a upstream
Author: chas williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Date: Fri, 4 Dec 2009 11:06:32 +0000
atm: [br2684] allow routed mode operation again
in routed mode, we don't have a hardware address so netdev_ops doesnt
need to validate our hardware address via .ndo_validate_addr
Reported-by: Manuel Fuentes <mfuentes@agenciaefe.com>
Signed-off-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/atm/br2684.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/net/atm/br2684.c b/net/atm/br2684.c
index 26a646d..c9230c3 100644
--- a/net/atm/br2684.c
+++ b/net/atm/br2684.c
@@ -554,6 +554,12 @@ static const struct net_device_ops br2684_netdev_ops = {
.ndo_validate_addr = eth_validate_addr,
};
+static const struct net_device_ops br2684_netdev_ops_routed = {
+ .ndo_start_xmit = br2684_start_xmit,
+ .ndo_set_mac_address = br2684_mac_addr,
+ .ndo_change_mtu = eth_change_mtu
+};
+
static void br2684_setup(struct net_device *netdev)
{
struct br2684_dev *brdev = BRPRIV(netdev);
@@ -569,11 +575,10 @@ static void br2684_setup(struct net_device *netdev)
static void br2684_setup_routed(struct net_device *netdev)
{
struct br2684_dev *brdev = BRPRIV(netdev);
- brdev->net_dev = netdev;
+ brdev->net_dev = netdev;
netdev->hard_header_len = 0;
-
- netdev->netdev_ops = &br2684_netdev_ops;
+ netdev->netdev_ops = &br2684_netdev_ops_routed;
netdev->addr_len = 0;
netdev->mtu = 1500;
netdev->type = ARPHRD_PPP;
Reply to: