ip6_header_t * ip6, void *arg)
{
icmp_to_icmp6_ctx_t *ctx = arg;
+ ip4_address_t old_src, old_dst;
+
+ old_src.as_u32 = ip4->src_address.as_u32;
+ old_dst.as_u32 = ip4->dst_address.as_u32;
//Note that the source address is within the domain
//while the destination address is the one outside the domain
- ip4_map_t_embedded_address (ctx->d, &ip6->dst_address, &ip4->dst_address);
+ ip4_map_t_embedded_address (ctx->d, &ip6->dst_address, &old_dst);
ip6->src_address.as_u64[0] =
- map_get_pfx_net (ctx->d, ip4->src_address.as_u32, ctx->recv_port);
+ map_get_pfx_net (ctx->d, old_src.as_u32, ctx->recv_port);
ip6->src_address.as_u64[1] =
- map_get_sfx_net (ctx->d, ip4->src_address.as_u32, ctx->recv_port);
+ map_get_sfx_net (ctx->d, old_src.as_u32, ctx->recv_port);
return 0;
}
vnet_buffer (p0)->map_t.map_domain_index);
ip40 = vlib_buffer_get_current (p0);
- ctx0.recv_port = ip4_get_port (ip40, 1);
+ ctx0.recv_port = ip4_get_port (ip40, 0);
ctx0.d = d0;
if (ctx0.recv_port == 0)
{
return frame->n_vectors;
}
-static char *map_t_error_strings[] = {
-#define _(sym,string) string,
- foreach_map_error
-#undef _
-};
-
/* *INDENT-OFF* */
VNET_FEATURE_INIT (ip4_map_t_feature, static) = {
.arc_name = "ip4-unicast",
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = MAP_N_ERROR,
- .error_strings = map_t_error_strings,
+ .error_counters = map_error_counters,
.n_next_nodes = IP4_MAPT_FRAGMENTED_N_NEXT,
.next_nodes = {
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = MAP_N_ERROR,
- .error_strings = map_t_error_strings,
+ .error_counters = map_error_counters,
.n_next_nodes = IP4_MAPT_ICMP_N_NEXT,
.next_nodes = {
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = MAP_N_ERROR,
- .error_strings = map_t_error_strings,
+ .error_counters = map_error_counters,
.n_next_nodes = IP4_MAPT_TCP_UDP_N_NEXT,
.next_nodes = {
.type = VLIB_NODE_TYPE_INTERNAL,
.n_errors = MAP_N_ERROR,
- .error_strings = map_t_error_strings,
+ .error_counters = map_error_counters,
.n_next_nodes = IP4_MAPT_N_NEXT,
.next_nodes = {