dhcp/nettools: refactor parsing of DHCP lease (broadcast)
No change in behavior.
This commit is contained in:
@@ -512,22 +512,6 @@ lease_parse_server_id(NDhcp4ClientLease *lease, NMIP4Config *ip4_config, GHashTa
|
|||||||
addr_str);
|
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
|
static void
|
||||||
lease_parse_routes(NDhcp4ClientLease *lease,
|
lease_parse_routes(NDhcp4ClientLease *lease,
|
||||||
NMIP4Config * ip4_config,
|
NMIP4Config * ip4_config,
|
||||||
@@ -821,6 +805,7 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx,
|
|||||||
const char * v_str;
|
const char * v_str;
|
||||||
guint16 v_u16;
|
guint16 v_u16;
|
||||||
gboolean v_bool;
|
gboolean v_bool;
|
||||||
|
in_addr_t v_inaddr;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
g_return_val_if_fail(lease != NULL, NULL);
|
g_return_val_if_fail(lease != NULL, NULL);
|
||||||
@@ -832,7 +817,15 @@ lease_to_ip4_config(NMDedupMultiIndex *multi_idx,
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
lease_parse_server_id(lease, ip4_config, options);
|
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_routes(lease, ip4_config, options, route_table, route_metric);
|
||||||
lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, options);
|
lease_parse_address_list(lease, ip4_config, NM_DHCP_OPTION_DHCP4_DOMAIN_NAME_SERVER, options);
|
||||||
|
|
||||||
|
@@ -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);
|
*out_val = g_steal_pointer(&s);
|
||||||
return TRUE;
|
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;
|
||||||
|
}
|
||||||
|
@@ -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_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_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_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__ */
|
#endif /* __NETWORKMANAGER_DHCP_UTILS_H__ */
|
||||||
|
Reference in New Issue
Block a user