From e2c7456c2a2f39d99be3f545a8ba15d8e600487c Mon Sep 17 00:00:00 2001 From: gatieme Date: Tue, 6 Sep 2016 11:00:22 +0800 Subject: [PATCH] ... --- .../kernel/04-net/03-socket_buffer/README.md | 129 ++++++++- study/kernel/04-net/05-网络层/README.md | 27 +- .../04-net/05-网络层/images/ip_header.png | Bin 0 -> 40378 bytes .../kernel/04-net/05-网络层/images/route.png | Bin 0 -> 84599 bytes study/kernel/04-net/1.c | 260 ------------------ study/kernel/04-net/README.md | 47 ++++ 6 files changed, 195 insertions(+), 268 deletions(-) create mode 100644 study/kernel/04-net/05-网络层/images/ip_header.png create mode 100644 study/kernel/04-net/05-网络层/images/route.png delete mode 100644 study/kernel/04-net/1.c create mode 100644 study/kernel/04-net/README.md diff --git a/study/kernel/04-net/03-socket_buffer/README.md b/study/kernel/04-net/03-socket_buffer/README.md index efc357a..7e777fb 100644 --- a/study/kernel/04-net/03-socket_buffer/README.md +++ b/study/kernel/04-net/03-socket_buffer/README.md @@ -262,17 +262,91 @@ struct sk_buff ![套接字缓冲区在各个协议层之间传递时,对缓冲区的操作](../images/trans_data.png) -在字长32位的系统上,数据类型sk_buff_data_t用来表示各种类型为简单指针的数据, 定义在[`include/linux/skbuff.h?v=4.7, line 626`](http://lxr.free-electrons.com/source/include/linux/skbuff.h?v=4.7#L626), 在64位 CPU上, 可使用一点小技巧来节省一些空间。sk_buff_data_t的定义改为整型变量 + + + +内核实现了一些宏用来获取缓冲区数据段的结束位置. 这些函数定义在[`include/linux/skbuff.h?v=4.7, line 1165`](http://lxr.free-electrons.com/source/include/linux/skbuff.h?v=4.7#L1165) + + ```cpp #ifdef NET_SKBUFF_DATA_USES_OFFSET -typedef unsigned int sk_buff_data_t; +static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) +{ + return skb->head + skb->end; +} + +static inline unsigned int skb_end_offset(const struct sk_buff *skb) +{ + return skb->end; +} #else -typedef unsigned char *sk_buff_data_t; +static inline unsigned char *skb_end_pointer(const struct sk_buff *skb) +{ + return skb->end; +} + +static inline unsigned int skb_end_offset(const struct sk_buff *skb) +{ + return skb->end - skb->head; +} #endif ``` -套接字缓冲区需要很多指针来表示缓冲区中内容的不同部分. 由于网络子系统必须保证较低的内存占用和较高的处理速度, 因而对struct sk_buff来说,我们需要保持该结构的长度尽可能小. +内核实现了一些宏用来获取协议数据区域的结束的结束位置tail的函数. 这些函数定义在[`include/linux/skbuff.h?v=4.7, line 1849`](http://lxr.free-electrons.com/source/include/linux/skbuff.h?v=4.7#L1849) + +```cpp +#ifdef NET_SKBUFF_DATA_USES_OFFSET /* 64 bit */ +static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb) +{ + return skb->head + skb->tail; +} + +static inline void skb_reset_tail_pointer(struct sk_buff *skb) +{ + skb->tail = skb->data - skb->head; +} + +static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset) +{ + skb_reset_tail_pointer(skb); + skb->tail += offset; +} + +#else /* NET_SKBUFF_DATA_USES_OFFSET */ +static inline unsigned char *skb_tail_pointer(const struct sk_buff *skb) +{ + return skb->tail; +} + +static inline void skb_reset_tail_pointer(struct sk_buff *skb) +{ + skb->tail = skb->data; +} + +static inline void skb_set_tail_pointer(struct sk_buff *skb, const int offset) +{ + skb->tail = skb->data + offset; +} + +#endif /* NET_SKBUFF_DATA_USES_OFFSET */ +``` + +在字长32位的系统上,数据类型sk_buff_data_t用来表示各种类型为简单指针的数据(`char *`), 定义在[`include/linux/skbuff.h?v=4.7, line 487`](http://lxr.free-electrons.com/source/include/linux/skbuff.h?v=4.7#L487), 在64位 CPU上, 可使用一点小技巧来节省一些空间. `sk_buff_data_t`的定义改为整型变量 + +```cpp +#if BITS_PER_LONG > 32 /* 64位的linux系统中long是8个字节 > 4 */ +#define NET_SKBUFF_DATA_USES_OFFSET 1 +#endif + +#ifdef NET_SKBUFF_DATA_USES_OFFSET /* 64位系统 */ +typedef unsigned int sk_buff_data_t; /* 4个字节 */ +#else /* 32位系统 */ +typedef unsigned char *sk_buff_data_t; /* 4个字节 */ +#endif +``` + +套接字缓冲区需要很多指针来表示缓冲区中内容的不同部分. 由于网络子系统必须保证较低的内存占用和较高的处理速度, 因而对`struct sk_buff`来说,我们需要保持该结构的长度尽可能小. @@ -447,3 +521,50 @@ struct sk_buff_head { 分组通常放置在等待队列中,例如分组等待处理时,或需要重新组合已经分析过的分组时. ![通过双链表管理套接字缓冲区](../images/dou_link.png) + + + +##4.3.3 skb_shared_info结构体 +------- + + +内核`skb_shared_info`结构体该类型用来管理数据包分片信息, 该结构定义在[`include/linux/skbuff.h?v=4.7, line 408`](http://lxr.free-electrons.com/source/include/linux/skbuff.h?v=4.7#L408) + +```cpp +/* This data is invariant across clones and lives at + * the end of the header data, ie. at skb->end. + */ +struct skb_shared_info { + unsigned char nr_frags; + __u8 tx_flags; + unsigned short gso_size; /* 尺寸 */ + /* Warning: this field is not always filled in (UFO)! */ + unsigned short gso_segs; /* 顺序 */ + unsigned short gso_type; + struct sk_buff *frag_list; + struct skb_shared_hwtstamps hwtstamps; /* 硬件时间戳 */ + u32 tskey; + __be32 ip6_frag_id; + + /* + * Warning : all fields before dataref are cleared in __alloc_skb() + */ + atomic_t dataref; /* 使用计数 */ + + /* Intermediate layers must ensure that destructor_arg + * remains valid until skb destructor */ + void * destructor_arg; + + /* must be last field, see pskb_expand_head() */ + skb_frag_t frags[MAX_SKB_FRAGS]; +}; +``` + + + 通过宏可以表示与skb的关系 + + +```cpp +/* Internal */ +#define skb_shinfo(SKB) ((struct skb_shared_info *)(skb_end_pointer(SKB))) +``` \ No newline at end of file diff --git a/study/kernel/04-net/05-网络层/README.md b/study/kernel/04-net/05-网络层/README.md index 8b43ea0..65abd95 100644 --- a/study/kernel/04-net/05-网络层/README.md +++ b/study/kernel/04-net/05-网络层/README.md @@ -28,10 +28,10 @@ IP在1981年正式定义(在RFC791中), 现在已经进入暮年 ------- -IP分组使用的协议首部如图12-14所示. +IP分组使用的协议首部如下图所示. -![图12-14 IP首部的结构](../images/) +![图12-14 IP首部的结构](./images/ip_header.png) | 字段 | 描述 | @@ -87,9 +87,28 @@ struct iphdr { `ip_rcv`函数是网络层的入口点. 分组向上穿过内核的路线如下图所示 -![图12-15 分组穿过互联网络层的路线](../images/) + +![图12-15 分组穿过互联网络层的路线](./images/route.png) +该函数定义在[`net/ipv4/ip_input.c?v=4.7, line 405`](http://lxr.free-electrons.com/source/net/ipv4/ip_input.c?v=4.7#L405) + + +| 函数 | 功能 | 定义 | +|:-----:|:-----:|:-----:| +| ip_rcv | 对驱动送上来的数据报文进行ip头的合法性检查, 并调用netfilter过滤器上NF_INET_PRE_ROUTING | [net/ipv4/ip_input.c?v=4.7, line 405](http://lxr.free-electrons.com/source/net/ipv4/ip_input.c?v=4.7#L405) | +| ip_local_deliver | | [net/ipv4/ip_input.c?v=4.7, line 192](http://lxr.free-electrons.com/source/net/ipv4/ip_input.c?v=4.7#L192) | + +
+ +| 函数 | 功能 | 定义 | +|:-----:|:-----:|:-----:| +| ip_queue_xmit | | [net/ipv4/ip_output.c?v=4.7, line 376](http://lxr.free-electrons.com/source/net/ipv4/ip_output.c?v=4.7#L376) | +| ip_output | | [net/ipv4/ip_output.c?v=4.7, line 346](http://lxr.free-electrons.com/source/net/ipv4/ip_output.c?v=4.7#L346) | + +```cpp + +``` 发送和接收操作的程序流程并不总是分离的, 如果分组只通过当前计算机转发, 那么发送和接收操作是交织的. 这种分组不会传递到更高的协议层(或应用程序), 而是立即离开计算机, 发往新的目的地. @@ -99,7 +118,7 @@ struct iphdr { ------- -在分组(以及对应的套接字缓冲区,其中的指针已经设置了适当的值)转发到ip_rcv之后, 必须检查接收到的信息, 确保它是正确的。 主要检查计算的校验和与首部中存储的校验和是否一致. +在分组(以及对应的套接字缓冲区, 其中的指针已经设置了适当的值)转发到ip_rcv之后, 必须检查接收到的信息, 确保它是正确的. 主要检查计算的校验和与首部中存储的校验和是否一致. 其他的检查包括分组是否达到了IP首部的最小长度,分组的协议是否确实是IPv4(IPv6的接收例程是另一个). diff --git a/study/kernel/04-net/05-网络层/images/ip_header.png b/study/kernel/04-net/05-网络层/images/ip_header.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb78416726f9a062a011f8f0b49b5d5459aa689 GIT binary patch literal 40378 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 literal 0 HcmV?d00001 diff --git a/study/kernel/04-net/05-网络层/images/route.png b/study/kernel/04-net/05-网络层/images/route.png new file mode 100644 index 0000000000000000000000000000000000000000..d07f42b6a1306bac0e287fd1aca0898cb3b29b75 GIT binary patch literal 84599 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%0A1zd6N%Lth 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 literal 0 HcmV?d00001 diff --git a/study/kernel/04-net/1.c b/study/kernel/04-net/1.c deleted file mode 100644 index 0128897..0000000 --- a/study/kernel/04-net/1.c +++ /dev/null @@ -1,260 +0,0 @@ -struct net_device { - char name[IFNAMSIZ]; - struct hlist_node name_hlist; - char *ifalias; - /* - * I/O specific fields - * FIXME: Merge these and struct ifmap into one - */ - unsigned long mem_end; - unsigned long mem_start; - unsigned long base_addr; - int irq; - - atomic_t carrier_changes; - - /* - * Some hardware also needs these fields (state,dev_list, - * napi_list,unreg_list,close_list) but they are not - * part of the usual set specified in Space.c. - */ - - unsigned long state; - - struct list_head dev_list; - struct list_head napi_list; - struct list_head unreg_list; - struct list_head close_list; - struct list_head ptype_all; - struct list_head ptype_specific; - - struct { - struct list_head upper; - struct list_head lower; - } adj_list; - - struct { - struct list_head upper; - struct list_head lower; - } all_adj_list; - - netdev_features_t features; - netdev_features_t hw_features; - netdev_features_t wanted_features; - netdev_features_t vlan_features; - netdev_features_t hw_enc_features; - netdev_features_t mpls_features; - netdev_features_t gso_partial_features; - - int ifindex; - int group; - - struct net_device_stats stats; - - atomic_long_t rx_dropped; - atomic_long_t tx_dropped; - atomic_long_t rx_nohandler; - -#ifdef CONFIG_WIRELESS_EXT - const struct iw_handler_def *wireless_handlers; - struct iw_public_data *wireless_data; -#endif - const struct net_device_ops *netdev_ops; - const struct ethtool_ops *ethtool_ops; -#ifdef CONFIG_NET_SWITCHDEV - const struct switchdev_ops *switchdev_ops; -#endif -#ifdef CONFIG_NET_L3_MASTER_DEV - const struct l3mdev_ops *l3mdev_ops; -#endif - - const struct header_ops *header_ops; - - unsigned int flags; - unsigned int priv_flags; - - unsigned short gflags; - unsigned short padded; - - unsigned char operstate; - unsigned char link_mode; - - unsigned char if_port; - unsigned char dma; - - unsigned int mtu; - unsigned short type; - unsigned short hard_header_len; - - unsigned short needed_headroom; - unsigned short needed_tailroom; - - /* Interface address info. */ - unsigned char perm_addr[MAX_ADDR_LEN]; - unsigned char addr_assign_type; - unsigned char addr_len; - unsigned short neigh_priv_len; - unsigned short dev_id; - unsigned short dev_port; - spinlock_t addr_list_lock; - unsigned char name_assign_type; - bool uc_promisc; - struct netdev_hw_addr_list uc; - struct netdev_hw_addr_list mc; - struct netdev_hw_addr_list dev_addrs; - -#ifdef CONFIG_SYSFS - struct kset *queues_kset; -#endif - unsigned int promiscuity; - unsigned int allmulti; - - - /* Protocol-specific pointers */ - -#if IS_ENABLED(CONFIG_VLAN_8021Q) - struct vlan_info __rcu *vlan_info; -#endif -#if IS_ENABLED(CONFIG_NET_DSA) - struct dsa_switch_tree *dsa_ptr; -#endif -#if IS_ENABLED(CONFIG_TIPC) - struct tipc_bearer __rcu *tipc_ptr; -#endif - void *atalk_ptr; - struct in_device __rcu *ip_ptr; - struct dn_dev __rcu *dn_ptr; - struct inet6_dev __rcu *ip6_ptr; - void *ax25_ptr; - struct wireless_dev *ieee80211_ptr; - struct wpan_dev *ieee802154_ptr; -#if IS_ENABLED(CONFIG_MPLS_ROUTING) - struct mpls_dev __rcu *mpls_ptr; -#endif - -/* - * Cache lines mostly used on receive path (including eth_type_trans()) - */ - unsigned long last_rx; - - /* Interface address info used in eth_type_trans() */ - unsigned char *dev_addr; - -#ifdef CONFIG_SYSFS - struct netdev_rx_queue *_rx; - - unsigned int num_rx_queues; - unsigned int real_num_rx_queues; -#endif - - unsigned long gro_flush_timeout; - rx_handler_func_t __rcu *rx_handler; - void __rcu *rx_handler_data; - -#ifdef CONFIG_NET_CLS_ACT - struct tcf_proto __rcu *ingress_cl_list; -#endif - struct netdev_queue __rcu *ingress_queue; -#ifdef CONFIG_NETFILTER_INGRESS - struct list_head nf_hooks_ingress; -#endif - - unsigned char broadcast[MAX_ADDR_LEN]; -#ifdef CONFIG_RFS_ACCEL - struct cpu_rmap *rx_cpu_rmap; -#endif - struct hlist_node index_hlist; - -/* - * Cache lines mostly used on transmit path - */ - struct netdev_queue *_tx ____cacheline_aligned_in_smp; - unsigned int num_tx_queues; - unsigned int real_num_tx_queues; - struct Qdisc *qdisc; - unsigned long tx_queue_len; - spinlock_t tx_global_lock; - int watchdog_timeo; - -#ifdef CONFIG_XPS - struct xps_dev_maps __rcu *xps_maps; -#endif -#ifdef CONFIG_NET_CLS_ACT - struct tcf_proto __rcu *egress_cl_list; -#endif -#ifdef CONFIG_NET_SWITCHDEV - u32 offload_fwd_mark; -#endif - - /* These may be needed for future network-power-down code. */ - struct timer_list watchdog_timer; - - int __percpu *pcpu_refcnt; - struct list_head todo_list; - - struct list_head link_watch_list; - - enum { NETREG_UNINITIALIZED=0, - NETREG_REGISTERED, /* completed register_netdevice */ - NETREG_UNREGISTERING, /* called unregister_netdevice */ - NETREG_UNREGISTERED, /* completed unregister todo */ - NETREG_RELEASED, /* called free_netdev */ - NETREG_DUMMY, /* dummy device for NAPI poll */ - } reg_state:8; - - bool dismantle; - - enum { - RTNL_LINK_INITIALIZED, - RTNL_LINK_INITIALIZING, - } rtnl_link_state:16; - - void (*destructor)(struct net_device *dev); - -#ifdef CONFIG_NETPOLL - struct netpoll_info __rcu *npinfo; -#endif - - possible_net_t nd_net; - - /* mid-layer private */ - union { - void *ml_priv; - struct pcpu_lstats __percpu *lstats; - struct pcpu_sw_netstats __percpu *tstats; - struct pcpu_dstats __percpu *dstats; - struct pcpu_vstats __percpu *vstats; - }; - - struct garp_port __rcu *garp_port; - struct mrp_port __rcu *mrp_port; - - struct device dev; - const struct attribute_group *sysfs_groups[4]; - const struct attribute_group *sysfs_rx_queue_group; - - const struct rtnl_link_ops *rtnl_link_ops; - - /* for setting kernel sock attribute on TCP connection setup */ -#define GSO_MAX_SIZE 65536 - unsigned int gso_max_size; -#define GSO_MAX_SEGS 65535 - u16 gso_max_segs; - -#ifdef CONFIG_DCB - const struct dcbnl_rtnl_ops *dcbnl_ops; -#endif - u8 num_tc; - struct netdev_tc_txq tc_to_txq[TC_MAX_QUEUE]; - u8 prio_tc_map[TC_BITMASK + 1]; - -#if IS_ENABLED(CONFIG_FCOE) - unsigned int fcoe_ddp_xid; -#endif -#if IS_ENABLED(CONFIG_CGROUP_NET_PRIO) - struct netprio_map __rcu *priomap; -#endif - struct phy_device *phydev; - struct lock_class_key *qdisc_tx_busylock; - bool proto_down; -}; \ No newline at end of file diff --git a/study/kernel/04-net/README.md b/study/kernel/04-net/README.md new file mode 100644 index 0000000..fb9163c --- /dev/null +++ b/study/kernel/04-net/README.md @@ -0,0 +1,47 @@ +进程虚拟地址空间 +======= + +| 日期 | 内核版本 | 架构| 作者 | GitHub| CSDN | +| ------- |:-------:|:-------:|:-------:|:-------:|:-------:| +| 2016-06-14 | [Linux-4.7](http://lxr.free-electrons.com/source/?v=4.7) | X86 & arm | [gatieme](http://blog.csdn.net/gatieme) | [LinuxDeviceDrivers](https://github.com/gatieme/LDD-LinuxDeviceDrivers) | [Linux内存管理](http://blog.csdn.net/gatieme/article/category/6225543) | + +http://blog.sina.com.cn/s/blog_4b9eab320102vme0.html + +http://blog.csdn.net/geekcome/article/details/7971463 + +http://blog.chinaunix.net/uid-29478572-id-4119158.html + +https://yq.aliyun.com/articles/5862 + +http://blog.sina.com.cn/s/blog_4b9eab320102v9qn.html + +http://blog.csdn.net/shanshanpt/article/details/19918171 + +http://blog.chinaunix.net/uid-21768364-id-2936798.html + +http://www.linuxidc.com/Linux/2012-09/70700.htm + +http://www.oschina.net/question/234345_47845 + +http://xuela-net.iteye.com/blog/1899566 + +http://blog.chinaunix.net/uid-22359610-id-1626525.html + +http://www.360doc.com/content/15/0522/07/18252487_472352496.shtml + +http://www.openstack.cn/?p=4756 + +http://weibo.com/p/1001603837806467238143 + +大家都知道TCP/IP协议栈现在是世界上最流行的网络协议栈,恐怕它的普及的最重要的原因就是其清晰的层次结构以及清晰定义的原语和接口。不仅使得上层应用开发者可以无需关心下层架构或者内部机制,从而相对透明的操作网络。这个明显的层次结构也可以在Linux内核的网络协议栈中观察到。 +主要的参考文献是:Linux网络栈剖析(中文版)/Anatomy of Linux networking stack(英文原版)by Tim Jones. +以及:Linux内核2.4.x的网络接口结构 +另外一些参考资料可以从这个页面找到:http://www.ecsl.cs.sunysb.edu/elibrary/linux/network/ (纽约州立大学石溪分校的页面) +Linux内核网络协议栈采用了如下的层次结构: + +http://www.ibm.com/developerworks/cn/linux/l-linux-networking-stack/ +http://www.ibm.com/developerworks/linux/library/l-linux-networking-stack/ + +http://gjiwwa.blu.livefilestore.com/y1p99O_6n29_58mKHdfUgbvzgKOsD5_7unXA5noegNcJ9Y2h3QMaQ-m0Rb9JGP1v_X4zI7-n7J6aqbOm1xr-HMy56E3YJZbWajO/Linux%E5%86%85%E6%A0%B82.4.x%E7%9A%84%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3%E7%BB%93%E6%9E%84.pdf?download + +http://www.ecsl.cs.sunysb.edu/elibrary/linux/network/ \ No newline at end of file