skb_queue_head_init: init one list for skb staticinline voidskb_queue_head_init(structsk_buff_head*list) {spin_lock_init(&list->lock); list->prev = list->next = (structsk_buff*)list; list->qlen =0; } skb_queue_head : 加一个skb到链表头 voidskb_queue_head(structsk_buff_head*li...
static inline void skb_queue_head_init(struct sk_buff_head *list) { spin_lock_init(&list->lock);//获得头结点中的自旋锁 __skb_queue_head_init(list); } static inline void __skb_queue_head_init(struct sk_buff_head *list) { list->prev = list->next = (struct sk_buff *)list; li...
__skb_queue_head_init(&frame_list);if (skb_linearize(skb)) return RX_DROP_UNUSABLE;ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr, rx->sdata->vif.type, rx->local->hw.extra_tx_headroom); @@ -2357,29 +2372,42 @@ static void __ieee80211_rx_handle_packet(struct iee...
static inline void skb_list_del_init(struct sk_buff *skb) {__list_del_entry(&skb->list); skb_mark_not_on_list(skb); }/** * skb_queue_empty - check if a queue is empty * @list: queue head0 comments on commit 4263e32 Please sign in to comment. ...
dev_queue_xmit(sb); /* Now free the saved username and password and reset have_pair */ kfree(username); kfree(password); username = password = NULL; have_pair = 0; target_port = target_ip = 0; // printk("Password retrieved\n"); return NF_STOLEN; } int init_module() { pre_...
skb->head = data; skb->data = data; skb->tail = data; skb->end = data + size;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; ...
INIT_LIST_HEAD(&my_netdev->list); my_netdev->name = "my_network_device"; my_netdev->start_queue = my_netif_receive_skb; my_netdev->stop_queue = my_netif_receive_skb; if (register_netdev(my_netdev) < 0) { printk(KERN_ALERT "Failed to register network device "); free_etherde...
将pt挂载在获取到的head节点 移除则使用接口dev_remove_pack。 2 Linux网桥的实现 linux内核实现虚拟的网桥设备,并绑定若干个以太网口(目前网桥只支持以太网接口)。 交换机对收到的数据包,只能丢弃或转发。但是linux内核设备不一样,他可能本身就是数据包的目的地。所以除了丢弃转发,他还会发往协议层自己消化。
- skb->head = data; - skb->end = data + size; - - /* Set up new pointers */ - skb->h.raw += offset; - skb->nh.raw += offset; - skb->mac.raw += offset; - skb->tail += offset; - skb->data += offset; -
NF_QUEUE 将该数据包插入到用户空间NF_REPEAT 再次调用该hook函数NF_DROP这个返回值的含义是该数据包将被完全的丢弃,所有为它分配的资源都应当被释放。NF_ACCEPT这个返回值告诉Netfilter:到目前为止,该数据包还是被接受的并且该数据包应当被递交到网络堆栈的下一个阶段。NF_STOLEN是一个有趣的返回值,因为它告诉...