On Tue, Dec 27, 2016 at 02:55:08PM +0100, Jeremie Courreges-Anglas wrote:
> 
> struct rroute has ben removed from ospfd some time ago.  struct kroute
> takes an additional 'metric' field.
> 

Reads good. OK claudio@

> 
> 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
> 

-- 
:wq Claudio

Reply via email to