ok
Claudio Jeker(cje...@diehard.n-r-g.com) on 2021.06.24 17:03:58 +0200:
> In rde_update_dispatch() do the AFI check for IPv4 prefixes before
> extracting the prefix. This is similar to what the MP code does and
> is also more logical.
>
> OK?
> --
> :wq Claudio
>
> Index: rde.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
> retrieving revision 1.528
> diff -u -p -r1.528 rde.c
> --- rde.c 24 Jun 2021 13:03:31 -0000 1.528
> +++ rde.c 24 Jun 2021 15:00:10 -0000
> @@ -1280,6 +1280,14 @@ rde_update_dispatch(struct rde_peer *pee
>
> /* withdraw prefix */
> while (len > 0) {
> + if (peer->capa.mp[AID_INET] == 0) {
> + log_peer_warnx(&peer->conf,
> + "bad withdraw, %s disabled", aid2str(AID_INET));
> + rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR,
> + NULL, 0);
> + goto done;
> + }
> +
> if ((pos = nlri_get_prefix(p, len, &prefix,
> &prefixlen)) == -1) {
> /*
> @@ -1294,14 +1302,6 @@ rde_update_dispatch(struct rde_peer *pee
> p += pos;
> len -= pos;
>
> - if (peer->capa.mp[AID_INET] == 0) {
> - log_peer_warnx(&peer->conf,
> - "bad withdraw, %s disabled", aid2str(AID_INET));
> - rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR,
> - NULL, 0);
> - goto done;
> - }
> -
> rde_update_withdraw(peer, &prefix, prefixlen);
> }
>
> @@ -1393,6 +1393,14 @@ rde_update_dispatch(struct rde_peer *pee
>
> /* parse nlri prefix */
> while (nlri_len > 0) {
> + if (peer->capa.mp[AID_INET] == 0) {
> + log_peer_warnx(&peer->conf,
> + "bad update, %s disabled", aid2str(AID_INET));
> + rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR,
> + NULL, 0);
> + goto done;
> + }
> +
> if ((pos = nlri_get_prefix(p, nlri_len, &prefix,
> &prefixlen)) == -1) {
> log_peer_warnx(&peer->conf, "bad nlri prefix");
> @@ -1402,14 +1410,6 @@ rde_update_dispatch(struct rde_peer *pee
> }
> p += pos;
> nlri_len -= pos;
> -
> - if (peer->capa.mp[AID_INET] == 0) {
> - log_peer_warnx(&peer->conf,
> - "bad update, %s disabled", aid2str(AID_INET));
> - rde_update_err(peer, ERR_UPDATE, ERR_UPD_OPTATTR,
> - NULL, 0);
> - goto done;
> - }
>
> if (rde_update_update(peer, &state, &prefix, prefixlen) == -1)
> goto done;
>