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..5341b4c3d2 100644 --- a/src/lib/yang/snabb-softwire-v2.yang +++ b/src/lib/yang/snabb-softwire-v2.yang @@ -723,6 +723,13 @@ module snabb-softwire-v2 { "Maximum packet size to recieve on the IPv6 interface."; } + leaf flow-label { + type uint32; + default 0; + description + "IPv6 flow label"; + } + uses traffic-filters; uses icmp-policy; uses vlan-tagging;