Code Monkey home page Code Monkey logo

dhcp6c's Issues

Core dump when HUP - Only happens when RAW options are in use.

Kev picked this one up, Seems that he noticed issues when his LAN connection was flapping due to a faulty cable. He was getting strangeness in one of the options being sent by dhcp6c. It was fine on the initial run but if a SIGUP was sent ( LAN or WAN flap ) then one of the options showed a corrupted string.

I tried it on my test unit, adding the options in advanced etc and in my case dhcp6c exited with SIGBUS error and a dhcp6c.core for me to look at. Tracing that and the logs appears to show it's trying to free memory that it should not. Looking through the source there is a call at line 151 in common.c -

free(op); // Needed?

I have commented this out and re-compiled and now the error does not occur.
op is a pointer to a structure and I think the function TAILQ_REMOVE(head,op,link) call already frees the pointed to structure,

Thoughts?

Sent a version to Kev for testing on his OR France system to see if it fixes it.

Building DHCP6c from source code fails.

Description:
When I want to build dhcp6c from source code, it fails.

OS Version:

Linux debian 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux

config.log

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by wide-dhcpv6 configure 20080615, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure

## --------- ##
## Platform. ##
## --------- ##

hostname = debian
uname -m = x86_64
uname -r = 4.19.0-13-amd64
uname -s = Linux
uname -v = #1 SMP Debian 4.19.160-2 (2020-11-28)

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = x86_64
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /usr/local/sbin
PATH: /usr/local/bin
PATH: /usr/sbin
PATH: /usr/bin
PATH: /sbin
PATH: /bin


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2312: checking for a BSD-compatible install
configure:2380: result: /usr/bin/install -c
configure:2391: checking whether make sets $(MAKE)
configure:2413: result: yes
configure:2470: checking for gcc
configure:2486: found /usr/bin/gcc
configure:2497: result: gcc
configure:2726: checking for C compiler version
configure:2735: gcc --version >&5
gcc (Debian 8.3.0-6) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:2746: $? = 0
configure:2735: gcc -v >&5
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 8.3.0 (Debian 8.3.0-6)
configure:2746: $? = 0
configure:2735: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:2746: $? = 1
configure:2735: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'; did you mean '--version'?
gcc: fatal error: no input files
compilation terminated.
configure:2746: $? = 1
configure:2766: checking whether the C compiler works
configure:2788: gcc    conftest.c  >&5
configure:2792: $? = 0
configure:2840: result: yes
configure:2843: checking for C compiler default output file name
configure:2845: result: a.out
configure:2851: checking for suffix of executables
configure:2858: gcc -o conftest    conftest.c  >&5
configure:2862: $? = 0
configure:2884: result:
configure:2906: checking whether we are cross compiling
configure:2914: gcc -o conftest    conftest.c  >&5
configure:2918: $? = 0
configure:2925: ./conftest
configure:2929: $? = 0
configure:2917: result: no
configure:2922: checking for suffix of object files
configure:2944: gcc -c   conftest.c >&5
configure:2948: $? = 0
configure:2969: result: o
configure:2973: checking whether we are using the GNU C compiler
configure:2992: gcc -c   conftest.c >&5
configure:2992: $? = 0
configure:3001: result: yes
configure:3010: checking whether gcc accepts -g
configure:3030: gcc -c -g  conftest.c >&5
configure:3030: $? = 0
configure:3071: result: yes
configure:3088: checking for gcc option to accept ISO C89
configure:3151: gcc  -c -g -O2  conftest.c >&5
configure:3151: $? = 0
configure:3164: result: none needed
configure:3189: checking how to run the C preprocessor
configure:3220: gcc -E  conftest.c
configure:3220: $? = 0
configure:3234: gcc -E  conftest.c
conftest.c:9:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:3234: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:3259: result: gcc -E
configure:3279: gcc -E  conftest.c
configure:3279: $? = 0
configure:3293: gcc -E  conftest.c
conftest.c:9:10: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
          ^~~~~~~~~~~~~~~~~~
compilation terminated.
configure:3293: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:3325: checking for bison
configure:3355: result: no
configure:3325: checking for byacc
configure:3355: result: no
configure:3369: checking for flex
configure:3399: result: no
configure:3369: checking for lex
configure:3399: result: no
configure:3534: checking for sys/queue.h
configure:3547: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3547: $? = 0
configure:3548: result: yes
configure:3558: checking for grep that handles long lines and -e
configure:3616: result: /usr/bin/grep
configure:3621: checking for egrep
configure:3683: result: /usr/bin/grep -E
configure:3703: checking for getaddrinfo/getnameinfo library
configure:3705: result: regular
configure:3763: checking for getaddrinfo
configure:3763: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3763: $? = 0
configure:3763: result: yes
configure:3777: checking for getnameinfo
configure:3777: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3777: $? = 0
configure:3777: result: yes
configure:3791: checking for getifaddrs
configure:3791: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3791: $? = 0
configure:3791: result: yes
configure:3807: checking for if_nametoindex
configure:3807: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3807: $? = 0
configure:3807: result: yes
configure:3816: checking for strlcpy
configure:3816: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
/usr/bin/ld: /tmp/cc5oP4hU.o: in function `main':
/root/dhcp6c/conftest.c:47: undefined reference to `strlcpy'
collect2: error: ld returned 1 exit status
configure:3816: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| /* end confdefs.h.  */
| /* Define strlcpy to an innocuous variant, in case <limits.h> declares strlcpy.
|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
| #define strlcpy innocuous_strlcpy
|
| /* System header to define __stub macros and hopefully few prototypes,
|     which can conflict with char strlcpy (); below.
|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|     <limits.h> exists even on freestanding compilers.  */
|
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|
| #undef strlcpy
|
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char strlcpy ();
| /* The GNU C library defines this for functions which it implements
|     to always fail with ENOSYS.  Some functions are actually named
|     something starting with __ and the normal name is an alias.  */
| #if defined __stub_strlcpy || defined __stub___strlcpy
| choke me
| #endif
|
| int
| main ()
| {
| return strlcpy ();
|   ;
|   return 0;
| }
configure:3816: result: no
configure:3829: checking for strlcat
configure:3829: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
/usr/bin/ld: /tmp/ccRWO5C3.o: in function `main':
/root/dhcp6c/conftest.c:47: undefined reference to `strlcat'
collect2: error: ld returned 1 exit status
configure:3829: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| /* end confdefs.h.  */
| /* Define strlcat to an innocuous variant, in case <limits.h> declares strlcat.
|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
| #define strlcat innocuous_strlcat
|
| /* System header to define __stub macros and hopefully few prototypes,
|     which can conflict with char strlcat (); below.
|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|     <limits.h> exists even on freestanding compilers.  */
|
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|
| #undef strlcat
|
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char strlcat ();
| /* The GNU C library defines this for functions which it implements
|     to always fail with ENOSYS.  Some functions are actually named
|     something starting with __ and the normal name is an alias.  */
| #if defined __stub_strlcat || defined __stub___strlcat
| choke me
| #endif
|
| int
| main ()
| {
| return strlcat ();
|   ;
|   return 0;
| }
configure:3829: result: no
configure:3843: checking for daemon
configure:3843: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3843: $? = 0
configure:3843: result: yes
configure:3857: checking for warnx
configure:3857: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3857: $? = 0
configure:3857: result: yes
configure:3872: checking for ANSI C header files
configure:3892: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3892: $? = 0
configure:3965: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:3965: $? = 0
configure:3965: ./conftest
configure:3965: $? = 0
configure:3976: result: yes
configure:3989: checking for sys/types.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for sys/stat.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for stdlib.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for string.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for memory.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for strings.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for inttypes.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for stdint.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:3989: checking for unistd.h
configure:3989: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:3989: $? = 0
configure:3989: result: yes
configure:4004: checking fcntl.h usability
configure:4004: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking fcntl.h presence
configure:4004: gcc -E  conftest.c
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking for fcntl.h
configure:4004: result: yes
configure:4004: checking sys/ioctl.h usability
configure:4004: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking sys/ioctl.h presence
configure:4004: gcc -E  conftest.c
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking for sys/ioctl.h
configure:4004: result: yes
configure:4004: checking sys/time.h usability
configure:4004: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking sys/time.h presence
configure:4004: gcc -E  conftest.c
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking for sys/time.h
configure:4004: result: yes
configure:4004: checking syslog.h usability
configure:4004: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking syslog.h presence
configure:4004: gcc -E  conftest.c
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking for syslog.h
configure:4004: result: yes
configure:4004: checking for unistd.h
configure:4004: result: yes
configure:4004: checking ifaddrs.h usability
configure:4004: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking ifaddrs.h presence
configure:4004: gcc -E  conftest.c
configure:4004: $? = 0
configure:4004: result: yes
configure:4004: checking for ifaddrs.h
configure:4004: result: yes
configure:4014: checking for socklen_t
configure:4028: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4028: $? = 0
configure:4029: result: yes
configure:4048: checking for an ANSI C-conforming const
configure:4114: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4114: $? = 0
configure:4121: result: yes
configure:4129: checking for size_t
configure:4129: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4129: $? = 0
configure:4129: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'main':
conftest.c:67:21: error: expected expression before ')' token
 if (sizeof ((size_t)))
                     ^
