diff options
Diffstat (limited to 'src/vnet/ip/ip6_packet.h')
-rw-r--r-- | src/vnet/ip/ip6_packet.h | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/src/vnet/ip/ip6_packet.h b/src/vnet/ip/ip6_packet.h index 1be2ceae5a1..7a8c31cee48 100644 --- a/src/vnet/ip/ip6_packet.h +++ b/src/vnet/ip/ip6_packet.h @@ -343,13 +343,6 @@ ip6_ecn_network_order (const ip6_header_t * ip6) & IP6_PACKET_ECN_MASK) >> 20; } -static_always_inline u32 -ip6_flow_label_network_order (const ip6_header_t *ip6) -{ - return (clib_net_to_host_u32 (ip6->ip_version_traffic_class_and_flow_label) & - IP6_PACKET_FL_MASK); -} - static_always_inline void ip6_set_traffic_class_network_order (ip6_header_t * ip6, ip_dscp_t dscp) { @@ -376,10 +369,40 @@ ip6_set_ecn_network_order (ip6_header_t * ip6, ip_ecn_t ecn) u32 tmp = clib_net_to_host_u32 (ip6->ip_version_traffic_class_and_flow_label); tmp &= 0xffcfffff; - tmp |= (ecn << 20); + tmp |= ((0x3 & ecn) << 20); ip6->ip_version_traffic_class_and_flow_label = clib_host_to_net_u32 (tmp); } +static_always_inline u32 +ip6_flow_label_network_order (const ip6_header_t *ip6) +{ + u32 tmp = + clib_net_to_host_u32 (ip6->ip_version_traffic_class_and_flow_label); + return (tmp & 0xfffff); +} + +static_always_inline void +ip6_set_flow_label_network_order (ip6_header_t *ip6, u32 flow_label) +{ + u32 tmp = + clib_net_to_host_u32 (ip6->ip_version_traffic_class_and_flow_label); + tmp &= 0xfff00000; + tmp |= flow_label & 0x000fffff; + ip6->ip_version_traffic_class_and_flow_label = clib_host_to_net_u32 (tmp); +} + +static_always_inline u32 +ip6_hop_limit_network_order (const ip6_header_t *ip6) +{ + return (ip6->hop_limit); +} + +static_always_inline void +ip6_set_hop_limit_network_order (ip6_header_t *ip6, u8 hop_limit) +{ + ip6->hop_limit = hop_limit; +} + always_inline void * ip6_next_header (ip6_header_t * i) { |