diff options
| -rw-r--r-- | bfdd/ptm_adapter.c | 17 | ||||
| -rw-r--r-- | bgpd/bgp_zebra.c | 61 | ||||
| -rw-r--r-- | doc/developer/zebra.rst | 292 | ||||
| -rw-r--r-- | isisd/isis_nb.c | 4 | ||||
| -rw-r--r-- | isisd/isis_nb.h | 8 | ||||
| -rw-r--r-- | isisd/isis_nb_config.c | 72 | ||||
| -rw-r--r-- | lib/log.c | 1 | ||||
| -rw-r--r-- | lib/zclient.h | 1 | ||||
| -rw-r--r-- | ospfd/ospf_auth.c | 33 | ||||
| -rw-r--r-- | ospfd/ospf_zebra.c | 24 | ||||
| -rw-r--r-- | pbrd/pbr_zebra.c | 24 | ||||
| -rw-r--r-- | pimd/pim_zebra.c | 34 | ||||
| -rw-r--r-- | ripd/rip_interface.c | 25 | ||||
| -rw-r--r-- | ripd/rip_zebra.c | 1 | ||||
| -rw-r--r-- | ripngd/ripng_interface.c | 25 | ||||
| -rw-r--r-- | ripngd/ripng_zebra.c | 1 | ||||
| -rw-r--r-- | ripngd/ripngd.h | 1 | ||||
| -rw-r--r-- | tests/topotests/all_protocol_startup/test_all_protocol_startup.py | 20 | ||||
| -rw-r--r-- | zebra/if_netlink.c | 1 | ||||
| -rw-r--r-- | zebra/interface.c | 2 | ||||
| -rw-r--r-- | zebra/redistribute.c | 12 | ||||
| -rw-r--r-- | zebra/zapi_msg.c | 25 | ||||
| -rw-r--r-- | zebra/zapi_msg.h | 2 | ||||
| -rw-r--r-- | zebra/zebra_dplane.c | 7 | ||||
| -rw-r--r-- | zebra/zebra_dplane.h | 2 | ||||
| -rw-r--r-- | zebra/zebra_nhg.c | 9 | ||||
| -rw-r--r-- | zebra/zebra_pbr.c | 22 |
27 files changed, 81 insertions, 645 deletions
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c index 490bc30d74..9e7ed114ee 100644 --- a/bfdd/ptm_adapter.c +++ b/bfdd/ptm_adapter.c @@ -756,20 +756,6 @@ static int bfd_ifp_destroy(struct interface *ifp) return 0; } -static int bfdd_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t nvrfid; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, &nvrfid); - if (ifp == NULL) - return 0; - - if_update_to_new_vrf(ifp, nvrfid); - - return 0; -} - static void bfdd_sessions_enable_address(struct connected *ifc) { struct bfd_session_observer *bso; @@ -833,9 +819,6 @@ static zclient_handler *const bfd_handlers[] = { */ [ZEBRA_BFD_DEST_REPLAY] = bfdd_replay, - /* Learn about interface VRF. */ - [ZEBRA_INTERFACE_VRF_UPDATE] = bfdd_interface_vrf_update, - /* Learn about new addresses being registered. */ [ZEBRA_INTERFACE_ADDRESS_ADD] = bfdd_interface_address_update, [ZEBRA_INTERFACE_ADDRESS_DELETE] = bfdd_interface_address_update, diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 741542f9ba..a04d54fa92 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -477,66 +477,6 @@ static int bgp_interface_nbr_address_delete(ZAPI_CALLBACK_ARGS) return 0; } -/* VRF update for an interface. */ -static int bgp_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t new_vrf_id; - struct connected *c; - struct nbr_connected *nc; - struct listnode *node, *nnode; - struct bgp *bgp; - struct peer *peer; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - if (!ifp) - return 0; - - if (BGP_DEBUG(zebra, ZEBRA)) - zlog_debug("Rx Intf VRF change VRF %u IF %s NewVRF %u", vrf_id, - ifp->name, new_vrf_id); - - bgp = bgp_lookup_by_vrf_id(vrf_id); - - if (bgp) { - for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, c)) - bgp_connected_delete(bgp, c); - - for (ALL_LIST_ELEMENTS(ifp->nbr_connected, node, nnode, nc)) - bgp_nbr_connected_delete(bgp, nc, 1); - - /* Fast external-failover */ - if (!CHECK_FLAG(bgp->flags, BGP_FLAG_NO_FAST_EXT_FAILOVER)) { - for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) { - if ((peer->ttl != BGP_DEFAULT_TTL) - && (peer->gtsm_hops - != BGP_GTSM_HOPS_CONNECTED)) - continue; - - if (ifp == peer->nexthop.ifp) - BGP_EVENT_ADD(peer->connection, - BGP_Stop); - } - } - } - - if_update_to_new_vrf(ifp, new_vrf_id); - - bgp = bgp_lookup_by_vrf_id(new_vrf_id); - if (!bgp) - return 0; - - for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, c)) - bgp_connected_add(bgp, c); - - for (ALL_LIST_ELEMENTS(ifp->nbr_connected, node, nnode, nc)) - bgp_nbr_connected_add(bgp, nc); - - hook_call(bgp_vrf_status_changed, bgp, ifp); - return 0; -} - /* Zebra route add and delete treatment. */ static int zebra_read_route(ZAPI_CALLBACK_ARGS) { @@ -3401,7 +3341,6 @@ static zclient_handler *const bgp_handlers[] = { [ZEBRA_INTERFACE_ADDRESS_DELETE] = bgp_interface_address_delete, [ZEBRA_INTERFACE_NBR_ADDRESS_ADD] = bgp_interface_nbr_address_add, [ZEBRA_INTERFACE_NBR_ADDRESS_DELETE] = bgp_interface_nbr_address_delete, - [ZEBRA_INTERFACE_VRF_UPDATE] = bgp_interface_vrf_update, [ZEBRA_REDISTRIBUTE_ROUTE_ADD] = zebra_read_route, [ZEBRA_REDISTRIBUTE_ROUTE_DEL] = zebra_read_route, [ZEBRA_NEXTHOP_UPDATE] = bgp_read_nexthop_update, diff --git a/doc/developer/zebra.rst b/doc/developer/zebra.rst index e5f4e07c6c..be2952e71a 100644 --- a/doc/developer/zebra.rst +++ b/doc/developer/zebra.rst @@ -159,297 +159,7 @@ Past Versions Zebra Protocol Commands ----------------------- -+-----------------------------------------+-------+ -| Command | Value | -+=========================================+=======+ -| ZEBRA_INTERFACE_ADD | 0 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_DELETE | 1 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_ADDRESS_ADD | 2 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_ADDRESS_DELETE | 3 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_UP | 4 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_DOWN | 5 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_SET_MASTER | 6 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_SET_PROTODOWN | 7 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTE_ADD | 8 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTE_DELETE | 9 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTE_NOTIFY_OWNER | 10 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_ADD | 11 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_DELETE | 12 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_DEFAULT_ADD | 13 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_DEFAULT_DELETE | 14 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTER_ID_ADD | 15 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTER_ID_DELETE | 16 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTER_ID_UPDATE | 17 | -+-----------------------------------------+-------+ -| ZEBRA_HELLO | 18 | -+-----------------------------------------+-------+ -| ZEBRA_CAPABILITIES | 19 | -+-----------------------------------------+-------+ -| ZEBRA_NEXTHOP_REGISTER | 20 | -+-----------------------------------------+-------+ -| ZEBRA_NEXTHOP_UNREGISTER | 21 | -+-----------------------------------------+-------+ -| ZEBRA_NEXTHOP_UPDATE | 22 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_NBR_ADDRESS_ADD | 23 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_NBR_ADDRESS_DELETE | 24 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_BFD_DEST_UPDATE | 25 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_DEST_REGISTER | 26 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_DEST_DEREGISTER | 27 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_DEST_UPDATE | 28 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_DEST_REPLAY | 29 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_ROUTE_ADD | 30 | -+-----------------------------------------+-------+ -| ZEBRA_REDISTRIBUTE_ROUTE_DEL | 31 | -+-----------------------------------------+-------+ -| ZEBRA_VRF_UNREGISTER | 32 | -+-----------------------------------------+-------+ -| ZEBRA_VRF_ADD | 33 | -+-----------------------------------------+-------+ -| ZEBRA_VRF_DELETE | 34 | -+-----------------------------------------+-------+ -| ZEBRA_VRF_LABEL | 35 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_VRF_UPDATE | 36 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_CLIENT_REGISTER | 37 | -+-----------------------------------------+-------+ -| ZEBRA_BFD_CLIENT_DEREGISTER | 38 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_ENABLE_RADV | 39 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_DISABLE_RADV | 40 | -+-----------------------------------------+-------+ -| ZEBRA_NEXTHOP_LOOKUP_MRIB | 41 | -+-----------------------------------------+-------+ -| ZEBRA_INTERFACE_LINK_PARAMS | 42 | -+-----------------------------------------+-------+ -| ZEBRA_MPLS_LABELS_ADD | 43 | -+-----------------------------------------+-------+ -| ZEBRA_MPLS_LABELS_DELETE | 44 | -+-----------------------------------------+-------+ -| ZEBRA_MPLS_LABELS_REPLACE | 45 | -+-----------------------------------------+-------+ -| ZEBRA_SR_POLICY_SET | 46 | -+-----------------------------------------+-------+ -| ZEBRA_SR_POLICY_DELETE | 47 | -+-----------------------------------------+-------+ -| ZEBRA_SR_POLICY_NOTIFY_STATUS | 48 | -+-----------------------------------------+-------+ -| ZEBRA_IPMR_ROUTE_STATS | 49 | -+-----------------------------------------+-------+ -| ZEBRA_LABEL_MANAGER_CONNECT | 50 | -+-----------------------------------------+-------+ -| ZEBRA_LABEL_MANAGER_CONNECT_ASYNC | 51 | -+-----------------------------------------+-------+ -| ZEBRA_GET_LABEL_CHUNK | 52 | -+-----------------------------------------+-------+ -| ZEBRA_RELEASE_LABEL_CHUNK | 53 | -+-----------------------------------------+-------+ -| ZEBRA_FEC_REGISTER | 54 | -+-----------------------------------------+-------+ -| ZEBRA_FEC_UNREGISTER | 55 | -+-----------------------------------------+-------+ -| ZEBRA_FEC_UPDATE | 56 | -+-----------------------------------------+-------+ -| ZEBRA_ADVERTISE_DEFAULT_GW | 57 | -+-----------------------------------------+-------+ -| ZEBRA_ADVERTISE_SVI_MACIP | 58 | -+-----------------------------------------+-------+ -| ZEBRA_ADVERTISE_SUBNET | 59 | -+-----------------------------------------+-------+ -| ZEBRA_ADVERTISE_ALL_VNI | 60 | -+-----------------------------------------+-------+ -| ZEBRA_LOCAL_ES_ADD | 61 | -+-----------------------------------------+-------+ -| ZEBRA_LOCAL_ES_DEL | 62 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_ES_VTEP_ADD | 63 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_ES_VTEP_DEL | 64 | -+-----------------------------------------+-------+ -| ZEBRA_LOCAL_ES_EVI_ADD | 65 | -+-----------------------------------------+-------+ -| ZEBRA_LOCAL_ES_EVI_DEL | 66 | -+-----------------------------------------+-------+ -| ZEBRA_VNI_ADD | 67 | -+-----------------------------------------+-------+ -| ZEBRA_VNI_DEL | 68 | -+-----------------------------------------+-------+ -| ZEBRA_L3VNI_ADD | 69 | -+-----------------------------------------+-------+ -| ZEBRA_L3VNI_DEL | 70 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_VTEP_ADD | 71 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_VTEP_DEL | 72 | -+-----------------------------------------+-------+ -| ZEBRA_MACIP_ADD | 73 | -+-----------------------------------------+-------+ -| ZEBRA_MACIP_DEL | 74 | -+-----------------------------------------+-------+ -| ZEBRA_IP_PREFIX_ROUTE_ADD | 75 | -+-----------------------------------------+-------+ -| ZEBRA_IP_PREFIX_ROUTE_DEL | 76 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_MACIP_ADD | 77 | -+-----------------------------------------+-------+ -| ZEBRA_REMOTE_MACIP_DEL | 78 | -+-----------------------------------------+-------+ -| ZEBRA_DUPLICATE_ADDR_DETECTION | 79 | -+-----------------------------------------+-------+ -| ZEBRA_PW_ADD | 80 | -+-----------------------------------------+-------+ -| ZEBRA_PW_DELETE | 81 | -+-----------------------------------------+-------+ -| ZEBRA_PW_SET | 82 | -+-----------------------------------------+-------+ -| ZEBRA_PW_UNSET | 83 | -+-----------------------------------------+-------+ -| ZEBRA_PW_STATUS_UPDATE | 84 | -+-----------------------------------------+-------+ -| ZEBRA_RULE_ADD | 85 | -+-----------------------------------------+-------+ -| ZEBRA_RULE_DELETE | 86 | -+-----------------------------------------+-------+ -| ZEBRA_RULE_NOTIFY_OWNER | 87 | -+-----------------------------------------+-------+ -| ZEBRA_TABLE_MANAGER_CONNECT | 88 | -+-----------------------------------------+-------+ -| ZEBRA_GET_TABLE_CHUNK | 89 | -+-----------------------------------------+-------+ -| ZEBRA_RELEASE_TABLE_CHUNK | 90 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_CREATE | 91 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_DESTROY | 92 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_ENTRY_ADD | 93 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_ENTRY_DELETE | 94 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_NOTIFY_OWNER | 95 | -+-----------------------------------------+-------+ -| ZEBRA_IPSET_ENTRY_NOTIFY_OWNER | 96 | -+-----------------------------------------+-------+ -| ZEBRA_IPTABLE_ADD | 97 | -+-----------------------------------------+-------+ -| ZEBRA_IPTABLE_DELETE | 98 | -+-----------------------------------------+-------+ -| ZEBRA_IPTABLE_NOTIFY_OWNER | 99 | -+-----------------------------------------+-------+ -| ZEBRA_VXLAN_FLOOD_CONTROL | 100 | -+-----------------------------------------+-------+ -| ZEBRA_VXLAN_SG_ADD | 101 | -+-----------------------------------------+-------+ -| ZEBRA_VXLAN_SG_DEL | 102 | -+-----------------------------------------+-------+ -| ZEBRA_VXLAN_SG_REPLAY | 103 | -+-----------------------------------------+-------+ -| ZEBRA_MLAG_PROCESS_UP | 104 | -+-----------------------------------------+-------+ -| ZEBRA_MLAG_PROCESS_DOWN | 105 | -+-----------------------------------------+-------+ -| ZEBRA_MLAG_CLIENT_REGISTER | 106 | -+-----------------------------------------+-------+ -| ZEBRA_MLAG_CLIENT_UNREGISTER | 107 | -+-----------------------------------------+-------+ -| ZEBRA_MLAG_FORWARD_MSG | 108 | -+-----------------------------------------+-------+ -| ZEBRA_NHG_ADD | 109 | -+-----------------------------------------+-------+ -| ZEBRA_NHG_DEL | 110 | -+-----------------------------------------+-------+ -| ZEBRA_NHG_NOTIFY_OWNER | 111 | -+-----------------------------------------+-------+ -| ZEBRA_EVPN_REMOTE_NH_ADD | 112 | -+-----------------------------------------+-------+ -| ZEBRA_EVPN_REMOTE_NH_DEL | 113 | -+-----------------------------------------+-------+ -| ZEBRA_SRV6_LOCATOR_ADD | 114 | -+-----------------------------------------+-------+ -| ZEBRA_SRV6_LOCATOR_DELETE | 115 | -+-----------------------------------------+-------+ -| ZEBRA_SRV6_MANAGER_GET_LOCATOR_CHUNK | 116 | -+-----------------------------------------+-------+ -| ZEBRA_SRV6_MANAGER_RELEASE_LOCATOR_CHUNK| 117 | -+-----------------------------------------+-------+ -| ZEBRA_ERROR | 118 | -+-----------------------------------------+-------+ -| ZEBRA_CLIENT_CAPABILITIES | 119 | -+-----------------------------------------+-------+ -| ZEBRA_OPAQUE_MESSAGE | 120 | -+-----------------------------------------+-------+ -| ZEBRA_OPAQUE_REGISTER | 121 | -+-----------------------------------------+-------+ -| ZEBRA_OPAQUE_UNREGISTER | 122 | -+-----------------------------------------+-------+ -| ZEBRA_NEIGH_DISCOVER | 123 | -+-----------------------------------------+-------+ -| ZEBRA_ROUTE_NOTIFY_REQUEST | 124 | -+-----------------------------------------+-------+ -| ZEBRA_CLIENT_CLOSE_NOTIFY | 125 | -+-----------------------------------------+-------+ -| ZEBRA_NHRP_NEIGH_ADDED | 126 | -+-----------------------------------------+-------+ -| ZEBRA_NHRP_NEIGH_REMOVED | 127 | -+-----------------------------------------+-------+ -| ZEBRA_NHRP_NEIGH_GET | 128 | -+-----------------------------------------+-------+ -| ZEBRA_NHRP_NEIGH_REGISTER | 129 | -+-----------------------------------------+-------+ -| ZEBRA_NHRP_NEIGH_UNREGISTER | 130 | -+-----------------------------------------+-------+ -| ZEBRA_NEIGH_IP_ADD | 131 | -+-----------------------------------------+-------+ -| ZEBRA_NEIGH_IP_DEL | 132 | -+-----------------------------------------+-------+ -| ZEBRA_CONFIGURE_ARP | 133 | -+-----------------------------------------+-------+ -| ZEBRA_GRE_GET | 134 | -+-----------------------------------------+-------+ -| ZEBRA_GRE_UPDATE | 135 | -+-----------------------------------------+-------+ -| ZEBRA_GRE_SOURCE_SET | 136 | -+-----------------------------------------+-------+ -| ZEBRA_TC_QDISC_INSTALL | 137 | -+-----------------------------------------+-------+ -| ZEBRA_TC_QDISC_UNINSTALL | 138 | -+-----------------------------------------+-------+ -| ZEBRA_TC_CLASS_ADD | 139 | -+-----------------------------------------+-------+ -| ZEBRA_TC_CLASS_DELETE | 140 | -+-----------------------------------------+-------+ -| ZEBRA_TC_FILTER_ADD | 141 | -+-----------------------------------------+-------+ -| ZEBRA_TC_FILTER_DELETE | 142 | -+-----------------------------------------+-------+ -| ZEBRA_OPAQUE_NOTIFY | 143 | -+-----------------------------------------+-------+ +The definitions of zebra protocol commands can be found at ``lib/zclient.h``. Dataplane batching ================== diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c index 186ebfc729..16cafa2ff0 100644 --- a/isisd/isis_nb.c +++ b/isisd/isis_nb.c @@ -879,28 +879,24 @@ const struct frr_yang_module_info frr_isisd_info = { .xpath = "/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-segs-left", .cbs = { .modify = isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_modify, - .destroy = isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_destroy, }, }, { .xpath = "/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-pop", .cbs = { .modify = isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_modify, - .destroy = isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_destroy, }, }, { .xpath = "/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-h-encaps", .cbs = { .modify = isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_modify, - .destroy = isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_destroy, }, }, { .xpath = "/frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-d", .cbs = { .modify = isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_modify, - .destroy = isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_destroy, }, }, { diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h index be89fd2ac6..c04a006a2e 100644 --- a/isisd/isis_nb.h +++ b/isisd/isis_nb.h @@ -334,20 +334,12 @@ void cli_show_isis_srv6_locator(struct vty *vty, const struct lyd_node *dnode, bool show_defaults); int isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_modify( struct nb_cb_modify_args *args); -int isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_destroy( - struct nb_cb_destroy_args *args); int isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_modify( struct nb_cb_modify_args *args); -int isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_destroy( - struct nb_cb_destroy_args *args); int isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_modify( struct nb_cb_modify_args *args); -int isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_destroy( - struct nb_cb_destroy_args *args); int isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_modify( struct nb_cb_modify_args *args); -int isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_destroy( - struct nb_cb_destroy_args *args); void cli_show_isis_srv6_node_msd(struct vty *vty, const struct lyd_node *dnode, bool show_defaults); int isis_instance_segment_routing_srv6_interface_modify( diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index 5d0089d6fb..b6ee073fd5 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -3583,24 +3583,6 @@ int isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_modify( return NB_OK; } -int isis_instance_segment_routing_srv6_msd_node_msd_max_segs_left_destroy( - struct nb_cb_destroy_args *args) -{ - struct isis_area *area; - - if (args->event != NB_EV_APPLY) - return NB_OK; - - area = nb_running_get_entry(args->dnode, NULL, true); - area->srv6db.config.max_seg_left_msd = - yang_get_default_uint8("./msd/node-msd/max-segs-left"); - - /* Update and regenerate LSP */ - lsp_regenerate_schedule(area, area->is_type, 0); - - return NB_OK; -} - /* * XPath: /frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-pop */ @@ -3622,24 +3604,6 @@ int isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_modify( return NB_OK; } -int isis_instance_segment_routing_srv6_msd_node_msd_max_end_pop_destroy( - struct nb_cb_destroy_args *args) -{ - struct isis_area *area; - - if (args->event != NB_EV_APPLY) - return NB_OK; - - area = nb_running_get_entry(args->dnode, NULL, true); - area->srv6db.config.max_end_pop_msd = - yang_get_default_uint8("./msd/node-msd/max-end-pop"); - - /* Update and regenerate LSP */ - lsp_regenerate_schedule(area, area->is_type, 0); - - return NB_OK; -} - /* * XPath: /frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-h-encaps */ @@ -3661,24 +3625,6 @@ int isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_modify( return NB_OK; } -int isis_instance_segment_routing_srv6_msd_node_msd_max_h_encaps_destroy( - struct nb_cb_destroy_args *args) -{ - struct isis_area *area; - - if (args->event != NB_EV_APPLY) - return NB_OK; - - area = nb_running_get_entry(args->dnode, NULL, true); - area->srv6db.config.max_h_encaps_msd = - yang_get_default_uint8("./msd/node-msd/max-h-encaps"); - - /* Update and regenerate LSP */ - lsp_regenerate_schedule(area, area->is_type, 0); - - return NB_OK; -} - /* * XPath: /frr-isisd:isis/instance/segment-routing-srv6/msd/node-msd/max-end-d */ @@ -3700,24 +3646,6 @@ int isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_modify( return NB_OK; } -int isis_instance_segment_routing_srv6_msd_node_msd_max_end_d_destroy( - struct nb_cb_destroy_args *args) -{ - struct isis_area *area; - - if (args->event != NB_EV_APPLY) - return NB_OK; - - area = nb_running_get_entry(args->dnode, NULL, true); - area->srv6db.config.max_end_d_msd = - yang_get_default_uint8("./msd/node-msd/max-end-d"); - - /* Update and regenerate LSP */ - lsp_regenerate_schedule(area, area->is_type, 0); - - return NB_OK; -} - /* * XPath: /frr-isisd:isis/instance/segment-routing-srv6/interface */ @@ -351,7 +351,6 @@ static const struct zebra_desc_table command_types[] = { DESC_ENTRY(ZEBRA_VRF_ADD), DESC_ENTRY(ZEBRA_VRF_DELETE), DESC_ENTRY(ZEBRA_VRF_LABEL), - DESC_ENTRY(ZEBRA_INTERFACE_VRF_UPDATE), DESC_ENTRY(ZEBRA_BFD_CLIENT_REGISTER), DESC_ENTRY(ZEBRA_BFD_CLIENT_DEREGISTER), DESC_ENTRY(ZEBRA_INTERFACE_ENABLE_RADV), diff --git a/lib/zclient.h b/lib/zclient.h index 2a3ce4e488..f18fc056fc 100644 --- a/lib/zclient.h +++ b/lib/zclient.h @@ -127,7 +127,6 @@ typedef enum { ZEBRA_VRF_ADD, ZEBRA_VRF_DELETE, ZEBRA_VRF_LABEL, - ZEBRA_INTERFACE_VRF_UPDATE, ZEBRA_BFD_CLIENT_REGISTER, ZEBRA_BFD_CLIENT_DEREGISTER, ZEBRA_INTERFACE_ENABLE_RADV, diff --git a/ospfd/ospf_auth.c b/ospfd/ospf_auth.c index 2d13d4e9ad..11ee1ddb18 100644 --- a/ospfd/ospf_auth.c +++ b/ospfd/ospf_auth.c @@ -89,7 +89,7 @@ static int ospf_auth_check_hmac_sha_digest(struct ospf_interface *oi, uint16_t length = ntohs(ospfh->length); uint16_t hash_length = keychain_get_hash_len(key->hash_algo); #ifdef CRYPTO_OPENSSL - unsigned int openssl_hash_length = hash_length; + uint32_t openssl_hash_length = hash_length; HMAC_CTX *ctx; const EVP_MD *md_alg = ospf_auth_get_openssl_evp_md_from_key(key); @@ -159,6 +159,13 @@ static int ospf_auth_check_md5_digest(struct ospf_interface *oi, struct crypt_key *ck = NULL; uint16_t length = ntohs(ospfh->length); + if (length < sizeof(struct ospf_header)) {/* for coverity's sake */ + flog_warn(EC_OSPF_AUTH, + "%s: Invalid packet length of %u received on interface %s, Router-ID: %pI4", + __func__, length, IF_NAME(oi), &ospfh->router_id); + return 0; + } + if (key == NULL) { ck = ospf_crypt_key_lookup(OSPF_IF_PARAM(oi, auth_crypt), ospfh->u.crypt.key_id); @@ -189,7 +196,7 @@ static int ospf_auth_check_md5_digest(struct ospf_interface *oi, strlcpy(auth_key, (char *)ck->auth_key, OSPF_AUTH_MD5_SIZE + 1); /* Generate a digest for the ospf packet - their digest + our digest. */ #ifdef CRYPTO_OPENSSL - unsigned int md5_size = OSPF_AUTH_MD5_SIZE; + uint32_t md5_size = OSPF_AUTH_MD5_SIZE; ctx = EVP_MD_CTX_new(); EVP_DigestInit(ctx, EVP_md5()); @@ -222,10 +229,10 @@ static int ospf_auth_check_md5_digest(struct ospf_interface *oi, static int ospf_auth_make_md5_digest(struct ospf_interface *oi, struct ospf_packet *op, struct key *key) { - void *ibuf; - struct ospf_header *ospfh; + void *ibuf = STREAM_DATA(op->s); + struct ospf_header *ospfh = (struct ospf_header *)ibuf; unsigned char digest[OSPF_AUTH_MD5_SIZE]; - uint16_t length; + uint16_t length = ntohs(ospfh->length); #ifdef CRYPTO_OPENSSL EVP_MD_CTX *ctx; #elif CRYPTO_INTERNAL @@ -233,14 +240,18 @@ static int ospf_auth_make_md5_digest(struct ospf_interface *oi, #endif char auth_key[OSPF_AUTH_MD5_SIZE + 1]; + if ((length < (sizeof(struct ospf_header))) || (length > op->length)) { /* for coverity's sake */ + flog_warn(EC_OSPF_AUTH, + "%s: Invalid packet length of %u received on interface %s, Router-ID: %pI4", + __func__, length, IF_NAME(oi), &ospfh->router_id); + return 0; + } + memset(auth_key, 0, OSPF_AUTH_MD5_SIZE + 1); strlcpy(auth_key, key->string, OSPF_AUTH_MD5_SIZE + 1); - ibuf = STREAM_DATA(op->s); - ospfh = (struct ospf_header *)ibuf; - length = ntohs(ospfh->length); /* Generate a digest for the ospf packet - their digest + our digest. */ #ifdef CRYPTO_OPENSSL - unsigned int md5_size = OSPF_AUTH_MD5_SIZE; + uint32_t md5_size = OSPF_AUTH_MD5_SIZE; ctx = EVP_MD_CTX_new(); EVP_DigestInit(ctx, EVP_md5()); @@ -282,7 +293,7 @@ static int ospf_auth_make_hmac_sha_digest(struct ospf_interface *oi, ibuf = STREAM_DATA(op->s); ospfh = (struct ospf_header *)ibuf; #ifdef CRYPTO_OPENSSL - unsigned int openssl_hash_length = hash_length; + uint32_t openssl_hash_length = hash_length; HMAC_CTX *ctx; const EVP_MD *md_alg = ospf_auth_get_openssl_evp_md_from_key(key); @@ -491,7 +502,7 @@ int ospf_auth_make(struct ospf_interface *oi, struct ospf_packet *op) if (auth_key) { /* Generate a digest for the entire packet + our secret key. */ #ifdef CRYPTO_OPENSSL - unsigned int md5_size = OSPF_AUTH_MD5_SIZE; + uint32_t md5_size = OSPF_AUTH_MD5_SIZE; ctx = EVP_MD_CTX_new(); EVP_DigestInit(ctx, EVP_md5()); diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index abc580b13e..1af703d88d 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -162,29 +162,6 @@ static int ospf_interface_link_params(ZAPI_CALLBACK_ARGS) return 0; } -/* VRF update for an interface. */ -static int ospf_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp = NULL; - vrf_id_t new_vrf_id; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - if (!ifp) - return 0; - - if (IS_DEBUG_OSPF_EVENT) - zlog_debug( - "%s: Rx Interface %s VRF change vrf_id %u New vrf %s id %u", - __func__, ifp->name, vrf_id, - ospf_vrf_id_to_name(new_vrf_id), new_vrf_id); - - /*if_update(ifp, ifp->name, strlen(ifp->name), new_vrf_id);*/ - if_update_to_new_vrf(ifp, new_vrf_id); - - return 0; -} - /* Nexthop, ifindex, distance and metric information. */ static void ospf_zebra_add_nexthop(struct ospf *ospf, struct ospf_path *path, struct zapi_route *api) @@ -2203,7 +2180,6 @@ static zclient_handler *const ospf_handlers[] = { [ZEBRA_INTERFACE_ADDRESS_ADD] = ospf_interface_address_add, [ZEBRA_INTERFACE_ADDRESS_DELETE] = ospf_interface_address_delete, [ZEBRA_INTERFACE_LINK_PARAMS] = ospf_interface_link_params, - [ZEBRA_INTERFACE_VRF_UPDATE] = ospf_interface_vrf_update, [ZEBRA_REDISTRIBUTE_ROUTE_ADD] = ospf_zebra_read_route, [ZEBRA_REDISTRIBUTE_ROUTE_DEL] = ospf_zebra_read_route, diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c index e8a49b3176..876f9e19e0 100644 --- a/pbrd/pbr_zebra.c +++ b/pbrd/pbr_zebra.c @@ -129,29 +129,6 @@ int pbr_ifp_down(struct interface *ifp) return 0; } -static int interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t new_vrf_id; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - - if (!ifp) { - DEBUGD(&pbr_dbg_zebra, "%s: VRF change interface not found", - __func__); - - return 0; - } - - DEBUGD(&pbr_dbg_zebra, "%s: %s VRF change %u -> %u", __func__, - ifp->name, vrf_id, new_vrf_id); - - if_update_to_new_vrf(ifp, new_vrf_id); - - return 0; -} - static int route_notify_owner(ZAPI_CALLBACK_ARGS) { struct prefix p; @@ -436,7 +413,6 @@ extern struct zebra_privs_t pbr_privs; static zclient_handler *const pbr_handlers[] = { [ZEBRA_INTERFACE_ADDRESS_ADD] = interface_address_add, [ZEBRA_INTERFACE_ADDRESS_DELETE] = interface_address_delete, - [ZEBRA_INTERFACE_VRF_UPDATE] = interface_vrf_update, [ZEBRA_ROUTE_NOTIFY_OWNER] = route_notify_owner, [ZEBRA_RULE_NOTIFY_OWNER] = rule_notify_owner, [ZEBRA_NEXTHOP_UPDATE] = pbr_zebra_nexthop_update, diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c index 92dcbf9d1d..62f00dbf86 100644 --- a/pimd/pim_zebra.c +++ b/pimd/pim_zebra.c @@ -51,39 +51,6 @@ static int pim_router_id_update_zebra(ZAPI_CALLBACK_ARGS) return 0; } -static int pim_zebra_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t new_vrf_id; - struct pim_instance *pim; - struct pim_interface *pim_ifp; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - if (!ifp) - return 0; - - if (PIM_DEBUG_ZEBRA) - zlog_debug("%s: %s updating from %u to %u", __func__, ifp->name, - vrf_id, new_vrf_id); - - pim = pim_get_pim_instance(new_vrf_id); - if (!pim) - return 0; - - if_update_to_new_vrf(ifp, new_vrf_id); - - pim_ifp = ifp->info; - if (!pim_ifp) - return 0; - - pim_ifp->pim->mcast_if_count--; - pim_ifp->pim = pim; - pim_ifp->pim->mcast_if_count++; - - return 0; -} - #ifdef PIM_DEBUG_IFADDR_DUMP static void dump_if_address(struct interface *ifp) { @@ -463,7 +430,6 @@ static zclient_handler *const pim_handlers[] = { [ZEBRA_NEXTHOP_UPDATE] = pim_parse_nexthop_update, [ZEBRA_ROUTER_ID_UPDATE] = pim_router_id_update_zebra, - [ZEBRA_INTERFACE_VRF_UPDATE] = pim_zebra_interface_vrf_update, #if PIM_IPV == 4 [ZEBRA_VXLAN_SG_ADD] = pim_zebra_vxlan_sg_proc, diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c index b58015a67d..505290ed31 100644 --- a/ripd/rip_interface.c +++ b/ripd/rip_interface.c @@ -383,31 +383,6 @@ static int rip_ifp_destroy(struct interface *ifp) return 0; } -/* VRF update for an interface. */ -int rip_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t new_vrf_id; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - if (!ifp) - return 0; - - if (IS_RIP_DEBUG_ZEBRA) { - struct vrf *nvrf = vrf_lookup_by_id(new_vrf_id); - - zlog_debug("interface %s VRF change vrf %s(%u) new vrf %s(%u)", - ifp->name, ifp->vrf->name, vrf_id, VRF_LOGNAME(nvrf), - new_vrf_id); - } - - if_update_to_new_vrf(ifp, new_vrf_id); - rip_interface_sync(ifp); - - return 0; -} - static void rip_interface_clean(struct rip_interface *ri) { ri->enable_network = 0; diff --git a/ripd/rip_zebra.c b/ripd/rip_zebra.c index 5bf51c2f15..36b58cb20b 100644 --- a/ripd/rip_zebra.c +++ b/ripd/rip_zebra.c @@ -222,7 +222,6 @@ static void rip_zebra_connected(struct zclient *zclient) zclient_handler *const rip_handlers[] = { [ZEBRA_INTERFACE_ADDRESS_ADD] = rip_interface_address_add, [ZEBRA_INTERFACE_ADDRESS_DELETE] = rip_interface_address_delete, - [ZEBRA_INTERFACE_VRF_UPDATE] = rip_interface_vrf_update, [ZEBRA_REDISTRIBUTE_ROUTE_ADD] = rip_zebra_read_route, [ZEBRA_REDISTRIBUTE_ROUTE_DEL] = rip_zebra_read_route, }; diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c index a37cb7d092..4cb4bb5ef3 100644 --- a/ripngd/ripng_interface.c +++ b/ripngd/ripng_interface.c @@ -264,31 +264,6 @@ static int ripng_ifp_destroy(struct interface *ifp) return 0; } -/* VRF update for an interface. */ -int ripng_interface_vrf_update(ZAPI_CALLBACK_ARGS) -{ - struct interface *ifp; - vrf_id_t new_vrf_id; - - ifp = zebra_interface_vrf_update_read(zclient->ibuf, vrf_id, - &new_vrf_id); - if (!ifp) - return 0; - - if (IS_RIPNG_DEBUG_ZEBRA) { - struct vrf *nvrf = vrf_lookup_by_id(new_vrf_id); - - zlog_debug("interface %s VRF change vrf %s(%u) new vrf %s(%u)", - ifp->name, ifp->vrf->name, vrf_id, VRF_LOGNAME(nvrf), - new_vrf_id); - } - - if_update_to_new_vrf(ifp, new_vrf_id); - ripng_interface_sync(ifp); - - return 0; -} - void ripng_interface_clean(struct ripng *ripng) { struct interface *ifp; diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c index 49b8a197ad..bb5a880c02 100644 --- a/ripngd/ripng_zebra.c +++ b/ripngd/ripng_zebra.c @@ -222,7 +222,6 @@ static void ripng_zebra_connected(struct zclient *zclient) static zclient_handler *const ripng_handlers[] = { [ZEBRA_INTERFACE_ADDRESS_ADD] = ripng_interface_address_add, [ZEBRA_INTERFACE_ADDRESS_DELETE] = ripng_interface_address_delete, - [ZEBRA_INTERFACE_VRF_UPDATE] = ripng_interface_vrf_update, [ZEBRA_REDISTRIBUTE_ROUTE_ADD] = ripng_zebra_read_route, [ZEBRA_REDISTRIBUTE_ROUTE_DEL] = ripng_zebra_read_route, }; diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h index c7468b6317..3a2bc0c9d3 100644 --- a/ripngd/ripngd.h +++ b/ripngd/ripngd.h @@ -413,7 +413,6 @@ extern int ripng_interface_add(ZAPI_CALLBACK_ARGS); extern int ripng_interface_delete(ZAPI_CALLBACK_ARGS); extern int ripng_interface_address_add(ZAPI_CALLBACK_ARGS); extern int ripng_interface_address_delete(ZAPI_CALLBACK_ARGS); -extern int ripng_interface_vrf_update(ZAPI_CALLBACK_ARGS); extern void ripng_interface_sync(struct interface *ifp); extern struct ripng *ripng_lookup_by_vrf_id(vrf_id_t vrf_id); diff --git a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py index 4b7c4de806..c319477c8a 100644 --- a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py +++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py @@ -38,6 +38,9 @@ from lib.common_config import ( required_linux_kernel_version, ) +from lib.topolog import logger +import json + fatal_error = "" @@ -1611,10 +1614,21 @@ def test_resilient_nexthop_group(): ) output = net["r1"].cmd('vtysh -c "show nexthop-group rib sharp"') - output = re.findall(r"Buckets", output) + buckets = re.findall(r"Buckets", output) + + output = net["r1"].cmd('vtysh -c "show nexthop-group rib sharp json"') + + joutput = json.loads(output) + + # Use the json output and collect the nhg id from it + + for nhgid in joutput: + n = joutput[nhgid] + if "buckets" in n: + break - verify_nexthop_group(185483878) - assert len(output) == 1, "Resilient NHG not created in zebra" + verify_nexthop_group(int(nhgid)) + assert len(buckets) == 1, "Resilient NHG not created in zebra" def test_shutdown_check_stderr(): diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c index 61a8c6a78a..ed2e0a224e 100644 --- a/zebra/if_netlink.c +++ b/zebra/if_netlink.c @@ -1622,6 +1622,7 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup) zlog_debug( "RTM_NEWLINK for interface %s(%u) without MTU set", name, ifi->ifi_index); + dplane_ctx_fini(&ctx); return 0; } dplane_ctx_set_ifp_mtu(ctx, *(int *)RTA_DATA(tb[IFLA_MTU])); diff --git a/zebra/interface.c b/zebra/interface.c index 92ae8a9dc5..919cd11bc8 100644 --- a/zebra/interface.c +++ b/zebra/interface.c @@ -853,7 +853,7 @@ void if_handle_vrf_change(struct interface *ifp, vrf_id_t vrf_id) if_down_del_nbr_connected(ifp); /* Send out notification on interface VRF change. */ - /* This is to issue an UPDATE or a DELETE, as appropriate. */ + /* This is to issue a DELETE, as appropriate. */ zebra_interface_vrf_update_del(ifp, vrf_id); if (if_is_vrf(ifp)) diff --git a/zebra/redistribute.c b/zebra/redistribute.c index 7aa254b1cb..4069f7dd70 100644 --- a/zebra/redistribute.c +++ b/zebra/redistribute.c @@ -592,9 +592,8 @@ void zebra_interface_vrf_update_del(struct interface *ifp, vrf_id_t new_vrf_id) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug( - "MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/DEL %s VRF Id %u -> %u", - ifp->name, ifp->vrf->vrf_id, new_vrf_id); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_DELETE %s VRF Id %u -> %u", + ifp->name, ifp->vrf->vrf_id, new_vrf_id); for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) { /* Do not send unsolicited messages to synchronous clients. */ @@ -606,7 +605,6 @@ void zebra_interface_vrf_update_del(struct interface *ifp, vrf_id_t new_vrf_id) zsend_interface_update(ZEBRA_INTERFACE_DOWN, client, ifp); client->ifdel_cnt++; zsend_interface_delete(client, ifp); - zsend_interface_vrf_update(client, ifp, new_vrf_id); } } @@ -619,9 +617,8 @@ void zebra_interface_vrf_update_add(struct interface *ifp, vrf_id_t old_vrf_id) struct zserv *client; if (IS_ZEBRA_DEBUG_EVENT) - zlog_debug( - "MESSAGE: ZEBRA_INTERFACE_VRF_UPDATE/ADD %s VRF Id %u -> %u", - ifp->name, old_vrf_id, ifp->vrf->vrf_id); + zlog_debug("MESSAGE: ZEBRA_INTERFACE_ADD %s VRF Id %u -> %u", + ifp->name, old_vrf_id, ifp->vrf->vrf_id); for (ALL_LIST_ELEMENTS(zrouter.client_list, node, nnode, client)) { /* Do not send unsolicited messages to synchronous clients. */ @@ -685,6 +682,7 @@ int zebra_add_import_table_entry(struct zebra_vrf *zvrf, struct route_node *rn, copy_nexthops(&ng->nexthop, re->nhe->nhg.nexthop, NULL); rib_add_multipath(afi, SAFI_UNICAST, &p, NULL, newre, ng, false); + nexthop_group_delete(&ng); return 0; } diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c index 86e4f2570c..b73511f027 100644 --- a/zebra/zapi_msg.c +++ b/zebra/zapi_msg.c @@ -435,27 +435,6 @@ int zsend_interface_addresses(struct zserv *client, struct interface *ifp) return 0; } -/* Notify client about interface moving from one VRF to another. - * Whether client is interested in old and new VRF is checked by caller. - */ -int zsend_interface_vrf_update(struct zserv *client, struct interface *ifp, - vrf_id_t vrf_id) -{ - struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ); - - zclient_create_header(s, ZEBRA_INTERFACE_VRF_UPDATE, ifp->vrf->vrf_id); - - /* Fill in the name of the interface and its new VRF (id) */ - stream_put(s, ifp->name, INTERFACE_NAMSIZ); - stream_putl(s, vrf_id); - - /* Write packet size. */ - stream_putw_at(s, 0, stream_get_endp(s)); - - client->if_vrfchg_cnt++; - return zserv_send_message(client, s); -} - /* Add new nbr connected IPv6 address */ void nbr_connected_add_ipv6(struct interface *ifp, struct in6_addr *address) { @@ -849,7 +828,9 @@ void zsend_rule_notify_owner(const struct zebra_dplane_ctx *ctx, s = stream_new(ZEBRA_MAX_PACKET_SIZ); - zclient_create_header(s, ZEBRA_RULE_NOTIFY_OWNER, VRF_DEFAULT); + zclient_create_header(s, ZEBRA_RULE_NOTIFY_OWNER, + dplane_ctx_rule_get_vrfid(ctx)); + stream_put(s, ¬e, sizeof(note)); stream_putl(s, dplane_ctx_rule_get_seq(ctx)); stream_putl(s, dplane_ctx_rule_get_priority(ctx)); diff --git a/zebra/zapi_msg.h b/zebra/zapi_msg.h index ce8e154465..a01cbf675d 100644 --- a/zebra/zapi_msg.h +++ b/zebra/zapi_msg.h @@ -57,8 +57,6 @@ extern int zsend_redistribute_route(int cmd, struct zserv *zclient, extern int zsend_router_id_update(struct zserv *zclient, afi_t afi, struct prefix *p, vrf_id_t vrf_id); -extern int zsend_interface_vrf_update(struct zserv *zclient, - struct interface *ifp, vrf_id_t vrf_id); extern int zsend_interface_link_params(struct zserv *zclient, struct interface *ifp); extern int zsend_pw_update(struct zserv *client, struct zebra_pw *pw); diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 03d7bb88a2..099a6e2725 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -3031,6 +3031,13 @@ void dplane_ctx_rule_set_dp_flow_ptr(struct zebra_dplane_ctx *ctx, ctx->u.rule.new.dp_flow_ptr = dp_flow_ptr; } +vrf_id_t dplane_ctx_rule_get_vrfid(const struct zebra_dplane_ctx *ctx) +{ + DPLANE_CTX_VALID(ctx); + + return ctx->u.rule.new.prule.vrf_id; +} + /*********************************************************************** * PBR RULE ACCESSORS - end **********************************************************************/ diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h index 4d4a17bbae..87c2e03656 100644 --- a/zebra/zebra_dplane.h +++ b/zebra/zebra_dplane.h @@ -740,6 +740,8 @@ intptr_t dplane_ctx_rule_get_old_dp_flow_ptr(const struct zebra_dplane_ctx *ctx); void dplane_ctx_rule_set_dp_flow_ptr(struct zebra_dplane_ctx *ctx, intptr_t dp_flow_ptr); +vrf_id_t dplane_ctx_rule_get_vrfid(const struct zebra_dplane_ctx *ctx); + /* Accessors for policy based routing iptable information */ struct zebra_pbr_iptable; void dplane_ctx_get_pbr_iptable(const struct zebra_dplane_ctx *ctx, diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c index d1a84491aa..396e9acfc8 100644 --- a/zebra/zebra_nhg.c +++ b/zebra/zebra_nhg.c @@ -3750,8 +3750,13 @@ void zebra_interface_nhg_reinstall(struct interface *ifp) rb_node_dep->nhe->flags); zebra_nhg_install_kernel(rb_node_dep->nhe); - /* mark depedent uninstall, when interface associated - * singleton is installed, install depedent + /* Don't need to modify dependents if installed */ + if (CHECK_FLAG(rb_node_dep->nhe->flags, + NEXTHOP_GROUP_INSTALLED)) + continue; + + /* mark dependent uninstalled; when interface associated + * singleton is installed, install dependent */ frr_each_safe (nhg_connected_tree, &rb_node_dep->nhe->nhg_dependents, diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c index 5124768a7c..c04c5f5580 100644 --- a/zebra/zebra_pbr.c +++ b/zebra/zebra_pbr.c @@ -172,10 +172,13 @@ uint32_t zebra_pbr_rules_hash_key(const void *arg) key = jhash_3words(rule->rule.filter.pcp, rule->rule.filter.vlan_id, rule->rule.filter.vlan_flags, key); - return jhash_3words(rule->rule.filter.src_port, - rule->rule.filter.dst_port, - prefix_hash_key(&rule->rule.filter.dst_ip), - jhash_1word(rule->rule.unique, key)); + key = jhash_3words(rule->rule.filter.src_port, + rule->rule.filter.dst_port, + prefix_hash_key(&rule->rule.filter.dst_ip), key); + + key = jhash_2words(rule->rule.unique, rule->sock, key); + + return key; } bool zebra_pbr_rules_hash_equal(const void *arg1, const void *arg2) @@ -191,6 +194,9 @@ bool zebra_pbr_rules_hash_equal(const void *arg1, const void *arg2) if (r1->rule.priority != r2->rule.priority) return false; + if (r1->sock != r2->sock) + return false; + if (r1->rule.unique != r2->rule.unique) return false; @@ -226,6 +232,7 @@ bool zebra_pbr_rules_hash_equal(const void *arg1, const void *arg2) struct pbr_rule_unique_lookup { struct zebra_pbr_rule *rule; + int sock; uint32_t unique; char ifname[INTERFACE_NAMSIZ + 1]; vrf_id_t vrf_id; @@ -236,9 +243,9 @@ static int pbr_rule_lookup_unique_walker(struct hash_bucket *b, void *data) struct pbr_rule_unique_lookup *pul = data; struct zebra_pbr_rule *rule = b->data; - if (pul->unique == rule->rule.unique - && strncmp(pul->ifname, rule->rule.ifname, INTERFACE_NAMSIZ) == 0 - && pul->vrf_id == rule->vrf_id) { + if (pul->sock == rule->sock && pul->unique == rule->rule.unique && + strmatch(pul->ifname, rule->rule.ifname) && + pul->vrf_id == rule->vrf_id) { pul->rule = rule; return HASHWALK_ABORT; } @@ -255,6 +262,7 @@ pbr_rule_lookup_unique(struct zebra_pbr_rule *zrule) strlcpy(pul.ifname, zrule->rule.ifname, INTERFACE_NAMSIZ); pul.rule = NULL; pul.vrf_id = zrule->vrf_id; + pul.sock = zrule->sock; hash_walk(zrouter.rules_hash, &pbr_rule_lookup_unique_walker, &pul); return pul.rule; |