configure:4129: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| if (sizeof ((size_t)))
|           return 0;
|   ;
|   return 0;
| }
configure:4129: result: yes
configure:4140: checking whether time.h and sys/time.h may both be included
configure:4160: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4160: $? = 0
configure:4167: result: yes
configure:4175: checking whether struct tm is in sys/time.h or time.h
configure:4195: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4195: $? = 0
configure:4202: result: time.h
configure:4210: checking for struct tm.tm_zone
configure:4210: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4210: $? = 0
configure:4210: result: yes
configure:4277: checking for sig_atomic_t
configure:4277: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4277: $? = 0
configure:4277: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'main':
conftest.c:40:27: error: expected expression before ')' token
 if (sizeof ((sig_atomic_t)))
                           ^
configure:4277: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| /* end confdefs.h.  */
| #include <sys/types.h>
|       #include <signal.h>
|
| int
| main ()
| {
| if (sizeof ((sig_atomic_t)))
|           return 0;
|   ;
|   return 0;
| }
configure:4277: result: yes
configure:4294: checking whether getpgrp requires zero arguments
configure:4311: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'main':
conftest.c:71:1: error: too many arguments to function 'getpgrp'
 getpgrp (0);
 ^~~~~~~
In file included from conftest.c:66:
/usr/include/unistd.h:634:16: note: declared here
 extern __pid_t getpgrp (void) __THROW;
                ^~~~~~~
configure:4311: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| getpgrp (0);
|   ;
|   return 0;
| }
configure:4319: result: yes
configure:4328: checking whether gcc needs -traditional
configure:4362: result: no
configure:4369: checking whether setpgrp takes no argument
configure:4391: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
conftest.c: In function 'main':
conftest.c:75:10: error: too many arguments to function 'setpgrp'
   return setpgrp (1,1) != -1;
          ^~~~~~~
In file included from conftest.c:67:
/usr/include/unistd.h:660:12: note: declared here
 extern int setpgrp (void) __THROW;
            ^~~~~~~
configure:4391: $? = 1
configure: program exited with status 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| #define GETPGRP_VOID 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| /* If this system has a BSD-style setpgrp which takes arguments,
|   setpgrp(1, 1) will fail with ESRCH and return -1, in that case
|   exit successfully. */
|   return setpgrp (1,1) != -1;
|   ;
|   return 0;
| }
configure:4401: result: yes
configure:4409: checking return type of signal handlers
configure:4427: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'main':
conftest.c:43:10: error: void value not ignored as it ought to be
 return *(signal (0, 0)) (0) == 1;
         ~^~~~~~~~~~~~~~~~~~
configure:4427: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| #define GETPGRP_VOID 1
| #define SETPGRP_VOID 1
| /* end confdefs.h.  */
| #include <sys/types.h>
| #include <signal.h>
|
| int
| main ()
| {
| return *(signal (0, 0)) (0) == 1;
|   ;
|   return 0;
| }
configure:4434: result: void
configure:4445: checking for mktime
configure:4445: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:4445: $? = 0
configure:4445: result: yes
configure:4445: checking for select
configure:4445: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:4445: $? = 0
configure:4445: result: yes
configure:4445: checking for socket
configure:4445: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:4445: $? = 0
configure:4445: result: yes
configure:4456: checking for clock_gettime
configure:4456: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
configure:4456: $? = 0
configure:4456: result: yes
configure:4466: checking for local DB directory
configure:4476: result: /var/db
configure:4480: checking for arc4random
configure:4480: gcc -o conftest -g -O2 -I$(srcdir)   conftest.c  >&5
/usr/bin/ld: /tmp/ccDoAIym.o: in function `main':
/root/dhcp6c/conftest.c:76: undefined reference to `arc4random'
collect2: error: ld returned 1 exit status
configure:4480: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| #define GETPGRP_VOID 1
| #define SETPGRP_VOID 1
| #define RETSIGTYPE void
| #define HAVE_MKTIME 1
| #define HAVE_SELECT 1
| #define HAVE_SOCKET 1
| #define HAVE_CLOCK_GETTIME 1
| /* end confdefs.h.  */
| /* Define arc4random to an innocuous variant, in case <limits.h> declares arc4random.
|    For example, HP-UX 11i <limits.h> declares gettimeofday.  */
| #define arc4random innocuous_arc4random
|
| /* System header to define __stub macros and hopefully few prototypes,
|     which can conflict with char arc4random (); below.
|     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
|     <limits.h> exists even on freestanding compilers.  */
|
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|
| #undef arc4random
|
| /* Override any GCC internal prototype to avoid an error.
|    Use char because int might match the return type of a GCC
|    builtin and then its argument prototype would still apply.  */
| #ifdef __cplusplus
| extern "C"
| #endif
| char arc4random ();
| /* The GNU C library defines this for functions which it implements
|     to always fail with ENOSYS.  Some functions are actually named
|     something starting with __ and the normal name is an alias.  */
| #if defined __stub_arc4random || defined __stub___arc4random
| choke me
| #endif
|
| int
| main ()
| {
| return arc4random ();
|   ;
|   return 0;
| }
configure:4480: result: no
configure:4495: checking if --enable-pedant option is specified
configure:4506: result: no
configure:4509: checking ANSI predeclared __func__
configure:4522: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'func':
conftest.c:46:18: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
 void func(void) {printf("%s\n", __func__);}
                  ^~~~~~
conftest.c:46:18: warning: incompatible implicit declaration of built-in function 'printf'
conftest.c:46:18: note: include '<stdio.h>' or provide a declaration of 'printf'
conftest.c:1:1:
 /* confdefs.h */
conftest.c:46:18:
 void func(void) {printf("%s\n", __func__);}
                  ^~~~~~
configure:4522: $? = 0
configure:4523: result: yes
configure:4569: checking checking the existence TAILQ_FOREACH_REVERSE
configure:4586: result: yes
configure:4596: checking argument order of TAILQ_FOREACH_REVERSE
configure:4623: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h: In function 'main':
/usr/include/x86_64-linux-gnu/bits/stdio.h:39:1: error: nested function 'vprintf' declared 'extern'
 vprintf (const char *__restrict __fmt, __gnuc_va_list __arg)
 ^~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:39:1: error: static declaration of 'vprintf' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:347:12: note: previous declaration of 'vprintf' was here
 extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
            ^~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:47:1: error: nested function 'getchar' declared 'extern'
 getchar (void)
 ^~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:47:1: error: static declaration of 'getchar' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:498:12: note: previous declaration of 'getchar' was here
 extern int getchar (void);
            ^~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:56:1: error: nested function 'fgetc_unlocked' declared 'extern'
 fgetc_unlocked (FILE *__fp)
 ^~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:56:1: error: static declaration of 'fgetc_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:516:12: note: previous declaration of 'fgetc_unlocked' was here
 extern int fgetc_unlocked (FILE *__stream);
            ^~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:66:1: error: nested function 'getc_unlocked' declared 'extern'
 getc_unlocked (FILE *__fp)
 ^~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:66:1: error: static declaration of 'getc_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:505:12: note: previous declaration of 'getc_unlocked' was here
 extern int getc_unlocked (FILE *__stream);
            ^~~~~~~~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:73:1: error: nested function 'getchar_unlocked' declared 'extern'
 getchar_unlocked (void)
 ^~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:73:1: error: static declaration of 'getchar_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:506:12: note: previous declaration of 'getchar_unlocked' was here
 extern int getchar_unlocked (void);
            ^~~~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:82:1: error: nested function 'putchar' declared 'extern'
 putchar (int __c)
 ^~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:82:1: error: static declaration of 'putchar' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:534:12: note: previous declaration of 'putchar' was here
 extern int putchar (int __c);
            ^~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:91:1: error: nested function 'fputc_unlocked' declared 'extern'
 fputc_unlocked (int __c, FILE *__stream)
 ^~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:91:1: error: static declaration of 'fputc_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:543:12: note: previous declaration of 'fputc_unlocked' was here
 extern int fputc_unlocked (int __c, FILE *__stream);
            ^~~~~~~~~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:101:1: error: nested function 'putc_unlocked' declared 'extern'
 putc_unlocked (int __c, FILE *__stream)
 ^~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:101:1: error: static declaration of 'putc_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:551:12: note: previous declaration of 'putc_unlocked' was here
 extern int putc_unlocked (int __c, FILE *__stream);
            ^~~~~~~~~~~~~
In file included from /usr/include/stdio.h:870,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:108:1: error: nested function 'putchar_unlocked' declared 'extern'
 putchar_unlocked (int __c)
 ^~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:108:1: error: static declaration of 'putchar_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:552:12: note: previous declaration of 'putchar_unlocked' was here
 extern int putchar_unlocked (int __c);
            ^~~~~~~~~~~~~~~~
In file included from /usr/include/features.h:424,
                 from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:128:1: error: nested function 'feof_unlocked' declared 'extern'
 __NTH (feof_unlocked (FILE *__stream))
 ^~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:128:1: error: static declaration of 'feof_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:772:12: note: previous declaration of 'feof_unlocked' was here
 extern int feof_unlocked (FILE *__stream) __THROW __wur;
            ^~~~~~~~~~~~~
In file included from /usr/include/features.h:424,
                 from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:27,
                 from conftest.c:48:
