ppp command port does not listens on ipv4 unless no INET6 in
kernel
Julian H. Stacey
jhs at flat.berklix.net
Sun Sep 17 14:36:12 PDT 2006
Brian Somers wrote:
> On Sun, 17 Sep 2006 20:10:47 +0900 Hajimu UMEMOTO <ume at freebsd.org> wrote:
> > Hi,
> >
> > >>>>> On Thu, 14 Sep 2006 15:44:18 +0200 (CEST)
> > >>>>> "Julian Stacey" <jhs at berklix.org> said:
> >
> > jhs> I'm not clear if this is a bug or a config error:
> > jhs> It seems though my /usr/sbin/ppp was moving traffic
> > jhs> to & from internet, it was only listening for commands
> > jhs> (not data) on ipv6, not ipv4, thus I could not type commands
> > jhs> like dial & drop, unless instead of running ppp -auto
> > jhs> instead I invoked ppp manually in foreground on localhost.
> >
> > As far as I read the source of ppp(8), it only listen on an IPv6, and
> > expects to listen on an IPv4 through an IPv4-mapped IPv6 address.
> > However, an IPv4-mapped IPv6 address feature is disabled by default.
> > ppp(8) should be rewritten to listen on both an IPv4 and an IPv6.
> > But, it is slightly complex. So, I made a patch to enable an
> > IPv4-mapped IPv6 address only for the socket that ppp(8) is listening
> > on.
> > I have no environment for testing this. Could you try this patch?
> >
> > Index: usr.sbin/ppp/server.c
> > diff -u -p usr.sbin/ppp/server.c.orig usr.sbin/ppp/server.c
> > --- usr.sbin/ppp/server.c.orig Sun Sep 5 10:46:52 2004
> > +++ usr.sbin/ppp/server.c Sun Sep 17 19:54:43 2006
> > @@ -346,6 +346,13 @@ server_TcpOpen(struct bundle *bundle, u_
> > goto failed;
> > }
> >
> > +#ifndef NOINET6
> > + if (probe.ipv6_available) {
> > + int off = 0;
> > + setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&off, sizeof(off));
> > + }
> > +#endif
> > +
> > setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &s, sizeof s);
> > if (bind(s, (struct sockaddr *)&ss, sz) < 0) {
> > log_Printf(LogWARN, "Tcp: bind: %s\n", strerror(errno));
> >
> >
> > Sincerely,
>
> AFAIR I had trouble getting that code to work and was advised at
> the time that I'd just get the mapped port for free. I haven't
> been using IPv6 on production machines for some time, so I haven't
> seen the problem :(
>
> It'd be great if you'd commit the patch if Julian says it works
> ok for him.
Tested. It Works. Thanks !
I tested the patch on PPP running under both kernels IPV4+6 & V4only
just to be sure, it works on both, & allows me to type dial & down
(all I tried or wanted.)
Output With patch:
------------------------
strings /boot/kernel/kernel | grep ___ | grep INET
___options INET
___options INET6
sockstat -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root ppp 939 9 tcp46 *:12345 *:*
------------------------
strings /boot/kernel/kernel | grep ___ | grep INET
___options INET
___# options INET6
sockstat -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root ppp 931 9 tcp4 *:12345 *:*
------------------------
Old V4+6 Kernel pre patch:
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root ppp 1020 9 tcp6 *:12345 *:*
I hope it's commited. (Dont't know if a 2nd tester is needed to verify ?)
Thanks Hajimu :-)
Julian
--
Julian Stacey. BSD Unix C Net Consultancy, Munich/Muenchen http://berklix.com
Mail Ascii, not HTML. Ihr Rauch = mein allergischer Kopfschmerz.
Don't buy it ! Get it free ! http://berklix.org/free-software
More information about the freebsd-net
mailing list