diff options
author | Thomas Haller <thaller@redhat.com> | 2021-02-10 11:54:20 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2021-02-11 09:23:12 +0100 |
commit | 6850e3640e4201316adf6eb1aa1c1bc00aaa9583 (patch) | |
tree | acc231f6023d8bba21df54732f64c51c9f4c0fd8 | |
parent | a24b7287d828c715694edecc2f1d03f468639883 (diff) | |
download | NetworkManager-6850e3640e4201316adf6eb1aa1c1bc00aaa9583.tar.gz |
dhcp/nettools: refactor parsing of DHCP lease (broadcast)
No change in behavior.
-rw-r--r-- | src/core/dhcp/nm-dhcp-nettools.c | 27 | ||||
-rw-r--r-- | src/core/dhcp/nm-dhcp-utils.c | 13 | ||||
-rw-r--r-- | src/core/dhcp/nm-dhcp-utils.h | 1 |
3 files changed, 24 insertions, 17 deletions
diff --git a/src/core/dhcp/nm-dhcp-nettools.c b/src/core/dhcp/nm-dhcp-nettools.c index 7ba4d9caf3..2456c23a6c 100644 --- a/src/core/dhcp/nm-dhcp-nettools.c +++ b/src/core/dhcp/nm-dhcp-nettools.c @@ -513,22 +513,6 @@ lease_parse_server_id(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTa } static void -lease_parse_broadcast(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTable *options) -{ - struct in_addr addr; - char addr_str[NM_UTILS_INET_ADDRSTRLEN]; - - if (!lease_get_in_addr(lease, NM_DHCP_OPTION_DHCP4_BROADCAST, &addr)) - return; - - _nm_utils_inet4_ntop(addr.s_addr, addr_str); - nm_dhcp_option_add_option(options, - _nm_dhcp_option_dhcp4_options, - NM_DHCP_OPTION_DHCP4_BROADCAST, - addr_str); -} - -static void lease_parse_routes(NDhcp4ClientLease *lease, NMIP4Config * ip4_config, GHashTable * options, @@ -821,6 +805,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, const char * v_str; guint16 v_u16; gboolean v_bool; + in_addr_t v_inaddr; int r; g_return_val_if_fail(lease != NULL, NULL); @@ -832,7 +817,15 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx, return NULL; lease_parse_server_id(lease, ip4_config, options); - lease_parse_broadcast(lease, ip4_config, options); + + r = n_dhcp4_client_lease_query(lease, NM_DHCP_OPTION_DHCP4_BROADCAST, &l_data, &l_data_len); + if (r == 0 && nm_dhcp_lease_data_parse_in_addr(l_data, l_data_len, &v_inaddr)) { + nm_dhcp_option_add_option_in_addr(options, + _nm_dhcp_option_dhcp4_options, + NM_DHCP_OPTION_DHCP4_BROADCAST, + v_inaddr); + } + lease_parse_routes(lease, ip4_config, options, route_table, route_metric); lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, options); diff --git a/src/core/dhcp/nm-dhcp-utils.c b/src/core/dhcp/nm-dhcp-utils.c index 508c3d0930..b2064153d5 100644 --- a/src/core/dhcp/nm-dhcp-utils.c +++ b/src/core/dhcp/nm-dhcp-utils.c @@ -950,3 +950,16 @@ nm_dhcp_lease_data_parse_domain(const guint8 *data, gsize n_data, char **out_val *out_val = g_steal_pointer(&s); return TRUE; } + +gboolean +nm_dhcp_lease_data_parse_in_addr(const guint8 *data, gsize n_data, in_addr_t *out_val) +{ + /* - option 28, https://tools.ietf.org/html/rfc2132#section-5.3 + */ + + if (n_data != 4) + return FALSE; + + *out_val = unaligned_read_ne32(data); + return TRUE; +} diff --git a/src/core/dhcp/nm-dhcp-utils.h b/src/core/dhcp/nm-dhcp-utils.h index 379489a74d..30f850ce1e 100644 --- a/src/core/dhcp/nm-dhcp-utils.h +++ b/src/core/dhcp/nm-dhcp-utils.h @@ -48,5 +48,6 @@ gboolean nm_dhcp_lease_data_parse_u16(const guint8 *data, gsize n_data, guint16 gboolean nm_dhcp_lease_data_parse_mtu(const guint8 *data, gsize n_data, guint16 *out_val); gboolean nm_dhcp_lease_data_parse_cstr(const guint8 *data, gsize n_data, gsize *out_new_len); gboolean nm_dhcp_lease_data_parse_domain(const guint8 *data, gsize n_data, char **out_val); +gboolean nm_dhcp_lease_data_parse_in_addr(const guint8 *data, gsize n_data, in_addr_t *out_val); #endif /* __NETWORKMANAGER_DHCP_UTILS_H__ */ |