Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 25 Aug 1995 11:13:45 -0500 (CDT)
From:      malenovi@cview.com (Nik Malenovic)
To:        freebsd-questions@freebsd.org, freebsd-hackers@freebsd.org
Subject:   Q: ppp.slattach bugs/ppp server/load balancing
Message-ID:  <m0sm1O5-0001E4C@tesla.cview.com>

next in thread | raw e-mail | index | archive | help
Hi folks - I just joined in on freebsd-* mailing list, so I apologize
if this has been discussed - I don't have access to mailing lists archives.
I am crossposting this to freebsd-hackers and freebsd-questions

here is what I am about to ask:

1. slattach bug
2. ppp (iij) bug
3. question about load balancing (specificly over ppp links)
4. ppp server questions - offer of dynamic ip pppd server and misc.

here we go.

1. has the slattach bug been fixed? under pre-2.0.5-950622-SNAP and the
mentioned release, slattach has a bug - it doesn't release the comunication
device when redialing - that would cause your kermit to time out becuase
it's not able to open the comm device. I fixed it with the simple function
call - which I am including at the end of the message:

2. ppp (iij) has a bug - try having your tunnel device as a 9th
on the device list (netstat -i) - the bug is that the buffer was
preset and too small for the systems that have more then 8 slip/ppp/tunel
devices total. I am including the relevant 2 liner code fix at the end.

3. has any work been done on load balancing? I know Linux has it working,
but I don't see it in 2.0.5-950622-SNAP - so is anyone working on it?
If not, is anyone planning to do any work on it?

4. I am using ppp EXTENSIVELY - I even wrote dynamic ip ppp server - 
so here are a few ppp-related Qs:
	a. is there a FAQ on dynamic ppp? I wrote a doc for internal use
	on dynamic ip ppp server - whom do I talk to to make it available
	for wider use? maybe included in /usr/share/FAQ?

	b. I am getting LOTZA reboots with pppd - specially if my dialup
	ppp client hungs up (or gets a call when his call waiting is on,
	or when somebody else picks up the phone (and wonders what all that
	noise is about :-)). Has anyone been working extensively with pppd
	to help me out with those kind of problems?

	c. I am also getting reconnection problems with pppd - there are
	two subproblems:
		- when my connection is violently broken (without graceful
		shutdown), when I reconnect, pppd will refuse to start up
		firing of a message: ioctl(SIOCAIFADDR): Address already exists
		in other words - it trying to add a route to the ppp client
		but the route allready exists - so it fails miserably.
		the only solution so far has been to wait for some time
		and retry again.

		- when the connection is broken on my ppp link to another
		node - let's say I reboot, but the physical link is still up
		(i.e. the phone call is still in progress and modems have
		not hung up), I can't reconnect - slip does this automaticaly
		i.e. when you fire off slattach - if it's connected to
		the other side - it just keep going --- can I achieve
		similar effect under FreeBSD?

		- sometimes when I disconnect normally ppp client from
		FreeBSD pppd server, it "forgets" that the phone call has
		ended and keeps the ppp user process going. :( when it
		happened I tried experimenting and sending -HUP signal
		to the client ppp process but it would ignore it. any help?

		- Anyone willing to chat a bit more about ppp? :) I am just
		right out ready to kill for a chat with somebody who knows
		ppp extensively.


thank you for reading.


Nik
--
malenovi@cview.com

--------------------------------------------------
CODE:
1. slattach problem - in slattach.c:

/* Close all FDs, fork */
void release_line()
{
	int ttydisc = TTYDISC;

	ioctl(fd, TIOCSETD, &ttydisc); /* reset to tty discipline */

	(void)close(STDIN_FILENO); /* close FDs before forking. */
	(void)close(STDOUT_FILENO);
	(void)close(STDERR_FILENO);
	if (fd > 2)
		(void)close(fd);

	signal(SIGHUP, SIG_IGN); /* ignore HUP signal when parent dies. */
	daemon(0,0);		/* fork, setsid, chdir /, and close std*. */

	while (getppid () != 1)
		sleep (1);	/* Wait for parent to die. */

	if ((int)signal(SIGHUP,sighup_handler) < 0) /* Re-enable HUP signal */
		syslog(LOG_NOTICE,"cannot install SIGHUP handler: %m");
}

and then add in:

/* signup_handler() is invoked when carrier drops, eg. before redial. */
void sighup_handler()
{
	if(exiting) return;
again:
	/* invoke a shell for redial_cmd or punt. */
	if (redial_cmd) {
		syslog(LOG_NOTICE,"SIGHUP on %s (sl%d); running %s",
		       dev,unit,redial_cmd);
		/*
		* First close the slip line in case redial_cmd wants it
		* (like to use kermit to redial).
		*/
		release_line();
		/* System() the redial command */
		if (system(redial_cmd))
			goto again;
		acquire_line();
		setup_line(CLOCAL);
... [snip] [snip] [snip] ...

--------------------------------------------------

2. ppp (iij) problem - from route.c:

int
GetIfIndex(name)
char *name;
{

#define NUM_DEVICES 8*10

  struct ifreq *ifrp;
  int s, len, elen, index;
  struct ifconf ifconfs;
  struct ifreq reqbuf[4*NUM_DEVICES];

... [snip] [snip] [snip] ...
--------------------------------------------------



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