skb_eth_pop(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… skb_eth_pop(9) πŸ’…

okay so this is a page from the Kernel API Manual, bestie, and it's about the tiniest little glow-up a packet can get: yeeting its Ethernet header. come learn with me 🫢


✨ NAME ✨

skb_eth_pop β€” drop the Ethernet header at the head of a packet

like, it's right there at the front of the packet, and we're removing it. slay.


🌸 SYNOPSIS 🌸

int skb_eth_pop (struct sk_buff *skb );

that's the whole signature, no cap. it hands you back an int and takes exactly one socket buffer. πŸ’–


πŸŽ€ ARGUMENTS πŸŽ€

  • skb β€” the socket buffer you're about to modify, aka the packet in question, aka the main character πŸ¦‹

πŸ’– DESCRIPTION πŸ’–

So like. this function drops the Ethernet header of skb. literally just pops it off the front. gone. iconic behavior honestly.

It expects two things, and this is the important part so don't skip it πŸ™ˆ:

  • that skb->data points to the mac header β€” that's the starting position it's working from
  • that no VLAN tags are present β€” none. zero. if there are VLAN tags in the mix, that's not what this function signed up for, so don't come at it with those

Returns 0 on success, and -errno otherwise. so basically 0 means we ate and left no crumbs, and anything negative is the kernel telling you it didn't go well 😭

no extra behavior is described beyond this β€” the page tells you exactly what it expects and exactly what it returns, so that's what we're going with πŸ’…

πŸ¦‹ SEE ALSO πŸ¦‹

bestie. the linked list on this one is long, and it is a whole vibe. the kernel file is ./net/core/skbuff.c, and then the entire extended skb family shows up πŸ’€:

drop_reasons_register_subsys(9), drop_reasons_unregister_subsys(9), skb_panic(9), napi_skb_cache_get_bulk(9), __build_skb(9), build_skb_around(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),

and there's more, because of course there is πŸ“:

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_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)

honestly? reading the whole list is a personality trait at this point. iykyk πŸ’œ


and that's the page!! tysm for reading, mwah πŸŽ€ this little cutie lives under ./net/core and the version we're looking at is dated October 2026 β€” go forth and pop those headers, bestie, and remember the manual entry is skb_eth_pop(9). periodt. πŸ’…βœ¨

πŸ“¦ where this page comes from