Remove c-11 memcpy checks from perf-critical code
[vpp.git] / src / vnet / adj / rewrite.h
index 005ac41..58d47e0 100644 (file)
@@ -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,11 +314,12 @@ 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_rewrite_header_t * rw);
+                             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,