From b858c9ed3c9cafa03f9ef1486eaf0cae31ba0d59 Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Thu, 20 Sep 2018 07:42:12 +0000 Subject: [PATCH 1/2] Allow setting flow-label in ingress packets --- src/apps/lwaftr/lwaftr.lua | 7 ++++--- src/lib/yang/snabb-softwire-v2.yang | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/apps/lwaftr/lwaftr.lua b/src/apps/lwaftr/lwaftr.lua index aaca39de54..cf7af8fd51 100644 --- a/src/apps/lwaftr/lwaftr.lua +++ b/src/apps/lwaftr/lwaftr.lua @@ -217,12 +217,12 @@ local function prepend_ethernet_header(pkt, ether_type) return pkt end -local function write_ipv6_header(ptr, src, dst, tc, next_header, payload_length) +local function write_ipv6_header(ptr, src, dst, tc, flow_label, next_header, payload_length) local h = ffi.cast(ipv6_header_ptr_t, ptr) h.v_tc_fl = 0 lib.bitfield(32, h, 'v_tc_fl', 0, 4, 6) -- IPv6 Version lib.bitfield(32, h, 'v_tc_fl', 4, 8, tc) -- Traffic class - lib.bitfield(32, h, 'v_tc_fl', 12, 20, 0) -- Flow label + lib.bitfield(32, h, 'v_tc_fl', 12, 20, flow_label) -- Flow label h.payload_length = htons(payload_length) h.next_header = next_header h.hop_limit = constants.default_ttl @@ -740,6 +740,7 @@ function LwAftr:encapsulate_and_transmit(pkt, ipv6_dst, ipv6_src, pkt_src_link) local payload_length = get_ethernet_payload_length(pkt) local l3_header = get_ethernet_payload(pkt) local traffic_class = get_ipv4_dscp_and_ecn(l3_header) + local flow_label = self.conf.internal_interface.flow_label -- Note that this may invalidate any pointer into pkt.data. Be warned! pkt = packet.shiftright(pkt, ipv6_header_size) write_ethernet_header(pkt, n_ethertype_ipv6) @@ -747,7 +748,7 @@ function LwAftr:encapsulate_and_transmit(pkt, ipv6_dst, ipv6_src, pkt_src_link) l3_header = get_ethernet_payload(pkt) write_ipv6_header(l3_header, ipv6_src, ipv6_dst, traffic_class, - proto_ipv4, payload_length) + flow_label, proto_ipv4, payload_length) if debug then print("encapsulated packet:") diff --git a/src/lib/yang/snabb-softwire-v2.yang b/src/lib/yang/snabb-softwire-v2.yang index b82bccea3b..f1f1226a21 100644 --- a/src/lib/yang/snabb-softwire-v2.yang +++ b/src/lib/yang/snabb-softwire-v2.yang @@ -723,6 +723,12 @@ module snabb-softwire-v2 { "Maximum packet size to recieve on the IPv6 interface."; } + leaf flow-label { + type uint32; + description + "IPv6 flow label"; + } + uses traffic-filters; uses icmp-policy; uses vlan-tagging; From 14690f2f6dad32d0b5f630bc1c91daf53741d11b Mon Sep 17 00:00:00 2001 From: Diego Pino Garcia Date: Sat, 13 Oct 2018 05:11:09 +0000 Subject: [PATCH 2/2] Make flow-label YANG leaf default to 0 --- src/lib/yang/snabb-softwire-v2.yang | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/yang/snabb-softwire-v2.yang b/src/lib/yang/snabb-softwire-v2.yang index f1f1226a21..5341b4c3d2 100644 --- a/src/lib/yang/snabb-softwire-v2.yang +++ b/src/lib/yang/snabb-softwire-v2.yang @@ -725,6 +725,7 @@ module snabb-softwire-v2 { leaf flow-label { type uint32; + default 0; description "IPv6 flow label"; }