mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 11:44:16 +00:00
lib: fix nb callbacks for containers inside choice case
Containers inside a choice's case must be treated as presence containers
as they can be explicitly created and deleted. They must have `create`
and `destroy` callbacks, otherwise the internal data they represent may
never be deleted.
The issue can be reproduced with the following steps:
- create an access-list with destination-network params
```
# access-list test seq 1 permit ip any 10.10.10.0 0.0.0.255
```
- delete the `destination-network` container
```
# mgmt delete-config /frr-filter:lib/access-list[name='test'][type='ipv4']/entry[sequence='1']/destination-network
# mgmt commit apply
MGMTD: No changes found to be committed!
```
As the `destination-network` container is non-presence, and all its
leafs are mandatory, mgmtd doesn't see any changes to be commited and
simply updates its YANG data tree without passing any updates to backend
daemons.
This commit fixes the issue by requiring `create` and `destroy`
callbacks for containers inside choice's cases.
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 0b905f7404
)
This commit is contained in:
parent
f9b30889e3
commit
2ca3dc7701
@ -147,6 +147,8 @@ const struct frr_yang_module_info frr_bgp_route_map_info = {
|
|||||||
{
|
{
|
||||||
.xpath = "/frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-bgp-route-map:comm-list",
|
.xpath = "/frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-bgp-route-map:comm-list",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
.create = lib_route_map_entry_match_condition_rmap_match_condition_comm_list_create,
|
||||||
|
.destroy = lib_route_map_entry_match_condition_rmap_match_condition_comm_list_destroy,
|
||||||
.apply_finish = lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish,
|
.apply_finish = lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -356,6 +358,8 @@ const struct frr_yang_module_info frr_bgp_route_map_info = {
|
|||||||
{
|
{
|
||||||
.xpath = "/frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:aggregator",
|
.xpath = "/frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:aggregator",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
.create = lib_route_map_entry_set_action_rmap_set_action_aggregator_create,
|
||||||
|
.destroy = lib_route_map_entry_set_action_rmap_set_action_aggregator_destroy,
|
||||||
.apply_finish = lib_route_map_entry_set_action_rmap_set_action_aggregator_finish,
|
.apply_finish = lib_route_map_entry_set_action_rmap_set_action_aggregator_finish,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -390,6 +394,8 @@ const struct frr_yang_module_info frr_bgp_route_map_info = {
|
|||||||
{
|
{
|
||||||
.xpath = "/frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:extcommunity-lb",
|
.xpath = "/frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:extcommunity-lb",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
.create = lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_create,
|
||||||
|
.destroy = lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_destroy,
|
||||||
.apply_finish = lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish,
|
.apply_finish = lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -60,6 +60,10 @@ int lib_route_map_entry_match_condition_rmap_match_condition_evpn_route_type_mod
|
|||||||
int lib_route_map_entry_match_condition_rmap_match_condition_evpn_route_type_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_match_condition_rmap_match_condition_evpn_route_type_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_route_map_entry_match_condition_rmap_match_condition_route_distinguisher_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_match_condition_rmap_match_condition_route_distinguisher_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_match_condition_rmap_match_condition_route_distinguisher_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_match_condition_rmap_match_condition_route_distinguisher_destroy(struct nb_cb_destroy_args *args);
|
||||||
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_create(
|
||||||
|
struct nb_cb_create_args *args);
|
||||||
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_destroy(
|
||||||
|
struct nb_cb_destroy_args *args);
|
||||||
void lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish(struct nb_cb_apply_finish_args *args);
|
void lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish(struct nb_cb_apply_finish_args *args);
|
||||||
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_name_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_name_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_name_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_name_destroy(struct nb_cb_destroy_args *args);
|
||||||
@ -127,6 +131,10 @@ int lib_route_map_entry_set_action_rmap_set_action_large_community_none_modify(s
|
|||||||
int lib_route_map_entry_set_action_rmap_set_action_large_community_none_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_large_community_none_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_large_community_string_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_large_community_string_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_large_community_string_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_large_community_string_destroy(struct nb_cb_destroy_args *args);
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_create(
|
||||||
|
struct nb_cb_create_args *args);
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_destroy(
|
||||||
|
struct nb_cb_destroy_args *args);
|
||||||
void lib_route_map_entry_set_action_rmap_set_action_aggregator_finish(struct nb_cb_apply_finish_args *args);
|
void lib_route_map_entry_set_action_rmap_set_action_aggregator_finish(struct nb_cb_apply_finish_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_asn_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_asn_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_asn_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_asn_destroy(struct nb_cb_destroy_args *args);
|
||||||
@ -138,6 +146,10 @@ int lib_route_map_entry_set_action_rmap_set_action_comm_list_num_extended_modify
|
|||||||
int lib_route_map_entry_set_action_rmap_set_action_comm_list_num_extended_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_comm_list_num_extended_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_comm_list_name_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_comm_list_name_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_comm_list_name_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_comm_list_name_destroy(struct nb_cb_destroy_args *args);
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_create(
|
||||||
|
struct nb_cb_create_args *args);
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_destroy(
|
||||||
|
struct nb_cb_destroy_args *args);
|
||||||
void lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish(struct nb_cb_apply_finish_args *args);
|
void lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish(struct nb_cb_apply_finish_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_modify(struct nb_cb_modify_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_destroy(struct nb_cb_destroy_args *args);
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_destroy(struct nb_cb_destroy_args *args);
|
||||||
|
@ -1121,6 +1121,27 @@ lib_route_map_entry_match_condition_rmap_match_condition_route_distinguisher_des
|
|||||||
/*
|
/*
|
||||||
* XPath = /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-bgp-route-map:comm-list
|
* XPath = /frr-route-map:lib/route-map/entry/match-condition/rmap-match-condition/frr-bgp-route-map:comm-list
|
||||||
*/
|
*/
|
||||||
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_create(
|
||||||
|
struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_destroy(
|
||||||
|
struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
switch (args->event) {
|
||||||
|
case NB_EV_VALIDATE:
|
||||||
|
case NB_EV_PREPARE:
|
||||||
|
case NB_EV_ABORT:
|
||||||
|
break;
|
||||||
|
case NB_EV_APPLY:
|
||||||
|
return lib_route_map_entry_match_destroy(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish(
|
lib_route_map_entry_match_condition_rmap_match_condition_comm_list_finish(
|
||||||
struct nb_cb_apply_finish_args *args)
|
struct nb_cb_apply_finish_args *args)
|
||||||
@ -1219,9 +1240,8 @@ lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_nam
|
|||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
case NB_EV_PREPARE:
|
case NB_EV_PREPARE:
|
||||||
case NB_EV_ABORT:
|
case NB_EV_ABORT:
|
||||||
break;
|
|
||||||
case NB_EV_APPLY:
|
case NB_EV_APPLY:
|
||||||
return lib_route_map_entry_match_destroy(args);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -1253,9 +1273,8 @@ int lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list
|
|||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
case NB_EV_PREPARE:
|
case NB_EV_PREPARE:
|
||||||
case NB_EV_ABORT:
|
case NB_EV_ABORT:
|
||||||
break;
|
|
||||||
case NB_EV_APPLY:
|
case NB_EV_APPLY:
|
||||||
return lib_route_map_entry_match_destroy(args);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -1287,9 +1306,8 @@ lib_route_map_entry_match_condition_rmap_match_condition_comm_list_comm_list_nam
|
|||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
case NB_EV_PREPARE:
|
case NB_EV_PREPARE:
|
||||||
case NB_EV_ABORT:
|
case NB_EV_ABORT:
|
||||||
break;
|
|
||||||
case NB_EV_APPLY:
|
case NB_EV_APPLY:
|
||||||
return lib_route_map_entry_match_destroy(args);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -2735,6 +2753,27 @@ lib_route_map_entry_set_action_rmap_set_action_large_community_string_destroy(
|
|||||||
* xpath =
|
* xpath =
|
||||||
* /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:aggregator
|
* /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:aggregator
|
||||||
*/
|
*/
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_create(
|
||||||
|
struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_aggregator_destroy(
|
||||||
|
struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
switch (args->event) {
|
||||||
|
case NB_EV_VALIDATE:
|
||||||
|
case NB_EV_PREPARE:
|
||||||
|
case NB_EV_ABORT:
|
||||||
|
break;
|
||||||
|
case NB_EV_APPLY:
|
||||||
|
return lib_route_map_entry_set_destroy(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void lib_route_map_entry_set_action_rmap_set_action_aggregator_finish(
|
void lib_route_map_entry_set_action_rmap_set_action_aggregator_finish(
|
||||||
struct nb_cb_apply_finish_args *args)
|
struct nb_cb_apply_finish_args *args)
|
||||||
{
|
{
|
||||||
@ -2807,9 +2846,8 @@ lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_asn_destroy
|
|||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
case NB_EV_PREPARE:
|
case NB_EV_PREPARE:
|
||||||
case NB_EV_ABORT:
|
case NB_EV_ABORT:
|
||||||
break;
|
|
||||||
case NB_EV_APPLY:
|
case NB_EV_APPLY:
|
||||||
return lib_route_map_entry_set_destroy(args);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -2842,9 +2880,8 @@ lib_route_map_entry_set_action_rmap_set_action_aggregator_aggregator_address_des
|
|||||||
case NB_EV_VALIDATE:
|
case NB_EV_VALIDATE:
|
||||||
case NB_EV_PREPARE:
|
case NB_EV_PREPARE:
|
||||||
case NB_EV_ABORT:
|
case NB_EV_ABORT:
|
||||||
break;
|
|
||||||
case NB_EV_APPLY:
|
case NB_EV_APPLY:
|
||||||
return lib_route_map_entry_set_destroy(args);
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -2918,6 +2955,27 @@ lib_route_map_entry_set_action_rmap_set_action_comm_list_name_destroy(
|
|||||||
* XPath:
|
* XPath:
|
||||||
* /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:extcommunity-lb
|
* /frr-route-map:lib/route-map/entry/set-action/rmap-set-action/frr-bgp-route-map:extcommunity-lb
|
||||||
*/
|
*/
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_create(
|
||||||
|
struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_destroy(
|
||||||
|
struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
switch (args->event) {
|
||||||
|
case NB_EV_VALIDATE:
|
||||||
|
case NB_EV_PREPARE:
|
||||||
|
case NB_EV_ABORT:
|
||||||
|
break;
|
||||||
|
case NB_EV_APPLY:
|
||||||
|
return lib_route_map_entry_set_destroy(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish(
|
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_finish(
|
||||||
struct nb_cb_apply_finish_args *args)
|
struct nb_cb_apply_finish_args *args)
|
||||||
@ -2977,7 +3035,7 @@ int
|
|||||||
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_destroy(
|
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_lb_type_destroy(
|
||||||
struct nb_cb_destroy_args *args)
|
struct nb_cb_destroy_args *args)
|
||||||
{
|
{
|
||||||
return lib_route_map_entry_set_destroy(args);
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2995,7 +3053,7 @@ int
|
|||||||
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_bandwidth_destroy(
|
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_bandwidth_destroy(
|
||||||
struct nb_cb_destroy_args *args)
|
struct nb_cb_destroy_args *args)
|
||||||
{
|
{
|
||||||
return lib_route_map_entry_set_destroy(args);
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3065,7 +3123,7 @@ int
|
|||||||
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_two_octet_as_specific_destroy(
|
lib_route_map_entry_set_action_rmap_set_action_extcommunity_lb_two_octet_as_specific_destroy(
|
||||||
struct nb_cb_destroy_args *args)
|
struct nb_cb_destroy_args *args)
|
||||||
{
|
{
|
||||||
return lib_route_map_entry_set_destroy(args);
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -756,6 +756,32 @@ lib_access_list_entry_host_destroy(struct nb_cb_destroy_args *args)
|
|||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-filter:lib/access-list/entry/network
|
||||||
|
*/
|
||||||
|
static int lib_access_list_entry_network_create(struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
/* Nothing to do here, everything is done in children callbacks */
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_access_list_entry_network_destroy(struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
struct filter_cisco *fc;
|
||||||
|
struct filter *f;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
f = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
fc = &f->u.cfilter;
|
||||||
|
cisco_unset_addr_mask(&fc->addr, &fc->addr_mask);
|
||||||
|
|
||||||
|
acl_notify_route_map(f->acl, RMAP_EVENT_FILTER_DELETED);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-filter:lib/access-list/entry/network/address
|
* XPath: /frr-filter:lib/access-list/entry/network/address
|
||||||
*/
|
*/
|
||||||
@ -927,6 +953,35 @@ static int lib_access_list_entry_destination_host_destroy(
|
|||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-filter:lib/access-list/entry/destination-network
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
lib_access_list_entry_destination_network_create(struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
/* Nothing to do here, everything is done in children callbacks */
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int lib_access_list_entry_destination_network_destroy(
|
||||||
|
struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
struct filter_cisco *fc;
|
||||||
|
struct filter *f;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
f = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
fc = &f->u.cfilter;
|
||||||
|
fc->extended = 0;
|
||||||
|
cisco_unset_addr_mask(&fc->mask, &fc->mask_mask);
|
||||||
|
|
||||||
|
acl_notify_route_map(f->acl, RMAP_EVENT_FILTER_DELETED);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-filter:lib/access-list/entry/destination-network/address
|
* XPath: /frr-filter:lib/access-list/entry/destination-network/address
|
||||||
*/
|
*/
|
||||||
@ -1628,6 +1683,13 @@ const struct frr_yang_module_info frr_filter_info = {
|
|||||||
.destroy = lib_access_list_entry_host_destroy,
|
.destroy = lib_access_list_entry_host_destroy,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-filter:lib/access-list/entry/network",
|
||||||
|
.cbs = {
|
||||||
|
.create = lib_access_list_entry_network_create,
|
||||||
|
.destroy = lib_access_list_entry_network_destroy,
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-filter:lib/access-list/entry/network/address",
|
.xpath = "/frr-filter:lib/access-list/entry/network/address",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
@ -1654,6 +1716,13 @@ const struct frr_yang_module_info frr_filter_info = {
|
|||||||
.destroy = lib_access_list_entry_destination_host_destroy,
|
.destroy = lib_access_list_entry_destination_host_destroy,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-filter:lib/access-list/entry/destination-network",
|
||||||
|
.cbs = {
|
||||||
|
.create = lib_access_list_entry_destination_network_create,
|
||||||
|
.destroy = lib_access_list_entry_destination_network_destroy,
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-filter:lib/access-list/entry/destination-network/address",
|
.xpath = "/frr-filter:lib/access-list/entry/destination-network/address",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
@ -1940,6 +1940,8 @@ bool nb_cb_operation_is_valid(enum nb_cb_operation operation,
|
|||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case LYS_CONTAINER:
|
case LYS_CONTAINER:
|
||||||
|
if (snode->parent && snode->parent->nodetype == LYS_CASE)
|
||||||
|
return true;
|
||||||
scontainer = (struct lysc_node_container *)snode;
|
scontainer = (struct lysc_node_container *)snode;
|
||||||
if (!CHECK_FLAG(scontainer->flags, LYS_PRESENCE))
|
if (!CHECK_FLAG(scontainer->flags, LYS_PRESENCE))
|
||||||
return false;
|
return false;
|
||||||
@ -1994,6 +1996,8 @@ bool nb_cb_operation_is_valid(enum nb_cb_operation operation,
|
|||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case LYS_CONTAINER:
|
case LYS_CONTAINER:
|
||||||
|
if (snode->parent && snode->parent->nodetype == LYS_CASE)
|
||||||
|
return true;
|
||||||
scontainer = (struct lysc_node_container *)snode;
|
scontainer = (struct lysc_node_container *)snode;
|
||||||
if (!CHECK_FLAG(scontainer->flags, LYS_PRESENCE))
|
if (!CHECK_FLAG(scontainer->flags, LYS_PRESENCE))
|
||||||
return false;
|
return false;
|
||||||
|
@ -456,6 +456,8 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||||||
{
|
{
|
||||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
|
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
.create = lib_interface_zebra_affinities_create,
|
||||||
|
.destroy = lib_interface_zebra_affinities_destroy,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -530,6 +532,13 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||||||
.destroy = lib_interface_zebra_link_params_packet_loss_destroy,
|
.destroy = lib_interface_zebra_link_params_packet_loss_destroy,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0",
|
||||||
|
.cbs = {
|
||||||
|
.create = lib_interface_zebra_evpn_mh_type_0_create,
|
||||||
|
.destroy = lib_interface_zebra_evpn_mh_type_0_destroy,
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
|
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
@ -537,6 +546,13 @@ const struct frr_yang_module_info frr_zebra_info = {
|
|||||||
.destroy = lib_interface_zebra_evpn_mh_type_0_esi_destroy,
|
.destroy = lib_interface_zebra_evpn_mh_type_0_esi_destroy,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3",
|
||||||
|
.cbs = {
|
||||||
|
.create = lib_interface_zebra_evpn_mh_type_3_create,
|
||||||
|
.destroy = lib_interface_zebra_evpn_mh_type_3_destroy,
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
|
.xpath = "/frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac",
|
||||||
.cbs = {
|
.cbs = {
|
||||||
|
@ -145,6 +145,8 @@ int lib_interface_zebra_link_params_utilized_bandwidth_destroy(
|
|||||||
int lib_interface_zebra_legacy_admin_group_modify(struct nb_cb_modify_args *args);
|
int lib_interface_zebra_legacy_admin_group_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_interface_zebra_legacy_admin_group_destroy(
|
int lib_interface_zebra_legacy_admin_group_destroy(
|
||||||
struct nb_cb_destroy_args *args);
|
struct nb_cb_destroy_args *args);
|
||||||
|
int lib_interface_zebra_affinities_create(struct nb_cb_create_args *args);
|
||||||
|
int lib_interface_zebra_affinities_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_interface_zebra_affinity_create(struct nb_cb_create_args *args);
|
int lib_interface_zebra_affinity_create(struct nb_cb_create_args *args);
|
||||||
int lib_interface_zebra_affinity_destroy(struct nb_cb_destroy_args *args);
|
int lib_interface_zebra_affinity_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_args *args);
|
int lib_interface_zebra_affinity_mode_modify(struct nb_cb_modify_args *args);
|
||||||
@ -175,9 +177,13 @@ int lib_interface_zebra_link_params_packet_loss_modify(
|
|||||||
struct nb_cb_modify_args *args);
|
struct nb_cb_modify_args *args);
|
||||||
int lib_interface_zebra_link_params_packet_loss_destroy(
|
int lib_interface_zebra_link_params_packet_loss_destroy(
|
||||||
struct nb_cb_destroy_args *args);
|
struct nb_cb_destroy_args *args);
|
||||||
|
int lib_interface_zebra_evpn_mh_type_0_create(struct nb_cb_create_args *args);
|
||||||
|
int lib_interface_zebra_evpn_mh_type_0_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_interface_zebra_evpn_mh_type_0_esi_modify(struct nb_cb_modify_args *args);
|
int lib_interface_zebra_evpn_mh_type_0_esi_modify(struct nb_cb_modify_args *args);
|
||||||
int lib_interface_zebra_evpn_mh_type_0_esi_destroy(
|
int lib_interface_zebra_evpn_mh_type_0_esi_destroy(
|
||||||
struct nb_cb_destroy_args *args);
|
struct nb_cb_destroy_args *args);
|
||||||
|
int lib_interface_zebra_evpn_mh_type_3_create(struct nb_cb_create_args *args);
|
||||||
|
int lib_interface_zebra_evpn_mh_type_3_destroy(struct nb_cb_destroy_args *args);
|
||||||
int lib_interface_zebra_evpn_mh_type_3_system_mac_modify(
|
int lib_interface_zebra_evpn_mh_type_3_system_mac_modify(
|
||||||
struct nb_cb_modify_args *args);
|
struct nb_cb_modify_args *args);
|
||||||
int lib_interface_zebra_evpn_mh_type_3_system_mac_destroy(
|
int lib_interface_zebra_evpn_mh_type_3_system_mac_destroy(
|
||||||
|
@ -1746,9 +1746,6 @@ int lib_interface_zebra_legacy_admin_group_modify(
|
|||||||
|
|
||||||
iflp->admin_grp = admin_group_value;
|
iflp->admin_grp = admin_group_value;
|
||||||
SET_PARAM(iflp, LP_ADM_GRP);
|
SET_PARAM(iflp, LP_ADM_GRP);
|
||||||
|
|
||||||
admin_group_clear(&iflp->ext_admin_grp);
|
|
||||||
UNSET_PARAM(iflp, LP_EXTEND_ADM_GRP);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return NB_OK;
|
return NB_OK;
|
||||||
@ -1776,6 +1773,35 @@ int lib_interface_zebra_legacy_admin_group_destroy(
|
|||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath:
|
||||||
|
* /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities
|
||||||
|
*/
|
||||||
|
int lib_interface_zebra_affinities_create(struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_interface_zebra_affinities_destroy(struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
struct if_link_params *iflp;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
ifp = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
iflp = if_link_params_get(ifp);
|
||||||
|
|
||||||
|
iflp->admin_grp = 0;
|
||||||
|
UNSET_PARAM(iflp, LP_ADM_GRP);
|
||||||
|
|
||||||
|
admin_group_clear(&iflp->ext_admin_grp);
|
||||||
|
UNSET_PARAM(iflp, LP_EXTEND_ADM_GRP);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath:
|
* XPath:
|
||||||
* /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity
|
* /frr-interface:lib/interface/frr-zebra:zebra/link-params/affinities/affinity
|
||||||
@ -2281,6 +2307,27 @@ static bool esi_unique(struct lyd_node *dnode)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0
|
||||||
|
*/
|
||||||
|
int lib_interface_zebra_evpn_mh_type_0_create(struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_interface_zebra_evpn_mh_type_0_destroy(struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
ifp = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
zebra_evpn_es_type0_esi_update(ifp->info, NULL);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-0/esi
|
||||||
*/
|
*/
|
||||||
@ -2324,6 +2371,28 @@ int lib_interface_zebra_evpn_mh_type_0_esi_destroy(struct nb_cb_destroy_args *ar
|
|||||||
return NB_OK;
|
return NB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3
|
||||||
|
*/
|
||||||
|
int lib_interface_zebra_evpn_mh_type_3_create(struct nb_cb_create_args *args)
|
||||||
|
{
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lib_interface_zebra_evpn_mh_type_3_destroy(struct nb_cb_destroy_args *args)
|
||||||
|
{
|
||||||
|
struct interface *ifp;
|
||||||
|
|
||||||
|
if (args->event != NB_EV_APPLY)
|
||||||
|
return NB_OK;
|
||||||
|
|
||||||
|
ifp = nb_running_get_entry(args->dnode, NULL, true);
|
||||||
|
zebra_evpn_es_sys_mac_update(ifp->info, NULL);
|
||||||
|
zebra_evpn_es_lid_update(ifp->info, 0);
|
||||||
|
|
||||||
|
return NB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac
|
* XPath: /frr-interface:lib/interface/frr-zebra:zebra/evpn-mh/type-3/system-mac
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user