diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-05-09 09:04:54 -0700 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-05-10 17:48:31 -0700 |
commit | ddccc9ef55992716ad477d38fbcd9f8f1d34fc67 (patch) | |
tree | 4bfea333e50b020b900ce7199b287347a5f2ac66 /include/linux/skbuff.h | |
parent | be76955dea93fe7ee9e0a6f961a7185290a2417f (diff) | |
download | lwn-ddccc9ef55992716ad477d38fbcd9f8f1d34fc67.tar.gz lwn-ddccc9ef55992716ad477d38fbcd9f8f1d34fc67.zip |
skbuff: add a basic intro doc
Add basic skb documentation. It's mostly an intro to the subsequent
patches - it would looks strange if we documented advanced topics
without covering the basics in any way.
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/linux/skbuff.h')
-rw-r--r-- | include/linux/skbuff.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 97de40bcfef6..69802624276d 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -801,6 +801,46 @@ typedef unsigned char *sk_buff_data_t; #endif /** + * DOC: Basic sk_buff geometry + * + * struct sk_buff itself is a metadata structure and does not hold any packet + * data. All the data is held in associated buffers. + * + * &sk_buff.head points to the main "head" buffer. The head buffer is divided + * into two parts: + * + * - data buffer, containing headers and sometimes payload; + * this is the part of the skb operated on by the common helpers + * such as skb_put() or skb_pull(); + * - shared info (struct skb_shared_info) which holds an array of pointers + * to read-only data in the (page, offset, length) format. + * + * Optionally &skb_shared_info.frag_list may point to another skb. + * + * Basic diagram may look like this:: + * + * --------------- + * | sk_buff | + * --------------- + * ,--------------------------- + head + * / ,----------------- + data + * / / ,----------- + tail + * | | | , + end + * | | | | + * v v v v + * ----------------------------------------------- + * | headroom | data | tailroom | skb_shared_info | + * ----------------------------------------------- + * + [page frag] + * + [page frag] + * + [page frag] + * + [page frag] --------- + * + frag_list --> | sk_buff | + * --------- + * + */ + +/** * struct sk_buff - socket buffer * @next: Next buffer in list * @prev: Previous buffer in list |