共 23 篇文章
显示摘要每页显示  条
五. BPDU处理函数br_stp_handle_bpduint br_stp_handle_bpdu(struct sk_buff *skb){七. config_bpdu的处理函数--br_received_config_bpduvoid br_received_config_bpdu(struct net_bridge_port *p, struct br_config_bpdu *bpdu){if (br_supersedes_port_info(p, bpdu)) { //第 八 部分介绍br_record_config_information(p, bpdu);br_conf...
hlist_for_each_safe(h, g, &br->hash[i]) {struct net_bridge_fdb_entry *f= hlist_entry(h, struct net_bridge_fdb_entry, hlist);//遍历net_bridge->hashhlist_for_each_entry_rcu(fdb, h, &br->hash[br_mac_hash(addr)], hlist) {//如果MAC地址和fdb中的地址相同并且fdb没有超时,//就说明找到了相应的fdbif (!compare_et...
if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb)经过br_pass_frame_up 函数后,skb->dev->br_port为空,所以将直接返回skb而不进行网桥处理。NF_HOOK(PF_BRIDGE, NF_BR_FORWARD, skb...
所有协议的packet_type存放在两条协议链中,ptype_base和ptype_all,从声明可以看出,ptype_base 为哈希链表,ptype_all为双向链.系统使用dev_add_pack函数将指定协议类型的packet_type添加到这两个表中。packet_type.相应的,如果协议类型为ETH_P_IP,那么packet_type->func就是ip_rcv,如果协议类型是ETH_P_ARP,那么packet_type->func就...
linux网桥内核实现分析(二)---协议链的注册。netif_receive_skb是内核中一个非常重要的函数,所有的报文经过中断处理函数net_rx_action以后,会进入netif_receive_skb函数匹配报文对应的协议,不同的协议调用不同的协议处理函数,所以是IP,ARP等协议的一个分水岭,协议的注册匹配等工作实际上和网桥的处理无关,这里只是描述一下网络数据包进入...
static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,struct net_bridge_fdb_entry *fdb;fdb_delete(fdb);内核使用 __br_fdb_get() 函数来进行CAM表的查找,找到并返回相对应的net_bridge_fdb_entry结构。struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br,hlist_for_each_entry_rcu(fdb, h, &b...
linux网桥内核实现分析(一))---CAM表的学习和查找(1)每一个MAC地址-端口对应着一个fdb项,内核中使用链表来组织,使用net_bridge_fdb_entry类型。struct net_bridge_fdb_entry.struct net_bridge.struct hlist_head hash[BR_HASH_SIZE];struct hlist_head hash[BR_HASH_SIZE];实际上在内核中,整个CAM表是用net_bridge->h...
则传与上层处理//置skb->pkt_type = PACKET_HOSTif (!memcmp(p->br->dev->dev_addr, dest, ETH_ALEN))skb->pkt_type = PACKET_HOST;//网桥在NF_BR_PRE_ROUTING点上的netfiter处理NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,br_handle_frame_finish);return 1;}br_pass_frame_up(br, skb2);传至上层协议处理...
//遍历桥中所有的端口list_for_each_entry(p, &br->port_list, list) {//取所有接口中MAC的最少值if (addr == br_mac_zero ||memcmp(p->dev->dev_addr, addr, ETH_ALEN) addr = p->dev->dev_addr;//如果不与现在桥的MAC相同if (memcmp(br->bridge_id.addr, addr, ETH_ALEN))br_stp_change_bridge_id(br, addr);}memcmp(p...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2024 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部