1 数据链路层
1.1 skb_mac_header
skb_mac_header返回数据链路层协议头数据的地址
static inline unsigned char *skb_mac_header(const struct sk_buff *skb)
{
return skb->head + skb->mac_header;
}
skb->head时缓冲区的地址地址,skb->mac_header数据链路层协议头地址偏移长度。两者相加就得到数据链路层协议头数据地址。
1.2 skb_reset_mac_header
skb_reset_mac_header复位数据链路层协议头数据地址指针
static inline void skb_reset_mac_header(struct sk_buff *skb)
{
skb->mac_header = skb->data - skb->head;
}
1.3 skb_set_mac_header
将数据链路层协议头信息地址指针设置到相应位置。
static inline void skb_set_mac_header(struct sk_buff *skb, const int offset)
{
skb_reset_mac_header(skb);
skb->mac_header += offset;
}
其实就是先调用skb_reset_mac_header函数复位,然后skb->mac_header加上相应的偏移长度。
2 网络层
1.1 skb_network_header
skb_network_header返回网络层协议头数据的地址
static inline unsigned char *skb_network_header(const struct sk_buff *skb)
{
return skb->head + skb->network_header;
}
1.2 skb_reset_network_header
skb_reset_network_header复位网络层协议头数据地址指针
static inline void skb_reset_network_header(struct sk_buff *skb)
{
skb->network_header = skb->data - skb->head;
}
1.3 skb_set_network_header
skb_set_network_header将网络协议头信息地址指针设置到相应位置
static inline void skb_set_network_header(struct sk_buff *skb, const int offset)
{
skb_reset_network_header(skb);
skb->network_header += offset;
}
3 传输层
3.1 skb_transport_header
skb_transport_header返回传输层协议头数据的地址
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
return skb->head + skb->transport_header;
}
3.2 skb_reset_transport_header
skb_reset_transport_header复位传输层协议头数据地址指针
static inline void skb_reset_transport_header(struct sk_buff *skb)
{
skb->transport_header = skb->data - skb->head;
}
3.3 skb_set_transport_header
skb_set_transport_header将传输层协议头信息地址指针设置到相应位置
static inline void skb_set_transport_header(struct sk_buff *skb,
const int offset)
{
skb_reset_transport_header(skb);
skb->transport_header += offset;
}