skb_checksum_complete(9)
okay so this is skb_checksum_complete(9), straight out of the Kernel API Manual, and it is literally the βCalculate checksum of an entire packetβ girlie π
β¨
π NAME π
skb_checksum_complete β Calculate checksum of an entire packet. periodt π«Ά
β¨ SYNOPSIS β¨
__sum16 skb_checksum_complete (struct sk_buff *skb );
π ARGUMENTS π
skbβ the packet to process. Thatβs the whole argument list, bestie π
π¦ DESCRIPTION π¦
okay so the vibe is: this function calculates the checksum over the entire packet, and then it adds the value of skb->csum into the mix. That skb->csum value can be used to supply the checksum of a pseudo header, like the ones TCP/UDP use. Then it returns the checksum π
Now, for protocols that contain complete checksums β think ICMP/TCP/UDP β you can use this function to verify that checksum on received packets. In that case, the function should return zero if the checksum is correct. In particular, it will return zero if skb->ip_summed is CHECKSUM_UNNECESSARY, which indicates that the hardware has already verified the correctness of the checksum. no cap β
πΈ SEE ALSO πΈ
the whole reference crew, in the exact order the original gives it, is right here π
Kernel file ./include/linux/skbuff.h 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(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), struct
skb_ext(9), skb_checksum_none_assert(9), skb_head_is_locked(9)
mwah π this page is brought to you by ./include/linux, dated October 2026, and the star of the show is skb_checksum_complete(9). byeee πβ¨
π¦ 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