mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 15:33:56 +00:00
zebra: fix wrong check for mpls label
Add a parameter for `zebra_mpls_fec_for_label()`, as before if it is `NULL`, otherwise exclude what this parameter represents. Before: ``` anlan(config)# mpls label bind 1.1.1.2/32 88 anlan(config)# mpls label bind 1.1.1.2/32 88 % Label already bound to a FEC anlan(config)# mpls label bind 1.1.1.3/32 88 % Label already bound to a FEC ``` After: ``` anlan(config)# mpls label bind 1.1.1.2/32 88 anlan(config)# mpls label bind 1.1.1.2/32 88 anlan(config)# mpls label bind 1.1.1.3/32 88 % Label already bound to a FEC ``` Signed-off-by: anlan_cs <anlan_cs@tom.com>
This commit is contained in:
parent
30dcd79011
commit
cbd1f3239a
@ -2476,7 +2476,7 @@ static int zebra_mpls_cleanup_zclient_labels(struct zserv *client)
|
|||||||
* hash..
|
* hash..
|
||||||
*/
|
*/
|
||||||
struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
||||||
mpls_label_t label)
|
struct prefix *p, mpls_label_t label)
|
||||||
{
|
{
|
||||||
struct route_node *rn;
|
struct route_node *rn;
|
||||||
struct zebra_fec *fec;
|
struct zebra_fec *fec;
|
||||||
@ -2491,8 +2491,11 @@ struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
|||||||
if (!rn->info)
|
if (!rn->info)
|
||||||
continue;
|
continue;
|
||||||
fec = rn->info;
|
fec = rn->info;
|
||||||
if (fec->label == label)
|
if (fec->label == label) {
|
||||||
|
if (p && prefix_same(p, &rn->p))
|
||||||
|
return NULL;
|
||||||
return fec;
|
return fec;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2502,9 +2505,10 @@ struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
|||||||
/*
|
/*
|
||||||
* Inform if specified label is currently bound to a FEC or not.
|
* Inform if specified label is currently bound to a FEC or not.
|
||||||
*/
|
*/
|
||||||
int zebra_mpls_label_already_bound(struct zebra_vrf *zvrf, mpls_label_t label)
|
int zebra_mpls_label_already_bound(struct zebra_vrf *zvrf, struct prefix *p,
|
||||||
|
mpls_label_t label)
|
||||||
{
|
{
|
||||||
return (zebra_mpls_fec_for_label(zvrf, label) ? 1 : 0);
|
return (zebra_mpls_fec_for_label(zvrf, p, label) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -203,12 +203,13 @@ int zebra_mpls_fec_unregister(struct zebra_vrf *zvrf, struct prefix *p,
|
|||||||
* hash..
|
* hash..
|
||||||
*/
|
*/
|
||||||
struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
struct zebra_fec *zebra_mpls_fec_for_label(struct zebra_vrf *zvrf,
|
||||||
mpls_label_t label);
|
struct prefix *p, mpls_label_t label);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Inform if specified label is currently bound to a FEC or not.
|
* Inform if specified label is currently bound to a FEC or not.
|
||||||
*/
|
*/
|
||||||
int zebra_mpls_label_already_bound(struct zebra_vrf *zvrf, mpls_label_t label);
|
int zebra_mpls_label_already_bound(struct zebra_vrf *zvrf, struct prefix *p,
|
||||||
|
mpls_label_t label);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add static FEC to label binding. If there are clients registered for this
|
* Add static FEC to label binding. If there are clients registered for this
|
||||||
|
@ -210,7 +210,7 @@ static int zebra_mpls_bind(struct vty *vty, int add_cmd, const char *prefix,
|
|||||||
vty_out(vty, "%% Invalid label\n");
|
vty_out(vty, "%% Invalid label\n");
|
||||||
return CMD_WARNING_CONFIG_FAILED;
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
}
|
}
|
||||||
if (zebra_mpls_label_already_bound(zvrf, label)) {
|
if (zebra_mpls_label_already_bound(zvrf, &p, label)) {
|
||||||
vty_out(vty,
|
vty_out(vty,
|
||||||
"%% Label already bound to a FEC\n");
|
"%% Label already bound to a FEC\n");
|
||||||
return CMD_WARNING_CONFIG_FAILED;
|
return CMD_WARNING_CONFIG_FAILED;
|
||||||
|
Loading…
Reference in New Issue
Block a user