Roy Marples [Mon, 10 Jun 2013 00:56:54 +0000 (00:56 +0000)]
Purge prefix list and routers at start of IPv6 for BSD.
Remove link_addr compact function as we now had a LL address list.
Fix INET and INET6 seperate compiles.
Roy Marples [Sun, 9 Jun 2013 07:31:08 +0000 (07:31 +0000)]
Because not all OS's send RTM_NEWADDR for a refreshed RA we need
to manage a list of all IPv6 addresses on an interface so that we
can know if we need to wait for DAD to complete or not.
Roy Marples [Fri, 7 Jun 2013 20:03:28 +0000 (20:03 +0000)]
Add a wpa_supplicant hook script.
This script starts wpa_supplicant on a wireless interface if not
already running and /etc/wpa_supplicant.conf exists, stops it
when the interface departs and sends wpa_supplicant a reconfigure
command.
If dhcpcd is running in master mode, you can use `dhcpcd -n eth0'
it instruct wpa_supplicant to reload its configuration file.
Roy Marples [Fri, 7 Jun 2013 12:44:19 +0000 (12:44 +0000)]
Move signal handling into dhcpcd.c
Log the PID of the signal caller
Move syslog functions out of the signal handler if we're not
exiting as it's not safe.
Close existing IPv4 sockets when restarting an interface.
Fix control handling keeping current flags and accepting new ones.
Roy Marples [Wed, 5 Jun 2013 16:23:24 +0000 (16:23 +0000)]
Add DHPCv6 FQDN support (RFC4704)
Improve hostname support in general, so we are aware of hostname changes.
When setting the hostname, prefer the FQDN name or append a domain.
Roy Marples [Sat, 1 Jun 2013 21:30:18 +0000 (21:30 +0000)]
Refactor Prefix Delegation configuration so we use integers instead
of hex based arrays.
The SLA can now be applied to any router given prefix length provided the
SLA can fit into the prefix and desired prefix length.
We now wait for a carrier and LL address before adding the addresses from the
delegated prefix. Before adding this code, I added some code to generate a
LL address from the hardware address. This is now #ifdef'ed out as I don't
want to throw it away in-case dhcpcd ever needs to create LL addresses
itself.
Many thanks to Martin Husemann who developed code for these functions:
ipv6_userprefix, in6_to_h64 and h64_to_in6
which are used to generate a prefix from the delegated prefix and the SLA
Roy Marples [Fri, 31 May 2013 13:01:54 +0000 (13:01 +0000)]
Remove hardcoded IPv6 address flags and use a bitmask instead.
Only add delegated addresses once for each delegation.
When the kernel expires them we will see this via RTM_DELADDR and
remove the address from our list and thus the route.
Roy Marples [Fri, 31 May 2013 11:53:10 +0000 (11:53 +0000)]
Allow options with zero data, for example Accept Reconf (20).
Assume if no status option is present it is OK.
Based on an initial patch by pmarks@google.com
Roy Marples [Thu, 30 May 2013 22:39:17 +0000 (22:39 +0000)]
In the event DHCPv6 is started without IPv6RS, we should wait for
a LL address to appear.
Also, use DH6S_INIT or DH6S_INFORM to dhcp6_start instead of 0 or
1 for clarity.
Roy Marples [Thu, 30 May 2013 21:01:48 +0000 (21:01 +0000)]
On Linux, PPP interfaces do not have a hardware address, so
get the ifindex via if_nametoindex(3).
Also, don't record an error restoring kernel RA settings for
a removed interface.
Thanks to Sergey Fionov.
Roy Marples [Thu, 30 May 2013 12:07:25 +0000 (12:07 +0000)]
It's possible to receive an RA for an interface that has not yet
obtained a local link address to send an RS.
If this happens, we should process the RA.
Roy Marples [Thu, 30 May 2013 05:38:21 +0000 (05:38 +0000)]
Move SIOCGIFAFLAG_IN6 into if-bsd as in6_addr_flags
Add pfx_flush to flush ND6 entries when changing routes.
Both these functions only work for BSD, just stubs on Linux.
This tidies the code a little and fixes changing IPv6 routes on BSD,
although the kernel may complain network is down for a few moments.
Roy Marples [Thu, 23 May 2013 09:55:52 +0000 (09:55 +0000)]
FreeBSD isn't buggy with adding new addresses and working out
if they are new and should be tentative - it was my buggy configuraion
when I upgraded from FreeBSD 8 -> 9.
Roy Marples [Tue, 21 May 2013 09:24:49 +0000 (09:24 +0000)]
Don't actually remove unreachable routers and prefixes from the routing table.
Instead we just change the interface if they are reachable via another one.
Roy Marples [Fri, 17 May 2013 23:09:36 +0000 (23:09 +0000)]
Store IPv6 link local addresses per interface.
Listen to kernel messages to account them.
If we don't have a local link address, delay IPv6RS as it just
won#t work until we have a local link address.