dhcp: refactor dhcp code to use @dhcp_anycast_addr as #GByteArray type
At a later point, we will have to make a copy of @dhcp_anycast_addr to start the client asynchronously. Although the length of the guint8 array *should* always be 6 byte (being a MAC address), it's nicer to just pass on the GByteArray instance instead, which knows how many byte are actually set. Signed-off-by: Thomas Haller <thaller@redhat.com>
This commit is contained in:
@@ -2774,14 +2774,10 @@ dhcp4_start (NMDevice *self,
|
|||||||
{
|
{
|
||||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||||
NMSettingIP4Config *s_ip4;
|
NMSettingIP4Config *s_ip4;
|
||||||
guint8 *anycast = NULL;
|
|
||||||
GByteArray *tmp = NULL;
|
GByteArray *tmp = NULL;
|
||||||
|
|
||||||
s_ip4 = nm_connection_get_setting_ip4_config (connection);
|
s_ip4 = nm_connection_get_setting_ip4_config (connection);
|
||||||
|
|
||||||
if (priv->dhcp_anycast_address)
|
|
||||||
anycast = priv->dhcp_anycast_address->data;
|
|
||||||
|
|
||||||
/* Clear old exported DHCP options */
|
/* Clear old exported DHCP options */
|
||||||
if (priv->dhcp4_config)
|
if (priv->dhcp4_config)
|
||||||
g_object_unref (priv->dhcp4_config);
|
g_object_unref (priv->dhcp4_config);
|
||||||
@@ -2800,7 +2796,7 @@ dhcp4_start (NMDevice *self,
|
|||||||
nm_connection_get_uuid (connection),
|
nm_connection_get_uuid (connection),
|
||||||
s_ip4,
|
s_ip4,
|
||||||
priv->dhcp_timeout,
|
priv->dhcp_timeout,
|
||||||
anycast);
|
priv->dhcp_anycast_address);
|
||||||
|
|
||||||
if (tmp)
|
if (tmp)
|
||||||
g_byte_array_free (tmp, TRUE);
|
g_byte_array_free (tmp, TRUE);
|
||||||
@@ -3206,7 +3202,6 @@ dhcp6_start (NMDevice *self,
|
|||||||
{
|
{
|
||||||
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
|
||||||
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
|
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
|
||||||
guint8 *anycast = NULL;
|
|
||||||
GByteArray *tmp = NULL;
|
GByteArray *tmp = NULL;
|
||||||
|
|
||||||
if (!connection) {
|
if (!connection) {
|
||||||
@@ -3216,9 +3211,6 @@ dhcp6_start (NMDevice *self,
|
|||||||
|
|
||||||
/* Begin a DHCP transaction on the interface */
|
/* Begin a DHCP transaction on the interface */
|
||||||
|
|
||||||
if (priv->dhcp_anycast_address)
|
|
||||||
anycast = priv->dhcp_anycast_address->data;
|
|
||||||
|
|
||||||
/* Clear old exported DHCP options */
|
/* Clear old exported DHCP options */
|
||||||
if (priv->dhcp6_config)
|
if (priv->dhcp6_config)
|
||||||
g_object_unref (priv->dhcp6_config);
|
g_object_unref (priv->dhcp6_config);
|
||||||
@@ -3241,7 +3233,7 @@ dhcp6_start (NMDevice *self,
|
|||||||
nm_connection_get_uuid (connection),
|
nm_connection_get_uuid (connection),
|
||||||
nm_connection_get_setting_ip6_config (connection),
|
nm_connection_get_setting_ip6_config (connection),
|
||||||
priv->dhcp_timeout,
|
priv->dhcp_timeout,
|
||||||
anycast,
|
priv->dhcp_anycast_address,
|
||||||
(dhcp_opt == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE);
|
(dhcp_opt == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE);
|
||||||
if (tmp)
|
if (tmp)
|
||||||
g_byte_array_free (tmp, TRUE);
|
g_byte_array_free (tmp, TRUE);
|
||||||
|
@@ -296,7 +296,7 @@ start_monitor (NMDHCPClient *self)
|
|||||||
gboolean
|
gboolean
|
||||||
nm_dhcp_client_start_ip4 (NMDHCPClient *self,
|
nm_dhcp_client_start_ip4 (NMDHCPClient *self,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
NMDHCPClientPrivate *priv;
|
NMDHCPClientPrivate *priv;
|
||||||
@@ -450,7 +450,7 @@ get_duid (NMDHCPClient *self)
|
|||||||
gboolean
|
gboolean
|
||||||
nm_dhcp_client_start_ip6 (NMDHCPClient *self,
|
nm_dhcp_client_start_ip6 (NMDHCPClient *self,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only)
|
gboolean info_only)
|
||||||
{
|
{
|
||||||
|
@@ -79,12 +79,12 @@ typedef struct {
|
|||||||
|
|
||||||
GPid (*ip4_start) (NMDHCPClient *self,
|
GPid (*ip4_start) (NMDHCPClient *self,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint8 *anycast_addr,
|
GByteArray *anycast_addr,
|
||||||
const char *hostname);
|
const char *hostname);
|
||||||
|
|
||||||
GPid (*ip6_start) (NMDHCPClient *self,
|
GPid (*ip6_start) (NMDHCPClient *self,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *anycast_addr,
|
GByteArray *anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only,
|
gboolean info_only,
|
||||||
const GByteArray *duid);
|
const GByteArray *duid);
|
||||||
@@ -122,12 +122,12 @@ const char *nm_dhcp_client_get_uuid (NMDHCPClient *self);
|
|||||||
|
|
||||||
gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
|
gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname);
|
const char *hostname);
|
||||||
|
|
||||||
gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
|
gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only);
|
gboolean info_only);
|
||||||
|
|
||||||
|
@@ -131,7 +131,7 @@ nm_dhcp_dhclient_create_config (const char *interface,
|
|||||||
gboolean is_ip6,
|
gboolean is_ip6,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *anycast_addr,
|
GByteArray *anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
const char *orig_path,
|
const char *orig_path,
|
||||||
const char *orig_contents)
|
const char *orig_contents)
|
||||||
@@ -250,17 +250,22 @@ nm_dhcp_dhclient_create_config (const char *interface,
|
|||||||
|
|
||||||
g_string_append_c (new_contents, '\n');
|
g_string_append_c (new_contents, '\n');
|
||||||
|
|
||||||
if (anycast_addr) {
|
if (anycast_addr && anycast_addr->len == 6) {
|
||||||
|
const guint8 *p_anycast_addr = anycast_addr->data;
|
||||||
|
|
||||||
g_string_append_printf (new_contents, "interface \"%s\" {\n"
|
g_string_append_printf (new_contents, "interface \"%s\" {\n"
|
||||||
" initial-interval 1; \n"
|
" initial-interval 1; \n"
|
||||||
" anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
|
" anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
|
||||||
"}\n",
|
"}\n",
|
||||||
interface,
|
interface,
|
||||||
anycast_addr[0], anycast_addr[1],
|
p_anycast_addr[0], p_anycast_addr[1],
|
||||||
anycast_addr[2], anycast_addr[3],
|
p_anycast_addr[2], p_anycast_addr[3],
|
||||||
anycast_addr[4], anycast_addr[5]);
|
p_anycast_addr[4], p_anycast_addr[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Finally, assert that anycast_addr was unset or a 48 bit mac address. */
|
||||||
|
g_return_val_if_fail (!anycast_addr || anycast_addr->len == 6, g_string_free (new_contents, FALSE));
|
||||||
|
|
||||||
return g_string_free (new_contents, FALSE);
|
return g_string_free (new_contents, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ char *nm_dhcp_dhclient_create_config (const char *interface,
|
|||||||
gboolean is_ip6,
|
gboolean is_ip6,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *anycast_addr,
|
GByteArray *anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
const char *orig_path,
|
const char *orig_path,
|
||||||
const char *orig_contents);
|
const char *orig_contents);
|
||||||
|
@@ -167,7 +167,7 @@ merge_dhclient_config (const char *iface,
|
|||||||
gboolean is_ip6,
|
gboolean is_ip6,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *anycast_addr,
|
GByteArray *anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
const char *orig_path,
|
const char *orig_path,
|
||||||
GError **error)
|
GError **error)
|
||||||
@@ -274,7 +274,7 @@ create_dhclient_config (const char *iface,
|
|||||||
const char *uuid,
|
const char *uuid,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
char *orig = NULL, *new = NULL;
|
char *orig = NULL, *new = NULL;
|
||||||
@@ -476,7 +476,7 @@ dhclient_start (NMDHCPClient *client,
|
|||||||
static GPid
|
static GPid
|
||||||
ip4_start (NMDHCPClient *client,
|
ip4_start (NMDHCPClient *client,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
|
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
|
||||||
@@ -497,7 +497,7 @@ ip4_start (NMDHCPClient *client,
|
|||||||
static GPid
|
static GPid
|
||||||
ip6_start (NMDHCPClient *client,
|
ip6_start (NMDHCPClient *client,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only,
|
gboolean info_only,
|
||||||
const GByteArray *duid)
|
const GByteArray *duid)
|
||||||
|
@@ -89,7 +89,7 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
|
|||||||
static GPid
|
static GPid
|
||||||
ip4_start (NMDHCPClient *client,
|
ip4_start (NMDHCPClient *client,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname)
|
const char *hostname)
|
||||||
{
|
{
|
||||||
NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
|
NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
|
||||||
@@ -168,7 +168,7 @@ ip4_start (NMDHCPClient *client,
|
|||||||
static GPid
|
static GPid
|
||||||
ip6_start (NMDHCPClient *client,
|
ip6_start (NMDHCPClient *client,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only,
|
gboolean info_only,
|
||||||
const GByteArray *duid)
|
const GByteArray *duid)
|
||||||
|
@@ -456,7 +456,7 @@ client_start (NMDHCPManager *self,
|
|||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint32 timeout,
|
guint32 timeout,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
const char *hostname,
|
const char *hostname,
|
||||||
gboolean info_only)
|
gboolean info_only)
|
||||||
{
|
{
|
||||||
@@ -514,7 +514,7 @@ nm_dhcp_manager_start_ip4 (NMDHCPManager *self,
|
|||||||
const char *uuid,
|
const char *uuid,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint32 timeout,
|
guint32 timeout,
|
||||||
guint8 *dhcp_anycast_addr)
|
GByteArray *dhcp_anycast_addr)
|
||||||
{
|
{
|
||||||
NMDHCPManagerPrivate *priv;
|
NMDHCPManagerPrivate *priv;
|
||||||
const char *hostname, *method;
|
const char *hostname, *method;
|
||||||
@@ -558,7 +558,7 @@ nm_dhcp_manager_start_ip6 (NMDHCPManager *self,
|
|||||||
const char *uuid,
|
const char *uuid,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint32 timeout,
|
guint32 timeout,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
gboolean info_only)
|
gboolean info_only)
|
||||||
{
|
{
|
||||||
NMDHCPManagerPrivate *priv;
|
NMDHCPManagerPrivate *priv;
|
||||||
|
@@ -71,7 +71,7 @@ NMDHCPClient * nm_dhcp_manager_start_ip4 (NMDHCPManager *manager,
|
|||||||
const char *uuid,
|
const char *uuid,
|
||||||
NMSettingIP4Config *s_ip4,
|
NMSettingIP4Config *s_ip4,
|
||||||
guint32 timeout,
|
guint32 timeout,
|
||||||
guint8 *dhcp_anycast_addr);
|
GByteArray *dhcp_anycast_addr);
|
||||||
|
|
||||||
NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
|
NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
|
||||||
const char *iface,
|
const char *iface,
|
||||||
@@ -79,7 +79,7 @@ NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
|
|||||||
const char *uuid,
|
const char *uuid,
|
||||||
NMSettingIP6Config *s_ip6,
|
NMSettingIP6Config *s_ip6,
|
||||||
guint32 timeout,
|
guint32 timeout,
|
||||||
guint8 *dhcp_anycast_addr,
|
GByteArray *dhcp_anycast_addr,
|
||||||
gboolean info_only);
|
gboolean info_only);
|
||||||
|
|
||||||
GSList * nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
|
GSList * nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
|
||||||
|
@@ -34,7 +34,7 @@ test_config (const char *orig,
|
|||||||
const char *hostname,
|
const char *hostname,
|
||||||
const char *dhcp_client_id,
|
const char *dhcp_client_id,
|
||||||
const char *iface,
|
const char *iface,
|
||||||
guint8 *anycast_addr)
|
GByteArray *anycast_addr)
|
||||||
{
|
{
|
||||||
NMSettingIP4Config *s_ip4;
|
NMSettingIP4Config *s_ip4;
|
||||||
char *new;
|
char *new;
|
||||||
|
Reference in New Issue
Block a user