On Mon, Jun 25 2018, Remi Locherer <[email protected]> wrote:
> On Fri, Jun 22, 2018 at 12:25:40AM +0200, Jeremie Courreges-Anglas wrote:
>> On Tue, Jun 19 2018, Remi Locherer <[email protected]> wrote:
>> > On Tue, Jun 19, 2018 at 03:59:24PM +0100, Stuart Henderson wrote:
>> >> On 2018/06/18 08:53, Remi Locherer wrote:
>> >> > Index: ospfd.h
>> >> > ===================================================================
>> >> > RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
>> >> > retrieving revision 1.100
>> >> > diff -u -p -r1.100 ospfd.h
>> >> > --- ospfd.h     11 Feb 2018 02:27:33 -0000      1.100
>> >> > +++ ospfd.h     12 Jun 2018 20:41:43 -0000
>> >> ...
>> >> > -struct ifaddrdel {
>> >> > +struct ifaddr {
>> >> >         struct in_addr          addr;
>> >> > +       struct in_addr          mask;
>> >> > +       struct in_addr          dst;
>> >> >         unsigned int            ifindex;
>> >> >  };
>> >> 
>> >> I think it would be better to use a different name.
>> >> 
>> >> Even if there's no actual conflict as if_var.h isn't pulled in, this is
>> >> renaming this struct to "struct ifaddr" is at least confusing.
>> >
>> > Oh yes, that is unfortunate.
>> >
>> > What would be a better name for this struct? 
>> > iface_addr maybe? Or if_addrmask?
>> 
>> ospf6d uses struct ifaddrchange.
>
> Updated diff with  "struct ifaddrchage" instead of "struct ifaddr".
>
> OK?

Seems to work fine on my dumb test setup.  ok jca@

> Index: kroute.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/kroute.c,v
> retrieving revision 1.109
> diff -u -p -r1.109 kroute.c
> --- kroute.c  11 Feb 2018 02:27:33 -0000      1.109
> +++ kroute.c  25 Jun 2018 06:23:41 -0000
> @@ -1072,8 +1072,9 @@ void
>  if_newaddr(u_short ifindex, struct sockaddr_in *ifa, struct sockaddr_in 
> *mask,
>      struct sockaddr_in *brd)
>  {
> -     struct kif_node *kif;
> -     struct kif_addr *ka;
> +     struct kif_node         *kif;
> +     struct kif_addr         *ka;
> +     struct ifaddrchange      ifn;
>  
>       if (ifa == NULL || ifa->sin_family != AF_INET)
>               return;
> @@ -1094,15 +1095,21 @@ if_newaddr(u_short ifindex, struct socka
>               ka->dstbrd.s_addr = INADDR_NONE;
>  
>       TAILQ_INSERT_TAIL(&kif->addrs, ka, entry);
> +
> +     ifn.addr = ka->addr;
> +     ifn.mask = ka->mask;
> +     ifn.dst = ka->dstbrd;
> +     ifn.ifindex = ifindex;
> +     main_imsg_compose_ospfe(IMSG_IFADDRADD, 0, &ifn, sizeof(ifn));
>  }
>  
>  void
>  if_deladdr(u_short ifindex, struct sockaddr_in *ifa, struct sockaddr_in 
> *mask,
>      struct sockaddr_in *brd)
>  {
> -     struct kif_node *kif;
> -     struct kif_addr *ka, *nka;
> -     struct ifaddrdel ifc;
> +     struct kif_node         *kif;
> +     struct kif_addr         *ka, *nka;
> +     struct ifaddrchange      ifc;
>  
>       if (ifa == NULL || ifa->sin_family != AF_INET)
>               return;
> Index: ospfd.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/ospfd.h,v
> retrieving revision 1.100
> diff -u -p -r1.100 ospfd.h
> --- ospfd.h   11 Feb 2018 02:27:33 -0000      1.100
> +++ ospfd.h   25 Jun 2018 06:19:23 -0000
> @@ -132,6 +132,7 @@ enum imsg_type {
>       IMSG_RECONF_REDIST,
>       IMSG_RECONF_END,
>       IMSG_DEMOTE,
> +     IMSG_IFADDRADD,
>       IMSG_IFADDRDEL
>  };
>  
> @@ -363,8 +364,10 @@ struct iface {
>       u_int8_t                 passive;
>  };
>  
> -struct ifaddrdel {
> +struct ifaddrchange {
>       struct in_addr          addr;
> +     struct in_addr          mask;
> +     struct in_addr          dst;
>       unsigned int            ifindex;
>  };
>  
> Index: ospfe.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospfd/ospfe.c,v
> retrieving revision 1.100
> diff -u -p -r1.100 ospfe.c
> --- ospfe.c   5 Feb 2018 12:11:28 -0000       1.100
> +++ ospfe.c   25 Jun 2018 06:24:24 -0000
> @@ -275,7 +275,7 @@ ospfe_dispatch_main(int fd, short event,
>  {
>       static struct area      *narea;
>       static struct iface     *niface;
> -     struct ifaddrdel        *ifc;
> +     struct ifaddrchange     *ifc;
>       struct imsg      imsg;
>       struct imsgev   *iev = bula;
>       struct imsgbuf  *ibuf = &iev->ibuf;
> @@ -361,9 +361,38 @@ ospfe_dispatch_main(int fd, short event,
>                               }
>                       }
>                       break;
> +             case IMSG_IFADDRADD:
> +                     if (imsg.hdr.len != IMSG_HEADER_SIZE +
> +                         sizeof(struct ifaddrchange))
> +                             fatalx("IFADDRADD imsg with wrong len");
> +                     ifc = imsg.data;
> +
> +                     LIST_FOREACH(area, &oeconf->area_list, entry) {
> +                             LIST_FOREACH(iface, &area->iface_list, entry) {
> +                                     if (ifc->ifindex == iface->ifindex &&
> +                                         ifc->addr.s_addr ==
> +                                         iface->addr.s_addr) {
> +                                             iface->mask = ifc->mask;
> +                                             iface->dst = ifc->dst;
> +                                             /*
> +                                              * Previous down event might
> +                                              * have failed if the address
> +                                              * was not present at that
> +                                              * time.
> +                                              */
> +                                             if_fsm(iface, IF_EVT_DOWN);
> +                                             if_fsm(iface, IF_EVT_UP);
> +                                             log_warnx("interface %s:%s "
> +                                                 "returned", iface->name,
> +                                                 inet_ntoa(iface->addr));
> +                                             break;
> +                                     }
> +                             }
> +                     }
> +                     break;
>               case IMSG_IFADDRDEL:
>                       if (imsg.hdr.len != IMSG_HEADER_SIZE +
> -                         sizeof(struct ifaddrdel))
> +                         sizeof(struct ifaddrchange))
>                               fatalx("IFADDRDEL imsg with wrong len");
>                       ifc = imsg.data;
>  
>

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

Reply via email to