Module Name: src
Committed By: ozaki-r
Date: Tue Aug 20 08:18:24 UTC 2024
Modified Files:
src/sbin/ifconfig: ifconfig.8 ifconfig.c
Log Message:
ifconfig: show link state on -v
We could guess it through "media" or "status" output, however, we
sometimes want to know it directly for debugging or testing.
It is shown only if the -v option is specified.
To generate a diff of this commit:
cvs rdiff -u -r1.129 -r1.130 src/sbin/ifconfig/ifconfig.8
cvs rdiff -u -r1.250 -r1.251 src/sbin/ifconfig/ifconfig.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/ifconfig/ifconfig.8
diff -u src/sbin/ifconfig/ifconfig.8:1.129 src/sbin/ifconfig/ifconfig.8:1.130
--- src/sbin/ifconfig/ifconfig.8:1.129 Mon Apr 8 20:28:34 2024
+++ src/sbin/ifconfig/ifconfig.8 Tue Aug 20 08:18:24 2024
@@ -1,4 +1,4 @@
-.\" $NetBSD: ifconfig.8,v 1.129 2024/04/08 20:28:34 andvar Exp $
+.\" $NetBSD: ifconfig.8,v 1.130 2024/08/20 08:18:24 ozaki-r Exp $
.\"
.\" Copyright (c) 1983, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\"
.\" @(#)ifconfig.8 8.4 (Berkeley) 6/1/94
.\"
-.Dd April 8, 2024
+.Dd August 20, 2024
.Dt IFCONFIG 8
.Os
.Sh NAME
@@ -870,8 +870,8 @@ mutually exclusive with all other flags
.Pp
The
.Fl v
-flag prints statistics on packets sent and received on the given
-interface.
+flag prints additional information like statistics on packets sent and received
+on the interface and the link state of the interface.
If
.Fl h
is used in conjunction with
Index: src/sbin/ifconfig/ifconfig.c
diff -u src/sbin/ifconfig/ifconfig.c:1.250 src/sbin/ifconfig/ifconfig.c:1.251
--- src/sbin/ifconfig/ifconfig.c:1.250 Wed Jan 3 18:10:42 2024
+++ src/sbin/ifconfig/ifconfig.c Tue Aug 20 08:18:24 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ifconfig.c,v 1.250 2024/01/03 18:10:42 andvar Exp $ */
+/* $NetBSD: ifconfig.c,v 1.251 2024/08/20 08:18:24 ozaki-r Exp $ */
/*-
* Copyright (c) 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
#ifndef lint
__COPYRIGHT("@(#) Copyright (c) 1983, 1993\
The Regents of the University of California. All rights reserved.");
-__RCSID("$NetBSD: ifconfig.c,v 1.250 2024/01/03 18:10:42 andvar Exp $");
+__RCSID("$NetBSD: ifconfig.c,v 1.251 2024/08/20 08:18:24 ozaki-r Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -111,6 +111,8 @@ static long wflag_secs, Wflag_secs;
static char gflags[10 + 26 * 2 + 1] = "AabCdhlNsuvW:w:z";
bool gflagset[10 + 26 * 2];
+static int link_state(prop_dictionary_t);
+static const char *link_state_str(int);
static int carrier(prop_dictionary_t);
static int clone_command(prop_dictionary_t, prop_dictionary_t);
static void do_setifpreference(prop_dictionary_t);
@@ -884,7 +886,7 @@ printall(const char *ifname, prop_dictio
if (uflag && (ifa->ifa_flags & IFF_UP) == 0)
continue;
- if (sflag && carrier(env) == LINK_STATE_DOWN)
+ if (sflag && link_state(env) == LINK_STATE_DOWN)
continue;
idx++;
/*
@@ -1199,17 +1201,43 @@ setifmtu(prop_dictionary_t env, prop_dic
}
static int
-carrier(prop_dictionary_t env)
+link_state(prop_dictionary_t env)
{
struct ifdatareq ifdr = { .ifdr_data.ifi_link_state = 0 };
if (direct_ioctl(env, SIOCGIFDATA, &ifdr) == -1)
- return EXIT_FAILURE;
+ return -1;
+
+ return ifdr.ifdr_data.ifi_link_state;
+}
+
+static const char *
+link_state_str(int state)
+{
- if (ifdr.ifdr_data.ifi_link_state == LINK_STATE_DOWN)
+ switch (state) {
+ case LINK_STATE_UNKNOWN:
+ return "unknown";
+ case LINK_STATE_DOWN:
+ return "down";
+ case LINK_STATE_UP:
+ return "up";
+ default: /* Assume -1 */
+ return "error";
+ }
+}
+
+static int
+carrier(prop_dictionary_t env)
+{
+ switch (link_state(env)) {
+ case -1:
+ case LINK_STATE_DOWN:
return EXIT_FAILURE;
- else /* Assume UP if UNKNOWN */
+ default:
+ /* Assume UP if UNKNOWN */
return EXIT_SUCCESS;
+ }
}
static void
@@ -1333,6 +1361,9 @@ status(prop_dictionary_t env, prop_dicti
free(p);
}
+ if (vflag)
+ printf("\tlinkstate: %s\n", link_state_str(link_state(env)));
+
media_status(env, oenv);
if (!vflag && !zflag)