共 35 篇文章
显示摘要每页显示  条
h>int main(int argc, char **argv){ sem_t *sem;等待共享资源头文件:#include 函数原形:int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem);参数:挂出共享资源头文件:#include 函数原形:int sem_post(sem_t *sem);int sem_getvalue(sem_t *sem,int *valp);参数:初始化/关闭信号等头文件:#include 函数原形:int sem_init(se...
这一步是核心,此时skb->dev为真正的设备,经过vlan处理后,报文应该被上层协议看作是由vlan虚拟设备接收的,因此这里设置skb->dev为虚拟的vlan设备。数据结构vlan_group_hash是vlan虚拟网卡存储与关联的核心结构:static struct hlist_head vlan_group_hash[VLAN_GRP_HASH_SIZE]; [net\8021q\vlan.c]当通过vconfig创建了eth1.1, eth1.2,...
ptype_base和ptype_all理解,netid_receive_skb()函数注解。skb = handle_bridge(skb, &pt_prev, &ret, orig_dev);//对该数据包转达到其他L3协议的处理函数 type = skb->protocol; list_for_each_entry_rcu(ptype, &ptype_base[ntohs(type)&15], list) { if (ptype->type == type &&(!ptype->dev || ptype-&g...
void br_received_config_bpdu(struct net_bridge_port *p, struct br_config_bpdu *bpdu){用自己的br_ID和BPDU包中的根ID相比较*/was_root = br_is_root_bridge(br);指下来继续看代码:/*前面说的第1步*/if (!br_is_root_bridge(br) &&was_root) {br_timer_clear(&br->hello_timer);if (br->topology_change_detected) {br_...
/** 自定义的注册函数,将notifier_block节点加到刚刚定义的test_chain这个链表中来* raw_notifier_chain_register会调用notifier_chain_register*/int register_test_notifier(struct notifier_block *nb){return raw_notifier_chain_register(&test_chain, nb);}EXPORT_SYMBOL(register_test_notifier);int unregister_test_notifier(str...
有了这些概念,来看看对config类型的BPDU包的处理:void br_received_config_bpdu(struct net_bridge_port *p, struct br_config_bpdu *bpdu){4、设置物理端口的转发状态:br_port_state_selection2.1 br_supersedes_port_info(p, bpdu)/* called under bridge lock */static int br_supersedes_port_info(struct net_bridge_port *p, struct b...
BUILD_BUG_ON内核中有这样一个宏:#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))其作用是在编译的时候如果condition为真,则编译出错。即:如果condition为真则!condition为0;!!condition值为1;所以编译器在编译char[1-2]时汇出错。
最后,系统初始化 skb_shared_info 结构的成员变量 :atomic_set(&(skb_shinfo(skb)->dataref), 1);skb_shinfo(skb)->nr_frags = 0;skb_shinfo(skb)->tso_size = 0;skb_shinfo(skb)->tso_segs = 0;skb_shinfo(skb)->frag_list = NULL;skb_shinfo(skb)->ufo_size = 0;skb_shinfo(skb)->ip6_frag_id = 0;skb = dev_alloc_...
if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,接着,在跑完BR_PRE_ROUTING的剩余函数后就进入br_handle_frame_finish函数,对于本机数据包则继续调用br_pass_frame_up函数,在br_pass_frame_up函数中将skb的dev字段修改为虚拟网桥的dev,最后NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL, netif_receive_skb);将数据包重...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2024 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部