/usr/include/x86_64-linux-gnu/bits/stdio.h:135:1: error: nested function 'ferror_unlocked' declared 'extern'
 __NTH (ferror_unlocked (FILE *__stream))
 ^~~~~
/usr/include/x86_64-linux-gnu/bits/stdio.h:135:1: error: static declaration of 'ferror_unlocked' follows non-static declaration
In file included from conftest.c:48:
/usr/include/stdio.h:773:12: note: previous declaration of 'ferror_unlocked' was here
 extern int ferror_unlocked (FILE *__stream) __THROW __wur;
            ^~~~~~~~~~~~~~~
configure:4623: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| #define GETPGRP_VOID 1
| #define SETPGRP_VOID 1
| #define RETSIGTYPE void
| #define HAVE_MKTIME 1
| #define HAVE_SELECT 1
| #define HAVE_SOCKET 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_ANSI_FUNC 1
| /* end confdefs.h.  */
|
| int
| main ()
| {
|
|       #include <stdio.h>
|       #include <sys/queue.h>
|
|       TAILQ_HEAD(tailhead, entry) head = TAILQ_HEAD_INITIALIZER(head);
|       struct entry {
|               TAILQ_ENTRY(entry) entries;
|       } *p;
|
|       int i;
|       struct tailhead *headp;
|
|       TAILQ_FOREACH_REVERSE(p, headp, tailhead, entries) {
|       }
|
|   ;
|   return 0;
| }
configure:4629: result: old
configure:4637: checking if you have a length field in struct sockaddr*
configure:4659: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
conftest.c: In function 'main':
conftest.c:53:3: error: 'struct sockaddr' has no member named 'sa_len'
  a.sa_len = 1;
   ^
configure:4659: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "wide-dhcpv6"
| #define PACKAGE_TARNAME "wide-dhcpv6"
| #define PACKAGE_VERSION "20080615"
| #define PACKAGE_STRING "wide-dhcpv6 20080615"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define HAVE_GETADDRINFO 1
| #define HAVE_GETNAMEINFO 1
| #define HAVE_GETIFADDRS 1
| #define HAVE_IF_NAMETOINDEX 1
| #define HAVE_DAEMON 1
| #define HAVE_WARNX 1
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_SYS_IOCTL_H 1
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYSLOG_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_IFADDRS_H 1
| #define TIME_WITH_SYS_TIME 1
| #define HAVE_STRUCT_TM_TM_ZONE 1
| #define HAVE_TM_ZONE 1
| #define HAVE_SIG_ATOMIC_T 1
| #define GETPGRP_VOID 1
| #define SETPGRP_VOID 1
| #define RETSIGTYPE void
| #define HAVE_MKTIME 1
| #define HAVE_SELECT 1
| #define HAVE_SOCKET 1
| #define HAVE_CLOCK_GETTIME 1
| #define HAVE_ANSI_FUNC 1
| #define HAVE_TAILQ_FOREACH_REVERSE_OLD 1
| /* end confdefs.h.  */
|
|  #include <sys/types.h>
|  #include <sys/socket.h>
|
| int
| main ()
| {
|
|  struct sockaddr a;
|  a.sa_len = 1;
|
|   ;
|   return 0;
| }
configure:4667: result: no
configure:4675: checking the owner of the programs
configure:4685: result: bin
configure:4689: checking the group owner of the programs
configure:4699: result: bin
configure:4705: checking stdarg.h usability
configure:4705: gcc -c -g -O2 -I$(srcdir)  conftest.c >&5
configure:4705: $? = 0
configure:4705: result: yes
configure:4705: checking stdarg.h presence
configure:4705: gcc -E  conftest.c
configure:4705: $? = 0
configure:4705: result: yes
configure:4705: checking for stdarg.h
configure:4705: result: yes
configure:4860: creating ./config.status

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by wide-dhcpv6 config.status 20080615, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    =
  CONFIG_HEADERS  =
  CONFIG_LINKS    =
  CONFIG_COMMANDS =
  $ ./config.status

on debian

config.status:735: creating Makefile
config.status:838: WARNING:  'Makefile.in' seems to ignore the --datarootdir setting

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_c_compiler_gnu=yes
ac_cv_c_const=yes
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_YACC_set=
ac_cv_env_YACC_value=
ac_cv_env_YFLAGS_set=
ac_cv_env_YFLAGS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_func_arc4random=no
ac_cv_func_clock_gettime=yes
ac_cv_func_daemon=yes
ac_cv_func_getaddrinfo=yes
ac_cv_func_getifaddrs=yes
ac_cv_func_getnameinfo=yes
ac_cv_func_getpgrp_void=yes
ac_cv_func_if_nametoindex=yes
ac_cv_func_mktime=yes
ac_cv_func_select=yes
ac_cv_func_setpgrp_void=yes
ac_cv_func_socket=yes
ac_cv_func_strlcat=no
ac_cv_func_strlcpy=no
ac_cv_func_warnx=yes
ac_cv_header_fcntl_h=yes
ac_cv_header_ifaddrs_h=yes
ac_cv_header_inttypes_h=yes
ac_cv_header_memory_h=yes
ac_cv_header_stdarg_h=yes
ac_cv_header_stdc=yes
ac_cv_header_stdint_h=yes
ac_cv_header_stdlib_h=yes
ac_cv_header_string_h=yes
ac_cv_header_strings_h=yes
ac_cv_header_sys_ioctl_h=yes
ac_cv_header_sys_stat_h=yes
ac_cv_header_sys_time_h=yes
ac_cv_header_sys_types_h=yes
ac_cv_header_syslog_h=yes
ac_cv_header_time=yes
ac_cv_header_unistd_h=yes
ac_cv_member_struct_tm_tm_zone=yes
ac_cv_objext=o
ac_cv_path_EGREP='/usr/bin/grep -E'
ac_cv_path_GREP=/usr/bin/grep
ac_cv_path_install='/usr/bin/install -c'
ac_cv_prog_CPP='gcc -E'
ac_cv_prog_ac_ct_CC=gcc
ac_cv_prog_cc_c89=
ac_cv_prog_cc_g=yes
ac_cv_prog_gcc_traditional=no
ac_cv_prog_make_make_set=yes
ac_cv_struct_tm=time.h
ac_cv_type_sig_atomic_t=yes
ac_cv_type_signal=void
ac_cv_type_size_t=yes
ts_cv_sa_len=no

## ----------------- ##
## Output variables. ##
## ----------------- ##

CC='gcc'
CFLAGS='-g -O2 -I$(srcdir)'
CPP='gcc -E'
CPPFLAGS=''
DEFS='-DPACKAGE_NAME=\"wide-dhcpv6\" -DPACKAGE_TARNAME=\"wide-dhcpv6\" -DPACKAGE_VERSION=\"20080615\" -DPACKAGE_STRING=\"wide-dhcpv6\ 20080615\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GETIFADDRS=1 -DHAVE_IF_NAMETOINDEX=1 -DHAVE_DAEMON=1 -DHAVE_WARNX=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYSLOG_H=1 -DHAVE_UNISTD_H=1 -DHAVE_IFADDRS_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_STRUCT_TM_TM_ZONE=1 -DHAVE_TM_ZONE=1 -DHAVE_SIG_ATOMIC_T=1 -DGETPGRP_VOID=1 -DSETPGRP_VOID=1 -DRETSIGTYPE=void -DHAVE_MKTIME=1 -DHAVE_SELECT=1 -DHAVE_SOCKET=1 -DHAVE_CLOCK_GETTIME=1 -DHAVE_ANSI_FUNC=1 -DHAVE_TAILQ_FOREACH_REVERSE_OLD=1 -DHAVE_STDARG_H=1'
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP='/usr/bin/grep -E'
EXEEXT=''
GREP='/usr/bin/grep'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
LDFLAGS=''
LEX=':'
LEXLIB=''
LEX_OUTPUT_ROOT=''
LIBOBJS=' ${LIBOBJDIR}strlcpy$U.o ${LIBOBJDIR}strlcat$U.o ${LIBOBJDIR}arc4random$U.o'
LIBS=''
LTLIBOBJS=' ${LIBOBJDIR}strlcpy$U.lo ${LIBOBJDIR}strlcat$U.lo ${LIBOBJDIR}arc4random$U.lo'
OBJEXT='o'
PACKAGE_BUGREPORT=''
PACKAGE_NAME='wide-dhcpv6'
PACKAGE_STRING='wide-dhcpv6 20080615'
PACKAGE_TARNAME='wide-dhcpv6'
PACKAGE_URL=''
PACKAGE_VERSION='20080615'
PATH_SEPARATOR=':'
SET_MAKE=''
SHELL='/bin/bash'
YACC='yacc'
YFLAGS=''
ac_ct_CC='gcc'
bindir='${exec_prefix}/bin'
build_alias=''
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='${prefix}'
group='bin'
host_alias=''
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localdbdir='/var/db'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='/usr/local'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''
user='bin'

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "wide-dhcpv6"
#define PACKAGE_TARNAME "wide-dhcpv6"
#define PACKAGE_VERSION "20080615"
#define PACKAGE_STRING "wide-dhcpv6 20080615"
#define PACKAGE_BUGREPORT ""
#define PACKAGE_URL ""
#define HAVE_GETADDRINFO 1
#define HAVE_GETNAMEINFO 1
#define HAVE_GETIFADDRS 1
#define HAVE_IF_NAMETOINDEX 1
#define HAVE_DAEMON 1
#define HAVE_WARNX 1
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_IOCTL_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYSLOG_H 1
#define HAVE_UNISTD_H 1
#define HAVE_IFADDRS_H 1
#define TIME_WITH_SYS_TIME 1
#define HAVE_STRUCT_TM_TM_ZONE 1
#define HAVE_TM_ZONE 1
#define HAVE_SIG_ATOMIC_T 1
#define GETPGRP_VOID 1
#define SETPGRP_VOID 1
#define RETSIGTYPE void
#define HAVE_MKTIME 1
#define HAVE_SELECT 1
#define HAVE_SOCKET 1
#define HAVE_CLOCK_GETTIME 1
#define HAVE_ANSI_FUNC 1
#define HAVE_TAILQ_FOREACH_REVERSE_OLD 1
#define HAVE_STDARG_H 1

