WEB开发网
开发学院软件开发Java 网桥在内核的实现 阅读

网桥在内核的实现

 2009-09-10 00:00:00 来源:WEB开发网   
核心提示: 我们新建一个网桥,使用br_add_bridge,网桥在内核的实现(4),在这个函数中,主要是调用new_bridge_dev函数,dev=alloc_netdev(sizeof(structnet_bridge),name,br_dev_setup);if(!dev)returnNULL;//

我们新建一个网桥,使用br_add_bridge,在这个函数中,主要是调用new_bridge_dev函数,下面我们主要就来看这个函数:

Java代码  

static struct net_device *new_bridge_dev(const char *name) 
{ 
 struct net_bridge *br; 
 struct net_device *dev; 
 
///这里看到setup回调函数,是br_dev_setup(也就是网桥设备专用的)。setup函数的用途,可以看我以前写的网络设备初始化的blog。 
 dev = alloc_netdev(sizeof(struct net_bridge), name, 
   br_dev_setup); 
 
 if (!dev) 
 return NULL; 
///得到priv数据。 
 br = netdev_priv(dev); 
 
///接下来初始化br数据结构。 
 br->dev = dev; 
 
 spin_lock_init(&br->lock); 
 INIT_LIST_HEAD(&br->port_list); 
 spin_lock_init(&br->hash_lock); 
 
///网桥优先级 32768(也就是默认是0x8000) 
 br->bridge_id.prio[0] = 0x80; 
 br->bridge_id.prio[1] = 0x00; 
 
 memcpy(br->group_addr, br_group_address, ETH_ALEN); 
 
 br->feature_mask = dev->features; 
 br->stp_enabled = BR_NO_STP; 
 br->designated_root = br->bridge_id; 
 br->root_path_cost = 0; 
 br->root_port = 0; 
 br->bridge_max_age = br->max_age = 20 * HZ; 
 br->bridge_hello_time = br->hello_time = 2 * HZ; 
 br->bridge_forward_delay = br->forward_delay = 15 * HZ; 
 br->topology_change = 0; 
 br->topology_change_detected = 0; 
 br->ageing_time = 300 * HZ; 
///初始化网桥设备的netfilter相关域。 
 br_netfilter_rtable_init(br); 
 
 INIT_LIST_HEAD(&br->age_list); 
 
 br_stp_timer_init(br); 
 
 return dev; 
}

上一页  1 2 3 4 5  下一页

Tags:网桥 内核 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接