X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fadj%2Frewrite.h;h=58d47e0c7370689b5e2f2cea14ef0380dda2385d;hb=609e121;hp=1dea72f5ed84b844ea45ac983e9993b312b0e693;hpb=fa5d19829759cef45cc34efe844d9471f5a1fc61;p=vpp.git diff --git a/src/vnet/adj/rewrite.h b/src/vnet/adj/rewrite.h index 1dea72f5ed8..58d47e0c737 100644 --- a/src/vnet/adj/rewrite.h +++ b/src/vnet/adj/rewrite.h @@ -81,10 +81,6 @@ typedef CLIB_PACKED (struct { */ u8 dst_mcast_offset; - /* The mask to apply to the lower 4 bytes of the IP address before ORing - * into the destinaiton MAC address */ - u32 dst_mcast_mask; - /* Rewrite string starting at end and going backwards. */ u8 data[0]; }) vnet_rewrite_header_t; @@ -119,24 +115,24 @@ struct { \ always_inline void vnet_rewrite_clear_data_internal (vnet_rewrite_header_t * rw, int max_size) { - /* Sanity check values carefully for this memset operation */ + /* Sanity check values carefully for this clib_memset operation */ ASSERT ((max_size > 0) && (max_size < VLIB_BUFFER_PRE_DATA_SIZE)); rw->data_bytes = 0; - memset (rw->data, 0xfe, max_size); + clib_memset (rw->data, 0xfe, max_size); } always_inline void vnet_rewrite_set_data_internal (vnet_rewrite_header_t * rw, int max_size, void *data, int data_bytes) { - /* Sanity check values carefully for this memset operation */ + /* Sanity check values carefully for this clib_memset operation */ ASSERT ((max_size > 0) && (max_size < VLIB_BUFFER_PRE_DATA_SIZE)); ASSERT ((data_bytes >= 0) && (data_bytes < max_size)); rw->data_bytes = data_bytes; - clib_memcpy (rw->data + max_size - data_bytes, data, data_bytes); - memset (rw->data, 0xfe, max_size - data_bytes); + clib_memcpy_fast (rw->data + max_size - data_bytes, data, data_bytes); + clib_memset (rw->data, 0xfe, max_size - data_bytes); } #define vnet_rewrite_set_data(rw,data,data_bytes) \ @@ -290,26 +286,19 @@ _vnet_rewrite_two_headers (vnet_rewrite_header_t * h0, (most_likely_size)) always_inline void -_vnet_fixup_one_header (vnet_rewrite_header_t * h0, - u8 * addr, u32 addr_len, u8 * packet0) +vnet_ip_mcast_fixup_header (u32 dst_mcast_mask, + u32 dst_mcast_offset, u32 * addr, u8 * packet0) { - if (PREDICT_TRUE (h0->dst_mcast_mask)) + if (PREDICT_TRUE (0 != dst_mcast_offset)) { /* location to write to in the packet */ - u8 *p0 = packet0 - h0->dst_mcast_offset; + u8 *p0 = packet0 - dst_mcast_offset; u32 *p1 = (u32 *) p0; - /* location to copy from in the L3 dest address */ - u32 *a0 = (u32 *) (addr + addr_len - sizeof (h0->dst_mcast_mask)); - *p1 |= (*a0 & h0->dst_mcast_mask); + *p1 |= (*addr & dst_mcast_mask); } } -#define vnet_fixup_one_header(rw0,addr,p0) \ - _vnet_fixup_one_header (&((rw0).rewrite_header), \ - (u8*)(addr), sizeof((*addr)), \ - (u8*)(p0)) - #define VNET_REWRITE_FOR_SW_INTERFACE_ADDRESS_BROADCAST ((void *) 0) /** Deprecated */ void vnet_rewrite_for_sw_interface (struct vnet_main_t *vnm, @@ -325,9 +314,13 @@ u32 vnet_tx_node_index_for_sw_interface (struct vnet_main_t *vnm, void vnet_rewrite_init (struct vnet_main_t *vnm, u32 sw_if_index, + vnet_link_t linkt, u32 this_node, u32 next_node, vnet_rewrite_header_t * rw); +void vnet_rewrite_update_mtu (struct vnet_main_t *vnm, + vnet_link_t linkt, vnet_rewrite_header_t * rw); + u8 *vnet_build_rewrite_for_sw_interface (struct vnet_main_t *vnm, u32 sw_if_index, vnet_link_t packet_type,