configure: exit 0

Make log:

gcc -g -O2 -I. -DPACKAGE_NAME=\"wide-dhcpv6\" -DPACKAGE_TARNAME=\"wide-dhcpv6\" -DPACKAGE_VERSION=\"20080615\" -DPACKAGE_STRING=\"wide-dhcpv6\ 20080615\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -DHAVE_GETIFADDRS=1 -DHAVE_IF_NAMETOINDEX=1 -DHAVE_DAEMON=1 -DHAVE_WARNX=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYSLOG_H=1 -DHAVE_UNISTD_H=1 -DHAVE_IFADDRS_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_STRUCT_TM_TM_ZONE=1 -DHAVE_TM_ZONE=1 -DHAVE_SIG_ATOMIC_T=1 -DGETPGRP_VOID=1 -DSETPGRP_VOID=1 -DRETSIGTYPE=void -DHAVE_MKTIME=1 -DHAVE_SELECT=1 -DHAVE_SOCKET=1 -DHAVE_CLOCK_GETTIME=1 -DHAVE_ANSI_FUNC=1 -DHAVE_TAILQ_FOREACH_REVERSE_OLD=1 -DHAVE_STDARG_H=1 -DSYSCONFDIR=\"/usr/local/etc\" -DLOCALDBDIR=\"/var/db\"   -c -o dhcp6c.o dhcp6c.c
In file included from /usr/include/x86_64-linux-gnu/sys/socket.h:33,
                 from dhcp6c.c:32:
