2 * Linux ethernet bridge
5 * Lennert Buytenhek <buytenh@gnu.org>
7 * $Id: br_private.h,v 1.3 2000/05/05 02:17:17 davem Exp $
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version
12 * 2 of the License, or (at your option) any later version.
18 #include <linux/netdevice.h>
19 #include <linux/miscdevice.h>
20 #include <linux/if_bridge.h>
21 #include "br_private_timer.h"
23 #define BR_HASH_BITS 8
24 #define BR_HASH_SIZE (1 << BR_HASH_BITS)
26 #define BR_HOLD_TIME (1*HZ)
28 typedef struct bridge_id bridge_id
;
29 typedef struct mac_addr mac_addr
;
30 typedef __u16 port_id
;
34 unsigned char prio
[2];
35 unsigned char addr
[6];
40 unsigned char addr
[6];
44 struct net_bridge_fdb_entry
46 struct net_bridge_fdb_entry
*next_hash
;
47 struct net_bridge_fdb_entry
**pprev_hash
;
50 struct net_bridge_port
*dst
;
51 unsigned long ageing_timer
;
56 struct net_bridge_port
58 struct net_bridge_port
*next
;
59 struct net_bridge
*br
;
60 struct net_device
*dev
;
67 bridge_id designated_root
;
69 bridge_id designated_bridge
;
70 port_id designated_port
;
71 unsigned topology_change_ack
:1;
72 unsigned config_pending
:1;
75 struct br_timer forward_delay_timer
;
76 struct br_timer hold_timer
;
77 struct br_timer message_age_timer
;
82 struct net_bridge
*next
;
84 struct net_bridge_port
*port_list
;
85 struct net_device dev
;
86 struct net_device_stats statistics
;
88 struct net_bridge_fdb_entry
*hash
[BR_HASH_SIZE
];
89 struct timer_list tick
;
92 bridge_id designated_root
;
100 int bridge_hello_time
;
101 int bridge_forward_delay
;
102 unsigned stp_enabled
:1;
103 unsigned topology_change
:1;
104 unsigned topology_change_detected
:1;
106 struct br_timer hello_timer
;
107 struct br_timer tcn_timer
;
108 struct br_timer topology_change_timer
;
109 struct br_timer gc_timer
;
115 struct notifier_block br_device_notifier
;
116 unsigned char bridge_ula
[6];
119 void br_dec_use_count(void);
120 void br_inc_use_count(void);
123 void br_dev_setup(struct net_device
*dev
);
126 void br_fdb_changeaddr(struct net_bridge_port
*p
,
127 unsigned char *newaddr
);
128 void br_fdb_cleanup(struct net_bridge
*br
);
129 void br_fdb_delete_by_port(struct net_bridge
*br
,
130 struct net_bridge_port
*p
);
131 struct net_bridge_fdb_entry
*br_fdb_get(struct net_bridge
*br
,
132 unsigned char *addr
);
133 void br_fdb_put(struct net_bridge_fdb_entry
*ent
);
134 int br_fdb_get_entries(struct net_bridge
*br
,
138 void br_fdb_insert(struct net_bridge
*br
,
139 struct net_bridge_port
*source
,
144 void br_forward(struct net_bridge_port
*to
,
145 struct sk_buff
*skb
);
146 void br_flood(struct net_bridge
*br
,
151 int br_add_bridge(char *name
);
152 int br_del_bridge(char *name
);
153 int br_add_if(struct net_bridge
*br
,
154 struct net_device
*dev
);
155 int br_del_if(struct net_bridge
*br
,
156 struct net_device
*dev
);
157 int br_get_bridge_ifindices(int *indices
,
159 void br_get_port_ifindices(struct net_bridge
*br
,
163 void br_handle_frame(struct sk_buff
*skb
);
166 void br_call_ioctl_atomic(void (*fn
)(void));
167 int br_ioctl(struct net_bridge
*br
,
172 int br_ioctl_deviceless_stub(unsigned long arg
);
175 int br_is_root_bridge(struct net_bridge
*br
);
176 struct net_bridge_port
*br_get_port(struct net_bridge
*br
,
178 void br_init_port(struct net_bridge_port
*p
);
179 port_id
br_make_port_id(struct net_bridge_port
*p
);
180 void br_become_designated_port(struct net_bridge_port
*p
);
183 void br_stp_enable_bridge(struct net_bridge
*br
);
184 void br_stp_disable_bridge(struct net_bridge
*br
);
185 void br_stp_enable_port(struct net_bridge_port
*p
);
186 void br_stp_disable_port(struct net_bridge_port
*p
);
187 void br_stp_recalculate_bridge_id(struct net_bridge
*br
);
188 void br_stp_set_bridge_priority(struct net_bridge
*br
,
190 void br_stp_set_port_priority(struct net_bridge_port
*p
,
192 void br_stp_set_path_cost(struct net_bridge_port
*p
,
196 void br_stp_handle_bpdu(struct sk_buff
*skb
);