ifconfig: abort if loading a module fails other than for ENOENT

If "ifconfig create" tries to load a kernel module, and the module
exists but can't be loaded, fail the command with a useful error
message.  This is helpful, for example, when trying to create a cloned
interface in a vnet jail.  But ignore ENOENT, because sometimes ifconfig
can't correctly guess the name of the required kernel module.

MFC after:	2 weeks
Reviewed by:	jhb
Differential Revision: https://reviews.freebsd.org/D37873
This commit is contained in:
Alan Somers 2022-12-25 19:06:21 -07:00
parent eb3f9a7aec
commit 2c24ad3377
1 changed files with 13 additions and 5 deletions

View File

@ -1719,11 +1719,19 @@ ifmaybeload(const char *name)
}
}
/*
* Try to load the module. But ignore failures, because ifconfig can't
* infer the names of all drivers (eg mlx4en(4)).
*/
(void) kldload(ifkind);
/* Try to load the module. */
if (kldload(ifkind) < 0) {
switch (errno) {
case ENOENT:
/*
* Ignore ENOENT, because ifconfig can't infer the
* names of all drivers (eg mlx4en(4)).
*/
break;
default:
err(1, "kldload(%s)", ifkind);
}
}
}
static struct cmd basic_cmds[] = {