static void skb_prepare(struct sk_buff *new_skb, struct sk_buff *old_skb, struct dst_entry *dst, int protocol) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,4,0) nf_reset_ct(new_skb); #else nf_reset(new_skb); #endif new_skb->mark = 0; nf_ct_attach( new_skb, old_skb ); new_skb->pkt_type = PACKET_OTHERHOST; new_skb->protocol = htons( protocol ); new_skb->ip_summed = CHECKSUM_NONE; new_skb->priority = 0; skb_dst_set(new_skb, dst); skb_reserve(new_skb, TPLOGIN_ETH_HDR_LEN); return; } 这段代码的功能
时间: 2024-04-25 12:26:47 浏览: 256
Linux-Skb_buff.rar_linux s_linux skb_linux skb结构_skb_buff
这段代码定义了一个名为skb_prepare的静态函数,该函数接受四个参数:new_skb,old_skb,dst和protocol。函数的主要功能是准备一个新的sk_buff用于网络数据包的传输。
具体来说,该函数会首先根据当前内核版本调用nf_reset_ct或nf_reset函数来重置新sk_buff的网络连接跟踪状态。然后将新的sk_buff的标记mark设置为0,将旧的sk_buff绑定到新的sk_buff上,将新的sk_buff的pkt_type设置为PACKET_OTHERHOST,将协议类型protocol设置为新的sk_buff的protocol,将新的sk_buff的校验和类型ip_summed设置为CHECKSUM_NONE,将新的sk_buff的优先级priority设置为0,并设置新的sk_buff的目标路由dst。最后,函数会为新的sk_buff保留TPLOGIN_ETH_HDR_LEN字节的空间来存放以太网头部,然后返回。
阅读全文