David Gwynne(da...@gwynne.id.au) on 2017.05.29 15:34:51 +1000:
> this rolls vnetid and parent into a single encap line in ifconfig.
> 
> eg:
> 
> -       vnetid: 7
> -       parent: ix1
> +       encap: vnetid: 7 parent: ix1
> 
> after this i would like to get rid of the vlan compat goo.
> 
> ok?

yes, one whitespace below

> 
> Index: ifconfig.c
> ===================================================================
> RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
> retrieving revision 1.340
> diff -u -p -r1.340 ifconfig.c
> --- ifconfig.c        21 Mar 2017 07:24:36 -0000      1.340
> +++ ifconfig.c        29 May 2017 03:29:09 -0000
> @@ -153,6 +153,8 @@ int       shownet80211chans;
>  int  shownet80211nodes;
>  int  showclasses;
>  
> +struct ifencap;
> +
>  void notealias(const char *, int);
>  void setifaddr(const char *, int);
>  void setifrtlabel(const char *, int);
> @@ -186,10 +188,11 @@ void    settunnelinst(const char *, int);
>  void settunnelttl(const char *, int);
>  void setvnetid(const char *, int);
>  void delvnetid(const char *, int);
> -void getvnetid(void);
> +void getvnetid(struct ifencap *);
>  void setifparent(const char *, int);
>  void delifparent(const char *, int);
> -void getifparent(void);
> +void getifparent(struct ifencap *);
> +void getencap(void);
>  void setia6flags(const char *, int);
>  void setia6pltime(const char *, int);
>  void setia6vltime(const char *, int);
> @@ -2999,8 +3002,7 @@ status(int link, struct sockaddr_dl *sdl
>               printf("\tpatch: %s\n", ifname);
>  #endif
>       vlan_status();
> -     getvnetid();
> -     getifparent();
> +     getencap();
>  #ifndef SMALL
>       carp_status();
>       pfsync_status();
> @@ -3617,6 +3619,22 @@ setmpwcontrolword(const char *value, int
>  }
>  #endif /* SMALL */
>  
> +struct ifencap {
> +        unsigned int  ife_flags;

spaces up front

> +#define IFE_VNETID_MASK              0xf
> +#define IFE_VNETID_NOPE              0x0
> +#define IFE_VNETID_NONE              0x1
> +#define IFE_VNETID_ANY               0x2
> +#define IFE_VNETID_SET               0x3
> +     int64_t          ife_vnetid;
> +
> +#define IFE_PARENT_MASK              0xf0
> +#define IFE_PARENT_NOPE              0x00
> +#define IFE_PARENT_NONE              0x10
> +#define IFE_PARENT_SET               0x20
> +     char            ife_parent[IFNAMSIZ];
> +};
> +
>  void
>  setvnetid(const char *id, int param)
>  {
> @@ -3647,7 +3665,7 @@ delvnetid(const char *ignored, int alsoi
>  }
>  
>  void
> -getvnetid(void)
> +getvnetid(struct ifencap *ife)
>  {
>       if (strlcpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)) >=
>           sizeof(ifr.ifr_name))
> @@ -3657,17 +3675,17 @@ getvnetid(void)
>               if (errno != EADDRNOTAVAIL)
>                       return;
>  
> -             printf("\tvnetid: none\n");
> -
> +             ife->ife_flags |= IFE_VNETID_NONE;
>               return;
>       }
>  
>       if (ifr.ifr_vnetid < 0) {
> -             printf("\tvnetid: any\n");
> +             ife->ife_flags |= IFE_VNETID_ANY;
>               return;
>       }
>  
> -     printf("\tvnetid: %lld\n", ifr.ifr_vnetid);
> +     ife->ife_flags |= IFE_VNETID_SET;
> +     ife->ife_vnetid = ifr.ifr_vnetid;
>  }
>  
>  void
> @@ -3696,10 +3714,9 @@ delifparent(const char *ignored, int als
>  }
>  
>  void
> -getifparent(void)
> +getifparent(struct ifencap *ife)
>  {
>       struct if_parent ifp;
> -     const char *parent = "none";
>  
>       memset(&ifp, 0, sizeof(ifp));
>       if (strlcpy(ifp.ifp_name, name, sizeof(ifp.ifp_name)) >=
> @@ -3709,10 +3726,50 @@ getifparent(void)
>       if (ioctl(s, SIOCGIFPARENT, (caddr_t)&ifp) == -1) {
>               if (errno != EADDRNOTAVAIL)
>                       return;
> -     } else
> -             parent = ifp.ifp_parent;
>  
> -     printf("\tparent: %s\n", parent);
> +             ife->ife_flags |= IFE_PARENT_NONE;
> +     } else {
> +             memcpy(ife->ife_parent, ifp.ifp_parent,
> +                 sizeof(ife->ife_parent));
> +             ife->ife_flags |= IFE_PARENT_SET;
> +     }
> +}
> +
> +void
> +getencap(void)
> +{
> +     struct ifencap ife = { .ife_flags = 0 };
> +
> +     getvnetid(&ife);
> +     getifparent(&ife);
> +
> +     if (ife.ife_flags == 0)
> +             return;
> +
> +     printf("\tencap:");
> +
> +     switch (ife.ife_flags & IFE_VNETID_MASK) {
> +     case IFE_VNETID_NONE:
> +             printf(" vnetid: none");
> +             break;
> +     case IFE_VNETID_ANY:
> +             printf(" vnetid: any");
> +             break;
> +     case IFE_VNETID_SET:
> +             printf(" vnetid: %lld", ife.ife_vnetid);
> +             break;
> +     }
> +
> +     switch (ife.ife_flags & IFE_PARENT_MASK) {
> +     case IFE_PARENT_NONE:
> +             printf(" parent: none");
> +             break;
> +     case IFE_PARENT_SET:
> +             printf(" parent: %s", ife.ife_parent);
> +             break;
> +     }
> +
> +     printf("\n");
>  }
>  
>  static int __tag = 0;
> 

Reply via email to