diff options
| author | Lexi Winter <ivy@FreeBSD.org> | 2025-11-30 22:17:27 +0000 |
|---|---|---|
| committer | Lexi Winter <ivy@FreeBSD.org> | 2025-11-30 23:49:35 +0000 |
| commit | a13b235a52478b542cb2809fd76b4107c8e0b735 (patch) | |
| tree | 4c3e5b99ebb1b05ed63614fd29e050ab83c902fd | |
| parent | 0e670bf22acac9a2f56e62f3791215b11510a431 (diff) | |
ifconfig(8): change default IP address format to 'cidr'
'netmasks' haven't been used in IP networking for decades. Change the
default address format for both IPv4 and IPv6 addreses in ifconfig(8) to
'cidr', which prints addreses in the format most users will be more
familiar with.
The previous format is still available using -finet:hex or -finet6:numeric.
| -rw-r--r-- | sbin/ifconfig/af_inet.c | 26 | ||||
| -rw-r--r-- | sbin/ifconfig/af_inet6.c | 9 | ||||
| -rw-r--r-- | sbin/ifconfig/ifconfig.8 | 12 | ||||
| -rw-r--r-- | sbin/ifconfig/ifconfig.c | 27 | ||||
| -rw-r--r-- | sbin/ifconfig/ifconfig.h | 16 |
5 files changed, 61 insertions, 29 deletions
diff --git a/sbin/ifconfig/af_inet.c b/sbin/ifconfig/af_inet.c index 4fd74d481b3a..c467122c04eb 100644 --- a/sbin/ifconfig/af_inet.c +++ b/sbin/ifconfig/af_inet.c @@ -71,7 +71,6 @@ static struct in_pdata in_add, in_del; #endif static char addr_buf[NI_MAXHOST]; /*for getnameinfo()*/ -extern char *f_inet, *f_addr; static void print_addr(struct sockaddr_in *sin) @@ -116,7 +115,9 @@ in_status(if_ctx *ctx __unused, const struct ifaddrs *ifa) sin = satosin(ifa->ifa_netmask); if (sin == NULL) sin = &null_sin; - if (f_inet != NULL && strcmp(f_inet, "cidr") == 0) { + + switch (f_inet) { + case INET_CIDR: { int cidr = 32; unsigned long smask; @@ -128,10 +129,15 @@ in_status(if_ctx *ctx __unused, const struct ifaddrs *ifa) break; } printf("/%d", cidr); - } else if (f_inet != NULL && strcmp(f_inet, "dotted") == 0) + break; + } + case INET_DOTTED: printf(" netmask %s", inet_ntoa(sin->sin_addr)); - else + break; + case INET_HEX: printf(" netmask 0x%lx", (unsigned long)ntohl(sin->sin_addr.s_addr)); + break; + } if (ifa->ifa_flags & IFF_BROADCAST) { sin = satosin(ifa->ifa_broadaddr); @@ -168,12 +174,18 @@ in_status_nl(if_ctx *ctx __unused, if_link_t *link, if_addr_t *ifa) printf(" --> %s", inet_ntoa(dst->sin_addr)); } - if (f_inet != NULL && strcmp(f_inet, "cidr") == 0) { + + switch (f_inet) { + case INET_CIDR: printf("/%d", plen); - } else if (f_inet != NULL && strcmp(f_inet, "dotted") == 0) + break; + case INET_DOTTED: printf(" netmask %s", inet_ntoa(get_mask(plen))); - else + break; + case INET_HEX: printf(" netmask 0x%lx", (unsigned long)ntohl(get_mask(plen).s_addr)); + break; + } if ((link->ifi_flags & IFF_BROADCAST) && plen != 0) { struct sockaddr_in *brd = satosin(ifa->ifa_broadcast); diff --git a/sbin/ifconfig/af_inet6.c b/sbin/ifconfig/af_inet6.c index e0f34f0c4d82..22e78f3b8d3f 100644 --- a/sbin/ifconfig/af_inet6.c +++ b/sbin/ifconfig/af_inet6.c @@ -85,7 +85,6 @@ static int prefix(void *, int); #endif static char *sec2str(time_t); static int explicit_prefix = 0; -extern char *f_inet6, *f_addr; extern void setnd6flags(if_ctx *, const char *, int); extern void setnd6defif(if_ctx *,const char *, int); @@ -246,10 +245,14 @@ print_p2p(struct sockaddr_in6 *sin) static void print_mask(int plen) { - if (f_inet6 != NULL && strcmp(f_inet6, "cidr") == 0) + switch (f_inet6) { + case INET6_CIDR: printf("/%d", plen); - else + break; + case INET6_NUMERIC: printf(" prefixlen %d", plen); + break; + } } static void diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8 index 481181d3d5d2..5ab14314feed 100644 --- a/sbin/ifconfig/ifconfig.8 +++ b/sbin/ifconfig/ifconfig.8 @@ -176,15 +176,15 @@ Adjust the display of inet address subnet masks: .It Cm cidr CIDR notation, for example: .Ql 203.0.113.224/26 -.It Cm default -Default format, -.Cm hex .It Cm dotted Dotted quad notation, for example: .Ql 255.255.255.192 .It Cm hex Hexadecimal format, for example: .Ql 0xffffffc0 +.It Cm default +Default format, +.Cm cidr .El .It Cm inet6 Adjust the display of inet6 address prefixes (subnet masks): @@ -195,12 +195,12 @@ CIDR notation, for example: .Ql ::1/128 or .Ql fe80::1%lo0/64 -.It Cm default -Default format, -.Cm numeric .It Cm numeric Integer format, for example: .Ql prefixlen 64 +.It Cm default +Default format, +.Cm cidr .El .El .Pp diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c index 9aeb4a09ef49..67b1c7a43f08 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -90,7 +90,9 @@ int exit_code = 0; static char ifname_to_print[IFNAMSIZ]; /* Helper for printifnamemaybe() */ /* Formatter Strings */ -char *f_inet, *f_inet6, *f_ether, *f_addr; +inet_format_t f_inet; +inet6_format_t f_inet6; +char *f_ether, *f_addr; #ifdef WITHOUT_NETLINK static void list_interfaces_ioctl(if_ctx *ctx); @@ -312,9 +314,6 @@ cmpifaddrs(struct ifaddrs *a, struct ifaddrs *b, struct ifa_queue *q) static void freeformat(void) { - - free(f_inet); - free(f_inet6); free(f_ether); free(f_addr); } @@ -330,10 +329,8 @@ static void setformat(char *input) 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); + f_inet = INET_CIDR; + f_inet6 = INET6_CIDR; } else { warnx("Skipping invalid format: %s\n", category); @@ -352,11 +349,17 @@ static void setformat(char *input) free(f_ether); f_ether = strdup(modifier); } else if (strcmp(category, "inet") == 0) { - free(f_inet); - f_inet = strdup(modifier); + if (strcmp(modifier, "hex") == 0) + f_inet = INET_HEX; + else if (strcmp(modifier, "cidr") == 0) + f_inet = INET_CIDR; + else if (strcmp(modifier, "dotted") == 0) + f_inet = INET_DOTTED; } else if (strcmp(category, "inet6") == 0) { - free(f_inet6); - f_inet6 = strdup(modifier); + if (strcmp(modifier, "cidr") == 0) + f_inet6 = INET6_CIDR; + else if (strcmp(modifier, "numeric") == 0) + f_inet6 = INET6_NUMERIC; } } free(formatstr); diff --git a/sbin/ifconfig/ifconfig.h b/sbin/ifconfig/ifconfig.h index 672020443b8c..b06210028d89 100644 --- a/sbin/ifconfig/ifconfig.h +++ b/sbin/ifconfig/ifconfig.h @@ -262,7 +262,21 @@ void opt_register(struct option *); extern ifconfig_handle_t *lifh; extern int allmedia; extern int exit_code; -extern char *f_inet, *f_inet6, *f_ether, *f_addr; + +typedef enum { + INET_CIDR = 0, + INET_HEX, + INET_DOTTED +} inet_format_t; +extern inet_format_t f_inet; + +typedef enum { + INET6_CIDR = 0, + INET6_NUMERIC +} inet6_format_t; +extern inet6_format_t f_inet6; + +extern char *f_ether, *f_addr; void clearifcap(if_ctx *ctx, const char *, int value); void setifcap(if_ctx *ctx, const char *, int value); |
