共 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... 阅4664 转23 评0 公众公开 14-03-23 15:14 |
阅6 转自omcc 公众公开 13-07-22 11:27 |
这一步是核心,此时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,... 阅19 转自杰的个人... 公众公开 13-07-20 21:36 |
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... 阅2148 转3 评0 公众公开 13-07-20 15:42 |
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_... 阅2174 转5 评0 公众公开 13-07-10 22:12 |
/** 自定义的注册函数,将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... 阅47 转1 评0 公众公开 13-07-09 17:25 |
有了这些概念,来看看对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... 阅173 转2 评0 公众公开 13-07-08 11:48 |
BUILD_BUG_ON内核中有这样一个宏:#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))其作用是在编译的时候如果condition为真,则编译出错。即:如果condition为真则!condition为0;!!condition值为1;所以编译器在编译char[1-2]时汇出错。 阅466 转2 评0 公众公开 13-07-06 20:44 |
最后,系统初始化 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_... 阅4637 转14 评0 公众公开 13-07-06 20:07 |
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);将数据包重... 阅2064 转9 评0 公众公开 13-07-06 18:35 |