skb_mpls_push(9)
π skb_mpls_push(9) β the Kernel API Manual, but make it cute
okay so bestie, this is skb_mpls_push(9) from the Kernel API Manual, and it's literally about shoving a fresh MPLS header onto a packet. give it a sec, it's actually so satisfying once you get it π
β¨ NAME β¨
skb_mpls_push β push a new MPLS header after mac_len bytes from start of the packet π
like, you're adding a header, and where it lands depends on mac_len. that's the whole vibe.
π¦ SYNOPSIS π¦
int skb_mpls_push (struct sk_buff *skb , __be32 mpls_lse , __be16
mpls_proto , int mac_len , bool ethernet );
five args, one int back. iconic signature ngl β¨
πΈ ARGUMENTS πΈ
skbβ the buffer, obvi π the packet you're messing with.mpls_lseβ the MPLS label stack entry you're pushing. this is the actual thing going in πmpls_protoβ the ethertype of your brand-new MPLS header. it expects0x8847or0x8848, so don't be weird about it πmac_lenβ the length of the MAC header. this is how far in the new header goes, so get it right bestie.ethernetβ a flag,boolstyle, that tells everyone whether the resulting packet afterskb_mpls_pushis ethernet. just a yes/no vibe check π¦
π DESCRIPTION π
okay so this one expects skb->data to be sitting at the mac header. that's the setup, that's the assignment, no cap.
and then it returns 0 on success, or -errno otherwise. so like, check your return value, always, every single time π
fr fr: if skb->data isn't at the mac header, you're not in the correct starting position. this function says "expects", and expectations are real π€¨
π SEE ALSO π
Kernel file ./net/core/skbuff.c, plus a whole friend group of functions that want your attention:
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), 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_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)
yeah that's the whole list, every single one, i would never do you dirty by skipping one π«Ά
and that's the page bestie!! π§ this one lives in ./net/core and it's from October 2026, and the whole thing is filed under the Kernel API Manual π
slay, go push some headers π
π¦ 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