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
This commit is contained in:
parent
38a36057ae
commit
6543fa5a5c
@ -186,6 +186,25 @@ find_gateway(const char *ifname)
|
|||||||
return (ret);
|
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
|
static void
|
||||||
check_size(int fd, const char *fn)
|
check_size(int fd, const char *fn)
|
||||||
{
|
{
|
||||||
@ -659,6 +678,9 @@ main(int argc, char *argv[])
|
|||||||
else
|
else
|
||||||
error = errno;
|
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);
|
explicit_bzero(kdap->kda_encryptedkey, kdap->kda_encryptedkeysize);
|
||||||
free(kdap->kda_encryptedkey);
|
free(kdap->kda_encryptedkey);
|
||||||
explicit_bzero(kdap, sizeof(*kdap));
|
explicit_bzero(kdap, sizeof(*kdap));
|
||||||
@ -669,10 +691,7 @@ main(int argc, char *argv[])
|
|||||||
* errors, especially as users don't have any great
|
* errors, especially as users don't have any great
|
||||||
* discoverability into which NICs support netdump.
|
* discoverability into which NICs support netdump.
|
||||||
*/
|
*/
|
||||||
if (error == ENXIO)
|
if (error == ENODEV)
|
||||||
errx(EX_OSERR, "Unable to configure netdump "
|
|
||||||
"because the interface's link is down.");
|
|
||||||
else if (error == ENODEV)
|
|
||||||
errx(EX_OSERR, "Unable to configure netdump "
|
errx(EX_OSERR, "Unable to configure netdump "
|
||||||
"because the interface driver does not yet "
|
"because the interface driver does not yet "
|
||||||
"support netdump.");
|
"support netdump.");
|
||||||
|
Loading…
Reference in New Issue
Block a user