Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Modular ppp



On Fri, 5 Aug 2016, Mike wrote:

Yes, I am ready to test it today! I think I will be able to wrote about
the results tommorrow... But I have a question about module - I hope, it
doesn't require to build all modules to test this one? (If it requires -
it's not that bad, anyway...)

For the built-in test, you need only build a kernel after applying the patches in the .diff file.

For the loadable-module test, you'll need to have a full set of modules. The existing modules (assuming from the same 7.99.xx version) will work, but there are a couple of changes that should be made (dependencies from the deflate modules), so it would be best if you build all modules as well as the kernel (remember to use 'no OPTIONS PPP' for the kernel!)

Thanks for any testing info you can provide.



On Fri, Aug 05, 2016 at 05:17:48PM +0800, Paul Goyette wrote:
Folks,

I've been working on turning the current ppp code (enabled with OPTIONS PPP
in your config file) into a loadable module, and I'd like to find a few
folks to help test.

I'd really like testing for two scenarios:

	* built-in module (same as current kernels), just using the
	  attached diffs; this will verify that I haven't broken any
	  current functionality

	* loadable module - this will require building a custom kernel
	  with the 'OPTIONS PPP' removed, and an install of the new
	  kernel _plus_ the new loadable image

		/stand/$ARCH/7.99.xx/modules/ppp/ppp.kmod

	  You'll need to 'modload ppp' before trying to use it.

	  (I fully expect that this second scenario will fail in some
	  obscure manner;  I'd hope to get a complete traceback and/or
	  detailed description of what you were doing when it failed.)


There are three files attached.  The first two need to be placed in a new
$SRCDIR/sys/modules/ppp directory, while the third file is just a set of
diffs that need to be applied.

Any volunteers?



+------------------+--------------------------+------------------------+
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:      |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com   |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at netbsd.org |
+------------------+--------------------------+------------------------+

#	$NetBSD: cgd.ioconf,v 1.1 2015/08/20 11:05:00 christos Exp $

ioconf		ppp

include		"conf/files"

pseudo-device   ppp

# $NetBSD$

.include "../Makefile.inc"

.PATH:  ${S}/net

KMOD=		ppp
IOCONF=		ppp.ioconf
SRCS=		if_ppp.c ppp_tty.c

CPPFLAGS+=	-DINET
CPPFLAGS+=	-DPPP_FILTER
CPPFLAGS+=	-DPPP_DEFLATE
CPPFLAGS+=	-DPPP_BSDCOMP

.include <bsd.kmodule.mk>

Index: distrib/sets/lists/modules/mi
===================================================================
RCS file: /cvsroot/src/distrib/sets/lists/modules/mi,v
retrieving revision 1.87
diff -u -p -r1.87 mi
--- distrib/sets/lists/modules/mi	4 Aug 2016 23:54:45 -0000	1.87
+++ distrib/sets/lists/modules/mi	5 Aug 2016 08:35:12 -0000
@@ -198,6 +198,8 @@
 ./@MODULEDIR@/pf/pf.kmod			base-kernel-modules	kmod
 ./@MODULEDIR@/portal				base-obsolete		obsolete
 ./@MODULEDIR@/portal/portal.kmod		base-obsolete		obsolete
+./@MODULEDIR@/ppp				base-kernel-modules	kmod
+./@MODULEDIR@/ppp/ppp.kmod			base-kernel-modules	kmod
 ./@MODULEDIR@/ppp_bsdcomp			base-kernel-modules	kmod
 ./@MODULEDIR@/ppp_bsdcomp/ppp_bsdcomp.kmod	base-kernel-modules	kmod
 ./@MODULEDIR@/ppp_deflate			base-kernel-modules	kmod
Index: sys/modules/Makefile
===================================================================
RCS file: /cvsroot/src/sys/modules/Makefile,v
retrieving revision 1.168
diff -u -p -r1.168 Makefile
--- sys/modules/Makefile	4 Aug 2016 23:53:47 -0000	1.168
+++ sys/modules/Makefile	5 Aug 2016 08:49:06 -0000
@@ -79,6 +79,7 @@ SUBDIR+=	opencrypto
 SUBDIR+=	overlay
 SUBDIR+=	pciverbose
 SUBDIR+=	pf
+SUBDIR+=	ppp
 SUBDIR+=	ppp_bsdcomp
 SUBDIR+=	ppp_deflate
 SUBDIR+=	procfs
