aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/ip/ip6_hop_by_hop.c
diff options
context:
space:
mode:
authorOle Troan <ot@cisco.com>2016-06-14 21:12:32 +0200
committerDave Barach <openvpp@barachs.net>2016-06-16 18:05:51 +0000
commitf0f852251c885fc5f73125a4365cf356feeb0cdd (patch)
tree27174d12213ccc53fb9bf2a85b9643eb93e5d7df /vnet/vnet/ip/ip6_hop_by_hop.c
parent81f7092d34d9ce2c674fb0ff7683188231d1b773 (diff)
VPP-19: Split the lookup.h IP_LOOKUP_NEXT enum.
IP4 and IP6 nodes currently shares the adj->lookup_next_index. That has some issues, e.g. that one has to add non-functional nodes like ip4-hop-by-hop and that anyone dynamically adding nodes to any of the IP4/IP6 lookup nodes must ensure they add themselves to all relevant nodes to ensure next index consistency. This patch splits the IP_LOOKUP_NEXT into separate enums for IP4 and IP6 with a common part for next-nodes used by both. It sets up other IP nodes as siblings to avoid inconsistencies. This allows IP4 and IP6 lookup next nodes to evolve independently. The adj->lookup_next_index is still shared, assuming that an IP4 adjacency isn't used by an IP6 graph node. Change-Id: I589b8364fe54e7a10c059b7ef9d6707eb0a345cc Signed-off-by: Ole Troan <ot@cisco.com>
Diffstat (limited to 'vnet/vnet/ip/ip6_hop_by_hop.c')
-rw-r--r--vnet/vnet/ip/ip6_hop_by_hop.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/vnet/vnet/ip/ip6_hop_by_hop.c b/vnet/vnet/ip/ip6_hop_by_hop.c
index 1cc6b9f8b05..df0dae5786a 100644
--- a/vnet/vnet/ip/ip6_hop_by_hop.c
+++ b/vnet/vnet/ip/ip6_hop_by_hop.c
@@ -798,13 +798,12 @@ VLIB_REGISTER_NODE (ip6_pop_hop_by_hop_node) = {
.vector_size = sizeof (u32),
.format_trace = format_ip6_pop_hop_by_hop_trace,
.type = VLIB_NODE_TYPE_INTERNAL,
-
+ .sibling_of = "ip6-lookup",
.n_errors = ARRAY_LEN(ip6_pop_hop_by_hop_error_strings),
.error_strings = ip6_pop_hop_by_hop_error_strings,
/* See ip/lookup.h */
- .n_next_nodes = IP_LOOKUP_N_NEXT,
- .next_nodes = IP6_LOOKUP_NEXT_NODES,
+ .n_next_nodes = 0,
};
VLIB_NODE_FUNCTION_MULTIARCH (ip6_pop_hop_by_hop_node,
@@ -1148,10 +1147,10 @@ int ip6_ioam_set_destination (ip6_address_t *addr, u32 mask_width, u32 vrf_id,
adj->saved_lookup_next_index = adj->lookup_next_index;
if (is_add)
- adj->lookup_next_index = IP_LOOKUP_NEXT_ADD_HOP_BY_HOP;
+ adj->lookup_next_index = IP6_LOOKUP_NEXT_ADD_HOP_BY_HOP;
if (is_pop)
- adj->lookup_next_index = IP_LOOKUP_NEXT_POP_HOP_BY_HOP;
+ adj->lookup_next_index = IP6_LOOKUP_NEXT_POP_HOP_BY_HOP;
hm->adj = *addr;
hm->ioam_flag = (is_add ? IOAM_HBYH_ADD :