diff options
Diffstat (limited to 'vnet/vnet/buffer.h')
-rw-r--r-- | vnet/vnet/buffer.h | 217 |
1 files changed, 128 insertions, 89 deletions
diff --git a/vnet/vnet/buffer.h b/vnet/vnet/buffer.h index 742fe32b25f..3fcdf074e36 100644 --- a/vnet/vnet/buffer.h +++ b/vnet/vnet/buffer.h @@ -83,7 +83,7 @@ _(map) \ _(map_t) \ _(ip_frag) -/* +/* * vnet stack buffer opaque array overlay structure. * The vnet_buffer_opaque_t *must* be the same size as the * vlib_buffer_t "opaque" structure member, 32 bytes. @@ -94,35 +94,42 @@ _(ip_frag) * of the union, and will announce any deviations in an * impossible-to-miss manner. */ -typedef struct { +typedef struct +{ u32 sw_if_index[VLIB_N_RX_TX]; - union { + union + { /* Ethernet. */ - struct { + struct + { /* Saved value of current header by ethernet-input. */ i32 start_of_ethernet_header; } ethernet; /* IP4/6 buffer opaque. */ - struct { + struct + { /* Adjacency from destination IP address lookup [VLIB_TX]. - Adjacency from source IP address lookup [VLIB_RX]. - This gets set to ~0 until source lookup is performed. */ + Adjacency from source IP address lookup [VLIB_RX]. + This gets set to ~0 until source lookup is performed. */ u32 adj_index[VLIB_N_RX_TX]; - union { - struct { + union + { + struct + { /* Flow hash value for this packet computed from IP src/dst address protocol and ports. */ u32 flow_hash; - /* next protocol */ - u32 save_protocol; + /* next protocol */ + u32 save_protocol; }; /* Alternate used for local TCP packets. */ - struct { + struct + { u32 listener_index; u32 established_connection_index; @@ -133,7 +140,8 @@ typedef struct { } tcp; /* ICMP */ - struct { + struct + { u8 type; u8 code; u32 data; @@ -142,40 +150,46 @@ typedef struct { } ip; /* Multicast replication */ - struct { - u32 pad[3]; + struct + { + u32 pad[3]; u32 mcast_group_index; u32 mcast_current_index; u32 original_free_list_index; } mcast; /* ip4-in-ip6 softwire termination, only valid there */ - struct { + struct + { u8 swt_disable; u32 mapping_index; } swt; /* l2 bridging path, only valid there */ - struct { + struct + { u32 feature_bitmap; - u16 bd_index; // bridge-domain index - u8 l2_len; // ethernet header length - u8 shg; // split-horizon group + u16 bd_index; // bridge-domain index + u8 l2_len; // ethernet header length + u8 shg; // split-horizon group } l2; /* l2tpv3 softwire encap, only valid there */ - struct { - u32 pad[4]; /* do not overlay w/ ip.adj_index[0,1] */ + struct + { + u32 pad[4]; /* do not overlay w/ ip.adj_index[0,1] */ u8 next_index; u32 session_index; } l2t; - struct { + struct + { u32 src, dst; } gre; /* L2 classify */ - struct { + struct + { u64 pad; u32 opaque_index; u32 table_index; @@ -183,18 +197,21 @@ typedef struct { } l2_classify; /* IO - worker thread handoff */ - struct { + struct + { u32 next_index; } handoff; /* vnet policer */ - struct { - u32 pad[8 -VLIB_N_RX_TX -1]; /* to end of opaque */ + struct + { + u32 pad[8 - VLIB_N_RX_TX - 1]; /* to end of opaque */ u32 index; } policer; /* interface output features */ - struct { + struct + { u32 ipsec_spd_index; u32 ipsec_sad_index; u32 unused[3]; @@ -202,99 +219,111 @@ typedef struct { } output_features; /* vcgn udp inside input, only valid there */ - struct { + struct + { /* This part forms context of the packet. The structure should be - * exactly same as spp_ctx_t. Also this should be the first + * exactly same as spp_ctx_t. Also this should be the first * element of this vcgn_uii structure. */ /****** BEGIN spp_ctx_t section ***********************/ - union { /* Roddick specific */ - u32 roddick_info; - struct _tx_pkt_info { /* Used by PI to PI communication for TX */ - u32 uidb_index:16; /* uidb_index to transmit */ - u32 packet_type:2; /* 1-IPv4, 2-Ipv6, - 0,3 - Unused */ - u32 ipv4_defrag:1; /* 0 - Normal, 1 - update first - * segment size - * (set by 6rd defrag node) - */ - - u32 dst_ip_port_idx:4;/* Index to dst_ip_port_table */ - u32 from_node:4; - u32 calc_chksum:1; - u32 reserved:4; - } tx; - struct _rx_pkt_info { /* Used by PD / PI communication */ - u32 uidb_index:16; /* uidb_index received in packet */ - u32 packet_type:2; /* 1-IPv4, 2-Ipv6, - 0,3 - Unused */ - u32 icmp_type:1; /* 0-ICMP query type, 1-ICMP error type */ - u32 protocol_type:2; /* 1-TCP, 2-UDP, 3-ICMP, 0 - Unused */ - u32 ipv4_defrag:1; /* 0 - Normal, 1 - update first - * segment size - * (set by 6rd defrag node) - */ - - u32 direction:1; /* 0-Outside, 1-Inside */ - u32 frag:1; /*IP fragment-1, Otherwise-0*/ - u32 option:1; /* 0-No IP option (v4) present, non-fragHdr - * option hdr present (v6) - */ - u32 df_bit:1; /* IPv4 DF bit copied here */ - u32 reserved1:6; - } rx; + union + { /* Roddick specific */ + u32 roddick_info; + struct _tx_pkt_info + { /* Used by PI to PI communication for TX */ + u32 uidb_index:16; /* uidb_index to transmit */ + u32 packet_type:2; /* 1-IPv4, 2-Ipv6, - 0,3 - Unused */ + u32 ipv4_defrag:1; /* 0 - Normal, 1 - update first + * segment size + * (set by 6rd defrag node) + */ + + u32 dst_ip_port_idx:4; /* Index to dst_ip_port_table */ + u32 from_node:4; + u32 calc_chksum:1; + u32 reserved:4; + } tx; + struct _rx_pkt_info + { /* Used by PD / PI communication */ + u32 uidb_index:16; /* uidb_index received in packet */ + u32 packet_type:2; /* 1-IPv4, 2-Ipv6, - 0,3 - Unused */ + u32 icmp_type:1; /* 0-ICMP query type, 1-ICMP error type */ + u32 protocol_type:2; /* 1-TCP, 2-UDP, 3-ICMP, 0 - Unused */ + u32 ipv4_defrag:1; /* 0 - Normal, 1 - update first + * segment size + * (set by 6rd defrag node) + */ + + u32 direction:1; /* 0-Outside, 1-Inside */ + u32 frag:1; /*IP fragment-1, Otherwise-0 */ + u32 option:1; /* 0-No IP option (v4) present, non-fragHdr + * option hdr present (v6) + */ + u32 df_bit:1; /* IPv4 DF bit copied here */ + u32 reserved1:6; + } rx; } ru; /****** END spp_ctx_t section ***********************/ - union { - struct { - u32 ipv4; - u16 port; - u16 vrf; //bit0-13:i/f, bit14-15:protocol - } k; + union + { + struct + { + u32 ipv4; + u16 port; + u16 vrf; //bit0-13:i/f, bit14-15:protocol + } k; - u64 key64; + u64 key64; } key; u32 bucket; - u16 ovrf; /* Exit interface */ + u16 ovrf; /* Exit interface */ u8 frag_pkt; u8 vcgn_unused1; } vcgn_uii; /* MAP */ - struct { + struct + { u16 mtu; } map; /* MAP-T */ - struct { + struct + { u32 map_domain_index; - struct { - u32 saddr, daddr; - u16 frag_offset; //Fragmentation header offset - u16 l4_offset; //L4 header overall offset - u8 l4_protocol; //The final protocol number - } v6; //Used by ip6_map_t only - u16 checksum_offset; //L4 checksum overall offset - u16 mtu; //Exit MTU + struct + { + u32 saddr, daddr; + u16 frag_offset; //Fragmentation header offset + u16 l4_offset; //L4 header overall offset + u8 l4_protocol; //The final protocol number + } v6; //Used by ip6_map_t only + u16 checksum_offset; //L4 checksum overall offset + u16 mtu; //Exit MTU } map_t; /* IP Fragmentation */ - struct { + struct + { u16 header_offset; u16 mtu; u8 next_index; - u8 flags; //See ip_frag.h + u8 flags; //See ip_frag.h } ip_frag; /* COP - configurable junk filter(s) */ - struct { - /* Current configuration index. */ - u32 current_config_index; + struct + { + /* Current configuration index. */ + u32 current_config_index; } cop; /* LISP */ - struct { + struct + { /* overlay address family */ u16 overlay_afi; } lisp; @@ -306,11 +335,21 @@ typedef struct { #define vnet_buffer(b) ((vnet_buffer_opaque_t *) (b)->opaque) /* Full cache line (64 bytes) of additional space */ -typedef struct { - union { +typedef struct +{ + union + { }; } vnet_buffer_opaque2_t; #endif /* included_vnet_buffer_h */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |