Linux操作系统网桥源码框架初步分析

豆豆网   技术应用频道   2007年03月13日  【字号: 收藏本文

本文详细介绍Linux操作系统网桥源码框架初步分析

  今天处理网桥的STP的问题遇到了麻烦,对这个东东理论的倒是看了不少,没有真真学习到它的源理,来看Linux的实现,手头没有资料,看了两个钟头,只把网桥的框架结构看完,所以想先贴出来,希望有研究这块的大哥们讨论,继续把它写完,好好学习一下:

  版本:Linux 2.4.18

  一、调用

  在src/net/core/dev.c的软中断函数static void net_rx_action(struct softirq_action *h)中:

  line 1479

#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
if (skb->dev->br_port != NULL &&
br_handle_frame_hook != NULL) {
handle_bridge(skb, pt_prev);
dev_put(rx_dev);
continue;
}
#endif

  如果定义了网桥或网桥模块,则由handle_bridge函数处理skb->dev->br_port :接收该数据包的端口是网桥端口组的一员br_handle_frame_hook :定义了网桥处理函数。

  二、初始化

src/net/bridge/br.c:
static int __init br_init(void)
{
printk(KERN_INFO "NET4: Ethernet Bridge 008 for NET4.0
";
br_handle_frame_hook = br_handle_frame;
br_ioctl_hook = br_ioctl_deviceless_stub;
#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;
}

  初始化函数指明了网桥的处理函数是br_handle_frameioctl处理函数是:br_ioctl_deviceless_stub。

  三、br_handle_frame(br_input.c)

作者:mingtian    责编:豆豆技术应用

正在加载评论...