diff options
author | Jon Loeliger <jdl@netgate.com> | 2018-12-20 11:47:30 -0600 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2018-12-21 17:06:40 +0000 |
commit | fc7344f9beffe506085730e8e03f7c8771deb3a6 (patch) | |
tree | c4c6cb47f30e3bc4ea0b884c31a2f8af0777abde /src/plugins/map/ip4_map.c | |
parent | a45dc07c153c4dd350b02fd30de471bbdb838ac9 (diff) |
MAP: Convert from DPO to input feature.
Change-Id: I25c86aea23dff19656449b23133db27b1f062ac0
Signed-off-by: Jon Loeliger <jdl@netgate.com>
Signed-off-by: Ole Troan <ot@cisco.com>
Diffstat (limited to 'src/plugins/map/ip4_map.c')
-rw-r--r-- | src/plugins/map/ip4_map.c | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/plugins/map/ip4_map.c b/src/plugins/map/ip4_map.c index 487b9212681..64da602e838 100644 --- a/src/plugins/map/ip4_map.c +++ b/src/plugins/map/ip4_map.c @@ -248,12 +248,12 @@ ip4_map (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) p1 = vlib_get_buffer (vm, pi1); ip40 = vlib_buffer_get_current (p0); ip41 = vlib_buffer_get_current (p1); - map_domain_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX]; - d0 = ip4_map_get_domain (map_domain_index0); - map_domain_index1 = vnet_buffer (p1)->ip.adj_index[VLIB_TX]; - d1 = ip4_map_get_domain (map_domain_index1); - ASSERT (d0); - ASSERT (d1); + d0 = + ip4_map_get_domain (&ip40->dst_address, &map_domain_index0, + &error0); + d1 = + ip4_map_get_domain (&ip41->dst_address, &map_domain_index1, + &error1); /* * Shared IPv4 address @@ -417,9 +417,15 @@ ip4_map (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) p0 = vlib_get_buffer (vm, pi0); ip40 = vlib_buffer_get_current (p0); - map_domain_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX]; - d0 = ip4_map_get_domain (map_domain_index0); - ASSERT (d0); + + d0 = + ip4_map_get_domain (&ip40->dst_address, &map_domain_index0, + &error0); + if (!d0) + { /* Guess it wasn't for us */ + vnet_feature_next (&next0, p0); + goto exit; + } /* * Shared IPv4 address @@ -495,6 +501,7 @@ ip4_map (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) } p0->error = error_node->errors[error0]; + exit: vlib_validate_buffer_enqueue_x1 (vm, node, next_index, to_next, n_left_to_next, pi0, next0); } @@ -537,7 +544,7 @@ ip4_map_reass (vlib_main_t * vm, i32 port0 = 0; ip6_header_t *ip60; u32 next0 = IP4_MAP_REASS_NEXT_IP6_LOOKUP; - u32 map_domain_index0; + u32 map_domain_index0 = ~0; u8 cached = 0; pi0 = to_next[0] = from[0]; @@ -549,8 +556,9 @@ ip4_map_reass (vlib_main_t * vm, p0 = vlib_get_buffer (vm, pi0); ip60 = vlib_buffer_get_current (p0); ip40 = (ip4_header_t *) (ip60 + 1); - map_domain_index0 = vnet_buffer (p0)->ip.adj_index[VLIB_TX]; - d0 = ip4_map_get_domain (map_domain_index0); + d0 = + ip4_map_get_domain (&ip40->dst_address, &map_domain_index0, + &error0); map_ip4_reass_lock (); map_ip4_reass_t *r = map_ip4_reass_get (ip40->src_address.as_u32, @@ -698,7 +706,16 @@ static char *map_error_strings[] = { #undef _ }; + /* *INDENT-OFF* */ +VNET_FEATURE_INIT (ip4_map_feature, static) = +{ + .arc_name = "ip4-unicast", + .node_name = "ip4-map", + .runs_before = + VNET_FEATURES ("ip4-flow-classify"), +}; + VLIB_REGISTER_NODE(ip4_map_node) = { .function = ip4_map, .name = "ip4-map", |