linux数据包ip层转发流程

49 篇文章 11 订阅
16 篇文章 0 订阅

基于内核2.6.29

dst_output函数调用skb-.dst->output,这个函数指针实际初始化为ip_output函数

dst->hh发送数据包是判断arp缓存是否存在如果存在就调用hh->hh_ouput,这个实际就是dev_queue_xmit。如果arp缓存不存在那么就调用negh_resolve_output,这个函数里面会调用neigh_event_send发送arp请求获取mac,然后调用函数dev_hard_header填充mac地址,然后嗲用neigh->opt->queue_xmit,这个函数指针实际定义为dev_queue_xmit函数。

hh_ouput初始化:

neigh_resolve_output
static struct neigh_ops arp_hh_ops = {
	.family =		AF_INET,
	.solicit =		arp_solicit,
	.error_report =		arp_error_report,
	.output =		neigh_resolve_output,
	.connected_output =	neigh_resolve_output,
	.hh_output =		dev_queue_xmit,
	.queue_xmit =		dev_queue_xmit,
};

neigh->opt->queue_xmit初始化:

static struct neigh_ops arp_hh_ops = {
	.family =		AF_INET,
	.solicit =		arp_solicit,
	.error_report =		arp_error_report,
	.output =		neigh_resolve_output,
	.connected_output =	neigh_resolve_output,
	.hh_output =		dev_queue_xmit,
	.queue_xmit =		dev_queue_xmit,
};

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值