struct iwl_cmd_meta *out_meta){inti;for(i =0; i < skb_shinfo(skb)->nr_frags; i++) {constskb_frag_t*frag = &skb_shinfo(skb)->frags[i];dma_addr_ttb_phys;inttb_idx;if(!skb_frag_size(frag))continue; tb_phys = skb_frag_dma_map(trans->dev, frag,0,skb_frag_size(frag), ...
skb_fail: return skb; } EXPORT_SYMBOL(__napi_alloc_skb); EXPORT_SYMBOL(napi_alloc_skb); void skb_add_rx_frag_netmem(struct sk_buff *skb, int i, netmem_ref netmem, int off, int size, unsigned int truesize) 0 comments on commit 6e9b019 Please sign in to comment. Footer...
skb_reserve(frag, LL_RESERVED_SPACE(rt->u.dst.dev)); skb_put(frag, len + hlen +sizeof(struct frag_hdr)); skb_reset_network_header(frag); fh = (struct frag_hdr *)(skb_network_header(frag) + hlen); frag->transport_header = (frag->network_header + hlen +sizeof(struct frag_hdr...
skb_frag_unref(skb, i); eat -= size; } else { skb_frag_t *frag = &skb_shinfo(skb)->frags[k]; // 这里把不需要拷贝到线性区的frags[k]拷贝到frags[i] *frag = skb_shinfo(skb)->frags[i]; if (eat) { // 为第i个frag修改偏移 // frag->bv_offset += eat; skb_frag_off_add(...
第二就是什么时候会使用no-linear,frag_list在处理IP分片时被使用,可以查看内核中的ip_fragment->ip_do_fragment函数,[1][2][3]中对这个部分的描述并不够详细,或者说对frags对描述还不够详细。 事实上我仍然无法解释为什么我的数据包会在egress中payload全部都在非线性区中,这是后续需要解决的问题,但我应该不...
第二就是什么时候会使用no-linear,frag_list在处理IP分片时被使用,可以查看内核中的ip_fragment->ip_do_fragment函数,[1][2][3]中对这个部分的描述并不够详细,或者说对frags对描述还不够详细。
skb_frag_off_add(frag, eat); skb_frag_size_sub(frag, eat); if(!i) gotoend; eat=0; } k++; } } // nr_frags设置为k skb_shinfo(skb)->nr_frags = k; end: // tail增加data skb->tail += delta; // 非线性数据减去delta
skb_frag_t frags[MAX_SKB_FRAGS]; }; 我们只要把 end 从 char* 转换成skb_shared_info* ,就能访问到这个结构 Linux 提供一个宏来做这种转换: #define skb_shinfo(SKB) ((struct skb_shared_info *)((SKB)->end)) 那么,这个隐藏的结构用意何在?
4)使用memcpy()将数据复制到新的sk_buff里的data成员指向的地址处,可以使用skb_put()来动态扩大sk_buff结构体里中的数据区 5)使用eth_type_trans()来获取上层协议...,将返回值赋给sk_buff的protocol成员里 6)然后更新统计信息,最后使用netif_rx( )来将sk_fuffer传递给上层协议中其中skb_put()函数原型如下...
序言 skb在哪里用 TX 方向 RX 方向 skb/sk_buff 结构 alloc_skb or dev_alloc_skb skb_reserve skb_put skb_push skb_pull SKB 常用成员 TX发包示例 什么是(skb_shared_info) 结构自身放在哪里 结构体重要成员 skb 数据空间划分 干什么(skb_shared_info) frags 应用场景 frag_list 应用场景 问题 参考 ...