David Härdeman [Wed, 24 Sep 2025 13:20:26 +0000 (15:20 +0200)]
dhcpv4: move dhcpv4_fr_stop() up
Thus avoiding another forward declaration.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 13:18:13 +0000 (15:18 +0200)]
dhcpv4: move dhcpv4_free_assignment()
Move dhcpv4_free_assignment() further down so it is grouped with the functions
creating the assignment.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 13:11:26 +0000 (15:11 +0200)]
dhcpv4: replace ip4toa() with inet_ntop()
Replace custom ip4toa() function with inet_ntop().
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 13:00:57 +0000 (15:00 +0200)]
dhcpv4: move and rename handle_dhcpv4()
Move handle_dhcpv4() below the function it calls (dhcpv4_handle_msg()) and
rename it to dhcpv4_handle_dgram() for consistency with other function names.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 12:53:54 +0000 (14:53 +0200)]
dhcpv4: rename handle_addrlist_change()
Rename handle_addrlist_change() to dhcpv4_addrlist_change() for more
consistency with the other function names.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 12:52:50 +0000 (14:52 +0200)]
dhcpv4: rename setup_dhcpv4_addresses()
Rename setup_dhcpv4_addresses() to dhcpv4_setup_addresses() for consistency
with the rest of the function names.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Thu, 2 Oct 2025 14:11:26 +0000 (16:11 +0200)]
dhcpv4: reorder more functions
Move dhcpv4_setup_interface(), setup_dhcpv4_addresses() and
handle_addrlist_change() towards the end of dhcpv4.c, closer to where they are
actually used, and remove two forward declarations.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 12:31:58 +0000 (14:31 +0200)]
dhcpv4: rename valid_until_cb()
Renaming valid_until_cb() to dhcpv4_valid_until_cb() is more consistent with
the other function names and is helpful if the function ever shows up in a
stack trace.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Wed, 24 Sep 2025 12:29:01 +0000 (14:29 +0200)]
dhcpv4: move dhcpv4_init() to end of dhcpv4.c
This removes the need for some forward declarations. Also, inline the two
structs that are only used inside dhcpv4_init().
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/264
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
Haoyi Ci [Thu, 2 Oct 2025 08:14:05 +0000 (16:14 +0800)]
ndp: Allow NS loopback for master iface
This commit modifies handle_solicit() in ndp.c to correct IPv6 relay
handling of Neighbor Solicitation (NS) requests when no upstream
solicitation is received.
Background: In IPv6 relay mode, odhcpd discovers local devices only upon
receiving upstream NS packets. If no upstream NS arrives (e.g. because the
upstream router’s neighbor cache is still valid or no solicitation was
ever sent), OpenWrt may attempt neighbor resolution via the master (WAN)
interface instead of the LAN, leaving local devices undiscoverable and
breaking connectivity.
- When an NS packet is sent by the host's master interface, do not
immediately return; instead continue searching slave interfaces for the
target neighbor.
- When odhcpd responds to NS packets, add a check to prevent replying to
NS packets that were sent by the host itself.
Signed-off-by: Haoyi Ci [email protected]
Link: https://github.com/openwrt/odhcpd/pull/240
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
Mark Mentovai [Fri, 11 Nov 2022 16:24:37 +0000 (11:24 -0500)]
router: log “Sending a RA on lan” at LOG_DEBUG
This reduces log spam when dhcp.odhcpd.loglevel ≥ 5, as neighbor
discovery router advertisements are routinely generated by timer and in
response to router solicitations.
Signed-off-by: Mark Mentovai <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/191
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Sun, 14 Sep 2025 22:36:56 +0000 (00:36 +0200)]
odhcpd: update cmake file
Now that the minimum cmake version has been bumped to 3.13, the cmake file can
be modernized a bit. Although it might look like a lot of changes, most of them
are quite straightforward.
Every library is located in a consistent manner (allowing command-line
overrides of library locations, useful for local development, and also makes it
trivial to do static linking, if desired).
The compiler flags have been broken up to have one per line (making it easy in
the future to add/remove flags, which would create a simple one-line diff).
Although it might look like this bumps the C standard level, cmake is actually
smart enough to pick an earlier version if C11 isn't supported by the compiler
(quite unlikely on any versions of gcc currently in use in OpenWrt and even on
old distros).
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/258
David Härdeman [Tue, 30 Sep 2025 15:12:40 +0000 (17:12 +0200)]
odhcpd: convert README to markdown
Convert the README file to GitHub style markdown. I don't think it affects the
readability of the plain text file much (or not at all, rather). But it makes
it much easier to read for people looking at the GitHub repo.
I've intentionally kept the fancy markup at a minimum and also haven't changed
any help text messages in order to not get bogged down in how each help message
should read. That is something which can be addressed later.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/263
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Sat, 20 Sep 2025 14:17:52 +0000 (16:17 +0200)]
odhcpd: allow the use of an alternative cfg file
This is mainly useful for development/testing, since it obviates the
need for a cfg file below the /etc hierarchy.
Also, fixup the help message (long options like "--help" are not
supported).
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/257
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Tue, 30 Sep 2025 17:45:24 +0000 (19:45 +0200)]
odhcpd: remove confusing #defines
Right now, odhcpd.h contains lines like "#define hwaddr mac", which is a great
footgun when hacking on odhcpd (like when creating a function with a local
variable named "hwaddr" and later getting compiler errors talking about how
"mac" has the wrong type...in a function which has no variable named "mac").
So, remove these definitions. I'm not sure the chosen variable names are the
most descriptive, but I erred on the side of caution and picked the alternative
that required the least amount of changes. We can always change the names of
the variables later.
Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/261
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
Álvaro Fernández Rojas [Thu, 7 Aug 2025 15:38:22 +0000 (17:38 +0200)]
odhcpd: improve RFC9096 § 3.5 SLAAC compliance
When a CE router provides LAN-side address-configuration information
via SLAAC:
* A CE router sending RAs that advertise prefixes belonging to a
dynamically learned prefix (e.g., via DHCPv6-PD) SHOULD record, on
stable storage, the list of prefixes being advertised via PIOs on
each network segment and the state of the "A" and "L" flags of the
corresponding PIOs.
* Upon changes to the advertised prefixes, and after bootstrapping,
the CE router advertising prefix information via SLAAC proceeds as
follows:
- Any prefixes that were previously advertised by the CE router
via PIOs in RA messages, but that have now become stale, MUST
be advertised with PIOs that have the "Valid Lifetime" and the
"Preferred Lifetime" set to 0 and the "A" and "L" bits
unchanged.
- The aforementioned advertisements MUST be performed for at
least the "Valid Lifetime" previously employed for such
prefixes.
This should be enabled by default with a folder in "/tmp" to avoid forcing
flash writes for all the users and at least handle the stale PIOs on PPPoe
reconnections. For example:
uci set dhcp.odhcpd.piofolder="/tmp/odhcpd-piofolder"
uci commit dhcp
There's a new ubus call which allows getting all the IPv6 RA PIOs, with
information about their lifetime and stale status:
ubus call dhcp ipv6ra
{
"interfaces": {
"br-lan": [
{
"lifetime": 5390,
"prefix": "2001:db8:0:100::/64",
"stale": true
},
{
"prefix": "2001:db8:0:200::/64",
"stale": false
},
{
"prefix": "fd00::/64",
"stale": false
}
],
"eth1.10": [
{
"lifetime": 5390,
"prefix": "2001:db8:0:110::/64",
"stale": true
},
{
"prefix": "2001:db8:0:210::/64",
"stale": false
},
{
"prefix": "fd00:0:0:10::/64",
"stale": false
}
]
}
}
The current implementation performs a flash write per interface whenever
a new prefix is added or an existing prefix becomes stale.
Since some ISPs assign static or semi-static prefixes to their customers,
it should be up to the user to enable flash writes when needed.
Link: https://github.com/openwrt/odhcpd/pull/256
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
David Härdeman [Fri, 26 Sep 2025 17:22:34 +0000 (19:22 +0200)]
dhcpv4: allow lease takeover (bugfix)
Multiple MAC addresses are supported per static lease (congruent to dnsmasq)
Request on different MAC frees any old assignments for a given lease.
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Tue, 16 Sep 2025 15:35:26 +0000 (17:35 +0200)]
odhcpd: bump minimum cmake version
This removes warnings with more recent versions of cmake.
3.13 is already required by e.g. ubus, so it seems like a reasonable
minimum.
Signed-off-by: David Härdeman <[email protected]>
Aviana Cruz [Sat, 16 Sep 2023 15:04:12 +0000 (15:04 +0000)]
odhcpd: apply RFC9096 recommended lifetimes
To address issues with hosts retaining stale IPv6 configuration, this change
implements the Recommended Option Lifetimes Configuration Values from
RFC 9096-Section 4.
The `ra_lifetime` is set to 2700s (45min) by default, and the DHCPv6-PD is now
capped at 2700s for preferred lifetime and 5400s (90min) for valid lifetime.
The following changes are introduced:
- The `ra_useleasetime` option is removed.
- New options `max_preferred_lifetime` and `max_valid_lifetime` are added to
configure the upper limits for prefix lifetimes.
- The Router Advertisement, DNS, and DNR option lifetimes are now dynamically
adjusted based on the advertised prefix lifetimes to ensure consistency.
These changes help to mitigate issues with stale configurations on client
devices, particularly after network renumbering events.
Signed-off-by: Aviana Cruz <[email protected]>
David Härdeman [Fri, 1 Aug 2025 18:14:35 +0000 (20:14 +0200)]
odhcpd: support multiple per-client MAC addresses
Allow the configuration of multiple per-client DHCPv4 MAC addresses. This is
for feature parity with dnsmasq.
Closes: #221
Closes: openwrt/openwrt#9598
Signed-off-by: David Härdeman <[email protected]>
Álvaro Fernández Rojas [Tue, 26 Aug 2025 14:11:36 +0000 (16:11 +0200)]
router: replace ssize_t with size_t
Both valid_addr_cnt and invalid_addr_cnt should be defined with size_t
instead of ssize_t because addr6_len and invalid_addr6_len are defined
with size_t.
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
Hang Zhou [Sat, 4 Jan 2025 21:09:47 +0000 (08:09 +1100)]
dhcpv6: add ipv6 pxe support
1. Implement PxE in separate files where possible
2. Update README
3. User can add IPv6 PxE entries in `/etc/config/dhcp`.
4. The new section type is "boot6".
5. The compulsory "url" string specifies the URL to the bootable image.
6. The optional "arch" integer specifies the expected client machine type.
7. The last "boot6" section without "arch" defines the default bootable image.
Signed-off-by: Hang Zhou <[email protected]>
David Härdeman [Sat, 10 Feb 2024 02:35:04 +0000 (03:35 +0100)]
router: move pref64 calculations to the config stage
If pref64 is misconfigured, it'll print a LOG_WARNING message every time a RA
is generated, which seems a bit excessive.
When fixing that, I noticed that all work is done for every RA, so I ended up
moving the gist over to the config stage where it is done once.
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Sat, 10 Feb 2024 02:02:28 +0000 (03:02 +0100)]
odhcpd: add a helper function for addr6/prefix parsing
Which allows a couple of variations of the same code to be removed...
the helper function also won't modify the input string.
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Sat, 10 Feb 2024 00:44:48 +0000 (01:44 +0100)]
netlink: fix a memory leak
valgrind noted that addrs is allocated in netlink_get_interface_linklocal(),
but never freed in one case. While I was looking at that, I found a mysterious
double-realloc in netlink.c.
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Sat, 28 Dec 2024 16:54:49 +0000 (17:54 +0100)]
odhcpd: make the IPv6 RA DNR lifetime configurable
Add a fake SVC parameter "_lifetime=" which allows explicit configuration of
the maximum time in seconds over which a given ADN announcement is valid. In
particular, this allows announcing ADNs which should no longer be used (zero
lifetime, see rfc9463, §6.1).
In the absence of an explicit lifetime, the previous logic is kept (i.e. the
lifetime is set to 3 * MaxRtrAdvInterval, as per §6.1 of RFC9463).
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Fri, 9 Feb 2024 13:14:03 +0000 (14:14 +0100)]
odhcpd: add DNR (RFC 9463) support
Discovery of Network-designated Resolvers (DNR) allows devices on the network
to discover encrypted DNS resolvers, which has so far required either manual
configuration or other approaches (like systemd-resolved's "opportunistic"
mode).
To enable DNR, a new uci parameter has been added, which needs to contain at
the very least, the priority (1-65535, lower = higher priority) and the server
hostname (Authentication Domain Name, ADN, to use the wording of RFC9463):
config dhcp 'lan'
…
list dnr '100 foobar.example.com'
Optionally (and preferably), a comma-separated list of IP addresses and
SvcParams can also be specified, like this (line wrapping added):
config dhcp 'lan'
…
list dnr '100 resolver1.example.com
fda7:ab54:69fb::1,fda7:ab54:69fb::2,10.0.0.1
alpn=dot port=853'
list dnr '200 resolver2.example.com
fda7:ab54:69fb::2,10.0.1.1,10.0.1.2
alpn=dot port=853'
Client support is on it's way (e.g. in systemd PR #30952 or in the Windows
Insiders program).
Signed-off-by: David Härdeman <[email protected]>
David Härdeman [Sun, 11 Feb 2024 12:09:53 +0000 (13:09 +0100)]
dhcpv4: store reqopts as uint8_t
Storing request options as chars means that it's difficult to handle option
codes > 127 due to the signedness of char (and options aren't chars, they're
binary data).
Signed-off-by: David Härdeman <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:10 +0000 (05:04 +0200)]
config: set RFC defaults for preferred lifetime
Update preferred lifetime default value in accordance with RFC4861.
Signed-off-by: Paul Donald <[email protected]>
[ fix comment style ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:09 +0000 (05:04 +0200)]
router: disambiguate and clarify 'no route' messages
Better describe "no route" messages.
Signed-off-by: Paul Donald <[email protected]>
[ improve commit title ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:08 +0000 (05:04 +0200)]
router: rename minvalid to lowest_found_lifetime
The variable is used across all prefix lifetimes, serving as a low-tide
mark. It stores the lowest lifetime among all prefixes.
Signed-off-by: Paul Donald <[email protected]>
[ fix comment format ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:07 +0000 (05:04 +0200)]
treewide: normalize spaces to tabs
Normalize space to tabs.
Signed-off-by: Paul Donald <[email protected]>
[ improve commit title and description ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:06 +0000 (05:04 +0200)]
treewide: spell-fixes and new comments for extra clarification
Fix some spell mistake and add new comments for extra clatification.
Signed-off-by: Paul Donald <[email protected]>
Reviewed-by: Daniel Golle <[email protected]>
[ improve commit title ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:05 +0000 (05:04 +0200)]
router: limit prefix preferred_lt to valid_lt in accordance with RFC4861
Follow-up fix for
bc9d317f2921 ("dhcpv6-ia: fix invalid preferred
lifetime").
https://www.rfc-editor.org/rfc/rfc4861#page-44
Fixes: bc9d317f2921 ("dhcpv6-ia: fix invalid preferred lifetime")
Signed-off-by: Paul Donald <[email protected]>
Reviewed-by: Daniel Golle <[email protected]>
[ fix comment format and improve commit title ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:04 +0000 (05:04 +0200)]
router: inherit user-assigned preferred_lifetime
Inherit preferred_lifetime value irrespective of whether ra_useleasetime
is set or not.
User-provided values for preferred_lifetime are now assigned, instead of
ignored.
Before:
==
ICMPv6 Option (Prefix information : fd51:1c2a:8909::/64)
Type: Prefix information (3)
Length: 4 (32 bytes)
Prefix Length: 64
Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
Valid Lifetime: Infinity (
4294967295)
Preferred Lifetime: Infinity (
4294967295)
Reserved
Prefix: fd51:1c2a:8909::
==
After (preferred_lifetime set to 7 minutes):
==
ICMPv6 Option (Prefix information : fd51:1c2a:8909::/64)
Type: Prefix information (3)
Length: 4 (32 bytes)
Prefix Length: 64
Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
Valid Lifetime: Infinity (
4294967295)
Preferred Lifetime: 420
Reserved
Prefix: fd51:1c2a:8909::
==
Signed-off-by: Paul Donald <[email protected]>
Reviewed-by: Daniel Golle <[email protected]>
[ fix comment format and improve commit description ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:03 +0000 (05:04 +0200)]
treewide: refactor valid to valid_lt (lifetime)
Refactor "valid" (valid what?) to "valid_lt".
Signed-off-by: Paul Donald <[email protected]>
Reviewed-by: Daniel Golle <[email protected]>
[ improve commit title ]
Signed-off-by: Christian Marangi <[email protected]>
Paul Donald [Tue, 9 Apr 2024 03:04:02 +0000 (05:04 +0200)]
treewide: refactor pref(erred) to preferred_lt (lifetime)
Refactor "preferred" (preferred what?) and "pref" (obscure) to
"preferred_lt".
It is now more difficult to conflate prefix, preference and other "pref"
related terminology with preferred_lifetime.
Signed-off-by: Paul Donald <[email protected]>
Reviewed-by: Daniel Golle <[email protected]>
[ improve commit title ]
Signed-off-by: Christian Marangi <[email protected]>
Colin Whittaker [Sat, 24 Jun 2023 20:33:12 +0000 (13:33 -0700)]
config: make sure timer is not on the timeouts list before freeing
Signed-off-by: Colin Whittaker <[email protected]>
Signed-off-by: Chad Monroe <[email protected]>
Kevin Darbyshire-Bryant [Sat, 21 Oct 2023 18:50:25 +0000 (19:50 +0100)]
add hostsfile output in addition to statefile
a92c0a7 made the temporary state/leasefile hidden so that an atomic
change was made and dnsmasq only saw the new file on rename. A
misguided optimisation was made to only rename the temporary file if
something had changed. Unfortunately only address and hostnames were
considered in the change, lease durations were not.
As a result it was possible for LUCI which consumes the state/leasefile
to report DHCPv6 leases had expired when they had not.
Revert the optimisation so that the file rename occurs irrespective of
content change, this keeps LUCI reporting of state/lease expiry correct.
This leaves us back with hosts file/dnsmasq update problem. Solve this
by writing out a separate hosts file. Update this file using the
original IP/Hostname change logic that prompts calling the 'lease'
script.
odhcpd config now supports a string 'hostsfile' which defines the path
and name of the hosts file in an identical manner to 'leasefile'. A
state 'leasefile' must be defined IF a 'hostsfile' is also required.
eg.
leasefile '/tmp/odhcpdstate'
hostsfile '/tmp/hosts/odhcpdhosts'
Signed-off-by: Kevin Darbyshire-Bryant <[email protected]>
Ross Vandegrift [Mon, 16 Jan 2023 21:35:46 +0000 (13:35 -0800)]
dhcpv4: improve error when a prefix is too long
If a user tries to enable dhcpv4 on an interface with a /29, odhcp won't work.
The logs will only contain a message that doesn't help identify the problem.
It'd be idea to support any prefix with a valid pool, but at least this would
point a confused user in the right direction.
Signed-off-by: Ross Vandegrift <[email protected]>
John Kohl [Sat, 24 Jun 2023 14:18:03 +0000 (10:18 -0400)]
odhcpd: add support for dhcpv6_pd_min_len parameter
The dhcpv6_pd_min_len configuration clamps the requested prefix
delegation to be at least as big as the option. This allows a
router to manage the size of each downstream router's prefix
delegation length independently from the delegating interface's
prefix length.
This behavior is an implementation choice permitted by the RFCs.
The delegating router (us) is not required to honor the hint
(RFC3633, section 11.2, we MAY choose to use the information in the
option; RFC8168, section 3.2 has several SHOULDs about desired
choices for selecting a prefix to delegate).
This configuration allows us to conserve prefix space so that any
single router can't grab too much of it. Consider if we have an
interface with a /56 prefix. A requesting router could ask for a
/58 and take 1/4 of our total address space. But if we set a
minimum of /60, we can limit each requesting router to get only 1/16
of our total address space.
sample config:
config dhcp 'pd'
...
option dhcpv6_pd_min_len '60'
Signed-off-by: John Kohl <[email protected]>
[ use different comment style and fix commit description ]
Signed-off-by: Christian Marangi <[email protected]>
Ondřej Caletka [Sat, 4 Jun 2022 21:42:59 +0000 (23:42 +0200)]
router: Add PREF64 (RFC 8781) support
This option of IPv6 Router Advertisements allows devices connected to
a IPv6-only network to discover IPv6 prefix of the NAT64 gateway.
Devices can use this information for instance to setup client translator
(CLAT) from IPv4 to IPv6 in 464XLAT (RFC 6877) scenario or to handle
IPv4 address literal on application level.
To enable PREF64 option, a new uci parameter ra_pref64 has to contain
the NAT64 prefix, including prefix length. Only lengths of 96, 64, 56,
48, 40 and 32 bits are supported. For example, to annonce the Well-Known
Prefix:
config dhcp 'lan'
…
option ra_pref64 '64:ff9b::/96'
Fixes: #182
Signed-off-by: Ondřej Caletka <[email protected]>
[ remove extra space for Fixes tag ]
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Mon, 3 Apr 2023 18:12:13 +0000 (20:12 +0200)]
config: use dedicated link local function to check interface
Use netlink_get_interface_addrs is wrong and doesn't actually work. The
function checks only for UNIVERSE address and is not suitable for
dumping linklocal address of an interface. Use the new and dedicated
function to get interface linklocal address to correctly check if the
interface can receive message.
Fixes: #197
Fixes: 7c0f603abc14 ("router: skip RA and wait for LINK-LOCAL to be assigned")
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Mon, 3 Apr 2023 18:04:01 +0000 (20:04 +0200)]
netlink: add support for getting interface linklocal
Add support for getting interface linklocal address. This is needed to
make sure an interface have a valid link local address and such address
is not TENTATIVE. With these info we can check if an interface is ready
to accept packets.
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Mon, 3 Apr 2023 17:42:43 +0000 (19:42 +0200)]
Revert "config: recheck have_link_local on interface reload if already init"
This reverts commit
29c934d7ab98ca0b5da0e3757b885a1d3c19a2f4.
Replace with a better more safe implementation.
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Tue, 28 Mar 2023 22:16:46 +0000 (00:16 +0200)]
config: fix feature for enabling service only when interface RUNNING
With
ba30afcfec0a26ce4bcd96ea4d687c498b0ba4df it was found that odhcpd
service are setup even if an interface had no connection and was not
running. The commit introduced the change but required more fixup for
the feature to work correctly.
The close_interface() remove the interface from the avl list and this
cause the interface to be missing later in the code flow.
The intention of the commit was to just disable the service and enable
them later when the interface is correctly set to running with the flag
IFF_RUNNING.
Change the logic and introduce a new function reload_servies() that will
check IFF_RUNNING and enable or disable odhcp services.
This function is called on odhcpd_reload() for each interface. In
odhcpd_reload() also restore the original pattern with calling
close_interface() only when the interface is not inuse for odhcp.
Also call reload_services() on the single interface when a RTM_NEWLINK
event is fired reacting to a link change of an odhcp interface and
enabling the services if IFF_RUNNING is set.
Fixes
ba30afcfec0a ("config: skip interface setup if interface not IFF_RUNNING")
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Thu, 23 Mar 2023 23:29:15 +0000 (00:29 +0100)]
config: recheck have_link_local on interface reload if already init
If an interface is already init in the odhcpd avl tables, have_link_local
is not set to true with a link local addr set as get ipv6 addr is skipped.
Move checking for have_link_local outside get_addr to better track when
an interface is ready and have a link local addr for interface already
init in odhcpd avl tables.
Fixes: #197
Fixes: 7c0f603abc14 ("router: skip RA and wait for LINK-LOCAL to be assigned")
Signed-off-by: Christian Marangi <[email protected]>
Christian Marangi [Thu, 16 Mar 2023 23:56:25 +0000 (00:56 +0100)]
router: skip RA and wait for LINK-LOCAL to be assigned
This fix a specific and corner case when the following error and similar
is printed in the log:
Failed to send to ff02::1%br-lan (Address not available)
The cause for this was tracked down to the lack of the interface of a
configured LINK-LOCAL IPV6 address resulting in odhcpd_send() always
failing.
A LINK-LOCAL IPV6 address is assigned only after the interface has
carrier and is set to IFF_RUNNING and require some time for the address
to be assigned due to DAD logic.
In the case where an interface was just UP, odhcpd RA may fail since the
LINK-LOCAL IPV6 address still needs to be assigned as it still need to
be "trained". From the kernel view this is flagged in the IPV6 interface
address with the flag IFA_F_TENTATIVE, that means the address still
needs to be checked and follow DAD process.
This is only a transient problem and the DAD process is required only
once till the interface is not set DOWN.
To handle this, add some check to verify if the address has to be
checked and add an additional bool to flag if the interface have a
LINK-LOCAL assigned.
Skip sending RA if the interface still doesn't have finished the DAD
process and retry at the next RA.
A notice log is added to track this special case to track problematic
case and even more corner case.
Logic to check if interface have LINK-LOCAL are:
- When interface is setup, on scanning for the interface ipv6 address
check if at least one address is NOT in IFA_F_TENTATIVE state.
- With interface already up but with still no LINK-LOCAL react on the
RTM_NEWADDR event and set LINK-LOCAL if the addrs added by the event
is a LINK-LOCAL reflecting that the interface finally ended the DAD
process and have a correct address.
Signed-off-by: Christian Marangi <[email protected]>
Acked-by: Hans Dedecker <[email protected]>
Christian Marangi [Thu, 16 Mar 2023 22:44:43 +0000 (23:44 +0100)]
config: skip interface setup if interface not IFF_RUNNING
We currently setup odhcp service even if the interface is not running.
This is the case for bridge or specific interface that are flagged as UP
but have no carrier as nothing is connected to it.
This cause a similar error like:
Failed to send to ff02::1%br-lan (Address not available)
This is caused by the kernel assigning IPV6 address only when the
interface is set to IFF_RUNNING.
A LINK-LOCAL IPV6 address is required for odhcpd_send() to work or every
request will be rejected.
To fix this setup services only when interface is in IFF_RUNNING state.
When an interface change state, odhcpd is reloaded and the services are
correctly setup again.
Signed-off-by: Christian Marangi <[email protected]>
Acked-by: Hans Dedecker <[email protected]>
Stijn Tintel [Tue, 14 Mar 2023 23:37:44 +0000 (01:37 +0200)]
Revert "odhcpd: Reduce error messages"
Silencing an error message without properly understanding why it occurs
is terrible practice. "I think this would be better served as debug."
doesn't inspire confidence the author actually understood what was going
on, so revert this commit.
This reverts commit
90d6cc9cd48a333b95604ff90f7ffe67fe14efe3.
Signed-off-by: Stijn Tintel <[email protected]>
Peter Naulls [Tue, 24 Jan 2023 19:35:02 +0000 (14:35 -0500)]
odhcpd: Reduce error messages
When there's no network cable connected to LAN, then odhcpd does this:
Tue Jan 24 18:32:04 2023 daemon.err odhcpd[2017]: Failed to send to
ff02::1%lan@br-lan (Address not available)
Tue Jan 24 18:32:20 2023 daemon.err odhcpd[2017]: Failed to send to
ff02::1%lan@br-lan (Address not available)
Tue Jan 24 18:32:36 2023 daemon.err odhcpd[2017]: Failed to send to
ff02::1%lan@br-lan (Address not available)
Tue Jan 24 18:32:52 2023 daemon.err odhcpd[2017]: Failed to send to
ff02::1%lan@br-lan (Address not available)
Accurate, but not very interesting. I think this would be better served
as debug.
Signed-off-by: Peter Naulls <[email protected]>
[email protected] [Thu, 16 Feb 2023 20:30:41 +0000 (22:30 +0200)]
router: always check ra_default
We currently only check ra_default when an interface has valid
addresses. This results in ra_default being ignored in case we have an
interface with only link-local addresses. This effectively breaks the
use of value 2 for the ra_default parameter.
Fix this by always checking ra_lifetime, regardless of the interface
having public addresses or not.
Fixes: #11930
Fixes: 83e14f455817 ("router: advertise removed addresses as invalid in 3 consecutive RAs")
Signed-off-by: Stijn Tintel <[email protected]>
Acked-by:Hans Dedecker <
[email protected]>
[email protected] [Thu, 16 Feb 2023 20:30:40 +0000 (22:30 +0200)]
router: improve RA logging
We only set the RA lifetime to what is configured in UCI when there is a
default route and valid prefix. In any other case, we set it to 0. This
leads to confusion where people believe ra_lifetime is completely
ignored. In case there is a default route, but no valid prefix, a debug
message explains this, but if there is no default route, we silently
override ra_lifetime.
Add a debug message for the latter case, and explicitly mention
overriding ra_lifetime in both cases.
Signed-off-by: Stijn Tintel <[email protected]>
Acked-by: Hans Dedecker <[email protected]>
Mikael Magnusson [Tue, 7 Feb 2023 16:53:00 +0000 (16:53 +0000)]
dhcpv4: detect noarp interfaces
Don't add ARP entries to interfaces with IFF_NOARP, it causes
problems with for example WireGuard interfaces (which requires
this change to be usable with DHCPv4-over-DHCPv6).
Signed-off-by: Mikael Magnusson <[email protected]>
Kevin Darbyshire-Bryant [Fri, 21 Oct 2022 13:28:59 +0000 (14:28 +0100)]
dhcpv6-ia: make tmp lease file hidden
Use a hidden . prefixed temporary lease file instead of appending
'.tmp'. Dnsmasq is capable of scanning files/directories using inotify
to receive file change notifications and updating its view of hostname
ip address mapping without being SIGHUPped. Until dnsmasq v2.88 this
mechanism allows additions to hostnames, no deletions. dnsmasq v2.88
when released will understand how to remove mappings.
Unfortunately without this change dnsmasq sees odhcpd's temporary lease
file via inotify and it also sees the change when odhcpd atomically
renames the file from '.tmp' to the correct name.
dnsmasq excludes hidden '.' files from it's inotify scans, thus changing
odhcpd to use a hidden temporary lease file reduces load and makes
sense.
Also, while here, only rename the temporary file if it actually contains
different content.
Signed-off-by: Kevin Darbyshire-Bryant <[email protected]>
Rob Ekl [Fri, 14 Oct 2022 16:50:43 +0000 (11:50 -0500)]
fix null pointer dereference for INFORM messages
Avinash Tekumalla [Wed, 8 Dec 2021 13:14:36 +0000 (18:44 +0530)]
odhcpd: Support for Option NTP and SNTP
Support for DHCPv6 Option NTP (Option-56) and SNTP (Option-31),
DHCP Option NTP(Option-42) is implemented.
ntp list is supported for IPv4, IPv6 and FQDN.
Signed-off-by: Avinash Tekumalla <[email protected]>
Signed-off-by: Alin Nastac <[email protected]>
Signed-off-by: Ashutosh Shandilya <[email protected]>
Signed-off-by: Vidya Rajagopal <[email protected]>
Alin Nastac [Wed, 15 Dec 2021 12:47:04 +0000 (13:47 +0100)]
router: advertise removed addresses as invalid in 3 consecutive RAs
On prefix removal, router advertisement daemon is supposed to send
advertise with an invalid PI entry (see RFC 7084 L-13).
Signed-off-by: Alin Nastac <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Mikael Magnusson [Wed, 11 Aug 2021 15:04:54 +0000 (17:04 +0200)]
dhcpv4: fix uninitialized hostname in some ubus events
The hostname buffer is uninitialized if the client doesn't provide
DHCPV4_OPT_HOSTNAME. Use hostname from the assignment which is present if
a static lease contains the hostname or if the client provides one, and
the hostname is valid. It's also used in the ubus ipv4leases method.
Signed-off-by: Mikael Magnusson <[email protected]>
Mikael Magnusson [Wed, 14 Jul 2021 20:46:55 +0000 (22:46 +0200)]
dhcpv6-ia: allow up to 64 bit wide hostid
Add dhcpv6_hostid_len config option which controls the number
of bits in the host identifier of dynamically assigned IPv6
addresses. The default is 12 bits which is also the minimum.
The maximum is the whole interface identifier, i.e. 64 bits.
Allow up to 64 bit wide hostid in static leases.
Fixes #84 and #27.
Signed-off-by: Mikael Magnusson <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 18 Jul 2021 16:43:26 +0000 (18:43 +0200)]
dhcpv6-ia: fix invalid preferred lifetime
Preferred lifetime cannot be greater than the valid lifetime of an IA;
fix this by checking if the preferred lifetime does not exceed the
valid lifetime of an IA
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 13 Jun 2021 20:09:54 +0000 (22:09 +0200)]
config: fix ra_flags none setting
Fixes commit
a12fcb3cee2d489b8648a2398812d7bed2f25faa which wrongly
removed setting ra_flags to 0
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sat, 15 May 2021 18:52:41 +0000 (20:52 +0200)]
config: log config parse failures to syslog
An invalid config setting for an interface lead to a flush of all config
settings of the related interface and thus made the interface unusable.
Change the behavior by logging config parse failures to syslog and
not flushing all config settings
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sat, 3 Apr 2021 18:54:57 +0000 (20:54 +0200)]
cmake: enforce additonal compiler checks
Let's catch compile errors by enabling extra compiler checks
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sat, 3 Apr 2021 19:11:16 +0000 (21:11 +0200)]
odhcpd: fix extra compiler warning
src/odhcpd.c:143:2: error: format not a string literal, argument types not checked [-Werror=format-nonliteral]
snprintf(buf, sizeof(buf), sysctl_pattern, ifname, what);
^~~~~~~~
cc1: all warnings being treated as errors
Signed-off-by: Hans Dedecker <[email protected]>
Nick Hainke [Wed, 6 Jan 2021 12:04:02 +0000 (13:04 +0100)]
dhcpv6-ia: apply prefix_filter on dhcpv6
The prefix_filter allows to select which prefix should be assigned
to clients if you have multiple prefixes on an interface.
Currently, the filter only applies to RAs and does work with
a dhcpv6 server.
This commit enables the filter also on dhcpv6.
Signed-off-by: Nick Hainke <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Nick Hainke [Sat, 2 Jan 2021 22:27:03 +0000 (23:27 +0100)]
odhcpd: add option for setting preferred lifetime
"valid_lft" and "preferred_lft" are different. If the "preferred_lft"
is expired the prefix should be avoided in source prefix selection.
However, the interface is allowed to still receive downstream traffic.
preferred_lfetime:
Limit for preferred lifetime of a prefix
If you want the old behavior, you have to set preferred_lifetime to
the same value as leasetime.
Signed-off-by: Nick Hainke <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Thu, 24 Dec 2020 15:28:43 +0000 (16:28 +0100)]
dhcpv6-ia: remove assignment equal to 0 checks
Remove the checks as they're leftovers of the old static lease
implementation which created assigments with assigned equal to 0
whihc is not the case anymore in the reworked static lease
implementation
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Thu, 24 Dec 2020 15:08:58 +0000 (16:08 +0100)]
dhcpv6-ia: fix logic to include IA_PD prefix with lifetimes set to 0
Make sure IA_PD prefixes for which no preferred and valid lifetimes
can be returned are included in the reply with a preferred and valid
lifetime to 0.
Therefore exclude IPv6 prefixes with an invalid prefix length as
well so IA_PD prefixes for which not a preferred/valid lifetime is
returned are included with a preferred and valid lifetime set to 0
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Thu, 24 Dec 2020 14:41:37 +0000 (15:41 +0100)]
dhcpv6-ia: fix prefix delegation behavior
When an IPv6 address change is triggered each PD assignment is checked
if it is still consistent with the updated IPv6 prefix list.
If not consistent anymore a reconfigure is triggered for the assignment
and a best effort is made to assign a new IA_PD prefix.
If it not possible anymore to assign an IA_PD prefix delete the PD
assignment now so it will result into a NO BINDING status code for the
given IA_PD in the DHCPv6 reply when the client tries to renew the IA_PD prefix.
Signed-off-by: Hans Dedecker <[email protected]>
Daniel Golle [Sun, 13 Dec 2020 00:08:23 +0000 (00:08 +0000)]
config: remove local mkdir_p implementation
Replace local mkdir_p implementation in favour of using mkdir_p now
added to libubox.
Signed-off-by: Daniel Golle <[email protected]>
Santiago Piccinini [Wed, 2 Dec 2020 22:07:05 +0000 (19:07 -0300)]
ubus: add add_lease method
Allows sharing leases between odhcpd instances running
in multiple hosts.
Signed-off-by: Santiago Piccinini <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
icpz [Fri, 20 Nov 2020 16:55:25 +0000 (00:55 +0800)]
config: add option to indicate dns service presence
Adds the config option to set if ipv6 dns service is availiable on the
interface. In some cases the dns service may not be listening on the
ipv6 address of the interface, and thus should not be announced to clients.
Signed-off-by: Paizhuo Chen <[email protected]>
Hans Dedecker [Sat, 8 Aug 2020 23:08:23 +0000 (19:08 -0400)]
dhcpv6-ia : write statefile atomically
Applications (e.g. unbound) need a consistent view of the statefile;
therefore write all the lease info to a temporary file which is later
renamed to the configured statefile name
Suggested-by : John Fremlin <
[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Mikael Magnusson [Sun, 1 Nov 2020 13:52:39 +0000 (14:52 +0100)]
dhcpv6: fix size_t fields in syslog format
Signed-off-by: Mikael Magnusson <[email protected]>
Mikael Magnusson [Mon, 26 Oct 2020 21:52:27 +0000 (22:52 +0100)]
dhcpv6: add explicit dhcpv4o6 server address
Include the All_DHCP_Relay_Agents_and_Servers multicast address
in the option explicitly. It shouldn't be needed according
to RFC 7341 section 7.2 but ISC dhclient logs an error otherwise:
dhcp4-o-dhcp6-server: expecting at least 16 bytes; got 0
Signed-off-by: Mikael Magnusson <[email protected]>
Mikael Magnusson [Mon, 26 Oct 2020 21:52:17 +0000 (22:52 +0100)]
dhcpv6: add DHCPv4-over-DHCPv6 support
Add support for DHCPv4-over-DHCPv6 (DHCP 4o6) Transport (RFC 7341).
Signed-off-by: Mikael Magnusson <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Mikael Magnusson [Wed, 4 Mar 2020 00:25:50 +0000 (01:25 +0100)]
dhcpv6: check message type
Signed-off-by: Mikael Magnusson <[email protected]>
Hans Dedecker [Mon, 7 Sep 2020 19:35:42 +0000 (21:35 +0200)]
router: fix advertisement interval option
The variable maxival contains the maximum time in seconds between
successive unsolicited Router Advertisement messages; RFC6275 defines
the Advertisement Interval option as the time in milliseconds.
Therefore convert maxival to milliseconds when populating the
Advertisement Interval option.
Signed-off-by: Hans Dedecker <[email protected]>
Rosen Penev [Mon, 22 Jun 2020 04:37:36 +0000 (21:37 -0700)]
odhcpd: fix compilation with GCC10
GCC10 mandates the C++ one definition rule, which breaks on multiple
definitions of config. Add the appropriate extern declaration.
Signed-off-by: Rosen Penev <[email protected]>
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 3 May 2020 19:17:53 +0000 (21:17 +0200)]
router: fix Lan host reachibility due to identical RIO and PIO prefixes (FS#3056)
odhcpd includes RIO RA options according to requirement L3 in RFC7084.
However if the delegated prefix length received on the wan is equal to the
downstream delegated prefix length on the Lan this may pollute the
routing table of type C hosts as the RIO routing entry can take
precedence of the PIO routing entry meaning all traffic for the on link
hosts will go via the router iso direct on link communication.
If the traffic is dropped in the router hosts are unreachable; therefore
don't include RIO options with prefixes and prefix length identical to
those in a PIO RA option
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Thu, 2 Apr 2020 19:26:57 +0000 (21:26 +0200)]
dhcpv6-ia: fix preferred and valid lifetimes in ubus ipv6leases
Since commit
6db312a698e920ff61505ef1f42469880829774d the preferred and
valid lifetimes of the addresses/prefixes is based on the configured leasetime;
as a result the displayed preferred and valid lifetimes need to be
calculated based on the assignment lifetime as this is set to the lowest
valid lifetime of the addresses/prefixes.
Signed-off-by: Hans Dedecker <[email protected]>
Rosen Penev [Thu, 26 Mar 2020 23:07:12 +0000 (16:07 -0700)]
odhcpd: fix compilation with musl 1.2.0
SYS_clock_gettime is gone with musl 1.2.0. Switched to the function.
Also fixed two format strings that fail as time_t is 64-bit with 1.2.0.
Signed-off-by: Rosen Penev <[email protected]>
Hans Dedecker [Sat, 14 Mar 2020 20:03:11 +0000 (21:03 +0100)]
ubus: use dhcpv6 ia assignment flag
Further align the code to use DHCPv6 assignment flags to distinguish
between prefix delegation and non temporary address assignments
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 16 Feb 2020 20:27:42 +0000 (21:27 +0100)]
dhcpv6-ia: avoid setting lifetime to infinite for static assignments
Don't set the valid lifetime to infinite for static assignments
but rather set it to the IA lifetime given to the client.
This makes it possible to display the leasetime for static assigments
and simplifies the code in several places
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 16 Feb 2020 20:15:28 +0000 (21:15 +0100)]
dhcpv4: avoid setting lifetime to infinite for static assignments
Don't set the valid lifetime to infinite for static assignments
but rather set it to the leasetime given to the client.
This makes it possible to display the leasetime for static assigments
and simplifies the code in several places
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Tue, 14 Jan 2020 20:16:48 +0000 (21:16 +0100)]
dhcpv6-ia: use dhcp leasetime to set preferred/valid statefull lifetimes
Allow to set the preferred/valid lifetimes of IA_NA/IA_PD options based
on the configured dhcp leasetime.
DHCP leqasetime will be used to set the preferred/valid lifetimes in the
IA_NA/IA_PD options unless the preferred/valid lifetimes of the IPv6
address are smaller then the DHCP leasetime.
This will avoid IA_NA/IA_PD options being sent with infinite lifetimes
due to the IPv6 address having infinite preferred/valid lifetimes
like IPv6 ULA addresses.
While at it rename dhcpv4_leasetime into dhcp_leasetime as the leasetime
is used both for DHCPv4 and DHCPv6
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Thu, 2 Jan 2020 17:26:51 +0000 (18:26 +0100)]
dhcpv6-ia: introduce DHCPv6 pd and ia assignments flags
Simplify the code by using specific flags which identify the assignment
either as a DHCPv6 PD or NA assignment. This allows to remove implicit
checks for PD and NA assignments based on the value of the assignment
length parameter.
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Tue, 31 Dec 2019 15:30:34 +0000 (16:30 +0100)]
dhcpv6-ia: cleanup prefix delegation routes
Remove prefix delegation routes as well in free_dhcpv6_assignment when
cleaning up the assignment resources
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Tue, 31 Dec 2019 15:13:08 +0000 (16:13 +0100)]
dhcpv6-ia: remove passing interface as parameter to apply_lease
As the assignment struct holds a pointer to the interface struct
use this one in apply_lease iso passing interface as a parameter
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 15 Dec 2019 19:17:32 +0000 (20:17 +0100)]
treewide: optimize syslog priority values
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 13 Oct 2019 18:37:14 +0000 (20:37 +0200)]
ndp: fix endian issue
Fix endian issue introduced in commit
91a28e4 by using
ND_NA_FLAG_SOLICITED defined in netinet/icmp6.h
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Mon, 23 Sep 2019 20:06:00 +0000 (22:06 +0200)]
netlink: fix potential infinite loops
Fix potential infinite loops by checking the return code of
nl_send_auto_complete; if nl_send_auto_complete fails pending
will always have the value 1 as the finish callback will not
be called resulting into an infinite loop
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Sun, 15 Sep 2019 17:26:37 +0000 (19:26 +0200)]
netlink: rename netlink callback handlers
Signed-off-by: Hans Dedecker <[email protected]>
sfan5 [Sat, 2 Feb 2019 21:48:18 +0000 (22:48 +0100)]
ndp: answer global-addressed NS manually
An upstream router may address solicits to the global address of the target,
these will not be answered by the kernel and not routed either due to link-local
source. The NS will eventually be retried as multicast, but we want to avoid this.
see also https://forum.archive.openwrt.org/viewtopic.php?id=40871
Signed-off-by: Stefan Alfers <[email protected]>
Tian Hao [Thu, 29 Aug 2019 17:08:17 +0000 (01:08 +0800)]
dhcpv6: retry failed PD assignments on addrlist change
Currently only assignments with prefixes larger than the largest
available one will be re-assigned on addrlist change events.
Previously failed PD assignments are not taken into account, and these
assignments will never have a chance to recover even if the address just
added to the interface could satisfy them.
Failed PD assignments could be very common when upstream prefix is obtained
from a PPPoE WAN, as ISPs tend to terminate the PPPoE session after a fixed
time period. Addresses on LAN could disappear and re-appear during WAN redial,
and all existing PD assignments to clients in LAN will become failed when the
addresses disappear. These assignments will not be recovered after WAN has been
brought back up, and clients in LAN could no longer receive any PD prefix.
This commit fixes the issue by including failed PD assignments in the
re-assign list on addrlist change event, so that newly added prefixes can be
put into use right after they are added to the interface.
Signed-off-by: Tian Hao <[email protected]>
Hans Dedecker [Mon, 9 Sep 2019 20:12:51 +0000 (22:12 +0200)]
config: ra_management compatibility support
Keep supporting ra_management for backwards compatibility support;
ra_management will only be processed if neither ra_slaac and ra_flags
are set.
Signed-off-by: Hans Dedecker <[email protected]>
Hauke Mehrtens [Mon, 2 Sep 2019 20:29:49 +0000 (22:29 +0200)]
odhcpd: router: Fix out of scope memory access
A pointer to search_buf is accessed by search_domain outside of the
if branch which defines search_buf. The compiler could already reuse
this memory.
Coverity: #
1445747
Signed-off-by: Hauke Mehrtens <[email protected]>
Hans Dedecker [Tue, 27 Aug 2019 20:00:26 +0000 (22:00 +0200)]
dhcpv6-ia: free assignment when validity timer expires
In case clid_len is set free assignment when validity timer expires
Signed-off-by: Hans Dedecker <[email protected]>
Hans Dedecker [Fri, 16 Aug 2019 19:22:11 +0000 (21:22 +0200)]
router: speed up initial router advertisements
Speed up sending initial router advertisement messages as documented in
RFC2461 point 6.2.4
Signed-off-by: Hans Dedecker <[email protected]>