2005-03-15 12:19:57

by Adrian Bunk

[permalink] [raw]
Subject: [2.6 patch] fix bridge <-> ATM compile error

This patch fixes the following compile error with CONFIG_BRIDGE=y and
CONFIG_ATM_LANE=m:

<-- snip -->

...
LD .tmp_vmlinux1
net/built-in.o(.init.text+0x3ad1): In function `br_init':
: undefined reference to `br_fdb_get_hook'
net/built-in.o(.init.text+0x3adb): In function `br_init':
: undefined reference to `br_fdb_put_hook'
net/built-in.o(.exit.text+0xa2): In function `br_deinit':
: undefined reference to `br_fdb_get_hook'
net/built-in.o(.exit.text+0xac): In function `br_deinit':
: undefined reference to `br_fdb_put_hook'
make: *** [.tmp_vmlinux1] Error 1

<-- snip -->

Signed-off-by: Adrian Bunk <[email protected]>

---

net/bridge/br.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)

--- linux-2.6.11-mm3-modular/net/bridge/br.c.old 2005-03-15 03:23:10.000000000 +0100
+++ linux-2.6.11-mm3-modular/net/bridge/br.c 2005-03-15 03:24:05.000000000 +0100
@@ -22,7 +22,7 @@

#include "br_private.h"

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
+#if defined(CONFIG_ATM_LANE) || (defined(CONFIG_ATM_LANE_MODULE) && defined(MODULE))
#include "../atm/lec.h"
#endif

@@ -39,7 +39,7 @@
brioctl_set(br_ioctl_deviceless_stub);
br_handle_frame_hook = br_handle_frame;

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
+#if defined(CONFIG_ATM_LANE) || (defined(CONFIG_ATM_LANE_MODULE) && defined(MODULE))
br_fdb_get_hook = br_fdb_get;
br_fdb_put_hook = br_fdb_put;
#endif
@@ -60,7 +60,7 @@

synchronize_net();

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
+#if defined(CONFIG_ATM_LANE) || (defined(CONFIG_ATM_LANE_MODULE) && defined(MODULE))
br_fdb_get_hook = NULL;
br_fdb_put_hook = NULL;
#endif


2005-03-15 17:20:09

by Stephen Hemminger

[permalink] [raw]
Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

Given the #ifdef mess, perhaps bridge should have the hooks available
independent of the configuration.

2005-03-15 17:28:55

by Adrian Bunk

[permalink] [raw]
Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

On Tue, Mar 15, 2005 at 09:13:05AM -0800, Stephen Hemminger wrote:

> Given the #ifdef mess, perhaps bridge should have the hooks available
> independent of the configuration.

The problem is the other way round:
The bridge code accesses hooks in the ATM code.

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

In message <[email protected]>,Adrian Bunk writes:
>This patch fixes the following compile error with CONFIG_BRIDGE=y and
>CONFIG_ATM_LANE=m:

isnt the problem more that CONFIG_ATM=m not CONFIG_ATM_LANE=m?
perhaps CONFIG_BRIDGE should be dependent on CONFIG_ATM. if
atm is a module then bridge cannot be a module (unless the
hooks are moved from atm to bridge)?

2005-03-16 18:15:43

by Adrian Bunk

[permalink] [raw]
Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

On Wed, Mar 16, 2005 at 11:11:29AM -0500, chas williams - CONTRACTOR wrote:
> In message <[email protected]>,Adrian Bunk writes:
> >This patch fixes the following compile error with CONFIG_BRIDGE=y and
> >CONFIG_ATM_LANE=m:
>
> isnt the problem more that CONFIG_ATM=m not CONFIG_ATM_LANE=m?
> perhaps CONFIG_BRIDGE should be dependent on CONFIG_ATM. if
> atm is a module then bridge cannot be a module (unless the
> hooks are moved from atm to bridge)?

The problem is currently CONFIG_ATM_LANE due to the #ifdef's in
net/atm/common.c .

Letting CONFIG_BRIDGE depend on CONFIG_ATM doesn't sound like a good
idea, since I doubt all people using the Bridge code require ATM
support.

Moving the hooks to the bridge code will give you exactly the same
problems the other way round.

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

In message <[email protected]>,Adrian Bunk writes:
>Letting CONFIG_BRIDGE depend on CONFIG_ATM doesn't sound like a good
>idea, since I doubt all people using the Bridge code require ATM
>support.

i agree.

>Moving the hooks to the bridge code will give you exactly the same
>problems the other way round.

how about moving them to a third location like net/core/dev.c?

Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

In message <[email protected]>,Adrian Bunk writes:
>Letting CONFIG_BRIDGE depend on CONFIG_ATM doesn't sound like a good
>idea, since I doubt all people using the Bridge code require ATM
>support.

how about the following?

===== net/atm/common.c 1.58 vs edited =====
--- 1.58/net/atm/common.c 2005-01-20 21:17:39 -05:00
+++ edited/net/atm/common.c 2005-03-16 12:44:37 -05:00
@@ -755,21 +755,6 @@
return vcc->dev->ops->getsockopt(vcc, level, optname, optval, len);
}

