I found a bug in the 2.4.1-pre10 version of ppp_async.c

In fact, a lot of ioctl are not supported any more,
whih make the pppd start fail.
The bad patch is:

diff -u --recursive --new-file v2.4.0/linux/drivers/net/ppp_async.c
linux/drivers/net/ppp_async.c
--- v2.4.0/linux/drivers/net/ppp_async.c Fri Apr 21 13:31:10 2000
+++ linux/drivers/net/ppp_async.c Mon Jan 15 11:04:57 2001
@@ -259,25 +244,6 @@
   err = 0;
   break;

-/*
- * For now, do the same as the old 2.3 driver useta
- */
- case PPPIOCGFLAGS:
- case PPPIOCSFLAGS:
- case PPPIOCGASYNCMAP:
- case PPPIOCSASYNCMAP:
- case PPPIOCGRASYNCMAP:
- case PPPIOCSRASYNCMAP:
- case PPPIOCGXASYNCMAP:
- case PPPIOCSXASYNCMAP:
- case PPPIOCGMRU:
- case PPPIOCSMRU:
-  err = -EPERM;
-  if (!capable(CAP_NET_ADMIN))
-   break;
-  err = ppp_async_ioctl(&ap->chan, cmd, arg);
-  break;
-
  case PPPIOCATTACH:
  case PPPIOCDETACH:
   err = ppp_channel_ioctl(&ap->chan, cmd, arg);


When I apply this patch back, I got the connection,
but it fail after a few seconds...
In fact, there are two other patches to reverse
in order to make the driver do its job again
(sure it does: I'm using this kind of kernel now...):

diff -u --recursive --new-file v2.4.0/linux/drivers/net/ppp_async.c
linux/drivers/net/ppp_async.c
--- v2.4.0/linux/drivers/net/ppp_async.c Fri Apr 21 13:31:10 2000
+++ linux/drivers/net/ppp_async.c Mon Jan 15 11:04:57 2001
@@ -181,12 +175,7 @@
 ppp_asynctty_read(struct tty_struct *tty, struct file *file,
     unsigned char *buf, size_t count)
 {
- /* For now, do the same as the old 2.3.x code useta */
- struct asyncppp *ap = tty->disc_data;
-
- if (ap == 0)
-  return -ENXIO;
- return ppp_channel_read(&ap->chan, file, buf, count);
+ return -EAGAIN;
 }

 /*

Then:

diff -u --recursive --new-file v2.4.0/linux/drivers/net/ppp_async.c
linux/drivers/net/ppp_async.c
--- v2.4.0/linux/drivers/net/ppp_async.c Fri Apr 21 13:31:10 2000
+++ linux/drivers/net/ppp_async.c Mon Jan 15 11:04:57 2001
@@ -203,12 +193,7 @@
 ppp_asynctty_write(struct tty_struct *tty, struct file *file,
      const unsigned char *buf, size_t count)
 {
- /* For now, do the same as the old 2.3.x code useta */
- struct asyncppp *ap = tty->disc_data;
-
- if (ap == 0)
-  return -ENXIO;
- return ppp_channel_write(&ap->chan, buf, count);
+ return -EAGAIN;
 }

 static int

Without these modifications, everything is allright !

Jocelyn Mayer

PS: sorry, but I don't know who is the actual maitainer of this
driver...
N‹§²æìr¸›yúèšØb²X¬¶Ç§vØ^–)Þº{.nÇ+‰·¥Š{±‘êçzX§¶›¡Ü¨}©ž²Æ zÚ&j:+v‰¨¾«‘êçzZ+€ù^jÇ«y§m…á@A«a¶Úÿ
0¶ìh®å’i

Reply via email to