Index: sys/net/bsd-comp.c
===================================================================
RCS file: /cvsroot/src/sys/net/bsd-comp.c,v
retrieving revision 1.20
diff -u -p -r1.20 bsd-comp.c
--- sys/net/bsd-comp.c	29 Nov 2008 23:15:20 -0000	1.20
+++ sys/net/bsd-comp.c	5 Aug 2016 08:56:54 -0000
@@ -1090,7 +1090,7 @@ bsd_decompress(void *state, struct mbuf
 #endif /* DEBUG */
 }

-MODULE(MODULE_CLASS_MISC, ppp_bsdcomp, NULL);
+MODULE(MODULE_CLASS_MISC, ppp_bsdcomp, "ppp");

 static int
 ppp_bsdcomp_modcmd(modcmd_t cmd, void *arg)
Index: sys/net/if_ppp.c
===================================================================
RCS file: /cvsroot/src/sys/net/if_ppp.c,v
retrieving revision 1.152
diff -u -p -r1.152 if_ppp.c
--- sys/net/if_ppp.c	10 Jun 2016 13:27:16 -0000	1.152
+++ sys/net/if_ppp.c	5 Aug 2016 08:56:54 -0000
@@ -104,9 +104,8 @@
 #include <sys/cdefs.h>
 __KERNEL_RCSID(0, "$NetBSD: if_ppp.c,v 1.152 2016/06/10 13:27:16 ozaki-r Exp $");

-#include "ppp.h"
-
 #ifdef _KERNEL_OPT
+#include "ppp.h"
 #include "opt_inet.h"
 #include "opt_gateway.h"
 #include "opt_ppp.h"
