首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sk_buff中inner_transport_header与transport_header的区别

sk_buff中inner_transport_header与transport_header的区别
EN

Stack Overflow用户
提问于 2020-07-24 23:45:31
回答 1查看 224关注 0票数 1

在阅读sk_buff的源代码时,我发现了以下有趣的事情:

代码语言:javascript
复制
    __u16           inner_transport_header;
    __u16           inner_network_header;
    __u16           inner_mac_header;
    __be16          protocol;
    __u16           transport_header;
    __u16           network_header;
    __u16           mac_header;

那么这里的inner_XXXXXXXX有什么区别呢?

EN

回答 1

Stack Overflow用户

发布于 2020-07-25 02:53:35

不同之处在于inner_XXXX字段用于protocol encapsulation,例如XFRM加密/解密。

因此,skb允许维护原始和封装标头的指针。

您可以随时查看Linux内核源代码中的example

代码语言:javascript
复制
/* Add encapsulation header.
 *
 * The top IP header will be constructed per RFC 2401.
 */
static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
{
    struct dst_entry *dst = skb_dst(skb);
    struct iphdr *top_iph;
    int flags;

    skb_set_inner_network_header(skb, skb_network_offset(skb));
    skb_set_inner_transport_header(skb, skb_transport_offset(skb));

    skb_set_network_header(skb, -x->props.header_len);
    skb->mac_header = skb->network_header +
              offsetof(struct iphdr, protocol);
    skb->transport_header = skb->network_header + sizeof(*top_iph);
    top_iph = ip_hdr(skb);

    // ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63076982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档