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?
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;
+#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;