-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi,
I've noticed in my Debian packaging exploits of lsh that IPv6 support is built only if the build-time kernel has IPv6 available. Really it should be OK to build with IPv6 support assuming all the appropriate headers and libraries are available at build time, since the IPv6 code simply fails and fall back to the IPv4 code, doesn't it? The reason I ask this is that I would like to "force enable" building of IPv6 support in the Debian packages, since they end up running on boxes that they are not built on, and my guess is that not all the Debian build machines have IPv6 support (I'm not entirely sure on this,however).
If this isn't suitable as the default, maybe an option flag such as - --enable-force-ipv6 or similar ... ?
Cheers,
Timshel
- -- Timshel Knoll timshel@pobox.com, Debian email: timshel@debian.org Debian GNU/Linux developer: http://people.debian.org/~timshel/ GnuPG public key: finger timshel@debian.org
Timshel Knoll timshel@debian.org writes:
I've noticed in my Debian packaging exploits of lsh that IPv6 support is built only if the build-time kernel has IPv6 available. Really it should be OK to build with IPv6 support assuming all the appropriate headers and libraries are available at build time, since the IPv6 code simply fails and fall back to the IPv4 code, doesn't it?
Sorry for the late reply. I think this is a known bug, the underlying problem is that lshd wants to listen on only a single address. When doing ipv6, it creates an ipv6 socket on the wildcard interface, and relies on the tcp stack to give it ipv4 connections as mapped addresses (is that the correct terminology?). And that fails miserably if ipv6 isn't available at runtime.
One could add some fallback, but the Right Way to do it is to support listening on several addresses and sockets in parallell, e.g. all addresses returned by getaddrinfo. The recent changes to the i/o code (part of the X11 forwarding hacking) is a step in the right direction.
The reason I ask this is that I would like to "force enable" building of IPv6 support in the Debian packages, since they end up running on boxes that they are not built on, and my guess is that not all the Debian build machines have IPv6 support (I'm not entirely sure on this,however).
If I recall correctly since last time this issue was up, an lshd built with ipv6 support will fail to run on machines without ipv6 support at runtime. The configure test for real ipv6 support is a workaround for that problem.
Regards, /Niels
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Fri, 6 Sep 2002 11:30 pm, Niels Möller wrote:
The reason I ask this is that I would like to "force enable" building of IPv6 support in the Debian packages, since they end up running on boxes that they are not built on, and my guess is that not all the Debian build machines have IPv6 support (I'm not entirely sure on this,however).
If I recall correctly since last time this issue was up, an lshd built with ipv6 support will fail to run on machines without ipv6 support at runtime. The configure test for real ipv6 support is a workaround for that problem.
We actually worked through that problem and you fixed it in the end, IIRC. I build Debian's i386 lsh with IPv6 support enabled, so I assume that it would be running on many, many boxes across the world, and I haven't recieved any reports of problems with.
I think it would be OK just to put in the configure option - the Debian example would suggest that the problem has been fixed, IMHO.
Cheers,
Timshel
- -- Timshel Knoll timshel@pobox.com, Debian email: timshel@debian.org Debian GNU/Linux developer: http://people.debian.org/~timshel/ GnuPG public key: finger timshel@debian.org
Timshel Knoll timshel@debian.org writes:
I think it would be OK just to put in the configure option - the Debian example would suggest that the problem has been fixed, IMHO.
Hmm. Then it should be good enough to simply drop that configure test,
--- configure.ac 3 Sep 2002 06:02:44 -0000 1.15 +++ configure.ac 9 Sep 2002 22:12:53 -0000 @@ -758,25 +758,7 @@ # IPv6 support
if test x$enable_ipv6 = xyes ; then - AC_CACHE_CHECK([if IPv6 is supported], - lsh_cv_sys_ipv6, - [AC_TRY_RUN([/* AF_INET6 avalable check */ - #include <sys/types.h> - #include <sys/socket.h> - int main(int argc, char **argv) - { - if (socket(AF_INET6, SOCK_STREAM, 0) < 0) - exit(1); - else - exit(0); - } - ], lsh_cv_sys_ipv6=yes, - lsh_cv_sys_ipv6=no, - lsh_cv_sys_ipv6=no)]) - - if test x$lsh_cv_sys_ipv6 != xyes ; then - enable_ipv6=no - elif test x$ac_cv_func_getaddrinfo != xyes ; then + if test x$ac_cv_func_getaddrinfo != xyes ; then AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support]) enable_ipv6=no elif test x$ac_cv_func_gai_strerror != xyes ; then
Does that solve the problem for you?
Regards, /Niels
nisse@lysator.liu.se (Niels Möller) writes:
I think it would be OK just to put in the configure option - the Debian example would suggest that the problem has been fixed, IMHO.
Hmm. Then it should be good enough to simply drop that configure test,
Is the existence of getaddrinfo a good enough indication of IPv6 availability? I think it's probably better to AC_TRY_LINK (instead of AC_TRY_RUN).
/Pontus
Pontus Skoeld pont@soua.net writes:
Is the existence of getaddrinfo a good enough indication of IPv6 availability?
That's not how to read that code in configure.ac. The ipv6 code uses getaddrinfo (and I don't care much about supporting ipv6 on systems that have ipv6 sockets but don't have the support functions from RFC 2133). So if we don't have getaddrinfo, ipv6 support has to be disabled.
Or are you afraid that the code will break on systems with no ipv6? To test for ipv6 availability in libc it might be good to check for AF_INET6, but I think the tests for getaddrinfo and friends will weed out such systems anyway, and disable ipv6 for them.
I think it's probably better to AC_TRY_LINK (instead of AC_TRY_RUN).
Then it turns basically into a test for AF_INET6. That's a reasonable way to check for libc-level ipv6 support, but I think we can get away without that test. I think the test for getaddrinfo should detect systems without libc-level ipv6 support. Or are there any systems that define getaddrinfo and friends but don't define AF_INET6?
Regards, /Niels
nisse@lysator.liu.se (Niels Möller) writes:
Or are you afraid that the code will break on systems with no ipv6? To test for ipv6 availability in libc it might be good to check for AF_INET6, but I think the tests for getaddrinfo and friends will weed out such systems anyway, and disable ipv6 for them.
Bingo.
There is at least one implementation of getaddrinfo for IPv4 (URL:http://www.sra.co.jp/people/m-kasahr/getaddrinfo/, and while I don't think it would be a disaster if compilation breaks for those system (which I'm actually not sure it does, it seems to have dummy definition of the inet6-stuff, but I don't know whatever it installs it).
What we gain by removing the test:
* A quicker ./configure
What we may possibly lose:
* Broken IPv6 capable systems where lsh won't compile might still try to use IPv6 and cause errors.
* Breaks compilations on IPv4 systems with getaddrinfo and friends.
I wouldn't bet that there aren't any systems without AF_INET6 but with getaddrinfo, so I think it's best to keep the test.
/Pontus
Pontus Skoeld pont@soua.net writes:
I wouldn't bet that there aren't any systems without AF_INET6 but with getaddrinfo, so I think it's best to keep the test.
I'm tempted to call such systems broken. Simply defining the AF_INET6 constant is cheap, and it's really independent of ipv6 support. The glibc sys/socket.h defines for example AF_X25, AF_IPX, AF_APPLETALK, AF_ROSE, AF_DECnet, AF_ECONET and a bunch of oter families that I've never heard of before.
If really needed, we can add an
#ifndef AF_INET6 #define AF_INET6 4711 #endif
somewhere to take care of that.
Anyway, if we want to test for the AF_INET6 constant, AC_TRY_LINK is also overkill.
/Niels
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Tue, 10 Sep 2002 08:16 am, Niels Möller wrote:
Timshel Knoll timshel@debian.org writes:
I think it would be OK just to put in the configure option - the Debian example would suggest that the problem has been fixed, IMHO.
Hmm. Then it should be good enough to simply drop that configure test,
--- configure.ac 3 Sep 2002 06:02:44 -0000 1.15 +++ configure.ac 9 Sep 2002 22:12:53 -0000 @@ -758,25 +758,7 @@ # IPv6 support
if test x$enable_ipv6 = xyes ; then
- AC_CACHE_CHECK([if IPv6 is supported],
- lsh_cv_sys_ipv6,
- [AC_TRY_RUN([/* AF_INET6 avalable check */
- #include <sys/types.h>
- #include <sys/socket.h>
- int main(int argc, char **argv)
- {
- if (socket(AF_INET6, SOCK_STREAM, 0) < 0)
exit(1);
- else
exit(0);
- }
- ], lsh_cv_sys_ipv6=yes,
lsh_cv_sys_ipv6=no,
lsh_cv_sys_ipv6=no)])
- if test x$lsh_cv_sys_ipv6 != xyes ; then
- enable_ipv6=no
- elif test x$ac_cv_func_getaddrinfo != xyes ; then
- if test x$ac_cv_func_getaddrinfo != xyes ; then AC_MSG_WARN([getaddrinfo not found. Disabling IPv6 support]) enable_ipv6=no elif test x$ac_cv_func_gai_strerror != xyes ; then
Does that solve the problem for you?
Regards, /Niels
Yes, this will do what I wanted ... thanks.
Cheers,
Timshel
- -- Timshel Knoll timshel@pobox.com, Debian email: timshel@debian.org Debian GNU/Linux developer: http://people.debian.org/~timshel/ GnuPG public key: finger timshel@debian.org