diff options
| author | Pooja Jagadeesh Doijode <pdoijode@nvidia.com> | 2024-05-17 12:03:20 -0700 | 
|---|---|---|
| committer | Pooja Jagadeesh Doijode <pdoijode@nvidia.com> | 2024-05-24 11:25:00 -0700 | 
| commit | 773a45ef29e0ab128492f2ed8a9bb014f5d75b70 (patch) | |
| tree | 5fde54afa9e35564c74d874a4632b925c1636f7a /bgpd/bgp_clist.c | |
| parent | 4bd16486e9a34d4ae8173277b3d1526e821152c1 (diff) | |
bgpd: Return success if lcomm/comm/extcomm name or entry is not found
Problem:
Currently bgp prints `Can't find community-list` and returns CMD_WARNING_CONFIG_FAILED
error if name or an entry for community, large-community and ext-community is not found. This
causes frr-reload to fail.
Fix:
Return success if community, large-community and ext-community name or
an entry is not found.
Ticket:#3900813
Testing Done:
Before fix:
```
root@tor-4:mgmt:/var/home/cumulus# cat /etc/frr/frr.conf
<SNIP>
bgp large-community-list standard lc22 seq 10 permit 4200857911:011:01 4200857911:011:011555
no bgp large-community-list standard lc22 seq 10 permit 4200857911:011:01
<SNIP>
root@tor-4:mgmt:/var/home/cumulus# systemctl reload frr
Job for frr.service failed.
See "systemctl status frr.service" and "journalctl -xeu frr.service" for details.
Syslog:
<SNIP>
2024-05-21T21:02:51.525965+00:00 tor-4 frrinit.sh[2349145]: % Can't find community-list
2024-05-21T21:02:51.526487+00:00 tor-4 staticd[6167]: [VTVCM-Y2NW3] Configuration Read in Took: 00:00:00
2024-05-21T21:02:51.526595+00:00 tor-4 frrinit.sh[2349155]: [2349155|staticd] done
2024-05-21T21:02:51.526826+00:00 tor-4 frrinit.sh[2349145]: line 176: Failure to communicate[13] to bgpd, line: no bgp large-community-list standard lc22 seq 10 permit 4200857911:011:01
2024-05-21T21:02:51.527928+00:00 tor-4 frrinit.sh[2349153]: [2349153|watchfrr] done
2024-05-21T21:02:51.528382+00:00 tor-4 frrinit.sh[2349145]: [2349145|bgpd] Configuration file[/etc/frr/frr.conf] processing failure: 13
<SNIP>
```
After fix:
```
root@tor-4:mgmt:/var/home/cumulus# cat /etc/frr/frr.conf
<SNIP>
bgp large-community-list standard lc22 seq 10 permit 4200857911:011:01 4200857911:011:011555
no bgp large-community-list standard lc22 seq 10 permit 4200857911:011:01
<SNIP>
root@tor-4:mgmt:/var/home/cumulus# systemctl reload frr
root@tor-4:mgmt:/var/home/cumulus#
root@tor-4:mgmt:/var/home/cumulus# vtysh -c "show run" | grep lc22
bgp large-community-list standard lc22 seq 10 permit 4200857911:11:1 4200857911:11:11555
root@tor-4:mgmt:/var/home/cumulus#
```
Signed-off-by: Pooja Jagadeesh Doijode <pdoijode@nvidia.com>
Signed-off-by: Chirag Shah <chirag@nvidia.com>
Diffstat (limited to 'bgpd/bgp_clist.c')
| -rw-r--r-- | bgpd/bgp_clist.c | 44 | 
1 files changed, 19 insertions, 25 deletions
diff --git a/bgpd/bgp_clist.c b/bgpd/bgp_clist.c index 8336d6f311..153cbd6e50 100644 --- a/bgpd/bgp_clist.c +++ b/bgpd/bgp_clist.c @@ -904,9 +904,9 @@ int community_list_set(struct community_list_handler *ch, const char *name,  }  /* Unset community-list */ -int community_list_unset(struct community_list_handler *ch, const char *name, -			 const char *str, const char *seq, int direct, -			 int style) +void community_list_unset(struct community_list_handler *ch, const char *name, +			  const char *str, const char *seq, int direct, +			  int style)  {  	struct community_list_master *cm = NULL;  	struct community_entry *entry = NULL; @@ -916,14 +916,14 @@ int community_list_unset(struct community_list_handler *ch, const char *name,  	/* Lookup community list.  */  	list = community_list_lookup(ch, name, 0, COMMUNITY_LIST_MASTER);  	if (list == NULL) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	cm = community_list_master_lookup(ch, COMMUNITY_LIST_MASTER);  	/* Delete all of entry belongs to this community-list.  */  	if (!str) {  		community_list_delete(cm, list);  		route_map_notify_dependencies(name, RMAP_EVENT_CLIST_DELETED); -		return 0; +		return;  	}  	if (style == COMMUNITY_LIST_STANDARD) @@ -936,12 +936,10 @@ int community_list_unset(struct community_list_handler *ch, const char *name,  		entry = community_list_entry_lookup(list, str, direct);  	if (!entry) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	community_list_entry_delete(cm, list, entry);  	route_map_notify_dependencies(name, RMAP_EVENT_CLIST_DELETED); - -	return 0;  }  bool lcommunity_list_any_match(struct lcommunity *lcom, @@ -1172,9 +1170,9 @@ int lcommunity_list_set(struct community_list_handler *ch, const char *name,  /* Unset community-list.  When str is NULL, delete all of     community-list entry belongs to the specified name.  */ -int lcommunity_list_unset(struct community_list_handler *ch, const char *name, -			  const char *str, const char *seq, int direct, -			  int style) +void lcommunity_list_unset(struct community_list_handler *ch, const char *name, +			   const char *str, const char *seq, int direct, +			   int style)  {  	struct community_list_master *cm = NULL;  	struct community_entry *entry = NULL; @@ -1185,14 +1183,14 @@ int lcommunity_list_unset(struct community_list_handler *ch, const char *name,  	/* Lookup community list.  */  	list = community_list_lookup(ch, name, 0, LARGE_COMMUNITY_LIST_MASTER);  	if (list == NULL) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	cm = community_list_master_lookup(ch, LARGE_COMMUNITY_LIST_MASTER);  	/* Delete all of entry belongs to this community-list.  */  	if (!str) {  		community_list_delete(cm, list);  		route_map_notify_dependencies(name, RMAP_EVENT_LLIST_DELETED); -		return 0; +		return;  	}  	if (style == LARGE_COMMUNITY_LIST_STANDARD) @@ -1201,7 +1199,7 @@ int lcommunity_list_unset(struct community_list_handler *ch, const char *name,  		regex = bgp_regcomp(str);  	if (!lcom && !regex) -		return COMMUNITY_LIST_ERR_MALFORMED_VAL; +		return;  	if (lcom)  		entry = community_list_entry_lookup(list, lcom, direct); @@ -1214,12 +1212,10 @@ int lcommunity_list_unset(struct community_list_handler *ch, const char *name,  		bgp_regex_free(regex);  	if (!entry) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	community_list_entry_delete(cm, list, entry);  	route_map_notify_dependencies(name, RMAP_EVENT_LLIST_DELETED); - -	return 0;  }  /* Set extcommunity-list.  */ @@ -1299,9 +1295,9 @@ int extcommunity_list_set(struct community_list_handler *ch, const char *name,   * When str is NULL, delete all extcommunity-list entries belonging to the   * specified name.   */ -int extcommunity_list_unset(struct community_list_handler *ch, const char *name, -			    const char *str, const char *seq, int direct, -			    int style) +void extcommunity_list_unset(struct community_list_handler *ch, +			     const char *name, const char *str, const char *seq, +			     int direct, int style)  {  	struct community_list_master *cm = NULL;  	struct community_entry *entry = NULL; @@ -1311,14 +1307,14 @@ int extcommunity_list_unset(struct community_list_handler *ch, const char *name,  	/* Lookup extcommunity list.  */  	list = community_list_lookup(ch, name, 0, EXTCOMMUNITY_LIST_MASTER);  	if (list == NULL) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	cm = community_list_master_lookup(ch, EXTCOMMUNITY_LIST_MASTER);  	/* Delete all of entry belongs to this extcommunity-list.  */  	if (!str) {  		community_list_delete(cm, list);  		route_map_notify_dependencies(name, RMAP_EVENT_ECLIST_DELETED); -		return 0; +		return;  	}  	if (style == EXTCOMMUNITY_LIST_STANDARD) @@ -1331,12 +1327,10 @@ int extcommunity_list_unset(struct community_list_handler *ch, const char *name,  		entry = community_list_entry_lookup(list, str, direct);  	if (!entry) -		return COMMUNITY_LIST_ERR_CANT_FIND_LIST; +		return;  	community_list_entry_delete(cm, list, entry);  	route_map_notify_dependencies(name, RMAP_EVENT_ECLIST_DELETED); - -	return 0;  }  /* Initializa community-list.  Return community-list handler.  */  | 