dhcp6c.c: In function โ€˜client6_recvโ€™:
dhcp6c.c:1229:39: error: invalid application of โ€˜sizeofโ€™ to incomplete type โ€˜struct in6_pktinfoโ€™
       cm->cmsg_len == CMSG_LEN(sizeof(struct in6_pktinfo))) {
                                       ^~~~~~
dhcp6c.c:1238:45: error: dereferencing pointer to incomplete type โ€˜struct in6_pktinfoโ€™
  if ((ifp = find_ifconfbyid((unsigned int)pi->ipi6_ifindex)) == NULL) {
                                             ^~
make: *** [<builtin>: dhcp6c.o] Error 1

segfault

i told you what exactly is wrong and never blamed you how bad you are. so fix it or keep it as is. i'm not interested of sending pull requests to people who are not accepting that there might be a bug. i described it really in detail and the difference between pointers and numeric 64 bit values should be clear to any programmer . thanks.

Wrong advertized link layer address?

The link layer address advertised with the SOLICIT request is not the one of the interface I run dhcp6c on. It's the address of an unrelated interface. It's neither WAN, neither LAN.

Capture dโ€™eฬcran 2024-01-18 aฬ€ 12 34 02

Any idea how that could happen? Not sure which of the two is the problem. The configuration:

profile default
{
  information-only;

  request domain-name-servers;
  request domain-name;

  script "/etc/wide-dhcpv6/dhcp6c-script";
};


interface internet0 {
  send ia-pd 3337356211;
  request domain-name-servers;
  request domain-name;
  request ntp-servers;
  script "/etc/wide-dhcpv6/dhcp6c-script";
};

id-assoc pd 3337356211 {
 prefix-interface br0 { #internal facing interface (LAN)
    sla-id 1; 
    ifid 1; 
    sla-len 8;
    };
  };

Get delegated prefix information in script

Is there a way to get information about delegated prefixes passed to the script?

I'm running a system where 2 prefix are delegated:

  • The first is normal /64 prefix that I'm attaching to an interface for normal SLAAC address allocation.
  • The second is a /96 or /120 that I'm using for 464XLAT that I need to pass to an instance of Jool running on the router. At the moment I'm having to hardcode/manually enter this.

If not can I ask for it to be a feature request?

ia-pd and ia-na T1 and T2 values

Is there any way to set the T1 and T2 values for ia-pd and ia-na options?

The doco doesnt seem to have a way, im about to dive in to the code...

Issues with load all interfaces patches

I'm running into some issues I'm not sure the cause of when trying to use the opnsense patches to load all interfaces in the config instead of requiring them on the command line. It causes sigbus/segfaults on OpenBSD and I'm not sure why. I'm getting 0xdfdfdfdfdfdfdfdf as the pointer being passed into:

ifinit (ifname=0xdfdfdfdfdfdfdfdf <Address 0xdfdfdfdfdfdfdfdf out of bounds>)

From the initial loop in main. Which is usually a sign of a free after use or similar issue on OpenBSD's malloc/free implementation. I've been staring at this longer than I'd like to admit and I'm not really seeing why this is happening. I'm also confused as to why cfparse() needs to be called on either side of that interface name loading.

The patch also makes specifying interfaces on the command line only work until the next SIGHUP which I submitted #30 to fix. With #30 the code runs and works on OpenBSD so long as interfaces are passed on the command line. Without #30 when passing interfaces on the command line a sigbus/segfault will also happen on SIGHUP as if an interface was not specified on the command line at startup.

Parsing configuration failed at startup if request is tracked by a bridged interface

Hi,

I'm using OPNSense following this setup :ย https://wiki.opnsense.org/manual/how-tos/orange_fr_fttp.html

My box is set up as :

  • igb0 as WAN
  • igb1, igb2, igb3โ€ฆ as bridge0
  • bridge0 as LAN

On startup, dhcp6c client parses the config file and see that my LAN interface (bridge0) is tracking the WAN interface to get IPv6 configuration, but bridge0 is not set up at this moment, so the config fails and dhcp6c didnt start.

Jan  8 20:19:12 opnsense dhcp6c[38999]: /var/etc/dhcp6c_wan.conf:13 invalid interface (bridge0): Device not configured
Jan  8 20:19:12 opnsense dhcp6c[38999]: called
Jan  8 20:19:12 opnsense dhcp6c[38999]: failed to parse configuration file

I need to force a dhcp refresh after startup to get IPv6

How to reproduce :

  • set up a WAN interface with dhcp6c
  • set up a LAN interface with bridge on multiple physical interfaces
  • set up id-assoc to the bridge interface
id-assoc pd 0 {
  prefix-interface bridge0 {
    sla-id 0;
    sla-len 8;
  };
};

  • reboot
  • see logs

What expected :

  • no errors during boot, ipv6 working directly

[support] IPV6 prefix update causes loss of IPV6 connection

Describe the bug

In my use of opnsense, the IPV6 connection often disconnects after a few days (not at a fixed time).
The problem occurs when I can see from the opnsense admin page that the device from the ISP has assigned a different IPV6 prefix to the WAN, but the LAN is still using an old IPV6 prefix.
At this point no other device connected to the LAN can access the internet via IPV6, whereas the opnsense unit can access the IPV6 public address.

I believe the problem is caused by my ISP assigning new IPV6 prefixes from time to time and opnsense not being able to update the IPV6 prefixes on the LAN.

I turned on the debug log for dhcp6c.Here's the log when the problem happened.

2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : wireguard_sync(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : webgui_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : vxlan_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : unbound_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : openssh_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : opendns_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : ntpd_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : dnsmasq_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (,lan)
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : wireguard_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: Resyncing OpenVPN instances for interface LAN.
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : openvpn_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : ipsec_configure_do(,lan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (,lan)
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : wireguard_sync(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : webgui_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : vxlan_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : unbound_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : openssh_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : opendns_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : ntpd_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (execute task : dnsmasq_configure_do())
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure newwanip (,wan)
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : wireguard_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: Resyncing OpenVPN instances for interface WAN.
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : openvpn_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (execute task : ipsec_configure_do(,wan))
2024-07-18T21:59:35	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure vpn (,wan)
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: ROUTING: entering configure using 'lan'
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure monitor (execute task : dpinger_configure_do(,WAN_DHCP6))
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure monitor (,WAN_DHCP6)
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: ROUTING: keeping inet6 default route to fe80::1%igb0
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: ROUTING: configuring inet6 default gateway on wan
2024-07-18T21:59:34	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: ROUTING: entering configure using 'wan'
2024-07-18T21:59:29	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure dhcp (execute task : dhcpd_dhcp_configure(,inet6))
2024-07-18T21:59:29	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: plugins_configure dhcp (,inet6)
2024-07-18T21:59:29	Notice	opnsense	 /usr/local/etc/rc.newwanipv6: IP renewal starting (address: fe80::2e53:4aff:feb0:ddd%igb0, interface: wan, device: igb0)
2024-07-18T21:59:23	Notice	dhcp6c	 got an expected reply, sleeping.
2024-07-18T21:59:23	Notice	dhcp6c	 script "/var/etc/dhcp6c_wan_script.sh" terminated
2024-07-18T21:59:23	Notice	dhcp6c	 dhcp6c_script: REQUEST on igb0 renewal
2024-07-18T21:59:23	Notice	dhcp6c	 dhcp6c_script: REQUEST on igb0 executing
2024-07-18T21:59:23	Notice	dhcp6c	 executes /var/etc/dhcp6c_wan_script.sh
2024-07-18T21:59:23	Notice	dhcp6c	 removing an event on igb0, state=REQUEST
2024-07-18T21:59:23	Notice	dhcp6c	 T1(21582) and/or T2(34531) is locally determined
2024-07-18T21:59:23	Notice	dhcp6c	 status code for PD-2: not on-link
2024-07-18T21:59:23	Notice	dhcp6c	 update an IA: PD-2
2024-07-18T21:59:23	Notice	dhcp6c	 nameserver[0] fe80::1
2024-07-18T21:59:23	Notice	dhcp6c	 Received REPLY for REQUEST
2024-07-18T21:59:23	Notice	dhcp6c	 unknown or unexpected DHCP6 option vendor specific info, len 25
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option vendor specific info, len 25
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option DNS, len 16
2024-07-18T21:59:23	Notice	dhcp6c	   requested option: domain search list
2024-07-18T21:59:23	Notice	dhcp6c	   requested option: DNS
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option option request, len 4
2024-07-18T21:59:23	Notice	dhcp6c	   status code: not on-link
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option status code, len 2
2024-07-18T21:59:23	Notice	dhcp6c	   IA_PD: ID=2, T1=0, T2=0
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option IA_PD, len 18
2024-07-18T21:59:23	Notice	dhcp6c	   DUID: 00:03:00:06:f4:b5:aa:b0:8c:f8
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option server ID, len 10
2024-07-18T21:59:23	Notice	dhcp6c	   DUID: 00:03:00:01:34:cf:f6:c5:fd:eb
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option client ID, len 10
2024-07-18T21:59:23	Notice	dhcp6c	 receive reply from fe80::1%igb0 on igb0
2024-07-18T21:59:23	Notice	dhcp6c	 got an expected reply, sleeping.
2024-07-18T21:59:23	Notice	dhcp6c	 script "/var/etc/dhcp6c_wan_script.sh" terminated
2024-07-18T21:59:23	Notice	dhcp6c	 dhcp6c_script: RENEW on igb0 executing
2024-07-18T21:59:23	Notice	dhcp6c	 executes /var/etc/dhcp6c_wan_script.sh
2024-07-18T21:59:23	Notice	dhcp6c	 removing an event on igb0, state=RENEW
2024-07-18T21:59:23	Notice	dhcp6c	 send request to ff02::1:2%igb0
2024-07-18T21:59:23	Notice	dhcp6c	 set IA_PD
2024-07-18T21:59:23	Notice	dhcp6c	 set IA_PD prefix
2024-07-18T21:59:23	Notice	dhcp6c	 set option request (len 4)
2024-07-18T21:59:23	Notice	dhcp6c	 set elapsed time (len 2)
2024-07-18T21:59:23	Notice	dhcp6c	 set server ID (len 10)
2024-07-18T21:59:23	Notice	dhcp6c	 set client ID (len 10)
2024-07-18T21:59:23	Notice	dhcp6c	 a new XID (720913) is generated
2024-07-18T21:59:23	Notice	dhcp6c	 Sending Request
2024-07-18T21:59:23	Notice	dhcp6c	 reset a timer on igb0, state=REQUEST, timeo=0, retrans=992
2024-07-18T21:59:23	Notice	dhcp6c	 re-establishing IA: PD-2
2024-07-18T21:59:23	Notice	dhcp6c	 receive NoBinding against renew/rebind for PD-2
2024-07-18T21:59:23	Notice	dhcp6c	 status code for PD-2: no binding
2024-07-18T21:59:23	Notice	dhcp6c	 update an IA: PD-2
2024-07-18T21:59:23	Notice	dhcp6c	 nameserver[0] fe80::1
2024-07-18T21:59:23	Notice	dhcp6c	 Received REPLY for RENEW
2024-07-18T21:59:23	Notice	dhcp6c	 unknown or unexpected DHCP6 option vendor specific info, len 25
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option vendor specific info, len 25
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option DNS, len 16
2024-07-18T21:59:23	Notice	dhcp6c	   status code: no binding
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option status code, len 2
2024-07-18T21:59:23	Notice	dhcp6c	   IA_PD: ID=2, T1=0, T2=0
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option IA_PD, len 18
2024-07-18T21:59:23	Notice	dhcp6c	   DUID: 00:03:00:06:f4:b5:aa:b0:8c:f8
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option server ID, len 10
2024-07-18T21:59:23	Notice	dhcp6c	   DUID: 00:03:00:01:34:cf:f6:c5:fd:eb
2024-07-18T21:59:23	Notice	dhcp6c	 get DHCP option client ID, len 10
2024-07-18T21:59:23	Notice	dhcp6c	 receive reply from fe80::1%igb0 on igb0
2024-07-18T21:59:23	Notice	dhcp6c	 send renew to ff02::1:2%igb0
2024-07-18T21:59:23	Notice	dhcp6c	 set IA_PD
2024-07-18T21:59:23	Notice	dhcp6c	 set IA_PD prefix
2024-07-18T21:59:23	Notice	dhcp6c	 set option request (len 4)
2024-07-18T21:59:23	Notice	dhcp6c	 set elapsed time (len 2)
2024-07-18T21:59:23	Notice	dhcp6c	 set server ID (len 10)
2024-07-18T21:59:23	Notice	dhcp6c	 set client ID (len 10)
2024-07-18T21:59:23	Notice	dhcp6c	 a new XID (841669) is generated
2024-07-18T21:59:23	Notice	dhcp6c	 Sending Renew
2024-07-18T21:59:23	Notice	dhcp6c	 reset a timer on igb0, state=RENEW, timeo=0, retrans=9063
2024-07-18T21:59:23	Notice	dhcp6c	 IA timeout for PD-2, state=ACTIVE
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum done
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum interface_086400.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum interface_003600.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum interface_000300.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum interface_000030.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum src_addr_086400.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum src_addr_003600.sqlite
2024-07-18T16:44:06	Notice	flowd_aggregate.py	 vacuum src_addr_000300.sqlite
2024-07-18T16:44:01	Notice	flowd_aggregate.py	 vacuum src_addr_details_086400.sqlite
2024-07-18T16:44:00	Notice	flowd_aggregate.py	 vacuum dst_port_086400.sqlite
2024-07-18T16:44:00	Notice	flowd_aggregate.py	 vacuum dst_port_003600.sqlite
2024-07-18T16:44:00	Notice	flowd_aggregate.py	 vacuum dst_port_000300.sqlite
2024-07-18T14:59:51	Notice	syslog-ng	 Configuration reload finished;
2024-07-18T14:59:51	Notice	syslog-ng	 Configuration reload request received, reloading configuration;
2024-07-18T12:35:32	Notice	dhclient	 dhclient-script: Creating resolv.conf
2024-07-18T12:35:32	Notice	dhclient	 dhclient-script: Reason RENEW on igb0 executing
2024-07-18T12:35:32	Error	dhclient	 unknown dhcp option value 0x7d
2024-07-18T09:59:59	Notice	dhcp6c	 got an expected reply, sleeping.
2024-07-18T09:59:59	Notice	dhcp6c	 script "/var/etc/dhcp6c_wan_script.sh" terminated
2024-07-18T09:59:59	Notice	dhcp6c	 dhcp6c_script: RENEW on igb0 executing
2024-07-18T09:59:59	Notice	dhcp6c	 executes /var/etc/dhcp6c_wan_script.sh
2024-07-18T09:59:59	Notice	dhcp6c	 removing an event on igb0, state=RENEW
2024-07-18T09:59:59	Notice	dhcp6c	 update a prefix 240e:390:4923:1bf1::/64 pltime=86328, vltime=86328
2024-07-18T09:59:59	Notice	dhcp6c	 update an IA: PD-2
2024-07-18T09:59:59	Notice	dhcp6c	 nameserver[0] fe80::1
2024-07-18T09:59:59	Notice	dhcp6c	 Received REPLY for RENEW
2024-07-18T09:59:59	Notice	dhcp6c	 unknown or unexpected DHCP6 option vendor specific info, len 25
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option vendor specific info, len 25
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option DNS, len 16
2024-07-18T09:59:59	Notice	dhcp6c	   IA_PD prefix: 240e:390:4923:1bf1::/64 pltime=86328 vltime=86328
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option IA_PD prefix, len 25
2024-07-18T09:59:59	Notice	dhcp6c	   IA_PD: ID=2, T1=43164, T2=69062
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option IA_PD, len 41
2024-07-18T09:59:59	Notice	dhcp6c	   DUID: 00:03:00:06:f4:b5:aa:b0:8c:f8
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option server ID, len 10
2024-07-18T09:59:59	Notice	dhcp6c	   DUID: 00:03:00:01:34:cf:f6:c5:fd:eb
2024-07-18T09:59:59	Notice	dhcp6c	 get DHCP option client ID, len 10
2024-07-18T09:59:59	Notice	dhcp6c	 receive reply from fe80::1%igb0 on igb0
2024-07-18T09:59:59	Notice	dhcp6c	 send renew to ff02::1:2%igb0
2024-07-18T09:59:59	Notice	dhcp6c	 set IA_PD
2024-07-18T09:59:59	Notice	dhcp6c	 set IA_PD prefix
2024-07-18T09:59:59	Notice	dhcp6c	 set option request (len 4)
2024-07-18T09:59:59	Notice	dhcp6c	 set elapsed time (len 2)
2024-07-18T09:59:59	Notice	dhcp6c	 set server ID (len 10)
2024-07-18T09:59:59	Notice	dhcp6c	 set client ID (len 10)
2024-07-18T09:59:59	Notice	dhcp6c	 a new XID (2ece72) is generated
2024-07-18T09:59:59	Notice	dhcp6c	 Sending Renew
2024-07-18T09:59:59	Notice	dhcp6c	 reset a timer on igb0, state=RENEW, timeo=0, retrans=9831
2024-07-18T09:59:59	Notice	dhcp6c	 IA timeout for PD-2, state=ACTIVE

Looking at the LOG, the problem occurs at โ€œ2024-07-18T21:59:23โ€ and the ISP doesn't seem to have assigned us any IPV6, but according to the admin page, the WAN does get a new IPV6 prefix.
wan_eng_01

After a problem occurs, PCs accessing the LAN can only access the opnsense LAN

root@LANPC[~]# traceroute -6 ipv6.baidu.com
traceroute to ipv6.baidu.com (240e:e9:6002:15a:0:ff:b05c:1278), 30 hops max, 80 byte packets
 1  OPNsense.localdomain (240e:390:4923:1bf1:a6bb:6dff:febe:5b03)  0.444 ms  0.421 ms  0.405 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *

opnsense hosting has normal access to the internet via IPV6

root@OPNsense:~ # traceroute6 ipv6.baidu.com
traceroute6: Warning: www.a.shifen.com has multiple addresses; using 240e:e9:6002:15c:0:ff:b015:146f
traceroute6 to www.a.shifen.com (240e:e9:6002:15c:0:ff:b015:146f) from 240e:390:48e9:8e40:2e53:4aff:feb0:ddd, 64 hops max, 28 byte packets
 1  240e:390:4901:683c:f6b5:aa58:f8b0:8cf9  1.071 ms  0.522 ms  0.415 ms
 2  * * *
 3  * * *
 4  * * *
 5  240e:1c:7111:111b::23  2.952 ms *
    240e:1c:7112:111b::31  3.011 ms
 6  240e:1c:7111:1fff::50  7.847 ms
    240e:1c:7111:1fff::70  4.778 ms
    240e:1c:7111:1fff::64  4.927 ms
 7  * * *
 8  240e:1a:120:f21f::3  10.142 ms
    240e:1a:120:f211::3  16.082 ms
    240e:1a:120:f117::3  10.812 ms
 9  240e:1a:120:110c::3  12.744 ms
    240e:1a:120:120c::3  8.987 ms  8.817 ms
10  240e:e9:6000:17::3  15.576 ms
    240e:e9:6000:d::3  15.611 ms
    240e:e9:6000:17::3  13.900 ms
11  240c:4001::10:166:50:21  13.821 ms
    240c:4001::10:166:50:23  17.051 ms
    240c:4001::10:166:50:21  14.095 ms
12  240c:4001::10:166:50:21  15.816 ms  13.564 ms  13.580 ms
13  240c:4051:1223:209:1eaf:1:1b09:3  13.143 ms
    240c:4051:1223:2eb:1eaf:4:eb01:2  16.210 ms
    240c:4051:1223:207:1eaf:1:1b07:3  16.176 ms
14  * *
    240c:4051:1223:207:1eaf:1:1b07:3  16.290 ms

If you reset or reload the WAN interface after the problem occurs, it returns to normal.

Expected behavior

Losing IPV6 connectivity at irregular intervals is annoying, and the behavior I would expect should be that you shouldn't lose IPV6 connectivity altogether after changing prefixes.

Environment

OPNsense 24.1.10_3-amd64
Dell Optiplex 3070 MFF
Intel(R) Core(TM) i3-8100T CPU @ 3.10GHz (4 cores, 4 threads)
Network card:
Intel I210 (WAN)
Realtek NIC (LAN)

Full Debug output is not being sent to syslog.

if '-D' is used to get full debug output only normal debug output is sent, running from the shell in foreground mode then full debug output can be seen. Has there been a syslog change that may have affected this?

segfault

a 100% segfault on big endian is the missuse of a long long number for pointers in the config parser for the rawoption option number. this will crash on and mips big endian system. use "long" or use a string or even use a numeric value. but never use 64 bit integers as casted pointer here.

Patch request - ignore advertise messages with none of requested data and missed status codes

I was hoping to get a sense of whether a wide-dhcpv6 patch that was introduced in the upstream in 2015 will make it into OPNsense.

The issue is this (as explained to me by my ISP). Whenever dhcp6c on OPNsense sends a release to my ISP, and then (as is usual) tries to send a solicit straight after the release to obtain a new lease, the ISP's BNG responds with a DHCPv6 UnspecFail advertise. Apparently, somewhere between the DHCPv6 proxy and DHCPv6 server running on the BNG, the release process has not been finalised (and so the lease is not considered available to the client again) when dhcp6c sends the new solicit, hence the UnspecFail response.

However, dhcp6c does not interpret this correctly and instead assumes the BNG is trying to advertise the prefix, and so dhcp6c sends a DHCPv6 request for a blank prefix back to the BNG. The BNG of course drops this as invalid. dhcp6c then eventually gives up trying to get a DHCPv6 lease, and accordingly no WAN GUA or IPv6 PD is received, until dhcp6c is reloaded or restarted.

The behaviour can be seen in these logs (anonymised):

2020-12-07T09:27:04	dhclient[59442]	My address (xxx.xxx.xxx.140) was deleted, dhclient exiting
2020-12-07T09:27:04	dhclient[78405]	Starting delete_old_states()
2020-12-07T09:27:04	dhclient[72525]	Comparing IPs: Old: xxx.xxx.xxx.xxx New:
2020-12-07T09:27:04	dhclient[44634]	Removing states from old IP 'xxx.xxx.xxx.140' (new IP '')
2020-12-07T09:27:04	dhclient[59442]	connection closed
2020-12-07T09:27:04	dhclient[59442]	exiting.
2020-12-07T09:27:04	dhclient[16850]	Starting delete_old_states()
2020-12-07T09:27:04	dhclient[94879]	Comparing IPs: Old: xxx.xxx.xxx.140 New:
2020-12-07T09:27:04	dhclient[42526]	Removing states from old IP 'xxx.xxx.xxx.140' (new IP '')
2020-12-07T09:27:04	dhclient[72953]	DHCPREQUEST on igb0 to 255.255.255.255 port 67
2020-12-07T09:27:04	dhclient[72953]	DHCPACK from xxx.xxx.xxx.1
2020-12-07T09:27:04	dhclient[23989]	Starting delete_old_states()
2020-12-07T09:27:04	dhclient[72164]	Comparing IPs: Old: xxx.xxx.xxx.140 New: xxx.xxx.xxx.140
2020-12-07T09:27:04	dhclient[39437]	New IP Address (igb0): xxx.xxx.xxx.140
2020-12-07T09:27:04	dhclient[52716]	New Subnet Mask (igb0): 255.255.252.0
2020-12-07T09:27:04	dhclient[95879]	New Broadcast Address (igb0): xxx.xxx.xxx.255
2020-12-07T09:27:04	dhclient[31371]	New Routers (igb0): xxx.xxx.xxx.1
2020-12-07T09:27:04	dhclient[79817]	route add default xxx.xxx.xxx.1
2020-12-07T09:27:04	dhclient[99820]	Creating resolv.conf
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: IPv4 renewal is starting on 'igb0'
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: On (IP address: xxx.xxx.xxx.140) (interface: WAN[wan]) (real interface: igb0).
2020-12-07T09:27:04	opnsense[6163]	plugins_configure hosts ()
2020-12-07T09:27:04	opnsense[6163]	plugins_configure hosts (execute task : dnsmasq_hosts_generate())
2020-12-07T09:27:04	opnsense[6163]	plugins_configure hosts (execute task : unbound_hosts_generate())
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: entering configure using 'wan'
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: IPv4 default gateway set to wan
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: setting IPv4 default route to xxx.xxx.xxx.1
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: keeping current default gateway 'xxx.xxx.xxx.1'
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: IPv6 default gateway set to wan
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: ROUTING: skipping IPv6 default route
2020-12-07T09:27:04	opnsense[6163]	plugins_configure monitor ()
2020-12-07T09:27:04	opnsense[6163]	plugins_configure monitor (execute task : dpinger_configure_do())
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: The WAN_DHCP6 monitor address is empty, skipping.
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: The WAN_DHCP monitor address is empty, skipping.
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: The OpenVPNv6 monitor address is empty, skipping.
2020-12-07T09:27:04	opnsense[6163]	/usr/local/etc/rc.newwanip: The OpenVPNv4 monitor address is empty, skipping.
2020-12-07T09:27:05	opnsense[6163]	plugins_configure vpn (,wan)
2020-12-07T09:27:05	kernel	pflog0: promiscuous mode disabled
2020-12-07T09:27:05	kernel	pflog0: promiscuous mode enabled
2020-12-07T09:27:05	opnsense[6163]	plugins_configure vpn (execute task : ipsec_configure_do(,wan))
2020-12-07T09:27:05	opnsense[6163]	plugins_configure vpn (execute task : openvpn_configure_do(,wan))
2020-12-07T09:27:05	opnsense[6163]	/usr/local/etc/rc.newwanip: Resyncing OpenVPN instances for interface WAN.
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (,wan)
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : dyndns_configure_do(,wan))
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : ntpd_configure_defer())
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : opendns_configure_do())
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : openssh_configure_do(,wan))
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : unbound_configure_do(,wan))
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : vxlan_configure_interface())
2020-12-07T09:27:05	opnsense[6163]	plugins_configure newwanip (execute task : webgui_configure_do(,wan))
2020-12-07T09:27:05	dhclient[72953]	bound to xxx.xxx.xxx.140 -- renewal in 900 seconds.
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: Accept router advertisements on interface igb0
2020-12-07T09:27:05	dhcp6c[7137]	RTSOLD script - Sending SIGHUP to dhcp6c
2020-12-07T09:27:05	dhcp6c[41467]	restarting
2020-12-07T09:27:05	dhcp6c[41467]	Start address release
2020-12-07T09:27:05	dhcp6c[41467]	release an IA: NA-0
2020-12-07T09:27:05	dhcp6c[41467]	reset a timer on igb0, state=RELEASE, timeo=0, retrans=1033
2020-12-07T09:27:05	dhcp6c[41467]	Sending Release
2020-12-07T09:27:05	dhcp6c[41467]	a new XID (d304b7) is generated
2020-12-07T09:27:05	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:05	dhcp6c[41467]	set server ID (len 14)
2020-12-07T09:27:05	dhcp6c[41467]	set IA address
2020-12-07T09:27:05	dhcp6c[41467]	set identity association
2020-12-07T09:27:05	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:05	dhcp6c[41467]	send release to ff02::1:2%igb0
2020-12-07T09:27:05	dhcp6c[41467]	remove an IA: NA-0
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:8671
2020-12-07T09:27:05	dhcp6c[41467]	failed to remove an address on igb0: Can't assign requested address
2020-12-07T09:27:05	dhcp6c[41467]	reset a timer on igb0, state=INIT, timeo=0, retrans=174
2020-12-07T09:27:05	dhcp6c[41467]	Start address release
2020-12-07T09:27:05	dhcp6c[41467]	release an IA: PD-0
2020-12-07T09:27:05	dhcp6c[41467]	reset a timer on igb0, state=RELEASE, timeo=0, retrans=930
2020-12-07T09:27:05	dhcp6c[41467]	Sending Release
2020-12-07T09:27:05	dhcp6c[41467]	a new XID (1527b4) is generated
2020-12-07T09:27:05	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:05	dhcp6c[41467]	set server ID (len 14)
2020-12-07T09:27:05	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:05	dhcp6c[41467]	set IA_PD prefix
2020-12-07T09:27:05	dhcp6c[41467]	set IA_PD
2020-12-07T09:27:05	dhcp6c[41467]	send release to ff02::1:2%igb0
2020-12-07T09:27:05	dhcp6c[41467]	remove an IA: PD-0
2020-12-07T09:27:05	dhcp6c[41467]	remove a site prefix xxxx:xxxx:xxxx:xxxx::/56
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3261/64 on igb1_vlan66
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3261/64 on igb1
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3261/64 on igb1_vlan10
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3261/64 on igb1_vlan99
2020-12-07T09:27:05	dhcp6c[41467]	remove an address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3261/64 on igb1_vlan49
2020-12-07T09:27:05	dhcp6c[41467]	reset a timer on igb0, state=INIT, timeo=0, retrans=16
2020-12-07T09:27:05	dhcp6c[41467]	removing an event on igb0, state=INIT
2020-12-07T09:27:05	dhcp6c[41467]	removing an event on igb0, state=INIT
2020-12-07T09:27:05	dhcp6c[41467]	<3>[interface] (9)
2020-12-07T09:27:05	dhcp6c[41467]	<5>[igb0] (4)
2020-12-07T09:27:05	dhcp6c[41467]	<3>begin of closure [{] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[send] (4)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[ia-na] (5)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[0] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>comment [# request stateful address] (26)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<5>[igb1_vlan10] (11)
2020-12-07T09:27:05	dhcp6c[41467]	<3>begin of closure [{] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[sla-id] (6)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[16] (2)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[sla-len] (7)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[8] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of closure [}] (1)
2020-12-07T09:27:05	dhcp6c[41467]	called
2020-12-07T09:27:05	dhcp6c[41467]	called
2020-12-07T09:27:05	dhcp6c[41467]	duplicated interface: igb0
2020-12-07T09:27:05	dhcp6c[41467]	<3>[interface] (9)
2020-12-07T09:27:05	dhcp6c[41467]	<5>[igb0] (4)
2020-12-07T09:27:05	dhcp6c[41467]	<3>begin of closure [{] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[send] (4)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[ia-na] (5)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[0] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>comment [# we'd like some nameservers please] (35)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[id-assoc] (8)
2020-12-07T09:27:05	dhcp6c[41467]	<13>[na] (2)
2020-12-07T09:27:05	dhcp6c[41467]	<13>[0] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<13>begin of closure [{] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of closure [}] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>end of sentence [;] (1)
2020-12-07T09:27:05	dhcp6c[41467]	<3>[id-assoc] (8)
2020-12-07T09:27:05	dhcp6c[41467]	<13>[pd] (2)
2020-12-07T09:27:05	dhcp6c[41467]	<13>[0] (1)
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: entering configure using 'wan'
2020-12-07T09:27:05	dhcp6c[41467]	receive reply from fe80::2a2:ff:feb2:c2%igb0 on igb0
2020-12-07T09:27:05	dhcp6c[41467]	get DHCP option client ID, len 14
2020-12-07T09:27:05	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:60
2020-12-07T09:27:05	dhcp6c[41467]	get DHCP option server ID, len 14
2020-12-07T09:27:05	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:d0
2020-12-07T09:27:05	dhcp6c[41467]	get DHCP option identity association, len 63
2020-12-07T09:27:05	dhcp6c[41467]	IA_NA: ID=0, T1=0, T2=0
2020-12-07T09:27:05	dhcp6c[41467]	get DHCP option status code, len 47
2020-12-07T09:27:05	dhcp6c[41467]	status code: success
2020-12-07T09:27:05	dhcp6c[41467]	get DHCP option status code, len 41
2020-12-07T09:27:05	dhcp6c[41467]	status code: success
2020-12-07T09:27:05	dhcp6c[41467]	Received REPLY for RELEASE
2020-12-07T09:27:05	dhcp6c[41467]	status code: success
2020-12-07T09:27:05	dhcp6c[33283]	dhcp6c RELEASE on igb0
2020-12-07T09:27:05	dhcp6c[80681]	dhcp6c RELEASE on igb0 - running newipv6
2020-12-07T09:27:05	opnsense[99831]	/usr/local/etc/rc.newwanipv6: IPv6 renewal is starting on 'igb0'
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: IPv4 default gateway set to wan
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: setting IPv4 default route to xxx.xxx.xxx.1
2020-12-07T09:27:05	opnsense[99831]	/usr/local/etc/rc.newwanipv6: On (IP address: ) (interface: WAN[wan]) (real interface: igb0).
2020-12-07T09:27:05	opnsense[99831]	/usr/local/etc/rc.newwanipv6: Failed to detect IP for WAN[wan]
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: keeping current default gateway 'xxx.xxx.xxx.1'
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: IPv6 default gateway set to wan
2020-12-07T09:27:05	opnsense[17528]	/usr/local/etc/rc.configure_interface: ROUTING: skipping IPv6 default route
2020-12-07T09:27:05	dhcp6c[41467]	script "/var/etc/dhcp6c_wan_script.sh" terminated
2020-12-07T09:27:05	dhcp6c[41467]	removing an event on igb0, state=RELEASE
2020-12-07T09:27:05	dhcp6c[41467]	got an expected reply, sleeping.
2020-12-07T09:27:05	opnsense[17528]	plugins_configure ipsec (1,wan)
2020-12-07T09:27:05	opnsense[17528]	plugins_configure ipsec (execute task : ipsec_configure_do(1,wan))
2020-12-07T09:27:05	opnsense[17528]	plugins_configure dhcp (1)
2020-12-07T09:27:05	opnsense[17528]	plugins_configure dhcp (execute task : dhcpd_dhcp_configure(1))
2020-12-07T09:27:06	dhcp6c[41467]	Sending Solicit
2020-12-07T09:27:06	dhcp6c[41467]	a new XID (2efce5) is generated
2020-12-07T09:27:06	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:06	dhcp6c[41467]	set identity association
2020-12-07T09:27:06	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:06	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:06	dhcp6c[41467]	set IA_PD prefix
2020-12-07T09:27:06	dhcp6c[41467]	set IA_PD
2020-12-07T09:27:06	dhcp6c[41467]	send solicit to ff02::1:2%igb0
2020-12-07T09:27:06	dhcp6c[41467]	reset a timer on igb0, state=SOLICIT, timeo=0, retrans=1085
2020-12-07T09:27:06	dhcp6c[41467]	receive advertise from fe80::2a2:ff:feb2:c2%igb0 on igb0
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option server ID, len 10
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option client ID, len 14
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:60
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option status code, len 2
2020-12-07T09:27:06	dhcp6c[41467]	status code: unspec failure
2020-12-07T09:27:06	dhcp6c[41467]	server ID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28, pref=-1
2020-12-07T09:27:06	dhcp6c[41467]	reset timer for igb0 to 0.992740
2020-12-07T09:27:06	dhcp6c[41467]	receive advertise from fe80::2a2:ff:feb2:c2%igb0 on igb0
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option server ID, len 10
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option client ID, len 14
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:60
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option status code, len 2
2020-12-07T09:27:06	dhcp6c[41467]	status code: unspec failure
2020-12-07T09:27:06	dhcp6c[41467]	server ID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28, pref=-1
2020-12-07T09:27:06	dhcp6c[41467]	duplicated server (ID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28)
2020-12-07T09:27:06	opnsense[17528]	plugins_configure dns (1)
2020-12-07T09:27:06	opnsense[17528]	plugins_configure dns (execute task : dnsmasq_configure_do(1))
2020-12-07T09:27:06	opnsense[17528]	plugins_configure dns (execute task : unbound_configure_do(1))
2020-12-07T09:27:06	dhcp6c[41467]	Sending Release
2020-12-07T09:27:06	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:06	dhcp6c[41467]	set server ID (len 14)
2020-12-07T09:27:06	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:06	dhcp6c[41467]	set IA_PD prefix
2020-12-07T09:27:06	dhcp6c[41467]	set IA_PD
2020-12-07T09:27:06	dhcp6c[41467]	send release to ff02::1:2%igb0
2020-12-07T09:27:06	dhcp6c[41467]	reset a timer on igb0, state=RELEASE, timeo=1, retrans=1770
2020-12-07T09:27:06	dhcp6c[41467]	receive reply from fe80::2a2:ff:feb2:c2%igb0 on igb0
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option client ID, len 14
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:60
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option server ID, len 14
2020-12-07T09:27:06	dhcp6c[41467]	DUID: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:d0
2020-12-07T09:27:06	dhcp6c[41467]	get DHCP option status code, len 2
2020-12-07T09:27:06	dhcp6c[41467]	status code: no binding
2020-12-07T09:27:06	dhcp6c[41467]	Received REPLY for RELEASE
2020-12-07T09:27:06	dhcp6c[41467]	status code: no binding
2020-12-07T09:27:06	dhcp6c[41467]	executes /var/etc/dhcp6c_wan_script.sh
2020-12-07T09:27:06	dhcp6c[44127]	dhcp6c RELEASE on igb0
2020-12-07T09:27:06	dhcp6c[60627]	dhcp6c RELEASE on igb0 - running newipv6
2020-12-07T09:27:06	opnsense[56651]	/usr/local/etc/rc.newwanipv6: IPv6 renewal is starting on 'igb0'
2020-12-07T09:27:06	opnsense[56651]	/usr/local/etc/rc.newwanipv6: On (IP address: ) (interface: WAN[wan]) (real interface: igb0).
2020-12-07T09:27:06	opnsense[56651]	/usr/local/etc/rc.newwanipv6: Failed to detect IP for WAN[wan]
2020-12-07T09:27:06	dhcp6c[41467]	script "/var/etc/dhcp6c_wan_script.sh" terminated
2020-12-07T09:27:06	dhcp6c[41467]	removing an event on igb0, state=RELEASE
2020-12-07T09:27:06	dhcp6c[41467]	got an expected reply, sleeping.
2020-12-07T09:27:07	dhcp6c[41467]	picked a server (ID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28)
2020-12-07T09:27:07	dhcp6c[41467]	Sending Request
2020-12-07T09:27:07	dhcp6c[41467]	a new XID (2f1201) is generated
2020-12-07T09:27:07	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:07	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:07	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:07	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:07	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:07	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=0, retrans=907
2020-12-07T09:27:07	dhcp6c[41467]	Sending Request
2020-12-07T09:27:07	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:07	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:07	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:07	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:07	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:07	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=1, retrans=1895
2020-12-07T09:27:09	dhcp6c[41467]	Sending Request
2020-12-07T09:27:09	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:09	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:09	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:09	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:09	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:09	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=2, retrans=3731
2020-12-07T09:27:13	dhcp6c[41467]	Sending Request
2020-12-07T09:27:13	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:13	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:13	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:13	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:13	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:13	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=3, retrans=7516
2020-12-07T09:27:21	dhcp6c[41467]	Sending Request
2020-12-07T09:27:21	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:21	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:21	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:21	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:21	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:21	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=4, retrans=14760
2020-12-07T09:27:35	dhcp6c[41467]	Sending Request
2020-12-07T09:27:35	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:27:35	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:27:35	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:27:35	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:27:35	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:27:35	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=5, retrans=28144
2020-12-07T09:28:03	dhcp6c[41467]	Sending Request
2020-12-07T09:28:03	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:28:03	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:28:03	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:28:03	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:28:03	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:28:03	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=6, retrans=31284
2020-12-07T09:28:35	dhcp6c[41467]	Sending Request
2020-12-07T09:28:35	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:28:35	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:28:35	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:28:35	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:28:35	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:28:35	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=7, retrans=32607
2020-12-07T09:29:07	dhcp6c[41467]	Sending Request
2020-12-07T09:29:07	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:29:07	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:29:07	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:29:07	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:29:07	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:29:07	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=8, retrans=31383
2020-12-07T09:29:39	dhcp6c[41467]	Sending Request
2020-12-07T09:29:39	dhcp6c[41467]	set client ID (len 14)
2020-12-07T09:29:39	dhcp6c[41467]	set server ID (len 10)
2020-12-07T09:29:39	dhcp6c[41467]	set elapsed time (len 2)
2020-12-07T09:29:39	dhcp6c[41467]	set option request (len 4)
2020-12-07T09:29:39	dhcp6c[41467]	send request to ff02::1:2%igb0
2020-12-07T09:29:39	dhcp6c[41467]	reset a timer on igb0, state=REQUEST, timeo=9, retrans=30951
2020-12-07T09:30:10	dhcp6c[41467]	no responses were received
2020-12-07T09:30:10	dhcp6c[41467]	removing an event on igb0, state=REQUEST
2020-12-07T09:30:10	dhcp6c[41467]	removing server (ID: xx:xx:xx:xx:xx:xx:xx:xx:xx:28)

The BNG's behaviour (my ISP uses Cisco routers) is actually RFC compliant, according to my ISP (and I understand Cisco, with whom my ISP has apparently been discussing the issue). Per RFC 3315 (https://tools.ietf.org/html/rfc3315#section-15):

If a server receives a message that contains options it should not contain (such as an Information-request message with an IA option), is missing options that it should contain, or is otherwise not valid, it MAY send a Reply (or Advertise as appropriate) with a Server Identifier option, a Client Identifier option if one was included in the message and a Status Code option with status UnSpecFail.

Same for the updated RFC 8415 (https://tools.ietf.org/html/rfc8415#section-16):

If a server receives a message that it considers invalid, it MAY send a Reply message (or Advertise message, as appropriate) with a Server Identifier option (see Section 21.3), a Client Identifier option (see Section 21.2) (if one was included in the message), and a Status Code option (see Section 21.13) with status UnspecFail.

The issue of wide-dhcpv6 / dhcp6c not responding correctly to UnspecFail advertises was, I am told, addressed in the upstream. My research suggests that occurred in 2015: https://sourceforge.net/p/wide-dhcpv6/bugs/34/. Specifically, item 4:

4) dhcpv6: ignore advertise messages with none of requested data and missed status codes.

This patch was implemented in Debian in March 2018: https://metadata.ftp-master.debian.org/changelogs//main/w/wide-dhcpv6/wide-dhcpv6_20080615-23_changelog. Specifically, patch 0018:

- Add patch 0018 to ignore advertise messages with none of requested data and missed status codes.
Thanks to Roman Mamedov for the report and Evgeniy Manachkin for the patch (Closes: #765453).

What I understand to be the content of the patch is attached: 0018-dhcpv6-ignore-advertise-messages-with-none-of-reques.patch.txt

My ISP tells me that they believe Netcomm has implemented the patch, and I have seen comments from Ubiquiti on their forums that they plan to implement the patch, at least for their Edgerouter line.

But this patch does not appear to have made it into FreeBSD or OPNsense.

Curiously, some of the items addressed by the upstream patch in 2015 have been implemented - in FreeBSD in Jan 2016 (based on the descriptions in https://www.freshports.org/net/dhcp6 for version 20080615_4) and in OPNsense in December 2016 (based on the commit descriptions in https://github.com/opnsense/dhcp6c/commits/master). But not item 4.

Is there any prospect of this patch being implemented in OPNsense?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.