ADJ: init MTU to interface default
[vpp.git] / src / vnet / adj / adj_nbr.c
index 3a474a8..2fced18 100644 (file)
@@ -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);
-       memset(adj_nbr_tables[nh_proto][sw_if_index],
+       clib_memset(adj_nbr_tables[nh_proto][sw_if_index],
               0,
               sizeof(BVT(clib_bihash)));
 
@@ -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;
+    vnet_rewrite_update_mtu(vnet_get_main(), adj->ia_link,
+                            &adj->rewrite_header);
 
     adj_nbr_evaluate_feature (adj_get_index(adj));
     return (adj);
@@ -699,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;
-
     fib_node_back_walk_ctx_t bw_ctx = {
        .fnbw_reason = ((ctx->flags & ADJ_NBR_INTERFACE_UP) ?
                         FIB_NODE_BW_REASON_FLAG_INTERFACE_UP :
@@ -711,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 :
-                       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);
+    adj->ia_flags &= ~ADJ_FLAG_SYNC_WALK_ACTIVE;
 
     return (ADJ_WALK_RC_CONTINUE);
 }
@@ -815,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,
     };
+    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);
+    adj->ia_flags &= ~ADJ_FLAG_SYNC_WALK_ACTIVE;
 
     return (ADJ_WALK_RC_CONTINUE);
 }