struct dst_entry struct--dst_entry /usr/src/linux-2.6.19/include/net/dst.h最终生成的IP数据报的路由称为目的入口(dst_entry),目的入口反映了相邻的外部主机在本地主机内部的一种“映象”,目的入口在内核中的定义如下struct dst_entry{ struct dst_entry *next; ...
wait_queue_head_t *sleep; /* 等待队列,通常指向socket的wait域 */ struct dst_entry *dst_cache; /* 目的地缓存,用于路由查找结果 */ rwlock_t dst_lock; /* 目的地缓存锁*/ atomic_t rmem_alloc; /* 已接收队列字节数 */ struct sk_buff_head receive_queue; /* 接收包队列 */ atomic_t wmem...
其中,有很多微妙的变化,由于struct sk_buff是内核网络机构的基础,因此我也比较关心这个结构的变化: struct sk_buff { /* These two members must be first. */ struct sk_buff *next; struct sk_buff *prev; struct sock *sk; ktime_t tstamp; struct net_device *dev; struct dst_entry *dst; struct...
如果需要转发 (forward),则进入转发流程。该流程需要处理 TTL,再调用 dst_input 函数。该函数会 (1)处理 Netfilter Hook (2)执行 IP fragmentation (3)调用 dev_queue_xmit,进入链路层处理流程。 1.2.3 传输层 (TCP/UDP) 传输层 TCP 处理入口在 tcp_v4_rcv 函数(位于 linux/net/ipv4/tcp ipv4.c 文件中...
struct dst_entry *dst_cache; /* 目的地缓存,用于路由查找结果 */ rwlock_t dst_lock; /* 目的地缓存锁*/ atomic_t rmem_alloc; /* 已接收队列字节数 */ struct sk_buff_head receive_queue; /* 接收包队列 */ atomic_t wmem_alloc; /* 已发送字节数 */ ...
struct dst_entry *dst; struct sec_path *sp; /* * This is the control buffer. It is free to use for every * layer. Please put your private variables there. If you * want to keep them across layers you have to do a skb_clone() ...
structdst_entry*dst; intlength;/* Total length of all frames */ __be32 addr; structflowi fl; }cork; }; 从上面可以看出,struct inet_sock为TCP/IP协议栈极为重要的结构,它要位于所有的不同sock类型的顶部。主要用于保存不同socket类型公有的特性和信息。组织结构有些类似于C++的基类——尤其是内存布...
structdst_entry*dst;@dst: FIXME: Describe this field目的地 structsec_path*sp;every layer. Put private vars here * This is the control buffer. It is free to use for every * layer. Please put your private variables there. If you * want to keep them across layers you have to do a sk...
@@ -312,7 +312,7 @@ static inline struct dst_entry *xfrm_dst_lookup(struct xfrm_state *x, params.net = net; params.saddr = saddr; params.daddr = daddr; params.tos = inet_dscp_to_dsfield(dscp); params.dscp = dscp; params.oif = oif; ...
| 解出route entry V --- | dst_addr | gateway | Output interface| ... --- 可以看出,返回消息由多个(nlmsghdr + route entry)组成,当某个nlmsghdr的nlmsg_type == NLMSG_DONE时就表示信息输出已经完毕。而每一个route entry由多个rtattr结构体组成,每个结构体表示该路由项的...