Yu Watanabe
8b1cfab962
network: do not restart DHCPv6 client when it is already running in managed mode
...
Otherwise, if a network has two router and one provides M flag and the
other provides O flag, then the DHCPv6 client switches the running mode
repeatedly. That makes the IPv6 network configuration of the host
unstable.
2022-02-14 15:02:33 +09:00
Yu Watanabe
dd73db7850
sd-dhcp6-client: reset Information Refresh Time on stop
2022-02-14 15:02:30 +09:00
Yu Watanabe
e1774086a7
sd-dhcp6-client: add log about Information Refresh Time
...
And store IRT only when the client is running in information
requesting mode.
2022-02-14 15:01:02 +09:00
Yu Watanabe
9c9fee8002
sd-dhcp6-client: use memcmp_nn() at one more place
2022-02-14 15:01:02 +09:00
Yu Watanabe
ac680f766d
dhcp-identifier: generate static and constant DUID-EN when the client is running in test mode
...
Follow-up for 9216fddc5a .
2022-02-14 15:00:59 +09:00
Yu Watanabe
5e1618fafa
dhcp-identifier: introduce dhcp_identifier_set_duid()
2022-02-14 14:58:49 +09:00
Yu Watanabe
f9971018eb
dhcp-identifier: introduce duid_type_to_string()
2022-02-14 14:58:49 +09:00
Yu Watanabe
6f3fc86131
sd-dhcp6-client: do not expose set_transaction_id()
...
This is mostly for tests or fuzzers. Hence, this makes the function
requires that the client is running in the test mode.
Also, now the function mask the value for message type.
2022-02-14 14:58:49 +09:00
Yu Watanabe
9e4dee4cec
sd-dhcp6-client: use OrderedSet for vendor option
...
This also fixes memleak.
2022-02-14 14:58:49 +09:00
Yu Watanabe
885ea2ab1c
ordered-set: introduce ordered_set_clear()
2022-02-14 14:58:49 +09:00
Yu Watanabe
1978efb9a5
sd-dhcp6-client: use struct hw_addr_data
2022-02-14 14:58:49 +09:00
Yu Watanabe
6f8ff34218
sd-dhcp6-client: stop IO event source when client entered bound state
...
Also when the client receives a reply when running in information
requesting mode.
2022-02-14 14:58:49 +09:00
Yu Watanabe
6f4490bb0c
sd-dhcp6-client: adjust assertions
2022-02-14 14:58:46 +09:00
Yu Watanabe
65b85f2340
sd-dhcp6-client: log state transition
2022-02-14 14:57:35 +09:00
Yu Watanabe
e5d69be216
sd-dhcp6-client: rename client_set_state() -> client_start_transaction()
...
Previously, it obeys state transition, but now it is only used when
(re-)starting transaction. Let's rename again in more explanative name.
2022-02-14 14:57:35 +09:00
Yu Watanabe
fa78d165bb
sd-dhcp6-client: use proper type for string table lookup funcs
2022-02-14 14:57:35 +09:00
Yu Watanabe
a8d1012f30
sd-dhcp6-client: voidify client_set_state()
2022-02-14 14:57:34 +09:00
Yu Watanabe
cfcc85bbca
sd-dhcp6-client: log message is processed before state is changed
2022-02-14 14:57:34 +09:00
Yu Watanabe
c50c9e509f
sd-dhcp6-client: move client_timeout_resend() and client_set_state()
...
These are deeply related to client_message_send(). Hence, move them near
the function.
2022-02-14 14:57:34 +09:00
Yu Watanabe
0eca25ba00
sd-dhcp6-client: move client_ensure_iaid()
...
No functional change.
2022-02-14 14:57:34 +09:00
Yu Watanabe
af2b484141
sd-dhcp6-client: merge client_start() and client_reset()
2022-02-14 14:56:54 +09:00
Yu Watanabe
ec7baf998d
sd-dhcp6-client: use event_reset_time_relative() at one more place
2022-02-14 14:54:08 +09:00
Yu Watanabe
22ad018b5e
sd-dhcp6-client: max_retransmit_count is only used when client is in DHCP6_STATE_REQUEST
2022-02-14 14:54:08 +09:00
Yu Watanabe
0f3b8b809c
sd-dhcp6-client: drop unnecessary event_source_disable()
...
The event source will be soon re-enabled in the same function.
The function client_timeout_resend() may return earlier without
re-enabling the timer souce. However,
- the timer event source is one shot by default. Hence, it is not
necessary to disable in the callback function,
- when it returns early, then client_set_state() or client_stop() is
called before return, and they re-ernable or disable the timer.
2022-02-14 14:51:19 +09:00
Yu Watanabe
3bb18e707c
sd-dhcp6-client: set lease expiration timer in client_enter_bound_state()
...
The timer must be active until the client get re-enter bound state,
and the timeout must be determined by the lease acquired when entering
the bound state.
2022-02-14 14:45:14 +09:00
Yu Watanabe
30b31359b0
sd-dhcp6-client: drop unnecessary assignment
2022-02-14 14:45:14 +09:00
Yu Watanabe
8ef959cd09
sd-dhcp6-client: initialize IO event source in sd_dhcp6_client_start()
2022-02-14 14:45:14 +09:00
Yu Watanabe
f814cd80de
sd-dhcp6-client: make state transition stricter
2022-02-14 14:45:14 +09:00
Yu Watanabe
c2c878d806
sd-dhcp6-client: prohibit spurious state transition
...
Previously, `client_set_state(client, DHCP6_STATE_STOPPED)` might make
the client enter the SOLICIT state.
2022-02-14 14:45:14 +09:00
Yu Watanabe
220a88ca75
sd-dhcp6-client: disable T1 timer on T2
...
Otherwise, the client may be enter RENEW state after REBIND state.
2022-02-14 14:45:14 +09:00
Yu Watanabe
c41bdb17fc
sd-dhcp6-client: call client_notify() in client_enter_bound_state()
2022-02-14 14:45:14 +09:00
Yu Watanabe
cdf3d8c584
sd-dhcp6-client: fix lifetime handling
...
This fixes the following issues:
- if T1 is finite and T2 is infinite, then the timer for T1 was not
enabled,
- after T1 and T2 are randomized, T1 may be longer than T2.
2022-02-14 14:45:07 +09:00
Yu Watanabe
1d6cb4ce2a
sd-dhcp6-client: use event_reset_time_relative()
2022-02-14 14:43:45 +09:00
Yu Watanabe
02354ee738
sd-dhcp6-client: introduce client_enter_bound_state()
...
To make client_set_state() smaller. This should not change any behavior.
2022-02-14 14:43:45 +09:00
Yu Watanabe
cc5184823f
sd-dhcp6-client: fix overflow in calculating timeout value
2022-02-14 14:43:45 +09:00
Yu Watanabe
d0875a07dd
sd-dhcp6-client: disable event source when client is stopped or freed
2022-02-14 14:43:45 +09:00
Yu Watanabe
7771233127
sd-dhcp6-client: use in6_addr_to_string()
2022-02-14 14:43:45 +09:00
Yu Watanabe
4db6334c9a
sd-dhcp6-client: stop client on error in client state transition
2022-02-14 14:43:45 +09:00
Yu Watanabe
bfa1139af4
sd-dhcp6-client: add missing one more error handling
2022-02-14 14:43:45 +09:00
Yu Watanabe
06d5e856f8
sd-dhcp6-client: rename client_start() -> client_set_state()
2022-02-14 14:43:45 +09:00
Yu Watanabe
07a3b3408b
sd-dhcp6-client: introduce client_process_*()
...
This is mostly for shortening `client_receive_message()`.
This also fixes the following:
- do not trigger SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST notification
when non-reply message,
- add several missing error handlings caused in client_start().
2022-02-14 14:43:45 +09:00
Yu Watanabe
0123b2dbac
sd-dhcp6-client: fix possible unaligned read or write
2022-02-14 14:43:45 +09:00
Yu Watanabe
16347c15d8
sd-dhcp6-client: voidify client_reset()
2022-02-14 14:43:45 +09:00
Yu Watanabe
65ece4c85b
sd-dhcp6-client: introduce dhcp6_lease_new_from_message()
2022-02-14 14:43:45 +09:00
Yu Watanabe
c930925841
sd-dhcp6-client: use structured initializer
2022-02-14 14:43:45 +09:00
Yu Watanabe
f4fbea7a0f
sd-dhcp6-lease: unify lease lifetime calculation
2022-02-14 14:43:45 +09:00
Yu Watanabe
126277aceb
sd-dhcp6-client: always use ENODATA when a lease does not have requested data
2022-02-14 14:43:45 +09:00
Yu Watanabe
29858a0f9e
sd-dhcp6-client: unify dhcp6_option_append_{ia,pd}()
2022-02-14 14:43:45 +09:00
Yu Watanabe
877bfc78fd
sd-dhcp6-client: store PD prefix hint in ia_pd
...
And allows to specify multiple hints.
2022-02-14 14:43:45 +09:00
Yu Watanabe
e5b0b87f51
sd-dhcp6-client: introduce dhcp6_ia_free()
2022-02-14 14:43:45 +09:00