X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_frag.c;h=de0998779a847f98d2a26f820a22dd5b5278da32;hb=64fb99568fd4a38d0696cd1d6a0cafb3d5203c3e;hp=8de4dfc5d58ff5fc092064273512bd44996c80c2;hpb=68b7cb8febb2ad7123f165f9db10d3ffc3b409fe;p=vpp.git diff --git a/src/vnet/ip/ip_frag.c b/src/vnet/ip/ip_frag.c index 8de4dfc5d58..de0998779a8 100644 --- a/src/vnet/ip/ip_frag.c +++ b/src/vnet/ip/ip_frag.c @@ -61,6 +61,13 @@ frag_set_sw_if_index (vlib_buffer_t * to, vlib_buffer_t * from) vnet_buffer (from)->ip.adj_index[VLIB_RX]; vnet_buffer (to)->ip.adj_index[VLIB_TX] = vnet_buffer (from)->ip.adj_index[VLIB_TX]; + + /* Copy QoS Bits */ + if (PREDICT_TRUE (from->flags & VNET_BUFFER_F_QOS_DATA_VALID)) + { + vnet_buffer2 (to)->qos = vnet_buffer2 (from)->qos; + to->flags |= VNET_BUFFER_F_QOS_DATA_VALID; + } } static vlib_buffer_t * @@ -165,7 +172,7 @@ ip4_frag_do_fragment (vlib_main_t * vm, u32 from_bi, u32 ** buffer, frag_set_sw_if_index (to_b, org_from_b); /* Copy ip4 header */ - clib_memcpy (to_b->data, org_from_packet, sizeof (ip4_header_t)); + clib_memcpy_fast (to_b->data, org_from_packet, sizeof (ip4_header_t)); to_ip4 = vlib_buffer_get_current (to_b); to_data = (void *) (to_ip4 + 1); @@ -178,7 +185,7 @@ ip4_frag_do_fragment (vlib_main_t * vm, u32 from_bi, u32 ** buffer, /* Figure out how many bytes we can safely copy */ bytes_to_copy = left_in_to_buffer <= left_in_from_buffer ? left_in_to_buffer : left_in_from_buffer; - clib_memcpy (to_data + to_ptr, from_data + ptr, bytes_to_copy); + clib_memcpy_fast (to_data + to_ptr, from_data + ptr, bytes_to_copy); left_in_to_buffer -= bytes_to_copy; ptr += bytes_to_copy; left_in_from_buffer -= bytes_to_copy; @@ -441,7 +448,7 @@ ip6_frag_do_fragment (vlib_main_t * vm, u32 from_bi, u32 ** buffer, frag_set_sw_if_index (to_b, org_from_b); /* Copy ip6 header */ - clib_memcpy (to_b->data, ip6, sizeof (ip6_header_t)); + clib_memcpy_fast (to_b->data, ip6, sizeof (ip6_header_t)); to_ip6 = vlib_buffer_get_current (to_b); to_frag_hdr = (ip6_frag_hdr_t *) (to_ip6 + 1); to_data = (void *) (to_frag_hdr + 1); @@ -455,7 +462,7 @@ ip6_frag_do_fragment (vlib_main_t * vm, u32 from_bi, u32 ** buffer, /* Figure out how many bytes we can safely copy */ bytes_to_copy = left_in_to_buffer <= left_in_from_buffer ? left_in_to_buffer : left_in_from_buffer; - clib_memcpy (to_data + to_ptr, from_data + ptr, bytes_to_copy); + clib_memcpy_fast (to_data + to_ptr, from_data + ptr, bytes_to_copy); left_in_to_buffer -= bytes_to_copy; ptr += bytes_to_copy; left_in_from_buffer -= bytes_to_copy;