【Linux4.1.12源码分析】协议栈报文接收之IP层处理分析(ip_forward)

本文深入分析Linux4.1.12内核中,IP协议栈在接收到报文后进行转发的处理流程。主要聚焦于ip_forward函数,详细阐述该函数如何决定报文是否需要转发及其具体转发操作。
摘要由CSDN通过智能技术生成

上一篇分析报文接收,IP层提交本地处理的流程,本篇分析报文转发场景的处理过程,在ip_rcv_finish函数中,会根据IP地址决定是提交给本机处理,还是报文转发,报文转发的入口函数为ip_forward,本篇将从ip_forward函数入手分析转发过程。

1、ip_forward函数

int ip_forward(struct sk_buff *skb)
{
	u32 mtu;
	struct iphdr *iph;	/* Our header */
	struct rtable *rt;	/* Route we use */
	struct ip_options *opt	= &(IPCB(skb)->opt);

	/* that should never happen */
	if (skb->pkt_type != PACKET_HOST)	//不允许处理非本host的报文,即报文目的mac是本机
		goto drop;

	if (unlikely(skb->sk))	
		goto drop;

	if (skb_warn_if_lro(skb))	//报文为非线性,gso_size不为零,但是gso_type为零,丢弃此类报文
		goto drop;

	if (!xfrm4_policy_check(NULL, XFRM_POLICY_FWD, skb))	//ipset安全规则检测
		goto drop;

	if (IPCB(skb)->opt.router_alert && ip_call_ra_chain(skb))
		return NET_RX_SUCCESS;

	skb_forward_csum(skb);

	/*
	 *	According to the RFC, we must first decrease the TTL field. If
	 *	that reaches zero, we 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值