- 博客(5)
- 收藏
- 关注
原创 route
// sk->sk_dst_cache存储路由信息 -- 抵达目的地的路径 static inline void __sk_dst_set(struct sock *sk, struct dst_entry *dst) { struct dst_entry *old_dst; old_dst = sk->sk_dst_cache; sk->sk_dst_cache = d...
2019-04-30 17:18:47
144
原创 ip_forward 函数
ip_forward 函数: ip_forward 是所有不是传给本地系统的输入包,的接口函数。由ip_rcv_finish通过dst_input(skb->dst->input)调用。 输入参数,是一个skb结构,其中存储有所有必须信息,通常是通过skb_cow复制产生,保证后续协议处理函数能够接收到原始L3封包。 PS:后续协议处理函数是与ip_rcv并列的L3函数,而非ip_rc...
2019-04-29 09:00:08
2672
原创 Linux L3协议栈 - IPv4 receive2 -- ip_rcv_finish
ip_rcv_finish 主要工作: 1> 本地报文(上报L4)或需要转发 – 对于需要转发的报文,需要找到出口设备和下一跳。 2> 分析和处置一些IP iption。 notes: 通往目的地的路由信息,存储在skb->dst中,可以通过查询路由子系统(ip_route_input)得到该信息,并制定skb->dst->input/output(下一步的处理函数)...
2019-04-26 10:14:25
274
原创 Linux L3协议栈 - IPv4 receive
ip_rcv 在L2处理结束后,skb将会被传递给L3处理,对skb->protocol等于ipv4的情形,ip_rcv将会被netif_receive_skb或者handle_bridge调用。 在ip_rcv函数中,将不会出现任何路由决策或选项处理的逻辑,该部分将会在函数末尾的ip_rcv_finish中被调用。在此之前,需要经过netfilter中,注册过的ipv4&pre_r...
2019-04-23 13:40:36
471
原创 Linux L3协议栈 - IPv4 part
Linux L3协议栈 - IPv4 part发送 Tx 发送 Tx 数据报文,是通过dst_output函数,将数据交给邻域子系统的,而dst_output,可以通过三种不同的方式调用: 1) ip_push_pending_frams - 被两种包裹函数调用,即ip_append_data 和 ip_append_page。用于UDP,ICMP,raw IP协议的传输。 2) ip_queue...
2019-04-23 09:21:04
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人