packages: sort network related packages into package/network/
[openwrt/staging/lynxis.git] / package / network / services / ppp / patches / 400-simplify_kernel_checks.patch
diff --git a/package/network/services/ppp/patches/400-simplify_kernel_checks.patch b/package/network/services/ppp/patches/400-simplify_kernel_checks.patch
new file mode 100644 (file)
index 0000000..ec82576
--- /dev/null
@@ -0,0 +1,154 @@
+pppd: Remove runtime kernel checks
+
+On embedded system distributions the required kernel features for pppd are
+more or less guaranteed to be present, so there is not much point in
+performing runtime checks, it just increases the binary size.
+
+This patch removes the runtime kernel feature checks.
+
+Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
+
+--- a/pppd/sys-linux.c
++++ b/pppd/sys-linux.c
+@@ -203,7 +203,7 @@ static int driver_is_old       = 0;
+ static int restore_term        = 0;   /* 1 => we've munged the terminal */
+ static struct termios inittermios;    /* Initial TTY termios */
+-int new_style_driver = 0;
++static const int new_style_driver = 1;
+ static char loop_name[20];
+ static unsigned char inbuf[512]; /* buffer for chars read from loopback */
+@@ -220,8 +220,8 @@ static int looped;                 /* 1 if using loop 
+ static int    link_mtu;               /* mtu for the link (not bundle) */
+ static struct utsname utsname;        /* for the kernel version */
+-static int kernel_version;
+ #define KVERSION(j,n,p)       ((j)*1000000 + (n)*1000 + (p))
++static const int kernel_version = KVERSION(2,6,37);
+ #define MAX_IFS               100
+@@ -1438,11 +1438,12 @@ int ccp_fatal_error (int unit)
+  *
+  * path_to_procfs - find the path to the proc file system mount point
+  */
+-static char proc_path[MAXPATHLEN];
+-static int proc_path_len;
++static char proc_path[MAXPATHLEN] = "/proc";
++static int proc_path_len = 5;
+ static char *path_to_procfs(const char *tail)
+ {
++#if 0
+     struct mntent *mntent;
+     FILE *fp;
+@@ -1464,6 +1465,7 @@ static char *path_to_procfs(const char *
+           fclose (fp);
+       }
+     }
++#endif
+     strlcpy(proc_path + proc_path_len, tail,
+           sizeof(proc_path) - proc_path_len);
+@@ -2116,15 +2118,19 @@ int ppp_available(void)
+     int    my_version, my_modification, my_patch;
+     int osmaj, osmin, ospatch;
++#if 0
+     /* get the kernel version now, since we are called before sys_init */
+     uname(&utsname);
+     osmaj = osmin = ospatch = 0;
+     sscanf(utsname.release, "%d.%d.%d", &osmaj, &osmin, &ospatch);
+     kernel_version = KVERSION(osmaj, osmin, ospatch);
++#endif
+     fd = open("/dev/ppp", O_RDWR);
+     if (fd >= 0) {
++#if 0
+       new_style_driver = 1;
++#endif
+       /* XXX should get from driver */
+       driver_version = 2;
+@@ -2185,6 +2191,7 @@ int ppp_available(void)
+     if (ok && ((ifr.ifr_hwaddr.sa_family & ~0xFF) != ARPHRD_PPP))
+       ok = 0;
++      return ok;
+ /*
+  *  This is the PPP device. Validate the version of the driver at this
+@@ -2678,6 +2685,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
+     }
+ #endif /* TIOCGPTN */
++#if 0
+     if (sfd < 0) {
+       /* the old way - scan through the pty name space */
+       for (i = 0; i < 64; ++i) {
+@@ -2696,6 +2704,7 @@ get_pty(master_fdp, slave_fdp, slave_nam
+           }
+       }
+     }
++#endif
+     if (sfd < 0)
+       return 0;
+--- a/pppd/plugins/pppoatm/pppoatm.c
++++ b/pppd/plugins/pppoatm/pppoatm.c
+@@ -170,14 +170,6 @@ static void disconnect_pppoatm(void)
+ void plugin_init(void)
+ {
+-#if defined(__linux__)
+-      extern int new_style_driver;    /* From sys-linux.c */
+-      if (!ppp_available() && !new_style_driver)
+-              fatal("Kernel doesn't support ppp_generic - "
+-                  "needed for PPPoATM");
+-#else
+-      fatal("No PPPoATM support on this OS");
+-#endif
+       info("PPPoATM plugin_init");
+       add_options(pppoa_options);
+ }
+--- a/pppd/plugins/rp-pppoe/plugin.c
++++ b/pppd/plugins/rp-pppoe/plugin.c
+@@ -60,9 +60,6 @@ static char const RCSID[] =
+ char pppd_version[] = VERSION;
+-/* From sys-linux.c in pppd -- MUST FIX THIS! */
+-extern int new_style_driver;
+-
+ char *pppd_pppoe_service = NULL;
+ static char *acName = NULL;
+ static char *existingSession = NULL;
+@@ -340,10 +337,6 @@ PPPoEDevnameHook(char *cmd, char **argv,
+ void
+ plugin_init(void)
+ {
+-    if (!ppp_available() && !new_style_driver) {
+-      fatal("Linux kernel does not support PPPoE -- are you running 2.4.x?");
+-    }
+-
+     add_options(Options);
+     info("RP-PPPoE plugin version %s compiled against pppd %s",
+--- a/pppd/plugins/pppol2tp/pppol2tp.c
++++ b/pppd/plugins/pppol2tp/pppol2tp.c
+@@ -500,12 +500,7 @@ static void pppol2tp_cleanup(void)
+ void plugin_init(void)
+ {
+-#if defined(__linux__)
+-      extern int new_style_driver;    /* From sys-linux.c */
+-      if (!ppp_available() && !new_style_driver)
+-              fatal("Kernel doesn't support ppp_generic - "
+-                  "needed for PPPoL2TP");
+-#else
++#if !defined(__linux__)
+       fatal("No PPPoL2TP support on this OS");
+ #endif
+       add_options(pppol2tp_options);