skb_peek(9)
π¦ skb_peek(9) β Kernel API Manual π¦
okay so bestie, welcome to the kernel API manual page for skb_peek(9) and honestly? this one is giving "look but don't touch" energy and i need you to listen π
β¨ NAME β¨
skb_peek β peek at the head of an &sk_buff_head π
πΈ SYNOPSIS πΈ
struct sk_buff * skb_peek (const struct sk_buff_head *list_ );
π ARGUMENTS π
list_β the list you're peeking at, bestie. that's the one. that's the whole argument. π«Ά
π DESCRIPTION π
okay so you're peeking at an sk_buff. but like β not like the other operations, no ma'am. you _MUST_ be careful with this one, and yes the manual is screaming at you in all caps for a reason π
here's the tea: a peek leaves the buffer on the list, which means someone else can literally just run off with it. like you looked away for one second. gone. so you must hold the appropriate locks, or have a private queue, to do this. no cap. π₯
it returns NULL for an empty list, or a pointer to the head element. and the reference count is not incremented, so that reference is therefore volatile. use with caution. periodt. π
fr fr bestie, "volatile reference" is not a cute aesthetic, it's a warning. hold your locks. π
π SEE ALSO π
the way this list is iconic and also enormous β it's from the kernel file ./include/linux/skbuff.h and it is absolutely going to eat, so buckle up π
skb checksums(9),skb_frag_size(9),skb_frag_size_set(9),skb_frag_size_add(9),skb_frag_size_sub(9),skb_frag_must_loop(9),skb_frag_foreach_page(9),struct skb_shared_hwtstamps(9),dataref and headerless skbs(9),Basic sk_buff geometry(9),struct sk_buff(9)skb_pfmemalloc(9),skb_dst(9),skb_dstref_steal(9),skb_dstref_restore(9),skb_dst_set(9),skb_dst_set_noref(9),skb_dst_is_noref(9),skb_napi_id(9),skb_unref(9),kfree_skb(9),alloc_skb(9),skb_fclone_busy(9),alloc_skb_fclone(9),skb_pad(9)skb_queue_empty(9),skb_queue_empty_lockless(9),skb_queue_is_last(9),skb_queue_is_first(9),skb_queue_next(9),skb_queue_prev(9),skb_get(9),skb_cloned(9),skb_header_cloned(9),__skb_header_release(9),skb_shared(9),skb_share_check(9),skb_unshare(9),__skb_peek(9),skb_peek_next(9),skb_peek_tail(9)skb_queue_len(9),skb_queue_len_lockless(9),__skb_queue_head_init(9),skb_queue_splice(9),skb_queue_splice_init(9),skb_queue_splice_tail(9),skb_queue_splice_tail_init(9),__skb_queue_after(9),__skb_queue_head(9),__skb_queue_tail(9),__skb_dequeue(9),__skb_dequeue_tail(9),skb_len_add(9)__skb_fill_netmem_desc(9),skb_fill_page_desc(9),skb_fill_page_desc_noacc(9),skb_headroom(9),skb_tailroom(9),skb_availroom(9),skb_reserve(9),skb_tailroom_reserve(9),skb_reset_transport_header_careful(9),skb_set_transport_header_careful(9),pskb_trim_unique(9),skb_orphan(9),skb_orphan_frags(9),__skb_queue_purge_reason(9),netdev_alloc_frag(9),netdev_alloc_skb(9)__dev_alloc_pages(9),__dev_alloc_page(9),dev_page_is_reusable(9),skb_propagate_pfmemalloc(9),skb_frag_off(9),skb_frag_off_add(9),skb_frag_off_set(9),skb_frag_off_copy(9),skb_frag_net_iov(9),skb_frag_page(9),skb_frag_netmem(9),skb_frag_address(9),skb_frag_address_safe(9),skb_frag_phys(9),skb_frag_page_copy(9),__skb_frag_dma_map(9)skb_clone_writable(9),skb_cow(9),skb_cow_head(9),skb_padto(9),__skb_put_padto(9),skb_put_padto(9),skb_linearize(9),skb_has_shared_frag(9),skb_linearize_cow(9),skb_postpull_rcsum(9),skb_postpush_rcsum(9),skb_push_rcsum(9),pskb_trim_rcsum(9),skb_needs_linearize(9)skb_get_timestamp(9),skb_data_move(9),skb_postpull_data_move(9),skb_postpush_data_move(9),skb_complete_tx_timestamp(9),skb_tstamp_tx(9),skb_tx_timestamp(9),skb_complete_wifi_ack(9),skb_checksum_complete(9),struct skb_ext(9),skb_checksum_none_assert(9),skb_head_is_locked(9)
iykyk π
aaaand that's the whole page bestie, ily, go hold some locks π§π«
signed off from ./include/linux Β· October 2026 Β· slay πβ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms