ok

Claudio Jeker(cje...@diehard.n-r-g.com) on 2019.02.15 12:01:20 +0100:
> To make bgpd more portable it is better to move all the link state code
> into kroute.c. Especially for something as simple as a single up / down
> flag.  This is doing that and removes the net/if_types.h include from
> session.c. Result should be the same just computation is moved.
> 
> OK?
> -- 
> :wq Claudio
> 
> Index: bgpd.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
> retrieving revision 1.368
> diff -u -p -r1.368 bgpd.h
> --- bgpd.h    14 Feb 2019 13:13:33 -0000      1.368
> +++ bgpd.h    15 Feb 2019 10:40:59 -0000
> @@ -638,6 +638,7 @@ struct kif {
>       u_int8_t                 if_type;
>       u_int8_t                 link_state;
>       u_int8_t                 nh_reachable;  /* for nexthop verification */
> +     u_int8_t                 depend_state;  /* for session depend on */
>  };
>  
>  struct session_up {
> Index: kroute.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/kroute.c,v
> retrieving revision 1.230
> diff -u -p -r1.230 kroute.c
> --- kroute.c  11 Feb 2019 15:44:25 -0000      1.230
> +++ kroute.c  15 Feb 2019 10:50:24 -0000
> @@ -25,6 +25,7 @@
>  #include <arpa/inet.h>
>  #include <net/if.h>
>  #include <net/if_dl.h>
> +#include <net/if_types.h>
>  #include <net/route.h>
>  #include <netmpls/mpls.h>
>  #include <err.h>
> @@ -154,7 +155,6 @@ int                        kif_kr_remove(struct 
> kroute_node 
>  int                   kif_kr6_insert(struct kroute6_node *);
>  int                   kif_kr6_remove(struct kroute6_node *);
>  
> -int                   kif_validate(struct kif *);
>  int                   kroute_validate(struct kroute *);
>  int                   kroute6_validate(struct kroute6 *);
>  void                  knexthop_validate(struct ktable *,
> @@ -2235,7 +2235,7 @@ kif_kr6_remove(struct kroute6_node *kr)
>   * nexthop validation
>   */
>  
> -int
> +static int
>  kif_validate(struct kif *kif)
>  {
>       if (!(kif->flags & IFF_UP))
> @@ -2253,6 +2253,26 @@ kif_validate(struct kif *kif)
>       return (1);
>  }
>  
> +/*
> + * return 1 when the interface is up and the link state is up or unknwown
> + * except when this is a carp interface, then return 1 only when link state
> + * is up
> + */
> +static int
> +kif_depend_state(struct kif *kif)
> +{
> +     if (!(kif->flags & IFF_UP))
> +             return (0);
> +
> +
> +     if (kif->if_type == IFT_CARP &&
> +         kif->link_state == LINK_STATE_UNKNOWN)
> +             return (0);
> +
> +     return LINK_STATE_IS_UP(kif->link_state);
> +}
> +
> +
>  int
>  kroute_validate(struct kroute *kr)
>  {
> @@ -2654,6 +2674,7 @@ if_change(u_short ifindex, int flags, st
>       kif->k.if_type = ifd->ifi_type;
>       kif->k.rdomain = ifd->ifi_rdomain;
>       kif->k.baudrate = ifd->ifi_baudrate;
> +     kif->k.depend_state = kif_depend_state(&kif->k);
>  
>       send_imsg_session(IMSG_IFINFO, 0, &kif->k, sizeof(kif->k));
>  
> @@ -3255,6 +3276,7 @@ fetchifs(int ifindex)
>               kif->k.rdomain = ifm.ifm_data.ifi_rdomain;
>               kif->k.baudrate = ifm.ifm_data.ifi_baudrate;
>               kif->k.nh_reachable = kif_validate(&kif->k);
> +             kif->k.depend_state = kif_depend_state(&kif->k);
>  
>               if ((sa = rti_info[RTAX_IFP]) != NULL)
>                       if (sa->sa_family == AF_LINK) {
> Index: session.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/session.c,v
> retrieving revision 1.371
> diff -u -p -r1.371 session.c
> --- session.c 20 Jan 2019 23:27:48 -0000      1.371
> +++ session.c 15 Feb 2019 10:52:13 -0000
> @@ -24,7 +24,6 @@
>  #include <sys/time.h>
>  #include <sys/resource.h>
>  #include <sys/un.h>
> -#include <net/if_types.h>
>  #include <netinet/in.h>
>  #include <netinet/ip.h>
>  #include <netinet/tcp.h>
> @@ -96,7 +95,6 @@ void        session_up(struct peer *);
>  void session_down(struct peer *);
>  int  imsg_rde(int, u_int32_t, void *, u_int16_t);
>  void session_demote(struct peer *, int);
> -int  session_link_state_is_up(int, int, int);
>  
>  int           la_cmp(struct listen_addr *, struct listen_addr *);
>  struct peer  *getpeerbyip(struct sockaddr *);
> @@ -2812,8 +2810,7 @@ session_dispatch_imsg(struct imsgbuf *ib
>                           sizeof(struct kif))
>                               fatalx("IFINFO imsg with wrong len");
>                       kif = imsg.data;
> -                     depend_ok = session_link_state_is_up(kif->flags,
> -                         kif->if_type, kif->link_state);
> +                     depend_ok = kif->depend_state;
>  
>                       for (p = peers; p != NULL; p = p->next)
>                               if (!strcmp(p->conf.if_depend, kif->ifname)) {
> @@ -3319,23 +3316,4 @@ session_stop(struct peer *peer, u_int8_t
>               break;
>       }
>       bgp_fsm(peer, EVNT_STOP);
> -}
> -
> -/*
> - * return 1 when the interface is up
> - * and the link state is up or unknwown
> - * except when this is a carp interface, then
> - * return 1 only when link state is up
> - */
> -int
> -session_link_state_is_up(int flags, int type, int link_state)
> -{
> -     if (!(flags & IFF_UP))
> -             return (0);
> -
> -     if (type == IFT_CARP &&
> -         link_state == LINK_STATE_UNKNOWN)
> -             return (0);
> -
> -     return LINK_STATE_IS_UP(link_state);
>  }
> 

Reply via email to