tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: destroy ppp(4) on closing tty
On Fri, 4 Apr 2008 16:35:49 +0200
Quentin Garnier <cube%cubidou.net@localhost> wrote:
> On Fri, Apr 04, 2008 at 09:50:57AM -0400, Greg Troxel wrote:
> > Yasuoka Masahiko <yasuoka%iij.ad.jp@localhost> writes:
> > > I wonder why ppp(4) destroys itself when the attached tty is closed.
> > > tun(4) doesn't destroy itself when the attached device file is closed.
> > >
> > > Is there somebody knows the reason?
> >
> > Does the ppp(4) get created when something on the tty sets line
> > discipline to PPP? If so, it makes sense to destroy on close.
>
> What could be confusing I guess is that you can create a ppp interface
> with ifconfig, then get it used by pppd through the line discipline,
> which will eventually destroy it on close.
Thank you. Yes, i confused that point. My program can't get ppp
interface's i/o stastics after pppd(8) exits.
> That could be fixed by a simple flag set from the cloner interface. The
> only reason ppp(4) is a cloner is so that pppd(8) can check there is
> support for it by listing the cloners. Otherwise there's no point in
> letting the user do ifconfig ppp0 create.
A patch attached at the end of this message.
> > If a tun is created by a call on a descriptor, I'd say it too should be
> > destroyed on close. If it's created by 'ifconfig tun0 create', then it
> > shouldn't be destroyed on close.
>
> That's indeed the case.
How about 'device/tty close' case?
As far as my test, current behavior is
----------- ----------- ---------------
created by
ifconfig device/tty open
----------- ----------- ---------------
tun(4) remain remain
ppp(4) destroyed destroyed
----------- ----------- ---------------
and after the patch,
----------- ----------- ---------------
created by
ifconfig device/tty open
----------- ----------- ---------------
tun(4) remain remain
ppp(4) remain destroyed
----------- ----------- ---------------
Their behaviors sould be consistent?
--yasuoka
Index: if_ppp.c
===================================================================
RCS file: /vol/cvs/NetBSD/src/sys/net/if_ppp.c,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 if_ppp.c
--- if_ppp.c 2 Nov 2006 05:14:42 -0000 1.1.1.1
+++ if_ppp.c 5 Apr 2008 03:31:11 -0000
@@ -353,7 +353,7 @@ pppalloc(pid)
pid_t pid;
{
struct ppp_softc *sc = NULL, *scf;
- int i;
+ int i, sc_flags;
simple_lock(&ppp_list_mutex);
for (scf = LIST_FIRST(&ppp_softc_list); scf != NULL;
@@ -368,8 +368,11 @@ pppalloc(pid)
}
simple_unlock(&ppp_list_mutex);
- if (sc == NULL)
+ sc_flags = 0;
+ if (sc == NULL) {
sc = ppp_create(ppp_cloner.ifc_name, -1);
+ sc_flags |= SC_TTYCLONE;
+ }
#ifdef __HAVE_GENERIC_SOFT_INTERRUPTS
sc->sc_si = softintr_establish(IPL_SOFTNET, pppintr, sc);
@@ -378,7 +381,7 @@ pppalloc(pid)
return (NULL);
}
#endif
- sc->sc_flags = 0;
+ sc->sc_flags = sc_flags;
sc->sc_mru = PPP_MRU;
sc->sc_relinq = NULL;
(void)memset(&sc->sc_stats, 0, sizeof(sc->sc_stats));
@@ -476,7 +479,8 @@ pppdealloc(sc)
sc->sc_comp = 0;
}
#endif
- (void)ppp_clone_destroy(&sc->sc_if);
+ if ((sc->sc_flags & SC_TTYCLONE) != 0)
+ (void)ppp_clone_destroy(&sc->sc_if);
}
/*
Index: if_ppp.h
===================================================================
RCS file: /vol/cvs/NetBSD/src/sys/net/if_ppp.h,v
retrieving revision 1.1.1.1
diff -u -p -r1.1.1.1 if_ppp.h
--- if_ppp.h 2 Nov 2006 05:14:42 -0000 1.1.1.1
+++ if_ppp.h 5 Apr 2008 03:41:35 -0000
@@ -73,6 +73,7 @@
/*
* State bits in sc_flags, not changeable by user.
*/
+#define SC_TTYCLONE 0x00000200 /* created by tty open */
#define SC_TIMEOUT 0x00000400 /* timeout is currently pending */
#define SC_VJ_RESET 0x00000800 /* need to reset VJ decomp */
#define SC_COMP_RUN 0x00001000 /* compressor has been inited */
Home |
Main Index |
Thread Index |
Old Index