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...)

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

Reply via email to