4.1.12内核中,GSO报文的判断和分段的入口函数是validate_xmit_skb,其中使用netif_needs_gso用来判断软件是否要进行GSO分段,skb_gso_segment实现报文的GSO分段,本篇重点讲述GSO分段的判断条件,即netif_needs_gso相关函数。
1、netif_needs_gso函数
static inline bool netif_needs_gso(struct sk_buff *skb,
netdev_features_t features)
{
return skb_is_gso(skb) && (!skb_gso_ok(skb, features) || //skb 为gso报文,且feature不包含skb->gso_type 或者
//skb 为gso报文,且skb_ipsummed不为CHECKSUM_PARTIAL和CHECKSUM_UNNECESSARY
unlikely((skb->ip_summed != CHECKSUM_PARTIAL) &&
(skb->ip_summed != CHECKSUM_UNNECESSARY)));
}2、skb_gso_ok函数
static inline bool skb_gso_ok(struct sk_buff *skb, netdev_features_t features)
{
return net_gso_ok(features, skb_shinfo(skb)->gso_type) && //feature包含gso_type 并且skb没有frag_list或者feature包含NETIF_F_FRAGLIST
(!skb_has_frag_list(sk

本文深入分析了Linux4.1.12内核中的GSO(Generic Segmentation Offload)报文发送。通过探讨validate_xmit_skb函数中的netif_needs_gso和skb_gso_segment,揭示了GSO分段的判断条件。内容聚焦于netif_needs_gso函数及其依赖的netif_skb_features,为后续GSO分段实现的分析奠定基础。
最低0.47元/天 解锁文章
3012

被折叠的 条评论
为什么被折叠?



