dhcp/nettools: refactor parsing of DHCP lease (broadcast)

No change in behavior.
This commit is contained in:
Thomas Haller
2021-02-10 11:54:20 +01:00
parent a24b7287d8
commit 6850e3640e
3 changed files with 24 additions and 17 deletions

View File

@@ -512,22 +512,6 @@ lease_parse_server_id(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTa
addr_str);
}
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,
@@ -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);

View File

@@ -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;
}

View File

@@ -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__ */