Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
ADJ: init MTU to interface default
[vpp.git]
/
src
/
vnet
/
adj
/
adj_nbr.c
diff --git
a/src/vnet/adj/adj_nbr.c
b/src/vnet/adj/adj_nbr.c
index
29cd812
..
2fced18
100644
(file)
--- a/
src/vnet/adj/adj_nbr.c
+++ b/
src/vnet/adj/adj_nbr.c
@@
-59,7
+59,7
@@
adj_nbr_insert (fib_protocol_t nh_proto,
adj_nbr_tables[nh_proto][sw_if_index] =
clib_mem_alloc_aligned(sizeof(BVT(clib_bihash)),
CLIB_CACHE_LINE_BYTES);
adj_nbr_tables[nh_proto][sw_if_index] =
clib_mem_alloc_aligned(sizeof(BVT(clib_bihash)),
CLIB_CACHE_LINE_BYTES);
- memset(adj_nbr_tables[nh_proto][sw_if_index],
+
clib_
memset(adj_nbr_tables[nh_proto][sw_if_index],
0,
sizeof(BVT(clib_bihash)));
0,
sizeof(BVT(clib_bihash)));
@@
-93,7
+93,7
@@
adj_nbr_remove (adj_index_t ai,
BV(clib_bihash_add_del) (adj_nbr_tables[nh_proto][sw_if_index], &kv, 0);
}
BV(clib_bihash_add_del) (adj_nbr_tables[nh_proto][sw_if_index], &kv, 0);
}
-
static
adj_index_t
+adj_index_t
adj_nbr_find (fib_protocol_t nh_proto,
vnet_link_t link_type,
const ip46_address_t *nh_addr,
adj_nbr_find (fib_protocol_t nh_proto,
vnet_link_t link_type,
const ip46_address_t *nh_addr,
@@
-195,6
+195,8
@@
adj_nbr_alloc (fib_protocol_t nh_proto,
adj->ia_link = link_type;
adj->ia_nh_proto = nh_proto;
adj->rewrite_header.sw_if_index = sw_if_index;
adj->ia_link = link_type;
adj->ia_nh_proto = nh_proto;
adj->rewrite_header.sw_if_index = sw_if_index;
+ vnet_rewrite_update_mtu(vnet_get_main(), adj->ia_link,
+ &adj->rewrite_header);
adj_nbr_evaluate_feature (adj_get_index(adj));
return (adj);
adj_nbr_evaluate_feature (adj_get_index(adj));
return (adj);
@@
-230,7
+232,12
@@
adj_nbr_add_or_lock (fib_protocol_t nh_proto,
adj_index = adj_get_index(adj);
adj_lock(adj_index);
adj_index = adj_get_index(adj);
adj_lock(adj_index);
- vnet_rewrite_init(vnm, sw_if_index,
+ if (ip46_address_is_equal(&ADJ_BCAST_ADDR, nh_addr))
+ {
+ adj->lookup_next_index = IP_LOOKUP_NEXT_BCAST;
+ }
+
+ vnet_rewrite_init(vnm, sw_if_index, link_type,
adj_get_nd_node(nh_proto),
vnet_tx_node_index_for_sw_interface(vnm, sw_if_index),
&adj->rewrite_header);
adj_get_nd_node(nh_proto),
vnet_tx_node_index_for_sw_interface(vnm, sw_if_index),
&adj->rewrite_header);
@@
-694,7
+701,6
@@
adj_nbr_interface_state_change_one (adj_index_t ai,
* since this is the walk that provides convergence
*/
adj_nbr_interface_state_change_ctx_t *ctx = arg;
* since this is the walk that provides convergence
*/
adj_nbr_interface_state_change_ctx_t *ctx = arg;
-
fib_node_back_walk_ctx_t bw_ctx = {
.fnbw_reason = ((ctx->flags & ADJ_NBR_INTERFACE_UP) ?
FIB_NODE_BW_REASON_FLAG_INTERFACE_UP :
fib_node_back_walk_ctx_t bw_ctx = {
.fnbw_reason = ((ctx->flags & ADJ_NBR_INTERFACE_UP) ?
FIB_NODE_BW_REASON_FLAG_INTERFACE_UP :
@@
-706,10
+712,15
@@
adj_nbr_interface_state_change_one (adj_index_t ai,
*/
.fnbw_flags = (!(ctx->flags & ADJ_NBR_INTERFACE_UP) ?
FIB_NODE_BW_FLAG_FORCE_SYNC :
*/
.fnbw_flags = (!(ctx->flags & ADJ_NBR_INTERFACE_UP) ?
FIB_NODE_BW_FLAG_FORCE_SYNC :
-
0
),
+
FIB_NODE_BW_FLAG_NONE
),
};
};
+ ip_adjacency_t *adj;
+ adj = adj_get(ai);
+
+ adj->ia_flags |= ADJ_FLAG_SYNC_WALK_ACTIVE;
fib_walk_sync(FIB_NODE_TYPE_ADJ, ai, &bw_ctx);
fib_walk_sync(FIB_NODE_TYPE_ADJ, ai, &bw_ctx);
+ adj->ia_flags &= ~ADJ_FLAG_SYNC_WALK_ACTIVE;
return (ADJ_WALK_RC_CONTINUE);
}
return (ADJ_WALK_RC_CONTINUE);
}
@@
-751,7
+762,7
@@
VNET_SW_INTERFACE_ADMIN_UP_DOWN_FUNCTION_PRIO(
* @brief Invoked on each SW interface of a HW interface when the
* HW interface state changes
*/
* @brief Invoked on each SW interface of a HW interface when the
* HW interface state changes
*/
-static
void
+static
walk_rc_t
adj_nbr_hw_sw_interface_state_change (vnet_main_t * vnm,
u32 sw_if_index,
void *arg)
adj_nbr_hw_sw_interface_state_change (vnet_main_t * vnm,
u32 sw_if_index,
void *arg)
@@
-768,6
+779,7
@@
adj_nbr_hw_sw_interface_state_change (vnet_main_t * vnm,
adj_nbr_interface_state_change_one,
ctx);
}
adj_nbr_interface_state_change_one,
ctx);
}
+ return (WALK_CONTINUE);
}
/**
}
/**
@@
-809,8
+821,13
@@
adj_nbr_interface_delete_one (adj_index_t ai,
fib_node_back_walk_ctx_t bw_ctx = {
.fnbw_reason = FIB_NODE_BW_REASON_FLAG_INTERFACE_DELETE,
};
fib_node_back_walk_ctx_t bw_ctx = {
.fnbw_reason = FIB_NODE_BW_REASON_FLAG_INTERFACE_DELETE,
};
+ ip_adjacency_t *adj;
+
+ adj = adj_get(ai);
+ adj->ia_flags |= ADJ_FLAG_SYNC_WALK_ACTIVE;
fib_walk_sync(FIB_NODE_TYPE_ADJ, ai, &bw_ctx);
fib_walk_sync(FIB_NODE_TYPE_ADJ, ai, &bw_ctx);
+ adj->ia_flags &= ~ADJ_FLAG_SYNC_WALK_ACTIVE;
return (ADJ_WALK_RC_CONTINUE);
}
return (ADJ_WALK_RC_CONTINUE);
}