build_skb_around(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– build_skb_around(9) β€” like, the Kernel API Manual page, but make it make sense πŸŽ€

okay so bestie, we're in the Kernel API Manual today and this one is genuinely iconic β€” it's all about building a network buffer around an skb you already have. no cap, it's a little bit of a glow-up situation where you bring the shell and the kernel brings the ~vibes~ (the buffer). let's get into it ✨


🌸 NAME 🌸

build_skb_around β€” build a network buffer around provided skb

like literally, you hand it an skb, it wraps a network buffer around it. that's the whole plot. πŸ’…


✨ SYNOPSIS ✨

struct sk_buff * build_skb_around (struct sk_buff *skb , void *data ,
       unsigned int frag_size );

returns a struct sk_buff *. yes, a pointer. yes, to an skb. we love a consistent return type 🫢


πŸ¦‹ ARGUMENTS πŸ¦‹

  • skb β€” the sk_buff that the caller provides. ⚠️ it must be memset cleared ⚠️ like, zeroed out, fully, no leftover chaos in there. this is not a suggestion, bestie, this is a must. treat it like wiping your desk before a study sprint. memset it or regret it πŸ™ˆ
  • data β€” the data buffer, provided by you, the caller. you bring the data, the function brings the skb-around-it situation. it's giving collaboration πŸ’–
  • frag_size β€” the size of the data. that's it. that's the size. in a unsigned int. 😌

πŸ‘‘ SEE ALSO πŸ‘‘

kernel file: ./net/core/skbuff.c β€” that's the home base for all of this, iykyk πŸ”₯

and now, the friend group. the whole friend group. literally everyone showed up to this function's party, so here's the entire guest list, no one left out, periodt:

drop_reasons_register_subsys(9), drop_reasons_unregister_subsys(9), skb_panic(9), napi_skb_cache_get_bulk(9), __build_skb(9), __napi_build_skb(9), napi_build_skb(9), __alloc_skb(9), __netdev_alloc_skb(9), napi_alloc_skb(9), skb_pp_cow_data(9), skb_pp_frag_ref(9), __kfree_skb(9), sk_skb_reason_drop(9), skb_tx_error(9), consume_skb(9), __consume_stateless_skb(9), napi_consume_skb(9), alloc_skb_for_msg(9), skb_morph(9), skb_copy_ubufs(9), skb_clone(9), skb_copy(9), __pskb_copy_fclone(9), pskb_expand_head(9), skb_expand_head(9), skb_copy_expand(9), __skb_pad(9), pskb_put(9), skb_put(9), skb_push(9)

skb_pull(9), skb_pull_data(9), skb_trim(9), __pskb_pull_tail(9), skb_copy_bits(9), skb_store_bits(9), skb_zerocopy(9), skb_dequeue(9), skb_dequeue_tail(9), skb_queue_purge_reason(9), skb_rbtree_purge(9), skb_queue_head(9), skb_queue_tail(9), skb_unlink(9), skb_append(9), skb_split(9), skb_shift(9), skb_prepare_seq_read(9), skb_seq_read(9), skb_abort_seq_read(9), skb_copy_seq_read(9), skb_find_text(9)

skb_pull_rcsum(9), skb_segment(9), skb_to_sgvec(9), skb_cow_data(9), skb_clone_sk(9), skb_partial_csum_set(9), skb_checksum_setup(9), skb_checksum_maybe_trim(9), skb_checksum_trimmed(9), skb_try_coalesce(9), skb_scrub_packet(9), skb_eth_pop(9), skb_eth_push(9), skb_mpls_push(9), skb_mpls_pop(9), skb_mpls_update_lse(9), skb_mpls_dec_ttl(9)

alloc_skb_with_frags(9), skb_condense(9), __skb_ext_alloc(9), __skb_ext_set(9), skb_ext_add(9), skb_attempt_defer_free(9), skb_splice_from_iter(9)


πŸ’€ real talk though: that memset-cleared requirement on skb is the one thing you cannot skip. it's not a vibe, it's a contract. you gotta zero that thing out before you call. no shortcuts, bestie. πŸ™

and that's the page!! 🌈 source is ./net/core, and the version/date situation is October 2026 β€” so like, future-dated, main character energy honestly πŸ’œ go forth and build those buffers around those skbs, you're gonna slay βœ¨πŸŒΈπŸ’…

πŸ“¦ where this page comes from