ifconfig: Add format shortcuts.

MFC after:	1 week
Reviewed by:	imp
Differential Revision:	https://reviews.freebsd.org/D45166

(cherry picked from commit 847ef59d4b)
This commit is contained in:
Dag-Erling Smørgrav 2024-05-14 08:51:42 +02:00
parent b6011652be
commit 54290c48db
2 changed files with 37 additions and 18 deletions

View File

@ -27,7 +27,7 @@
.\"
.\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94
.\"
.Dd February 1, 2023
.Dd May 12, 2024
.Dt IFCONFIG 8
.Os
.Sh NAME
@ -131,7 +131,7 @@ and their associated
.Ar format
strings are:
.Pp
.Bl -tag -width ether
.Bl -tag -width default
.It Cm addr
Adjust the display of inet and inet6 addresses:
.Pp
@ -193,6 +193,16 @@ Integer format, for example:
.Ql prefixlen 64
.El
.El
.Pp
In addition, the following shortcuts are accepted:
.Bl -tag -width default
.It Cm default
Resets all formats to their default values.
.It Cm cidr
Shortcut notation for
.Cm inet:cidr,inet6:cidr .
.El
.Pp
.It Fl G Ar groupname
Exclude members of the specified
.Ar groupname

View File

@ -303,14 +303,10 @@ cmpifaddrs(struct ifaddrs *a, struct ifaddrs *b, struct ifa_queue *q)
static void freeformat(void)
{
if (f_inet != NULL)
free(f_inet);
if (f_inet6 != NULL)
free(f_inet6);
if (f_ether != NULL)
free(f_ether);
if (f_addr != NULL)
free(f_addr);
free(f_inet);
free(f_inet6);
free(f_ether);
free(f_addr);
}
static void setformat(char *input)
@ -320,9 +316,18 @@ static void setformat(char *input)
formatstr = strdup(input);
while ((category = strsep(&formatstr, ",")) != NULL) {
modifier = strchr(category, ':');
if (modifier == NULL || modifier[1] == '\0') {
warnx("Skipping invalid format specification: %s\n",
category);
if (modifier == NULL) {
if (strcmp(category, "default") == 0) {
freeformat();
} else if (strcmp(category, "cidr") == 0) {
free(f_inet);
f_inet = strdup(category);
free(f_inet6);
f_inet6 = strdup(category);
} else {
warnx("Skipping invalid format: %s\n",
category);
}
continue;
}
@ -330,14 +335,19 @@ static void setformat(char *input)
modifier[0] = '\0';
modifier++;
if (strcmp(category, "addr") == 0)
if (strcmp(category, "addr") == 0) {
free(f_addr);
f_addr = strdup(modifier);
else if (strcmp(category, "ether") == 0)
} else if (strcmp(category, "ether") == 0) {
free(f_ether);
f_ether = strdup(modifier);
else if (strcmp(category, "inet") == 0)
} else if (strcmp(category, "inet") == 0) {
free(f_inet);
f_inet = strdup(modifier);
else if (strcmp(category, "inet6") == 0)
} else if (strcmp(category, "inet6") == 0) {
free(f_inet6);
f_inet6 = strdup(modifier);
}
}
free(formatstr);
}
@ -427,7 +437,6 @@ main(int argc, char *argv[])
#endif
all = downonly = uponly = namesonly = noload = verbose = 0;
f_inet = f_inet6 = f_ether = f_addr = NULL;
matchgroup = nogroup = NULL;
lifh = ifconfig_open();