Claudio Jeker([email protected]) on 2018.07.24 10:22:40 +0200:
> This diff simply changes all the nexthop accesses from asp->nexthop to
> calling prefix_nexthop() which currently does the same. This will ease
> moving the nexthop into struct prefix and is part of a larger diff that
> does exactly that.
>
> OK?
read ok benno@
> --
> :wq Claudio
>
> Index: mrt.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/mrt.c,v
> retrieving revision 1.85
> diff -u -p -r1.85 mrt.c
> --- mrt.c 17 Jul 2018 07:02:11 -0000 1.85
> +++ mrt.c 24 Jul 2018 08:19:35 -0000
> @@ -310,7 +310,7 @@ mrt_dump_entry_mp(struct mrt *mrt, struc
>
> pt_getaddr(p->re->prefix, &addr);
>
> - n = prefix_aspath(p)->nexthop;
> + n = prefix_nexthop(p);
> if (n == NULL) {
> bzero(&nexthop, sizeof(struct bgpd_addr));
> nexthop.aid = addr.aid;
> @@ -385,7 +385,7 @@ mrt_dump_entry(struct mrt *mrt, struct p
> return (-1);
> }
>
> - nexthop = prefix_aspath(p)->nexthop;
> + nexthop = prefix_nexthop(p);
> if (nexthop == NULL) {
> bzero(&addr, sizeof(struct bgpd_addr));
> addr.aid = p->re->prefix->aid;
> @@ -501,7 +501,7 @@ mrt_dump_entry_v2(struct mrt *mrt, struc
> struct bgpd_addr *nh;
> struct ibuf *tbuf;
>
> - nexthop = prefix_aspath(p)->nexthop;
> + nexthop = prefix_nexthop(p);
> if (nexthop == NULL) {
> bzero(&addr, sizeof(struct bgpd_addr));
> addr.aid = re->prefix->aid;
> Index: rde.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
> retrieving revision 1.399
> diff -u -p -r1.399 rde.c
> --- rde.c 22 Jul 2018 16:59:08 -0000 1.399
> +++ rde.c 24 Jul 2018 08:19:35 -0000
> @@ -2028,10 +2028,10 @@ rde_dump_rib_as(struct prefix *p, struct
> memcpy(&rib.remote_addr, &prefix_peer(p)->remote_addr,
> sizeof(rib.remote_addr));
> rib.remote_id = prefix_peer(p)->remote_bgpid;
> - if (asp->nexthop != NULL) {
> - memcpy(&rib.true_nexthop, &asp->nexthop->true_nexthop,
> + if (prefix_nexthop(p) != NULL) {
> + memcpy(&rib.true_nexthop, &prefix_nexthop(p)->true_nexthop,
> sizeof(rib.true_nexthop));
> - memcpy(&rib.exit_nexthop, &asp->nexthop->exit_nexthop,
> + memcpy(&rib.exit_nexthop, &prefix_nexthop(p)->exit_nexthop,
> sizeof(rib.exit_nexthop));
> } else {
> /* announced network may have a NULL nexthop */
> @@ -2050,7 +2050,8 @@ rde_dump_rib_as(struct prefix *p, struct
> rib.flags |= F_PREF_INTERNAL;
> if (asp->flags & F_PREFIX_ANNOUNCED)
> rib.flags |= F_PREF_ANNOUNCE;
> - if (asp->nexthop == NULL || asp->nexthop->state == NEXTHOP_REACH)
> + if (prefix_nexthop(p) == NULL ||
> + prefix_nexthop(p)->state == NEXTHOP_REACH)
> rib.flags |= F_PREF_ELIGIBLE;
> if (asp->flags & F_ATTR_LOOP)
> rib.flags &= ~F_PREF_ELIGIBLE;
> @@ -2425,7 +2426,7 @@ rde_send_kroute(struct rib *rib, struct
> if (asp->flags & F_NEXTHOP_BLACKHOLE)
> kr.flags |= F_BLACKHOLE;
> if (type == IMSG_KROUTE_CHANGE)
> - memcpy(&kr.nexthop, &asp->nexthop->true_nexthop,
> + memcpy(&kr.nexthop, &prefix_nexthop(p)->true_nexthop,
> sizeof(kr.nexthop));
> strlcpy(kr.label, rtlabel_id2name(asp->rtlabelid), sizeof(kr.label));
>
> @@ -2442,7 +2443,8 @@ rde_send_kroute(struct rib *rib, struct
> * is chosen
> */
> if (type == IMSG_KROUTE_CHANGE)
> - memcpy(&kr.nexthop, &asp->nexthop->exit_nexthop,
> + memcpy(&kr.nexthop,
> + &prefix_nexthop(p)->exit_nexthop,
> sizeof(kr.nexthop));
> if (imsg_compose(ibuf_main, type, rd->rtableid, 0, -1,
> &kr, sizeof(kr)) == -1)
> @@ -3495,11 +3497,11 @@ network_dump_upcall(struct rib_entry *re
>
> bzero(&k, sizeof(k));
> memcpy(&k.prefix, &addr, sizeof(k.prefix));
> - if (asp->nexthop == NULL ||
> - asp->nexthop->state != NEXTHOP_REACH)
> + if (prefix_nexthop(p) == NULL ||
> + prefix_nexthop(p)->state != NEXTHOP_REACH)
> k.nexthop.aid = k.prefix.aid;
> else
> - memcpy(&k.nexthop, &asp->nexthop->true_nexthop,
> + memcpy(&k.nexthop, &prefix_nexthop(p)->true_nexthop,
> sizeof(k.nexthop));
> k.prefixlen = p->re->prefix->prefixlen;
> k.flags = F_KERNEL;
> Index: rde_decide.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde_decide.c,v
> retrieving revision 1.68
> diff -u -p -r1.68 rde_decide.c
> --- rde_decide.c 21 Jun 2018 17:26:16 -0000 1.68
> +++ rde_decide.c 24 Jul 2018 08:19:35 -0000
> @@ -136,9 +136,11 @@ prefix_cmp(struct prefix *p1, struct pre
> return (1);
>
> /* 1. check if prefix is eligible a.k.a reachable */
> - if (asp2->nexthop != NULL && asp2->nexthop->state != NEXTHOP_REACH)
> + if (prefix_nexthop(p2) != NULL &&
> + prefix_nexthop(p2)->state != NEXTHOP_REACH)
> return (1);
> - if (asp1->nexthop != NULL && asp1->nexthop->state != NEXTHOP_REACH)
> + if (prefix_nexthop(p1) != NULL &&
> + prefix_nexthop(p1)->state != NEXTHOP_REACH)
> return (-1);
>
> /* 2. local preference of prefix, bigger is better */
> @@ -274,8 +276,8 @@ prefix_evaluate(struct prefix *p, struct
> if (xp != NULL) {
> struct rde_aspath *xasp = prefix_aspath(xp);
> if (xasp->flags & (F_ATTR_LOOP|F_ATTR_PARSE_ERR) ||
> - (xasp->nexthop != NULL &&
> - xasp->nexthop->state != NEXTHOP_REACH))
> + (prefix_nexthop(xp) != NULL &&
> + prefix_nexthop(xp)->state != NEXTHOP_REACH))
> /* xp is ineligible */
> xp = NULL;
> }
>