]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Do not forget to update conditional advertisements rmaps for peer-groups
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 7 Apr 2022 20:01:02 +0000 (23:01 +0300)
committermergify-bot <noreply@mergify.com>
Wed, 13 Apr 2022 19:00:55 +0000 (19:00 +0000)
When the peer is configured for the first time:
```
neighbor P1 peer-group
neighbor P1 remote-as external
neighbor P1 advertise-map ADV exist-map EXIST
neighbor 10.10.10.1 peer-group P1
```

Conditional advertisements route-maps are not updated and cond. advertisements
do not work until FRR restarted. BGP sessions clear does not help.

Or even changing peer-group for a peer, causes this bug to kick in.

```
no neighbor 10.10.10.1
neighbor 10.10.10.1 peer-group P2
```

With this fix, cond. advertisements start working immediatelly.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit 9118301e48af0dc0157184554601c767cbd25128)

bgpd/bgp_routemap.c
bgpd/bgpd.c

index 2216d5140d1bbc7c911b3f2c426f33b91c0e2cda..2ebdb2a246900d82198d517bef8f11352301f2cc 100644 (file)
@@ -3801,6 +3801,14 @@ static void bgp_route_map_update_peer_group(const char *rmap_name,
                        if (filter->usmap.name
                            && (strcmp(rmap_name, filter->usmap.name) == 0))
                                filter->usmap.map = map;
+
+                       if (filter->advmap.aname &&
+                           (strcmp(rmap_name, filter->advmap.aname) == 0))
+                               filter->advmap.amap = map;
+
+                       if (filter->advmap.cname &&
+                           (strcmp(rmap_name, filter->advmap.cname) == 0))
+                               filter->advmap.cmap = map;
                }
        }
 }
index 7e528b21916ef7096e582829d8c3e24f48a89d19..21c88e4db978fa65e2e506c2d605d646d9f61f79 100644 (file)
@@ -2101,6 +2101,20 @@ static void peer_group2peer_config_copy_af(struct peer_group *group,
                PEER_ATTR_INHERIT(peer, group, filter[afi][safi].usmap.map);
        }
 
+       /* Conditional Advertisements */
+       if (!CHECK_FLAG(pfilter_ovrd[RMAP_OUT], PEER_FT_ADVERTISE_MAP)) {
+               PEER_STR_ATTR_INHERIT(peer, group,
+                                     filter[afi][safi].advmap.aname,
+                                     MTYPE_BGP_FILTER_NAME);
+               PEER_ATTR_INHERIT(peer, group, filter[afi][safi].advmap.amap);
+               PEER_STR_ATTR_INHERIT(peer, group,
+                                     filter[afi][safi].advmap.cname,
+                                     MTYPE_BGP_FILTER_NAME);
+               PEER_ATTR_INHERIT(peer, group, filter[afi][safi].advmap.cmap);
+               PEER_ATTR_INHERIT(peer, group,
+                                 filter[afi][safi].advmap.condition);
+       }
+
        if (peer->addpath_type[afi][safi] == BGP_ADDPATH_NONE) {
                peer->addpath_type[afi][safi] = conf->addpath_type[afi][safi];
                bgp_addpath_type_changed(conf->bgp);