struct rroute has ben removed from ospfd some time ago.  struct kroute
takes an additional 'metric' field.


Index: kroute.c
===================================================================
RCS file: /d/cvs/src/usr.sbin/ospf6d/kroute.c,v
retrieving revision 1.49
diff -u -p -r1.49 kroute.c
--- kroute.c    22 Dec 2016 23:01:58 -0000      1.49
+++ kroute.c    27 Dec 2016 13:45:35 -0000
@@ -51,12 +51,12 @@ struct {
 
 struct kroute_node {
        RB_ENTRY(kroute_node)    entry;
-       struct kroute            r;
        struct kroute_node      *next;
+       struct kroute            r;
 };
 
 void   kr_redist_remove(struct kroute_node *, struct kroute_node *);
-int    kr_redist_eval(struct kroute *, struct rroute *);
+int    kr_redist_eval(struct kroute *, struct kroute *);
 void   kr_redistribute(struct kroute_node *);
 int    kroute_compare(struct kroute_node *, struct kroute_node *);
 
@@ -344,7 +344,7 @@ kr_show_route(struct imsg *imsg)
 void
 kr_redist_remove(struct kroute_node *kh, struct kroute_node *kn)
 {
-       struct rroute    rr;
+       struct kroute    *kr;
 
        /* was the route redistributed? */
        if ((kn->r.flags & F_REDISTRIBUTED) == 0)
@@ -352,8 +352,7 @@ kr_redist_remove(struct kroute_node *kh,
 
        /* remove redistributed flag */
        kn->r.flags &= ~F_REDISTRIBUTED;
-       rr.kr = kn->r;
-       rr.metric = DEFAULT_REDIST_METRIC;      /* some dummy value */
+       kr = &kn->r;
 
        /* probably inform the RDE (check if no other path is redistributed) */
        for (kn = kh; kn; kn = kn->next)
@@ -361,12 +360,12 @@ kr_redist_remove(struct kroute_node *kh,
                        break;
 
        if (kn == NULL)
-               main_imsg_compose_rde(IMSG_NETWORK_DEL, 0, &rr,
-                   sizeof(struct rroute));
+               main_imsg_compose_rde(IMSG_NETWORK_DEL, 0, kr,
+                   sizeof(struct kroute));
 }
 
 int
-kr_redist_eval(struct kroute *kr, struct rroute *rr)
+kr_redist_eval(struct kroute *kr, struct kroute *new_kr)
 {
        u_int32_t        metric = 0;
 
@@ -411,9 +410,9 @@ kr_redist_eval(struct kroute *kr, struct
         * only one of all multipath routes can be redistributed so
         * redistribute the best one.
         */
-       if (rr->metric > metric) {
-               rr->kr = *kr;
-               rr->metric = metric;
+       if (new_kr->metric > metric) {
+               *new_kr = *kr;
+               new_kr->metric = metric;
        }
 
        return (1);
@@ -431,26 +430,25 @@ void
 kr_redistribute(struct kroute_node *kh)
 {
        struct kroute_node      *kn;
-       struct rroute            rr;
+       struct kroute            kr;
        int                      redistribute = 0;
 
-       bzero(&rr, sizeof(rr));
-       rr.metric = UINT_MAX;
+       bzero(&kr, sizeof(kr));
+       kr.metric = UINT_MAX;
        for (kn = kh; kn; kn = kn->next)
-               if (kr_redist_eval(&kn->r, &rr))
+               if (kr_redist_eval(&kn->r, &kr))
                        redistribute = 1;
 
        if (!redistribute)
                return;
 
-       if (rr.kr.flags & F_REDISTRIBUTED) {
-               main_imsg_compose_rde(IMSG_NETWORK_ADD, 0, &rr,
-                   sizeof(struct rroute));
+       if (kr.flags & F_REDISTRIBUTED) {
+               main_imsg_compose_rde(IMSG_NETWORK_ADD, 0, &kr,
+                   sizeof(struct kroute));
        } else {
-               rr.metric = DEFAULT_REDIST_METRIC;      /* some dummy value */
-               rr.kr = kh->r;
-               main_imsg_compose_rde(IMSG_NETWORK_DEL, 0, &rr,
-                   sizeof(struct rroute));
+               kr = kh->r;
+               main_imsg_compose_rde(IMSG_NETWORK_DEL, 0, &kr,
+                   sizeof(struct kroute));
        }
 }
 
Index: ospf6d.h
===================================================================
RCS file: /d/cvs/src/usr.sbin/ospf6d/ospf6d.h,v
retrieving revision 1.30
diff -u -p -r1.30 ospf6d.h
--- ospf6d.h    2 Sep 2016 14:06:35 -0000       1.30
+++ ospf6d.h    27 Dec 2016 13:45:35 -0000
@@ -390,16 +390,12 @@ struct kroute {
        struct in6_addr prefix;
        struct in6_addr nexthop;
        u_int32_t       ext_tag;
+       u_int32_t       metric;
        unsigned int    scope;          /* scope of nexthop */
        u_int16_t       flags;
        u_int16_t       rtlabel;
        u_short         ifindex;
        u_int8_t        prefixlen;
-};
-
-struct rroute {
-       struct kroute   kr;
-       u_int32_t       metric;
 };
 
 /* name2id */
Index: rde.c
===================================================================
RCS file: /d/cvs/src/usr.sbin/ospf6d/rde.c,v
retrieving revision 1.68
diff -u -p -r1.68 rde.c
--- rde.c       3 Sep 2016 10:25:36 -0000       1.68
+++ rde.c       27 Dec 2016 13:45:35 -0000
@@ -59,11 +59,11 @@ int          rde_req_list_exists(struct rde_nbr
 void            rde_req_list_del(struct rde_nbr *, struct lsa_hdr *);
 void            rde_req_list_free(struct rde_nbr *);
 
-struct lsa     *rde_asext_get(struct rroute *);
-struct lsa     *rde_asext_put(struct rroute *);
+struct lsa     *rde_asext_get(struct kroute *);
+struct lsa     *rde_asext_put(struct kroute *);
 
 int             comp_asext(struct lsa *, struct lsa *);
-struct lsa     *orig_asext_lsa(struct rroute *, u_int16_t);
+struct lsa     *orig_asext_lsa(struct kroute *, u_int16_t);
 struct lsa     *orig_sum_lsa(struct rt_node *, struct area *, u_int8_t, int);
 struct lsa     *orig_intra_lsa_net(struct area *, struct iface *,
                 struct vertex *);
@@ -629,7 +629,6 @@ rde_dispatch_parent(int fd, short event,
        struct iface_addr       *ia, *nia;
        struct imsg              imsg;
        struct kroute            kr;
-       struct rroute            rr;
        struct imsgev           *iev = bula;
        struct imsgbuf          *ibuf = &iev->ibuf;
        struct lsa              *lsa;
@@ -660,14 +659,14 @@ rde_dispatch_parent(int fd, short event,
 
                switch (imsg.hdr.type) {
                case IMSG_NETWORK_ADD:
-                       if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof(rr)) {
+                       if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof(kr)) {
                                log_warnx("rde_dispatch_parent: "
                                    "wrong imsg len");
                                break;
                        }
-                       memcpy(&rr, imsg.data, sizeof(rr));
+                       memcpy(&kr, imsg.data, sizeof(kr));
 
-                       if ((lsa = rde_asext_get(&rr)) != NULL) {
+                       if ((lsa = rde_asext_get(&kr)) != NULL) {
                                v = lsa_find(NULL, lsa->hdr.type,
                                    lsa->hdr.ls_id, lsa->hdr.adv_rtr);
 
@@ -675,14 +674,14 @@ rde_dispatch_parent(int fd, short event,
                        }
                        break;
                case IMSG_NETWORK_DEL:
-                       if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof(rr)) {
+                       if (imsg.hdr.len != IMSG_HEADER_SIZE + sizeof(kr)) {
                                log_warnx("rde_dispatch_parent: "
                                    "wrong imsg len");
                                break;
                        }
-                       memcpy(&rr, imsg.data, sizeof(rr));
+                       memcpy(&kr, imsg.data, sizeof(kr));
 
-                       if ((lsa = rde_asext_put(&rr)) != NULL) {
+                       if ((lsa = rde_asext_put(&kr)) != NULL) {
                                v = lsa_find(NULL, lsa->hdr.type,
                                    lsa->hdr.ls_id, lsa->hdr.adv_rtr);
 
@@ -1185,7 +1184,7 @@ rde_req_list_free(struct rde_nbr *nbr)
  * as-external LSA handling
  */
 struct lsa *
-rde_asext_get(struct rroute *rr)
+rde_asext_get(struct kroute *kr)
 {
        struct area             *area;
        struct iface            *iface;
@@ -1199,25 +1198,25 @@ rde_asext_get(struct rroute *rr)
                                        continue;
 
                                inet6applymask(&addr, &ia->addr,
-                                   rr->kr.prefixlen);
-                               if (!memcmp(&addr, &rr->kr.prefix,
-                                   sizeof(addr)) && rr->kr.prefixlen ==
+                                   kr->prefixlen);
+                               if (!memcmp(&addr, &kr->prefix,
+                                   sizeof(addr)) && kr->prefixlen ==
                                    ia->prefixlen) {
                                        /* already announced as Prefix LSA */
                                        log_debug("rde_asext_get: %s/%d is "
                                            "part of prefix LSA",
-                                           log_in6addr(&rr->kr.prefix),
-                                           rr->kr.prefixlen);
+                                           log_in6addr(&kr->prefix),
+                                           kr->prefixlen);
                                        return (NULL);
                                }
                        }
 
        /* update of seqnum is done by lsa_merge */
-       return (orig_asext_lsa(rr, DEFAULT_AGE));
+       return (orig_asext_lsa(kr, DEFAULT_AGE));
 }
 
 struct lsa *
-rde_asext_put(struct rroute *rr)
+rde_asext_put(struct kroute *kr)
 {
        /*
         * just try to remove the LSA. If the prefix is announced as
@@ -1225,7 +1224,7 @@ rde_asext_put(struct rroute *rr)
         */
 
        /* remove by reflooding with MAX_AGE */
-       return (orig_asext_lsa(rr, MAX_AGE));
+       return (orig_asext_lsa(kr, MAX_AGE));
 }
 
 /*
@@ -1601,14 +1600,14 @@ comp_asext(struct lsa *a, struct lsa *b)
 }
 
 struct lsa *
-orig_asext_lsa(struct rroute *rr, u_int16_t age)
+orig_asext_lsa(struct kroute *kr, u_int16_t age)
 {
        struct lsa      *lsa;
        u_int32_t        ext_tag;
        u_int16_t        len, ext_off;
 
        len = sizeof(struct lsa_hdr) + sizeof(struct lsa_asext) +
-           LSA_PREFIXSIZE(rr->kr.prefixlen);
+           LSA_PREFIXSIZE(kr->prefixlen);
 
        /*
         * nexthop -- on connected routes we are the nexthop,
@@ -1618,14 +1617,14 @@ orig_asext_lsa(struct rroute *rr, u_int1
         */
 
        ext_off = len;
-       if (rr->kr.ext_tag) {
+       if (kr->ext_tag) {
                len += sizeof(ext_tag);
        }
        if ((lsa = calloc(1, len)) == NULL)
                fatal("orig_asext_lsa");
 
        log_debug("orig_asext_lsa: %s/%d age %d",
-           log_in6addr(&rr->kr.prefix), rr->kr.prefixlen, age);
+           log_in6addr(&kr->prefix), kr->prefixlen, age);
 
        /* LSA header */
        lsa->hdr.age = htons(age);
@@ -1634,9 +1633,9 @@ orig_asext_lsa(struct rroute *rr, u_int1
        lsa->hdr.seq_num = htonl(INIT_SEQ_NUM);
        lsa->hdr.len = htons(len);
 
-       lsa->data.asext.prefix.prefixlen = rr->kr.prefixlen;
+       lsa->data.asext.prefix.prefixlen = kr->prefixlen;
        memcpy((char *)lsa + sizeof(struct lsa_hdr) + sizeof(struct lsa_asext),
-           &rr->kr.prefix, LSA_PREFIXSIZE(rr->kr.prefixlen));
+           &kr->prefix, LSA_PREFIXSIZE(kr->prefixlen));
 
        lsa->hdr.ls_id = lsa_find_lsid(&asext_tree, lsa->hdr.type,
            lsa->hdr.adv_rtr, comp_asext, lsa);
@@ -1650,22 +1649,22 @@ orig_asext_lsa(struct rroute *rr, u_int1
                v = lsa_find(NULL, lsa->hdr.type, lsa->hdr.ls_id,
                    lsa->hdr.adv_rtr);
                if (v != NULL) {
-                       rr->metric = ntohl(v->lsa->data.asext.metric);
-                       if (rr->metric & LSA_ASEXT_T_FLAG) {
+                       kr->metric = ntohl(v->lsa->data.asext.metric);
+                       if (kr->metric & LSA_ASEXT_T_FLAG) {
                                memcpy(&ext_tag, (char *)v->lsa + ext_off,
                                    sizeof(ext_tag));
-                               rr->kr.ext_tag = ntohl(ext_tag);
+                               kr->ext_tag = ntohl(ext_tag);
                        }
-                       rr->metric &= LSA_METRIC_MASK;
+                       kr->metric &= LSA_METRIC_MASK;
                }
        }
 
-       if (rr->kr.ext_tag) {
-               lsa->data.asext.metric = htonl(rr->metric | LSA_ASEXT_T_FLAG);
-               ext_tag = htonl(rr->kr.ext_tag);
+       if (kr->ext_tag) {
+               lsa->data.asext.metric = htonl(kr->metric | LSA_ASEXT_T_FLAG);
+               ext_tag = htonl(kr->ext_tag);
                memcpy((char *)lsa + ext_off, &ext_tag, sizeof(ext_tag));
        } else {
-               lsa->data.asext.metric = htonl(rr->metric);
+               lsa->data.asext.metric = htonl(kr->metric);
        }
 
        lsa->hdr.ls_chksum = 0;


-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to