diff --git a/sbin/setkey/setkey.c b/sbin/setkey/setkey.c index d556a842f04..faf6373b312 100644 --- a/sbin/setkey/setkey.c +++ b/sbin/setkey/setkey.c @@ -34,6 +34,8 @@ #include #include +#include +#include #include #include #include @@ -67,6 +69,7 @@ void shortdump_hdr(void); void shortdump(struct sadb_msg *); static void printdate(void); static int32_t gmt2local(time_t); +static int modload(const char *name); #define MODE_SCRIPT 1 #define MODE_CMDDUMP 2 @@ -102,6 +105,17 @@ usage(void) exit(1); } +static int +modload(const char *name) +{ + if (modfind(name) < 0) + if (kldload(name) < 0 || modfind(name) < 0) { + warn("%s: module not found", name); + return 0; + } + return 1; +} + int main(int ac, char **av) { @@ -165,6 +179,7 @@ main(int ac, char **av) } } + modload("ipsec"); so = pfkey_open(); if (so < 0) { perror("pfkey_open");