X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fadj%2Frewrite.c;h=5b9ec090087ca48ec8c973ce661e6f02fe8b6db6;hb=2f4586d9b3507243918c11ce99b9d151d5bde7a0;hp=975dc4ab817ff70d907b5ed9b3748cbbdbefcf47;hpb=1bce5a92087fc0caffe7723d2f2de7f1bf296046;p=vpp.git diff --git a/src/vnet/adj/rewrite.c b/src/vnet/adj/rewrite.c index 975dc4ab817..5b9ec090087 100644 --- a/src/vnet/adj/rewrite.c +++ b/src/vnet/adj/rewrite.c @@ -40,28 +40,19 @@ #include #include -void -vnet_rewrite_copy_slow_path (vnet_rewrite_data_t * p0, - vnet_rewrite_data_t * rw0, - word n_left, uword most_likely_size) +u8 * +format_vnet_rewrite_flags (u8 *s, va_list *ap) { - uword n_done = - round_pow2 (most_likely_size, sizeof (rw0[0])) / sizeof (rw0[0]); - - p0 -= n_done; - rw0 -= n_done; + vnet_rewrite_flags_t f = va_arg (*ap, int); - /* As we enter the cleanup loop, p0 and rw0 point to the last chunk written - by the fast path. Hence, the constant 1, which the - vnet_rewrite_copy_one macro renders as p0[-1] = rw0[-1]. */ + if (f & VNET_REWRITE_HAS_FEATURES) + s = format (s, "features "); + if (f & VNET_REWRITE_FIXUP_IP4_O_4) + s = format (s, "fixup-ip4o4 "); + if (f & VNET_REWRITE_FIXUP_FLOW_HASH) + s = format (s, "fixup-flow-hash "); - while (n_left > 0) - { - vnet_rewrite_copy_one (p0, rw0, 1); - p0--; - rw0--; - n_left--; - } + return (s); } u8 * @@ -72,23 +63,24 @@ format_vnet_rewrite (u8 * s, va_list * args) CLIB_UNUSED (u32 indent) = va_arg (*args, u32); vnet_main_t *vnm = vnet_get_main (); + ASSERT (rw->data_bytes <= max_data_bytes); + if (rw->sw_if_index != ~0) { vnet_sw_interface_t *si; - si = vnet_get_sw_interface_safe (vnm, rw->sw_if_index); + si = vnet_get_sw_interface_or_null (vnm, rw->sw_if_index); if (NULL != si) s = format (s, "%U:", format_vnet_sw_interface_name, vnm, si); else s = format (s, "DELETED:%d", rw->sw_if_index); } - s = format (s, " mtu:%d", rw->max_l3_packet_bytes); + s = format (s, " mtu:%d next:%d", rw->max_l3_packet_bytes, rw->next_index); + s = format (s, " flags:[%U]", format_vnet_rewrite_flags, rw->flags); /* Format rewrite string. */ if (rw->data_bytes > 0) - s = format (s, " %U", - format_hex_bytes, - rw->data + max_data_bytes - rw->data_bytes, rw->data_bytes); + s = format (s, " %U", format_hex_bytes, rw->data, rw->data_bytes); return s; } @@ -149,32 +141,6 @@ vnet_rewrite_for_sw_interface (vnet_main_t * vnm, vec_free (rewrite); } -void -vnet_rewrite_for_tunnel (vnet_main_t * vnm, - u32 tx_sw_if_index, - u32 rewrite_node_index, - u32 post_rewrite_node_index, - vnet_rewrite_header_t * rw, - u8 * rewrite_data, u32 rewrite_length) -{ - ip_adjacency_t *adj = 0; - /* - * Installed into vnet_buffer(b)->sw_if_index[VLIB_TX] e.g. - * by ip4_rewrite_inline. If the post-rewrite node injects into - * ipX-forward, this will be interpreted as a FIB number. - */ - rw->sw_if_index = tx_sw_if_index; - rw->next_index = vlib_node_add_next (vnm->vlib_main, rewrite_node_index, - post_rewrite_node_index); - /* we can't know at this point */ - rw->max_l3_packet_bytes = (u16) ~ 0; - - ASSERT (rewrite_length < sizeof (adj->rewrite_data)); - /* Leave room for ethernet + VLAN tag */ - vnet_rewrite_set_data_internal (rw, sizeof (adj->rewrite_data), - rewrite_data, rewrite_length); -} - void serialize_vnet_rewrite (serialize_main_t * m, va_list * va) {