aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2024-05-14 06:51:42 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2024-05-14 06:51:50 +0000
commit847ef59d4b5eab234bd1f8eb947ad74bdab5614e (patch)
treef82a706867394c1d942e2bd73e101cccf2661f16
parentc9f4001f81c4d5778f70f77dc9892d1c4ecfdcdb (diff)
downloadsrc-847ef59d4b5eab234bd1f8eb947ad74bdab5614e.tar.gz
src-847ef59d4b5eab234bd1f8eb947ad74bdab5614e.zip
ifconfig: Add format shortcuts.
MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D45166
-rw-r--r--sbin/ifconfig/ifconfig.814
-rw-r--r--sbin/ifconfig/ifconfig.c42
2 files changed, 37 insertions, 19 deletions
diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8
index 99a4cf8c9751..72f4883a9e26 100644
--- a/sbin/ifconfig/ifconfig.8
+++ b/sbin/ifconfig/ifconfig.8
@@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd May 1, 2024
+.Dd May 12, 2024
.Dt IFCONFIG 8
.Os
.Sh NAME
@@ -135,7 +135,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
@@ -200,6 +200,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
diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c
index 2cbe7a881bd0..a8bd5a0c89db 100644
--- a/sbin/ifconfig/ifconfig.c
+++ b/sbin/ifconfig/ifconfig.c
@@ -313,14 +313,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)
@@ -330,9 +326,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;
}
@@ -340,14 +345,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);
}
@@ -612,8 +622,6 @@ main(int ac, char *av[])
.io_s = -1,
};
- f_inet = f_inet6 = f_ether = f_addr = NULL;
-
lifh = ifconfig_open();
if (lifh == NULL)
err(EXIT_FAILURE, "ifconfig_open");