网桥在内核的实现
2009-09-10 00:00:00 来源:WEB开发网接下来看net_bridge以及相关的数据结构:
Java代码 struct net_bridge
{
///自旋锁
spinlock_t lock;
///网桥所有端口的链表,其中每个元素都是一个net_bridge_port结构。
struct list_head port_list;
///加到这个网桥的物理设备
struct net_device *dev;
///这个锁是用来保护下面的那个hash链表。
spinlock_t hash_lock;
///保存forwarding database的一个hash链表(这个也就是地址学习的东东,所以通过hash能 快速定位),这里每个元素都是一个net_bridge_fsb_entry结构
struct hlist_head hash[BR_HASH_SIZE];
///这个结构没有被使用
struct list_head age_list;
unsigned long feature_mask;
#ifdef CONFIG_BRIDGE_NETFILTER
struct rtable fake_rtable;
#endif
unsigned long flags;
#define BR_SET_MAC_ADDR 0x00000001
///stp相关的一些东西
bridge_id designated_root;
bridge_id bridge_id;
u32 root_path_cost;
unsigned long max_age;
unsigned long hello_time;
unsigned long forward_delay;
unsigned long bridge_max_age;
unsigned long ageing_time;
unsigned long bridge_hello_time;
unsigned long bridge_forward_delay;
u8 group_addr[ETH_ALEN];
u16 root_port;
///当前使用的协议。
enum {
BR_NO_STP, /* no spanning tree */
BR_KERNEL_STP, /* old STP in kernel */
BR_USER_STP, /* new RSTP in userspace */
} stp_enabled;
unsigned char topology_change;
unsigned char topology_change_detected;
///stp要用的一些定时器列表。
struct timer_list hello_timer;
struct timer_list tcn_timer;
struct timer_list topology_change_timer;
struct timer_list gc_timer;
struct kobject *ifobj;
};
更多精彩
赞助商链接