This is a discussion on PPPoE patch for connection problems within the mailing.openbsd.tech forums, part of the OpenBSD category; --> I've been running this little patch for several weeks and it's been a real life saver. My ppp connection ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| I've been running this little patch for several weeks and it's been a real life saver. My ppp connection kept cycling through a never-ending connect-disconnect cycle, constantly reporting 'connection reset by peer'. Some investigation showed that my DSL provider (or more likely, Bell Canada) keeps sending PPPoE PADT tags immediately after a connection is established. This patch allows you to play along and keep your connection up by ignoring the disconnect request... ? pppoe ? pppoe.cat8 Index: client.c ================================================== ================= RCS file: /cvs/src/usr.sbin/pppoe/client.c,v retrieving revision 1.20 diff -u -b -r1.20 client.c --- client.c 3 Sep 2004 06:37:14 -0000 1.20 +++ client.c 1 May 2005 03:13:10 -0000 @@ -495,6 +495,9 @@ struct ether_header *eh, struct pppoe_header *ph, u_long len, u_int8_t *pkt) { + if (ignorepadt) + return (0); + if (bcmp(&eh->ether_shost[0], rmea, ETHER_ADDR_LEN)) return (0); Index: debug.c ================================================== ================= RCS file: /cvs/src/usr.sbin/pppoe/debug.c,v retrieving revision 1.2 diff -u -b -r1.2 debug.c Index: pppoe.8 ================================================== ================= RCS file: /cvs/src/usr.sbin/pppoe/pppoe.8,v retrieving revision 1.18 diff -u -b -r1.18 pppoe.8 --- pppoe.8 18 Feb 2005 12:19:22 -0000 1.18 +++ pppoe.8 1 May 2005 03:13:10 -0000 @@ -33,7 +33,7 @@ .Nd PPP Over Ethernet translator .Sh SYNOPSIS .Nm pppoe -.Op Fl sv +.Op Fl stv .Op Fl i Ar interface .Op Fl n Ar service .Op Fl p Ar system @@ -74,6 +74,14 @@ Otherwise, .Nm runs as a client. +.It Fl t +Instruct +.Nm +to ignore PADT packets. If you observe numerous +"connection reset by peer" error messages and constantly +lose connection soon after establishing one, it may because +of spurious PADT tags being sent from the peer. Ignoring them +may alleviate the problem. .It Fl v For each use of the flag, the verbosity of .Nm pppoe Index: pppoe.c ================================================== ================= RCS file: /cvs/src/usr.sbin/pppoe/pppoe.c,v retrieving revision 1.15 diff -u -b -r1.15 pppoe.c --- pppoe.c 20 Sep 2004 17:51:07 -0000 1.15 +++ pppoe.c 1 May 2005 03:13:10 -0000 @@ -53,6 +53,7 @@ #include "pppoe.h" int option_verbose = 0; +int ignorepadt = 0; u_char etherbroadcastaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; int main(int, char **); @@ -78,7 +79,7 @@ if ((pw = getpwnam("_ppp")) == NULL) err(EX_CONFIG, "getpwnam(\"_ppp\")"); - while ((c = getopt(argc, argv, "svi:n + while ((c = getopt(argc, argv, "stvi:n switch (c) { case 'i': if (ifname != NULL) { @@ -108,6 +109,13 @@ } smode = 1; break; + case 't': + if (ignorepadt) { + usage(); + return (EX_USAGE); + } + ignorepadt = 1; + break; case 'v': option_verbose++; break; @@ -463,7 +471,7 @@ { extern char *__progname; - fprintf(stderr,"%s [-sv] [-i interface] [-n service] [-p system]\n", + fprintf(stderr,"%s [-stv] [-i interface] [-n service] [-p system]\n", __progname); } Index: pppoe.h ================================================== ================= RCS file: /cvs/src/usr.sbin/pppoe/pppoe.h,v retrieving revision 1.7 diff -u -b -r1.7 pppoe.h --- pppoe.h 6 May 2004 20:29:04 -0000 1.7 +++ pppoe.h 1 May 2005 03:13:10 -0000 @@ -81,6 +81,7 @@ #define PPPOE_TAG_GENERIC_ERROR 0x0203 /* Generic Error */ extern int option_verbose; +extern int ignorepadt; extern u_char etherbroadcastaddr[]; void server_mode(int, u_int8_t *, u_int8_t *, struct ether_addr *); |