*/
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;
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) \
(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,
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,