David Gwynne([email protected]) 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;
>