@@ -133,6 +132,8 @@ __KERNEL_RCSID(0, "$NetBSD: if_ppp.c,v 1
 #include <sys/kauth.h>
 #include <sys/intr.h>
 #include <sys/socketvar.h>
+#include <sys/device.h>
+#include <sys/module.h>

 #include <net/if.h>
 #include <net/if_types.h>
@@ -181,6 +182,8 @@ static void	ppp_ifstart(struct ifnet *if

 static void	pppintr(void *);

+extern struct linesw ppp_disc;
+
 /*
  * Some useful mbuf macros not in mbuf.h.
  */
@@ -214,11 +217,11 @@ struct if_clone ppp_cloner =
     IF_CLONE_INITIALIZER("ppp", ppp_clone_create, ppp_clone_destroy);

 #ifdef PPP_COMPRESS
-ONCE_DECL(ppp_compressor_mtx_init);
 static LIST_HEAD(, compressor) ppp_compressors = { NULL };
 static kmutex_t ppp_compressors_mtx;

 static int ppp_compressor_init(void);
+static int ppp_compressor_destroy(void);
 static struct compressor *ppp_get_compressor(uint8_t);
 static void ppp_compressor_rele(struct compressor *);
 #endif /* PPP_COMPRESS */
@@ -230,7 +233,16 @@ static void ppp_compressor_rele(struct c
 void
 pppattach(int n __unused)
 {
-	extern struct linesw ppp_disc;
+
+	/*
+	 * Nothing to do here, initialization is handled by the
+	 * module initialization code in pppinit() below).
+	 */
+}
+
+static void
+pppinit(void)
+{

 	if (ttyldisc_attach(&ppp_disc) != 0)
 		panic("pppattach");
@@ -238,7 +250,18 @@ pppattach(int n __unused)
 	mutex_init(&ppp_list_lock, MUTEX_DEFAULT, IPL_NONE);
 	LIST_INIT(&ppp_softc_list);
 	if_clone_attach(&ppp_cloner);
-	RUN_ONCE(&ppp_compressor_mtx_init, ppp_compressor_init);
+}
+
+static int
+pppdetach(void)
+{
+	int error;
+
+	if (!LIST_EMPTY(&ppp_softc_list))
+		error = EBUSY;
+	if (error == 0)
+		error = ttyldisc_detach(&ppp_disc);
+	return error;
 }

 static struct ppp_softc *
@@ -1798,6 +1821,14 @@ ppp_compressor_init(void)
 	return 0;
 }

+static int
+ppp_compressor_destroy(void)
+{
+
+	mutex_destroy(&ppp_compressors_mtx);
+	return 0;
+}
+
 static void
 ppp_compressor_rele(struct compressor *cp)
 {
@@ -1865,8 +1896,6 @@ ppp_register_compressor(struct compresso
 	int error = 0;
 	size_t i;

-	RUN_ONCE(&ppp_compressor_mtx_init, ppp_compressor_init);
-
 	mutex_enter(&ppp_compressors_mtx);
 	for (i = 0; i < ncomp; i++) {
 		if (ppp_get_compressor_noload(pc[i].compress_proto,
@@ -1907,3 +1936,74 @@ ppp_unregister_compressor(struct compres

 	return error;
 }
+
+/*
+ * Module infrastructure
+ */
+
+#ifdef PPP_FILTER
+#define PPP_DEP "bpf_filter,"
+#else
+#define PPP_DEP
+#endif
+
+MODULE(MODULE_CLASS_DRIVER, ppp, PPP_DEP "slcompress");
+
+#ifdef _MODULE
+CFDRIVER_DECL(ppp, DV_IFNET, NULL);
+#endif
+
+static int
+ppp_modcmd(modcmd_t cmd, void *arg)
+{
+	int error = 0;
+
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+		/* Init the compressor sub-sub-system */
+		ppp_compressor_init();
+
+#ifdef _MODULE
+		error = config_cfdriver_attach(&ppp_cd);
+		if (error) {
+			aprint_error("%s: unable to register cfdriver for"
+			    "%s, error %d\n", __func__, ppp_cd.cd_name, error);
+			ppp_compressor_destroy();
+			break;
+		}
+
+#endif
+		/* Init the unit list and line discipline stuff */
+		pppinit();
+		break;
+
+	case MODULE_CMD_FINI:
+		/*
+		 * Make sure it's ok to detach - no units left, and
+		 * line discipline is removed
+		 */
+		error = pppdetach();
+		if (error != 0)
+			break;
+#ifdef _MODULE
+		/* Remove device from autoconf database */
+		error = config_cfdriver_detach(&ppp_cd);
+		if (error) {
+			aprint_error("%s: failed to detach %s cfdriver, "
+			    "error %d\n", __func__, ppp_cd.cd_name, error);
+			break;
+		}
+#endif
+		ppp_compressor_destroy();
+		break;
+
+	case MODULE_CMD_STAT:
+		error = ENOTTY;
+		break;
+	default:
+		error = ENOTTY;
+		break;
+	}
+
+	return error;
+}
Index: sys/net/ppp-deflate.c
===================================================================
RCS file: /cvsroot/src/sys/net/ppp-deflate.c,v
retrieving revision 1.21
diff -u -p -r1.21 ppp-deflate.c
--- sys/net/ppp-deflate.c	5 Apr 2016 23:44:05 -0000	1.21
+++ sys/net/ppp-deflate.c	5 Aug 2016 08:56:54 -0000
@@ -664,7 +664,7 @@ z_incomp(void *arg, struct mbuf *mi)
     state->stats.unc_packets++;
 }

-MODULE(MODULE_CLASS_MISC, ppp_deflate, "zlib");
+MODULE(MODULE_CLASS_MISC, ppp_deflate, "zlib,ppp");

 static int
 ppp_deflate_modcmd(modcmd_t cmd, void *arg)
Index: sys/net/ppp_tty.c
===================================================================
RCS file: /cvsroot/src/sys/net/ppp_tty.c,v
retrieving revision 1.61
diff -u -p -r1.61 ppp_tty.c
--- sys/net/ppp_tty.c	20 Jun 2016 06:46:37 -0000	1.61
+++ sys/net/ppp_tty.c	5 Aug 2016 08:56:54 -0000
@@ -95,9 +95,8 @@
 #include <sys/cdefs.h>
 __KERNEL_RCSID(0, "$NetBSD: ppp_tty.c,v 1.61 2016/06/20 06:46:37 knakahara Exp $");

-#include "ppp.h"
-
 #ifdef _KERNEL_OPT
+#include "ppp.h"
 #include "opt_ppp.h"
 #endif
 #define VJC



+------------------+--------------------------+------------------------+
| Paul Goyette     | PGP Key fingerprint:     | E-mail addresses:      |
| (Retired)        | FA29 0E3B 35AF E8AE 6651 | paul at whooppee.com   |
| Kernel Developer | 0786 F758 55DE 53BA 7731 | pgoyette at netbsd.org |
+------------------+--------------------------+------------------------+


Home | Main Index | Thread Index | Old Index