我想知道我的sk_buff的mac_header,transport_header是否不正确,我可以通过dev_queue_xmit()成功发送此数据包吗?
如果我想在链接层的数据之前推送一些数据,该怎么做?
答案 0 :(得分:0)
答案 1 :(得分:0)
可以。通常我会执行以下操作:
1)使用netdev_alloc_skb()
分配缓冲区并避免对齐麻烦
2)使用skb_reserve()
获得等于(ethhdr + iphdr + tcphdr(或其他传输头))的空间
3)在填充有效负载(传输报头后面的数据有效负载)之前使用skb_put()
4)在填充传输头之前使用skb_push()
5)使用skb_reset_transport_header()
标记传输头
6)在填写网络标题之前使用skb_push()
7)使用skb_reset_network_header()
标记ip标头
8)在填写eth标头之前使用skb_push()
9)使用skb_reset_mac_header()
标记eth标头
10)使用dev_queue_xmit
发送数据包