ENUM OVS_PACKET_ATTR(9)
π enum ovs_packet_attr β the Kernel API Manual moment β¨
okay so bestie, welcome to the enum ovs_packet_attr(9) page β it's the one all about the attributes for %OVS_PACKET_* commands. lowkey iconic, highkey essential. let's get into it π«Ά
πΈ SYNOPSIS πΈ
enum ovs_packet_attr {
OVS_PACKET_ATTR_PACKET ,
OVS_PACKET_ATTR_KEY ,
OVS_PACKET_ATTR_ACTIONS ,
OVS_PACKET_ATTR_USERDATA ,
OVS_PACKET_ATTR_EGRESS_TUN_KEY ,
OVS_PACKET_ATTR_PROBE ,
OVS_PACKET_ATTR_MRU ,
OVS_PACKET_ATTR_LEN ,
OVS_PACKET_ATTR_HASH ,
OVS_PACKET_ATTR_UPCALL_PID
};
π Constants π
OVS_PACKET_ATTR_PACKETβ the main character π« present for all notifications, no cap. it holds the entire packet as received, from the start of the Ethernet header onward. and like, forOVS_PACKET_CMD_ACTION,OVS_PACKET_ATTR_PACKETreflects changes made by actions precedingOVS_ACTION_ATTR_USERSPACE, butOVS_PACKET_ATTR_KEYis the flow key extracted from the packet as originally received. so they're giving two different energies, periodt.OVS_PACKET_ATTR_KEYβ also present for all notifications ποΈ contains the flow key extracted from the packet as nestedOVS_KEY_ATTR_*attributes. this lets userspace adapt its flow setup strategy by comparing its notion of the flow key against the kernel's. it's giving vibe check between userspace and kernel, iykyk.OVS_PACKET_ATTR_ACTIONSβ contains actions for the packet π¬ used forOVS_PACKET_CMD_EXECUTE, and it has nestedOVS_ACTION_ATTR_*attributes. also used in upcall whenOVS_ACTION_ATTR_USERSPACEhas the optionalOVS_USERSPACE_ATTR_ACTIONSattribute. multitasking queen.OVS_PACKET_ATTR_USERDATAβ present for anOVS_PACKET_CMD_ACTIONnotification if theOVS_ACTION_ATTR_USERSPACEaction specified anOVS_USERSPACE_ATTR_USERDATAattribute, with the same length and content specified there π literally same length, same content, matching set.OVS_PACKET_ATTR_EGRESS_TUN_KEYβ present for anOVS_PACKET_CMD_ACTIONnotification if theOVS_ACTION_ATTR_USERSPACEaction specified anOVS_USERSPACE_ATTR_EGRESS_TUN_PORTattribute β which is sent only if the output port is actually a tunnel port π contains the output tunnel key extracted from the packet as nestedOVS_TUNNEL_KEY_ATTR_*attributes. conditional queen.OVS_PACKET_ATTR_PROBEβ packet operation is a feature probe π just out here checking the vibes.OVS_PACKET_ATTR_MRUβ present for anOVS_PACKET_CMD_ACTIONandOVS_PACKET_ATTR_LENβ packet size before truncation π theOVS_PACKET_ATTR_USERSPACEaction specify the Maximum received fragment size.OVS_PACKET_ATTR_HASHβ packet hash info (e.g. hash, sw_hash and l4_hash in skb) π₯OVS_PACKET_ATTR_UPCALL_PIDβ Netlink PID to use for upcalls while processingOVS_PACKET_CMD_EXECUTEπ takes precedence over all other ways to determine the Netlink PID, includingOVS_USERSPACE_ATTR_PID,OVS_DP_ATTR_UPCALL_PID,OVS_DP_ATTR_PER_CPU_PIDSand theOVS_VPORT_ATTR_UPCALL_PID. main character energy fr fr, everybody else is supporting cast.
π¦ Description π¦
these attributes follow the struct ovs_header within the Generic Netlink payload for OVS_PACKET_* commands π so like, they know their place and their place is right after struct ovs_header.
β¨ SEE ALSO β¨
- Kernel file
./include/uapi/linux/openvswitch.h struct ovs_header(9)enum ovs_datapath_attr(9)enum ovs_vport_type(9)enum ovs_vport_attr(9)enum ovs_vport_upcall_attr(9)enum ovs_frag_type(9)enum ovs_flow_attr(9)enum ovs_sample_attr(9)enum ovs_userspace_attr(9)struct ovs_action_push_mpls(9)struct ovs_action_add_mpls(9)struct ovs_action_push_vlan(9)enum ovs_ct_attr(9)enum ovs_nat_attr(9)struct ovs_action_push_eth(9)enum ovs_check_pkt_len_attr(9)enum ovs_psample_attr(9)enum ovs_action_attr(9)
and that's the whole page, bestie, you ate that π mwah π
sign-off szn: this lil masterpiece lives in ./include/uapi/linux, dated October 2026, and it's literally the enum ovs_packet_attr(9) page from the Kernel API Manual πβ go forth and 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