From: Alpt <alpt@freaknet.org>
To: netdev@oss.sgi.com
Cc: bridge@lists.osdl.org
Subject: [Bridge] [PATCH bridge-2.6.11] bridge hub_enabled option
Date: Sun, 27 Mar 2005 10:19:03 +0200 [thread overview]
Message-ID: <20050327081903.GA18714@nihil> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1712 bytes --]
Bridge hub_enabled patch:
this patch adds the hub_enabled option for bridge.
By default the hub_enabled flag is set to 1. In this case nothing changes, the
bridge, as usually, acts as a hub and flood_forward the input pkts to all its
ports. When hun_enabled is set to 0, the bridge stops to flood_forward the input
traffic and takes only the pkts sent to it.
Disabling the hub option is useful to join multiple interfaces into a unique virtual
one, thus becomes possible to have easily an ad-hoc network topology using multiple
interfaces.
For example:
A(eth0) --- (eth1)B(eth0) --- (eth1)C
BRIDGE
NO HUB
br0
A and C must not be directly connected, and B must have only one interface, in
this case br0.
This scenario is possible only disabling the hub behavior of the bridge.
To clarify, this topology is the same of having:
A(wlan0)\ /(wlan0)C
\ /
\ /
(wlan0)
B
A and C don't see each other.
Maybe the hub_enabled option may be useful for something else ^_-
The patch is simple and stupid, and it seems to work.
It can be found also here:
http://freaknet.org/alpt/src/bridge-hub/bridge-2.6.11-hub.patch
The patch to update the bridge-utils is here:
http://freaknet.org/alpt/src/bridge-hub/bridge-utils-1.0.6-hub.patch
Here attached there is only the patch for the net/bridge code.
Best Regards
PS: I'm resending this mail because after 7 hours I don't see it in the ml.
--
:wq!
"I don't know nothing" The One Who reached the Thinking Matter '.'
[ Alpt --- Freaknet Medialab ]
[ GPG Key ID 441CF0EE ]
[ Key fingerprint = 8B02 26E8 831A 7BB9 81A9 5277 BFF8 037E 441C F0EE ]
[-- Attachment #1.2: bridge-2.6.11-hub.patch --]
[-- Type: text/plain, Size: 4135 bytes --]
diff -ru a-2.6.11/include/linux/if_bridge.h b-2.6.11/include/linux/if_bridge.h
--- a-2.6.11/include/linux/if_bridge.h 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/include/linux/if_bridge.h 2005-03-25 23:57:19.000000000 +0100
@@ -44,6 +44,7 @@
#define BRCTL_SET_PORT_PRIORITY 16
#define BRCTL_SET_PATH_COST 17
#define BRCTL_GET_FDB_ENTRIES 18
+#define BRCTL_SET_BRIDGE_HUB_STATE 19
#define BR_STATE_DISABLED 0
#define BR_STATE_LISTENING 1
@@ -65,6 +66,7 @@
__u8 topology_change;
__u8 topology_change_detected;
__u8 root_port;
+ __u8 hub_enabled;
__u8 stp_enabled;
__u32 ageing_time;
__u32 gc_interval;
diff -ru a-2.6.11/net/bridge/br_if.c b-2.6.11/net/bridge/br_if.c
--- a-2.6.11/net/bridge/br_if.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_if.c 2005-03-25 23:56:56.000000000 +0100
@@ -155,6 +155,8 @@
br->bridge_id.prio[1] = 0x00;
memset(br->bridge_id.addr, 0, ETH_ALEN);
+ br->hub_enabled = 1;
+
br->stp_enabled = 0;
br->designated_root = br->bridge_id;
br->root_path_cost = 0;
diff -ru a-2.6.11/net/bridge/br_input.c b-2.6.11/net/bridge/br_input.c
--- a-2.6.11/net/bridge/br_input.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_input.c 2005-03-26 22:08:38.000000000 +0100
@@ -80,12 +80,13 @@
goto out;
}
- if (dst != NULL) {
+ if (dst != NULL && br->hub_enabled) {
br_forward(dst->dst, skb);
goto out;
}
- br_flood_forward(br, skb, 0);
+ if(br->hub_enabled)
+ br_flood_forward(br, skb, 0);
out:
return 0;
diff -ru a-2.6.11/net/bridge/br_ioctl.c b-2.6.11/net/bridge/br_ioctl.c
--- a-2.6.11/net/bridge/br_ioctl.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_ioctl.c 2005-03-25 23:56:56.000000000 +0100
@@ -135,6 +135,7 @@
b.topology_change = br->topology_change;
b.topology_change_detected = br->topology_change_detected;
b.root_port = br->root_port;
+ b.hub_enabled = br->hub_enabled;
b.stp_enabled = br->stp_enabled;
b.ageing_time = jiffies_to_clock_t(br->ageing_time);
b.hello_timer_value = br_timer_value(&br->hello_timer);
@@ -247,6 +248,13 @@
return 0;
}
+ case BRCTL_SET_BRIDGE_HUB_STATE:
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+
+ br->hub_enabled = args[1]?1:0;
+ return 0;
+
case BRCTL_SET_BRIDGE_STP_STATE:
if (!capable(CAP_NET_ADMIN))
return -EPERM;
diff -ru a-2.6.11/net/bridge/br_private.h b-2.6.11/net/bridge/br_private.h
--- a-2.6.11/net/bridge/br_private.h 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_private.h 2005-03-25 23:56:56.000000000 +0100
@@ -93,6 +93,8 @@
struct hlist_head hash[BR_HASH_SIZE];
struct list_head age_list;
+ unsigned char hub_enabled;
+
/* STP */
bridge_id designated_root;
bridge_id bridge_id;
diff -ru a-2.6.11/net/bridge/br_sysfs_br.c b-2.6.11/net/bridge/br_sysfs_br.c
--- a-2.6.11/net/bridge/br_sysfs_br.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_sysfs_br.c 2005-03-25 23:56:56.000000000 +0100
@@ -136,6 +136,28 @@
static CLASS_DEVICE_ATTR(ageing_time, S_IRUGO | S_IWUSR, show_ageing_time,
store_ageing_time);
+
+static ssize_t show_hub_state(struct class_device *cd, char *buf)
+{
+ struct net_bridge *br = to_bridge(cd);
+ return sprintf(buf, "%d\n", br->hub_enabled);
+}
+
+static void set_hub_state(struct net_bridge *br, unsigned long val)
+{
+ br->hub_enabled = val;
+}
+
+static ssize_t store_hub_state(struct class_device *cd,
+ const char *buf, size_t len)
+{
+ return store_bridge_parm(cd, buf, len, set_hub_state);
+}
+
+static CLASS_DEVICE_ATTR(hub_state, S_IRUGO | S_IWUSR, show_hub_state,
+ store_hub_state);
+
+
static ssize_t show_stp_state(struct class_device *cd, char *buf)
{
struct net_bridge *br = to_bridge(cd);
@@ -246,6 +268,7 @@
&class_device_attr_hello_time.attr,
&class_device_attr_max_age.attr,
&class_device_attr_ageing_time.attr,
+ &class_device_attr_hub_state.attr,
&class_device_attr_stp_state.attr,
&class_device_attr_priority.attr,
&class_device_attr_bridge_id.attr,
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Alpt <alpt@freaknet.org>
To: netdev@oss.sgi.com
Cc: bridge@lists.osdl.org
Subject: [PATCH bridge-2.6.11] bridge hub_enabled option
Date: Sun, 27 Mar 2005 10:19:03 +0200 [thread overview]
Message-ID: <20050327081903.GA18714@nihil> (raw)
[-- Attachment #1.1.1: Type: text/plain, Size: 1712 bytes --]
Bridge hub_enabled patch:
this patch adds the hub_enabled option for bridge.
By default the hub_enabled flag is set to 1. In this case nothing changes, the
bridge, as usually, acts as a hub and flood_forward the input pkts to all its
ports. When hun_enabled is set to 0, the bridge stops to flood_forward the input
traffic and takes only the pkts sent to it.
Disabling the hub option is useful to join multiple interfaces into a unique virtual
one, thus becomes possible to have easily an ad-hoc network topology using multiple
interfaces.
For example:
A(eth0) --- (eth1)B(eth0) --- (eth1)C
BRIDGE
NO HUB
br0
A and C must not be directly connected, and B must have only one interface, in
this case br0.
This scenario is possible only disabling the hub behavior of the bridge.
To clarify, this topology is the same of having:
A(wlan0)\ /(wlan0)C
\ /
\ /
(wlan0)
B
A and C don't see each other.
Maybe the hub_enabled option may be useful for something else ^_-
The patch is simple and stupid, and it seems to work.
It can be found also here:
http://freaknet.org/alpt/src/bridge-hub/bridge-2.6.11-hub.patch
The patch to update the bridge-utils is here:
http://freaknet.org/alpt/src/bridge-hub/bridge-utils-1.0.6-hub.patch
Here attached there is only the patch for the net/bridge code.
Best Regards
PS: I'm resending this mail because after 7 hours I don't see it in the ml.
--
:wq!
"I don't know nothing" The One Who reached the Thinking Matter '.'
[ Alpt --- Freaknet Medialab ]
[ GPG Key ID 441CF0EE ]
[ Key fingerprint = 8B02 26E8 831A 7BB9 81A9 5277 BFF8 037E 441C F0EE ]
[-- Attachment #1.1.2: bridge-2.6.11-hub.patch --]
[-- Type: text/plain, Size: 4135 bytes --]
diff -ru a-2.6.11/include/linux/if_bridge.h b-2.6.11/include/linux/if_bridge.h
--- a-2.6.11/include/linux/if_bridge.h 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/include/linux/if_bridge.h 2005-03-25 23:57:19.000000000 +0100
@@ -44,6 +44,7 @@
#define BRCTL_SET_PORT_PRIORITY 16
#define BRCTL_SET_PATH_COST 17
#define BRCTL_GET_FDB_ENTRIES 18
+#define BRCTL_SET_BRIDGE_HUB_STATE 19
#define BR_STATE_DISABLED 0
#define BR_STATE_LISTENING 1
@@ -65,6 +66,7 @@
__u8 topology_change;
__u8 topology_change_detected;
__u8 root_port;
+ __u8 hub_enabled;
__u8 stp_enabled;
__u32 ageing_time;
__u32 gc_interval;
diff -ru a-2.6.11/net/bridge/br_if.c b-2.6.11/net/bridge/br_if.c
--- a-2.6.11/net/bridge/br_if.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_if.c 2005-03-25 23:56:56.000000000 +0100
@@ -155,6 +155,8 @@
br->bridge_id.prio[1] = 0x00;
memset(br->bridge_id.addr, 0, ETH_ALEN);
+ br->hub_enabled = 1;
+
br->stp_enabled = 0;
br->designated_root = br->bridge_id;
br->root_path_cost = 0;
diff -ru a-2.6.11/net/bridge/br_input.c b-2.6.11/net/bridge/br_input.c
--- a-2.6.11/net/bridge/br_input.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_input.c 2005-03-26 22:08:38.000000000 +0100
@@ -80,12 +80,13 @@
goto out;
}
- if (dst != NULL) {
+ if (dst != NULL && br->hub_enabled) {
br_forward(dst->dst, skb);
goto out;
}
- br_flood_forward(br, skb, 0);
+ if(br->hub_enabled)
+ br_flood_forward(br, skb, 0);
out:
return 0;
diff -ru a-2.6.11/net/bridge/br_ioctl.c b-2.6.11/net/bridge/br_ioctl.c
--- a-2.6.11/net/bridge/br_ioctl.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_ioctl.c 2005-03-25 23:56:56.000000000 +0100
@@ -135,6 +135,7 @@
b.topology_change = br->topology_change;
b.topology_change_detected = br->topology_change_detected;
b.root_port = br->root_port;
+ b.hub_enabled = br->hub_enabled;
b.stp_enabled = br->stp_enabled;
b.ageing_time = jiffies_to_clock_t(br->ageing_time);
b.hello_timer_value = br_timer_value(&br->hello_timer);
@@ -247,6 +248,13 @@
return 0;
}
+ case BRCTL_SET_BRIDGE_HUB_STATE:
+ if (!capable(CAP_NET_ADMIN))
+ return -EPERM;
+
+ br->hub_enabled = args[1]?1:0;
+ return 0;
+
case BRCTL_SET_BRIDGE_STP_STATE:
if (!capable(CAP_NET_ADMIN))
return -EPERM;
diff -ru a-2.6.11/net/bridge/br_private.h b-2.6.11/net/bridge/br_private.h
--- a-2.6.11/net/bridge/br_private.h 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_private.h 2005-03-25 23:56:56.000000000 +0100
@@ -93,6 +93,8 @@
struct hlist_head hash[BR_HASH_SIZE];
struct list_head age_list;
+ unsigned char hub_enabled;
+
/* STP */
bridge_id designated_root;
bridge_id bridge_id;
diff -ru a-2.6.11/net/bridge/br_sysfs_br.c b-2.6.11/net/bridge/br_sysfs_br.c
--- a-2.6.11/net/bridge/br_sysfs_br.c 2005-03-26 21:14:05.000000000 +0100
+++ b-2.6.11/net/bridge/br_sysfs_br.c 2005-03-25 23:56:56.000000000 +0100
@@ -136,6 +136,28 @@
static CLASS_DEVICE_ATTR(ageing_time, S_IRUGO | S_IWUSR, show_ageing_time,
store_ageing_time);
+
+static ssize_t show_hub_state(struct class_device *cd, char *buf)
+{
+ struct net_bridge *br = to_bridge(cd);
+ return sprintf(buf, "%d\n", br->hub_enabled);
+}
+
+static void set_hub_state(struct net_bridge *br, unsigned long val)
+{
+ br->hub_enabled = val;
+}
+
+static ssize_t store_hub_state(struct class_device *cd,
+ const char *buf, size_t len)
+{
+ return store_bridge_parm(cd, buf, len, set_hub_state);
+}
+
+static CLASS_DEVICE_ATTR(hub_state, S_IRUGO | S_IWUSR, show_hub_state,
+ store_hub_state);
+
+
static ssize_t show_stp_state(struct class_device *cd, char *buf)
{
struct net_bridge *br = to_bridge(cd);
@@ -246,6 +268,7 @@
&class_device_attr_hello_time.attr,
&class_device_attr_max_age.attr,
&class_device_attr_ageing_time.attr,
+ &class_device_attr_hub_state.attr,
&class_device_attr_stp_state.attr,
&class_device_attr_priority.attr,
&class_device_attr_bridge_id.attr,
[-- Attachment #1.2: Type: application/pgp-signature, Size: 189 bytes --]
[-- Attachment #2: Type: text/plain, Size: 140 bytes --]
_______________________________________________
Bridge mailing list
Bridge@lists.osdl.org
http://lists.osdl.org/mailman/listinfo/bridge
next reply other threads:[~2005-03-27 8:19 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-27 8:19 Alpt [this message]
2005-03-27 8:19 ` [PATCH bridge-2.6.11] bridge hub_enabled option Alpt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050327081903.GA18714@nihil \
--to=alpt@freaknet.org \
--cc=bridge@lists.osdl.org \
--cc=netdev@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.