Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 May 2022 13:28:47 GMT
From:      Mitchell Horne <mhorne@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 6543fa5a5c47 - main - dumpon: warn if the configured netdump link is down
Message-ID:  <202205141328.24EDSlW1051370@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by mhorne:

URL: https://cgit.FreeBSD.org/src/commit/?id=6543fa5a5c47cfbea92586f0994431fc8ba09f6a

commit 6543fa5a5c47cfbea92586f0994431fc8ba09f6a
Author:     Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2022-05-14 13:25:21 +0000
Commit:     Mitchell Horne <mhorne@FreeBSD.org>
CommitDate: 2022-05-14 13:27:54 +0000

    dumpon: warn if the configured netdump link is down
    
    Previously we expected the DIOCSKERNELDUMP ioctl to return ENXIO if the
    interface was down, but it does not actually do this. Grab the link
    status using getifaddrs(3) instead, and downgrade this case from an
    error to a warning; the user might bring the link back up at a later
    time.
    
    Reviewed by:    cem
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D35196
---
 sbin/dumpon/dumpon.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)

diff --git a/sbin/dumpon/dumpon.c b/sbin/dumpon/dumpon.c
index 7d8f81d5eaaf..626350427595 100644
--- a/sbin/dumpon/dumpon.c
+++ b/sbin/dumpon/dumpon.c
@@ -186,6 +186,25 @@ find_gateway(const char *ifname)
 	return (ret);
 }
 
+static void
+check_link_status(const char *ifname)
+{
+	struct ifaddrs *ifap, *ifa;
+
+	if (getifaddrs(&ifap) != 0)
+		err(EX_OSERR, "getifaddrs");
+
+	for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
+		if (strcmp(ifname, ifa->ifa_name) != 0)
+			continue;
+		if ((ifa->ifa_flags & IFF_UP) == 0) {
+			warnx("warning: %s's link is down", ifname);
+		}
+		break;
+	}
+	freeifaddrs(ifap);
+}
+
 static void
 check_size(int fd, const char *fn)
 {
@@ -659,6 +678,9 @@ main(int argc, char *argv[])
 		else
 			error = errno;
 	}
+	/* Emit a warning if the user configured a downed interface. */
+	if (error == 0 && netdump)
+		check_link_status(kdap->kda_iface);
 	explicit_bzero(kdap->kda_encryptedkey, kdap->kda_encryptedkeysize);
 	free(kdap->kda_encryptedkey);
 	explicit_bzero(kdap, sizeof(*kdap));
@@ -669,10 +691,7 @@ main(int argc, char *argv[])
 			 * errors, especially as users don't have any great
 			 * discoverability into which NICs support netdump.
 			 */
-			if (error == ENXIO)
-				errx(EX_OSERR, "Unable to configure netdump "
-				    "because the interface's link is down.");
-			else if (error == ENODEV)
+			if (error == ENODEV)
 				errx(EX_OSERR, "Unable to configure netdump "
 				    "because the interface driver does not yet "
 				    "support netdump.");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202205141328.24EDSlW1051370>