Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 10 Feb 2003 09:40:06 -0800 (PST)
From:      Gleb Smirnoff <glebius@cell.sick.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/47920: if ng_pppoe switches to nonstandard mode it stays in it forever
Message-ID:  <200302101740.h1AHe6I6060814@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/47920; it has been noted by GNATS.

From: Gleb Smirnoff <glebius@cell.sick.ru>
To: freebsd-bugs@FreeBSD.ORG, FreeBSD-gnats-submit@FreeBSD.ORG
Cc:  
Subject: Re: kern/47920: if ng_pppoe switches to nonstandard mode it stays in it forever
Date: Mon, 10 Feb 2003 20:29:59 +0300

 Sorry. This one is better.
 
 -- 
 Totus tuus, Glebius.
 GLEBIUS-RIPN GLEB-RIPE
 
 --- ng_pppoe.c.orig	Mon Feb 10 15:16:04 2003
 +++ ng_pppoe.c	Mon Feb 10 20:27:34 2003
 @@ -166,6 +166,9 @@
  	 ETHERTYPE_PPPOE_DISC};
  
  static int nonstandard;
 +#define PPPOE_STANDARD		0	/* try standard */
 +#define PPPOE_NONSTANDARD	1	/* be nonstandard */
 +#define PPPOE_KEEPSTANDARD	-1	/* never switch to nonstandard mode */
  static int
  ngpppoe_set_ethertype(SYSCTL_HANDLER_ARGS)
  {
 @@ -176,12 +179,19 @@
  	error = sysctl_handle_int(oidp, &val, sizeof(int), req);
  	if (error != 0 || req->newptr == NULL)
  		return (error);
 -	if (val == 1) {
 -		nonstandard = 1;
 +	switch (val) {
 +	case PPPOE_NONSTANDARD:
 +		nonstandard = PPPOE_NONSTANDARD;
  		eh_prototype.ether_type = ETHERTYPE_PPPOE_STUPID_DISC;
 -	} else {
 -		nonstandard = 0;
 +		break;
 +	case PPPOE_STANDARD:
 +		nonstandard = PPPOE_STANDARD;
  		eh_prototype.ether_type = ETHERTYPE_PPPOE_DISC;
 +		break;
 +	case PPPOE_KEEPSTANDARD:
 +		nonstandard = PPPOE_KEEPSTANDARD;
 +		eh_prototype.ether_type = ETHERTYPE_PPPOE_DISC;
 +		break;
  	}
  	return (0);
  }
 @@ -913,8 +923,12 @@
  		code = wh->ph.code; 
  		switch(wh->eh.ether_type) {
  		case	ETHERTYPE_PPPOE_STUPID_DISC:
 -			nonstandard = 1;
 -			eh_prototype.ether_type = ETHERTYPE_PPPOE_STUPID_DISC;
 +			if (nonstandard > PPPOE_KEEPSTANDARD) {
 +			  nonstandard = PPPOE_NONSTANDARD;
 +			  eh_prototype.ether_type = ETHERTYPE_PPPOE_STUPID_DISC;
 +			  printf("Switched to nonstandard PPPoE");
 +			} else
 +			  printf("Ignored nonstandard PPPoE");
  			/* fall through */
  		case	ETHERTYPE_PPPOE_DISC:
  			/*
 @@ -1098,7 +1112,7 @@
  				 * from NEWCONNECTED to CONNECTED
  				 */
  				sp->pkt_hdr = neg->pkt->pkt_header;
 -				if (nonstandard)
 +				if (nonstandard == PPPOE_NONSTANDARD)
  					sp->pkt_hdr.eh.ether_type
  						= ETHERTYPE_PPPOE_STUPID_SESS;
  				else
 @@ -1150,7 +1164,7 @@
  				 * Keep a copy of the header we will be using.
  				 */
  				sp->pkt_hdr = neg->pkt->pkt_header;
 -				if (nonstandard)
 +				if (nonstandard == PPPOE_NONSTANDARD)
  					sp->pkt_hdr.eh.ether_type
  						= ETHERTYPE_PPPOE_STUPID_SESS;
  				else
 @@ -1434,7 +1448,7 @@
  			/* revert the stored header to DISC/PADT mode */
  		 	wh = &sp->pkt_hdr;
  			wh->ph.code = PADT_CODE;
 -			if (nonstandard)
 +			if (nonstandard == PPPOE_NONSTANDARD)
  				wh->eh.ether_type = ETHERTYPE_PPPOE_STUPID_DISC;
  			else
  				wh->eh.ether_type = ETHERTYPE_PPPOE_DISC;

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200302101740.h1AHe6I6060814>