diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2023-12-05 09:56:41 +0100 | 
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2023-12-05 10:06:12 +0100 | 
| commit | f806ec101f1d0b154c0cf0bf488d351ab397de7b (patch) | |
| tree | b341e78258a8d921fa05d4de4acda6d8aadaa668 /sharpd | |
| parent | 82c1d82d7767570af287b8fa8d887ba8a40015e3 (diff) | |
sharpd: fix avoid twice sending NHG_DEL for a nexthop-group
After removing the nexthop of a nexthop group, when the nexthop group
is removed, a nhg removal failure happens:
> ubuntu2204(config)# nexthop-group CCC
> ubuntu2204(config-nh-group)#  nexthop 192.0.2.211 loop1
> ubuntu2204(config-nh-group)# no  nexthop 192.0.2.211 loop1
> [..]
> 2023/12/05 08:59:22 SHARP: [H3QKG-WH8ZV] Removed nhg 179687505
> ubuntu2204(config-nh-group)# exi
> ubuntu2204(config)# no nexthop-group CCC
> [..]
> 2023/12/05 08:59:27 SHARP: [N030J-V0SFN] Failed removal of nhg 179687505
The NHG_DEL message is sent twice at the nexthop deletion, and at the
nexthop-group deletion. Avoid sending it twice.
Fixes: 82beaf6ae520 ("sharpd: fix deleting nhid when suppressing nexthop from nh group")
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'sharpd')
| -rw-r--r-- | sharpd/sharp_nht.c | 3 | ||||
| -rw-r--r-- | sharpd/sharp_zebra.c | 1 | 
2 files changed, 3 insertions, 1 deletions
diff --git a/sharpd/sharp_nht.c b/sharpd/sharp_nht.c index 8c02f1f213..6d64fcfb25 100644 --- a/sharpd/sharp_nht.c +++ b/sharpd/sharp_nht.c @@ -174,7 +174,8 @@ static void sharp_nhgroup_delete_cb(const char *name)  	if (!snhg)  		return; -	nhg_del(snhg->id); +	if (sharp_nhgroup_id_is_installed(snhg->id)) +		nhg_del(snhg->id);  	sharp_nhg_rb_del(&nhg_head, snhg);  	XFREE(MTYPE_NHG, snhg);  } diff --git a/sharpd/sharp_zebra.c b/sharpd/sharp_zebra.c index 7c79256517..ff4895189d 100644 --- a/sharpd/sharp_zebra.c +++ b/sharpd/sharp_zebra.c @@ -934,6 +934,7 @@ static int nhg_notify_owner(ZAPI_CALLBACK_ARGS)  		zlog_debug("Failed install of nhg %u", id);  		break;  	case ZAPI_NHG_REMOVED: +		sharp_nhgroup_id_set_installed(id, false);  		zlog_debug("Removed nhg %u", id);  		break;  	case ZAPI_NHG_REMOVE_FAIL:  | 
