Hi,
ifconfig doesn't print ipv6 addresses if its used with media option.
# ifconfig -A
vio0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
inet 10.0.1.65 netmask 0xffffff00 broadcast 10.0.1.255
inet6 fe80::5054:ff:fe6a:b6fd%vio0 prefixlen 64 scopeid 0x1
inet6 fc00:1::1 prefixlen 64
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
# ifconfig -A media
vio0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
...
supported media:
media autoselect
inet 10.0.1.65 netmask 0xffffff00 broadcast 10.0.1.255
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
As the diff below shows, afp is NULL by default, but set to inet if
there is an additional program parameter. At the end, no specific
address family is assumed if afp is NULL. Thus, the diff below
introduces a new variable to remember if a specific address family was
set by the user or not for printing all interface addresses.
The regression test of ifconfig(8) is passing with the diff below.
ok?
bye,
Jan
Index: ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.461
diff -u -p -r1.461 ifconfig.c
--- ifconfig.c 18 Jan 2023 21:57:10 -0000 1.461
+++ ifconfig.c 23 Jan 2023 12:11:30 -0000
@@ -746,6 +746,7 @@ const struct afswtch {
};
const struct afswtch *afp; /*the address family being set or asked about*/
+const struct afswtch *pafp; /*the address family being used for printing*/
char joinname[IEEE80211_NWID_LEN];
size_t joinlen;
@@ -840,7 +841,7 @@ main(int argc, char *argv[])
if (argc > 0) {
for (afp = rafp = afs; rafp->af_name; rafp++)
if (strcmp(rafp->af_name, *argv) == 0) {
- afp = rafp;
+ pafp = afp = rafp;
argc--;
argv++;
break;
@@ -1216,7 +1217,7 @@ printif(char *name, int ifaliases)
(ifa->ifa_addr->sa_family == AF_INET &&
ifaliases == 0 && noinet == 0))
continue;
- if ((p = afp) != NULL) {
+ if ((p = pafp) != NULL) {
if (ifa->ifa_addr->sa_family == p->af_af)
p->af_status(1);
} else {
@@ -3514,7 +3515,7 @@ status(int link, struct sockaddr_dl *sdl
proto_status:
if (link == 0) {
- if ((p = afp) != NULL) {
+ if ((p = pafp) != NULL) {
p->af_status(1);
} else for (p = afs; p->af_name; p++) {
ifr.ifr_addr.sa_family = p->af_af;