From 5476d2e5aab18b7cafc4d5762c3064639254dde5 Mon Sep 17 00:00:00 2001 From: Brian Somers Date: Mon, 15 Apr 2002 00:14:40 +0000 Subject: [PATCH] When it's necessary to kldload tun(4), don't forget to re-try to open tun0. Submitted by: qhwt@myrealbox.com --- usr.sbin/ppp/bundle.c | 7 ++++--- usr.sbin/ppp/defs.c | 14 ++++++++++---- usr.sbin/ppp/defs.h | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/usr.sbin/ppp/bundle.c b/usr.sbin/ppp/bundle.c index 64cce9d17849..48c2a685498e 100644 --- a/usr.sbin/ppp/bundle.c +++ b/usr.sbin/ppp/bundle.c @@ -708,10 +708,11 @@ bundle_Create(const char *prefix, int type, int unit) #if defined(__FreeBSD__) && !defined(NOKLDLOAD) if (bundle.unit == minunit && !kldtried++) { /* - * Attempt to load the tunnel interface KLD if it isn't loaded - * already. + * Attempt to load the tunnel interface KLD if it isn't loaded + * already. */ - loadmodules(LOAD_VERBOSLY, "if_tun", NULL); + if (loadmodules(LOAD_VERBOSLY, "if_tun", NULL)) + bundle.unit--; continue; } #endif diff --git a/usr.sbin/ppp/defs.c b/usr.sbin/ppp/defs.c index b61b7de216b3..a4929ccc9845 100644 --- a/usr.sbin/ppp/defs.c +++ b/usr.sbin/ppp/defs.c @@ -420,19 +420,25 @@ Concatinate(char *buf, size_t sz, int argc, const char *const *argv) } } -void +int loadmodules(int how, const char *module, ...) { + int loaded = 0; #if defined(__FreeBSD__) && !defined(NOKLDLOAD) va_list ap; va_start(ap, module); while (module != NULL) { - if (modfind(module) == -1 && ID0kldload(module) == -1 && - how == LOAD_VERBOSLY) - log_Printf(LogWARN, "%s: Cannot load module\n", module); + if (modfind(module) == -1) { + if (ID0kldload(module) == -1) { + if (how == LOAD_VERBOSLY) + log_Printf(LogWARN, "%s: Cannot load module\n", module); + } else + loaded++; + } module = va_arg(ap, const char *); } va_end(ap); #endif + return loaded; } diff --git a/usr.sbin/ppp/defs.h b/usr.sbin/ppp/defs.h index 31a401186d1b..2be76867447b 100644 --- a/usr.sbin/ppp/defs.h +++ b/usr.sbin/ppp/defs.h @@ -139,4 +139,4 @@ extern void SetTitle(const char *); extern fd_set *mkfdset(void); extern void zerofdset(fd_set *); extern void Concatinate(char *, size_t, int, const char *const *); -extern void loadmodules(int, const char *, ...); +extern int loadmodules(int, const char *, ...);