IP层本地报文发送有两个函数ip_local_out和ip_local_out_sk,实际实现两者是等同的,因为本地发送的报文,skb必然关联着一个sock对象。
1、ip_local_out函数
static inline int ip_local_out(struct sk_buff *skb)
{
return ip_local_out_sk(skb->sk, skb); //本地报文发送,本地发送的报文都关联着一个sock对象
}2、ip_local_out_sk函数
int ip_local_out_sk(struct sock *sk, struct sk_buff *skb) //本地报文发送,本地发送的报文都关联着一个sock对象
{
int err;
err = __ip_local_out(skb); //报文安全检测(netfilter)
if (likely(err == 1)) //返回值为1,说明netfilter允许报文通过
err = dst_output_sk(sk, skb); //最终会调用ip_output函数
return err;
}3、__ip_local_out函数
int __ip_local_out(struct sk_buff *skb)
{
return __ip_local_out_sk(skb->sk, skb);
}4、__ip_local_out_sk函数
int __ip_local_out_sk(struct sock *sk, struct sk_buff *skb)
{
struct iphdr *iph = ip_hdr(skb);
iph->tot_len = htons(skb->len);
ip_sen

本文深入探讨Linux 4.1.12内核中IP层的报文发送,主要关注ip_local_out函数。内容指出该函数与ip_local_out_sk功能相同,都是处理本地产生的、带有sock对象的IP报文发送。
最低0.47元/天 解锁文章
1545





