From a91cb45909642978592c7e21a8f6d2da2e44e506 Mon Sep 17 00:00:00 2001 From: Neale Ranns Date: Thu, 4 Feb 2021 11:02:52 +0000 Subject: tunnel: support copying TTL and flow label from inner to outer Type: feature The added functionality is to support copying TTL and flow label from inner to outer. The .api was extened to support expressing this and also adding a common tunnel endpoint type. i find it best to make API changes in one patch so there are less versions of the API. Signed-off-by: Neale Ranns Change-Id: I755c1e3f4c475058792af39c1abeda92129efb76 --- src/vnet/ip/ip6_packet.h | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'src/vnet/ip/ip6_packet.h') 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) { -- cgit 1.2.3-korg