-
-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
-#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
-struct net_bridge;
-struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
- unsigned char *addr) = NULL;
-void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent) = NULL;
-#if defined(CONFIG_ATM_LANE_MODULE) || defined(CONFIG_BRIDGE_MODULE)
-EXPORT_SYMBOL(br_fdb_get_hook);
-EXPORT_SYMBOL(br_fdb_put_hook);
-#endif /* defined(CONFIG_ATM_LANE_MODULE) || defined(CONFIG_BRIDGE_MODULE) */
-#endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
-#endif /* defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) */
-
-
static int __init atm_init(void)
{
int error;
===== net/atm/lec.c 1.47 vs edited =====
--- 1.47/net/atm/lec.c 2005-02-08 23:09:15 -05:00
+++ edited/net/atm/lec.c 2005-03-16 13:18:28 -05:00
@@ -37,11 +37,8 @@
#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
#include <linux/if_bridge.h>
#include "../bridge/br_private.h"
-static unsigned char bridge_ula_lec[] = {0x01, 0x80, 0xc2, 0x00, 0x00};

-extern struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
- unsigned char *addr);
-extern void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent);
+static unsigned char bridge_ula_lec[] = {0x01, 0x80, 0xc2, 0x00, 0x00};
#endif

/* Modular too */
===== net/atm/lec.h 1.13 vs edited =====
--- 1.13/net/atm/lec.h 2005-01-18 15:59:15 -05:00
+++ edited/net/atm/lec.h 2005-03-16 13:22:13 -05:00
@@ -14,14 +14,6 @@
#include <linux/netdevice.h>
#include <linux/atmlec.h>

-#if defined (CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
-#include <linux/if_bridge.h>
-struct net_bridge;
-extern struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
- unsigned char *addr);
-extern void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent);
-#endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
-
#define LEC_HEADER_LEN 16

struct lecdatahdr_8023 {
===== net/bridge/br.c 1.20 vs edited =====
--- 1.20/net/bridge/br.c 2005-03-10 21:50:08 -05:00
+++ edited/net/bridge/br.c 2005-03-16 13:21:27 -05:00
@@ -22,10 +22,6 @@

#include "br_private.h"

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
-#include "../atm/lec.h"
-#endif
-
int (*br_should_route_hook) (struct sk_buff **pskb) = NULL;

static int __init br_init(void)
@@ -39,10 +35,9 @@
brioctl_set(br_ioctl_deviceless_stub);
br_handle_frame_hook = br_handle_frame;

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
br_fdb_get_hook = br_fdb_get;
br_fdb_put_hook = br_fdb_put;
-#endif
+
register_netdevice_notifier(&br_device_notifier);

return 0;
@@ -60,10 +55,8 @@

synchronize_net();

-#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
br_fdb_get_hook = NULL;
br_fdb_put_hook = NULL;
-#endif

br_handle_frame_hook = NULL;
br_fdb_fini();
===== net/bridge/br_private.h 1.37 vs edited =====
--- 1.37/net/bridge/br_private.h 2005-03-10 21:51:37 -05:00
+++ edited/net/bridge/br_private.h 2005-03-16 13:19:34 -05:00
@@ -216,6 +216,12 @@
extern void br_stp_port_timer_init(struct net_bridge_port *p);
extern unsigned long br_timer_value(const struct timer_list *timer);

+/* br.c */
+extern struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
+ unsigned char *addr);
+extern void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent);
+
+
#ifdef CONFIG_SYSFS
/* br_sysfs_if.c */
extern int br_sysfs_addif(struct net_bridge_port *p);
===== net/core/dev.c 1.185 vs edited =====
--- 1.185/net/core/dev.c 2005-02-11 00:54:32 -05:00
+++ edited/net/core/dev.c 2005-03-16 13:29:23 -05:00
@@ -1561,6 +1561,10 @@

#if defined(CONFIG_BRIDGE) || defined (CONFIG_BRIDGE_MODULE)
int (*br_handle_frame_hook)(struct net_bridge_port *p, struct sk_buff **pskb);
+struct net_bridge;
+struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
+ unsigned char *addr);
+void (*br_fdb_put_hook)(struct net_bridge_fdb_entry *ent);

static __inline__ int handle_bridge(struct sk_buff **pskb,
struct packet_type **pt_prev, int *ret)
@@ -3346,6 +3350,8 @@

#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
EXPORT_SYMBOL(br_handle_frame_hook);
+EXPORT_SYMBOL(br_fdb_get_hook);
+EXPORT_SYMBOL(br_fdb_put_hook);
#endif

#ifdef CONFIG_KMOD

2005-03-19 23:05:05

by Adrian Bunk

[permalink] [raw]
Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

On Thu, Mar 17, 2005 at 03:36:40PM -0500, chas williams - CONTRACTOR wrote:
> In message <[email protected]>,Adrian Bunk writes:
> >Letting CONFIG_BRIDGE depend on CONFIG_ATM doesn't sound like a good
> >idea, since I doubt all people using the Bridge code require ATM
> >support.
>
> how about the following?
>...

Looks good.

cu
Adrian

--

"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed

2005-03-28 19:12:23

by Stephen Hemminger

[permalink] [raw]
Subject: Re: [2.6 patch] fix bridge <-> ATM compile error

On Sun, 20 Mar 2005 00:04:58 +0100
Adrian Bunk <[email protected]> wrote:

> On Thu, Mar 17, 2005 at 03:36:40PM -0500, chas williams - CONTRACTOR wrote:
> > In message <[email protected]>,Adrian Bunk writes:
> > >Letting CONFIG_BRIDGE depend on CONFIG_ATM doesn't sound like a good
> > >idea, since I doubt all people using the Bridge code require ATM
> > >support.
> >
> > how about the following?
> >...
>
> Looks good

Ditto