summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-03-10 16:11:21 +0100
committerThomas Haller <thaller@redhat.com>2014-04-11 11:30:57 +0200
commitd14ffbdb9c2713f151d5c4510fe421246da80344 (patch)
tree57b1ddd4e5490bbfece026dad19fe3bcdff16442
parente3eb7605bee05b9158da3456bc2616e9dfef6387 (diff)
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>
-rw-r--r--src/devices/nm-device.c12
-rw-r--r--src/dhcp-manager/nm-dhcp-client.c4
-rw-r--r--src/dhcp-manager/nm-dhcp-client.h8
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.c15
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient-utils.h2
-rw-r--r--src/dhcp-manager/nm-dhcp-dhclient.c8
-rw-r--r--src/dhcp-manager/nm-dhcp-dhcpcd.c4
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.c6
-rw-r--r--src/dhcp-manager/nm-dhcp-manager.h4
-rw-r--r--src/dhcp-manager/tests/test-dhcp-dhclient.c2
10 files changed, 31 insertions, 34 deletions
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index b6e5a20203..545f86c87a 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -2774,14 +2774,10 @@ dhcp4_start (NMDevice *self,
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMSettingIP4Config *s_ip4;
- guint8 *anycast = NULL;
GByteArray *tmp = NULL;
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 */
if (priv->dhcp4_config)
g_object_unref (priv->dhcp4_config);
@@ -2800,7 +2796,7 @@ dhcp4_start (NMDevice *self,
nm_connection_get_uuid (connection),
s_ip4,
priv->dhcp_timeout,
- anycast);
+ priv->dhcp_anycast_address);
if (tmp)
g_byte_array_free (tmp, TRUE);
@@ -3206,7 +3202,6 @@ dhcp6_start (NMDevice *self,
{
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
NMActStageReturn ret = NM_ACT_STAGE_RETURN_FAILURE;
- guint8 *anycast = NULL;
GByteArray *tmp = NULL;
if (!connection) {
@@ -3216,9 +3211,6 @@ dhcp6_start (NMDevice *self,
/* Begin a DHCP transaction on the interface */
- if (priv->dhcp_anycast_address)
- anycast = priv->dhcp_anycast_address->data;
-
/* Clear old exported DHCP options */
if (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_setting_ip6_config (connection),
priv->dhcp_timeout,
- anycast,
+ priv->dhcp_anycast_address,
(dhcp_opt == NM_RDISC_DHCP_LEVEL_OTHERCONF) ? TRUE : FALSE);
if (tmp)
g_byte_array_free (tmp, TRUE);
diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c
index 3a056d3726..a765f125bb 100644
--- a/src/dhcp-manager/nm-dhcp-client.c
+++ b/src/dhcp-manager/nm-dhcp-client.c
@@ -296,7 +296,7 @@ start_monitor (NMDHCPClient *self)
gboolean
nm_dhcp_client_start_ip4 (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPClientPrivate *priv;
@@ -450,7 +450,7 @@ get_duid (NMDHCPClient *self)
gboolean
nm_dhcp_client_start_ip6 (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only)
{
diff --git a/src/dhcp-manager/nm-dhcp-client.h b/src/dhcp-manager/nm-dhcp-client.h
index 5cc1e39026..4daef103e9 100644
--- a/src/dhcp-manager/nm-dhcp-client.h
+++ b/src/dhcp-manager/nm-dhcp-client.h
@@ -79,12 +79,12 @@ typedef struct {
GPid (*ip4_start) (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname);
GPid (*ip6_start) (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid);
@@ -122,12 +122,12 @@ const char *nm_dhcp_client_get_uuid (NMDHCPClient *self);
gboolean nm_dhcp_client_start_ip4 (NMDHCPClient *self,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname);
gboolean nm_dhcp_client_start_ip6 (NMDHCPClient *self,
NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only);
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
index fad3a7a8bb..d95eeaeb62 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c
@@ -131,7 +131,7 @@ nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
NMSettingIP4Config *s_ip4,
NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
const char *orig_contents)
@@ -250,17 +250,22 @@ nm_dhcp_dhclient_create_config (const char *interface,
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"
" initial-interval 1; \n"
" anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n"
"}\n",
interface,
- anycast_addr[0], anycast_addr[1],
- anycast_addr[2], anycast_addr[3],
- anycast_addr[4], anycast_addr[5]);
+ p_anycast_addr[0], p_anycast_addr[1],
+ p_anycast_addr[2], p_anycast_addr[3],
+ 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);
}
diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.h b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
index d2caaa475b..a405d65b2d 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient-utils.h
+++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.h
@@ -29,7 +29,7 @@ char *nm_dhcp_dhclient_create_config (const char *interface,
gboolean is_ip6,
NMSettingIP4Config *s_ip4,
NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
const char *orig_contents);
diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c
index d3677406c8..06ebe8a064 100644
--- a/src/dhcp-manager/nm-dhcp-dhclient.c
+++ b/src/dhcp-manager/nm-dhcp-dhclient.c
@@ -167,7 +167,7 @@ merge_dhclient_config (const char *iface,
gboolean is_ip6,
NMSettingIP4Config *s_ip4,
NMSettingIP6Config *s_ip6,
- guint8 *anycast_addr,
+ GByteArray *anycast_addr,
const char *hostname,
const char *orig_path,
GError **error)
@@ -274,7 +274,7 @@ create_dhclient_config (const char *iface,
const char *uuid,
NMSettingIP4Config *s_ip4,
NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
char *orig = NULL, *new = NULL;
@@ -476,7 +476,7 @@ dhclient_start (NMDHCPClient *client,
static GPid
ip4_start (NMDHCPClient *client,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client);
@@ -497,7 +497,7 @@ ip4_start (NMDHCPClient *client,
static GPid
ip6_start (NMDHCPClient *client,
NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid)
diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c
index a62e315f74..1ab32308c4 100644
--- a/src/dhcp-manager/nm-dhcp-dhcpcd.c
+++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c
@@ -89,7 +89,7 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED)
static GPid
ip4_start (NMDHCPClient *client,
NMSettingIP4Config *s_ip4,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname)
{
NMDHCPDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client);
@@ -168,7 +168,7 @@ ip4_start (NMDHCPClient *client,
static GPid
ip6_start (NMDHCPClient *client,
NMSettingIP6Config *s_ip6,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only,
const GByteArray *duid)
diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c
index 3ac220d6a4..932eaad546 100644
--- a/src/dhcp-manager/nm-dhcp-manager.c
+++ b/src/dhcp-manager/nm-dhcp-manager.c
@@ -456,7 +456,7 @@ client_start (NMDHCPManager *self,
NMSettingIP4Config *s_ip4,
NMSettingIP6Config *s_ip6,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
const char *hostname,
gboolean info_only)
{
@@ -514,7 +514,7 @@ nm_dhcp_manager_start_ip4 (NMDHCPManager *self,
const char *uuid,
NMSettingIP4Config *s_ip4,
guint32 timeout,
- guint8 *dhcp_anycast_addr)
+ GByteArray *dhcp_anycast_addr)
{
NMDHCPManagerPrivate *priv;
const char *hostname, *method;
@@ -558,7 +558,7 @@ nm_dhcp_manager_start_ip6 (NMDHCPManager *self,
const char *uuid,
NMSettingIP6Config *s_ip6,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
gboolean info_only)
{
NMDHCPManagerPrivate *priv;
diff --git a/src/dhcp-manager/nm-dhcp-manager.h b/src/dhcp-manager/nm-dhcp-manager.h
index 8a33df8a50..7ab9019d61 100644
--- a/src/dhcp-manager/nm-dhcp-manager.h
+++ b/src/dhcp-manager/nm-dhcp-manager.h
@@ -71,7 +71,7 @@ NMDHCPClient * nm_dhcp_manager_start_ip4 (NMDHCPManager *manager,
const char *uuid,
NMSettingIP4Config *s_ip4,
guint32 timeout,
- guint8 *dhcp_anycast_addr);
+ GByteArray *dhcp_anycast_addr);
NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
const char *iface,
@@ -79,7 +79,7 @@ NMDHCPClient * nm_dhcp_manager_start_ip6 (NMDHCPManager *manager,
const char *uuid,
NMSettingIP6Config *s_ip6,
guint32 timeout,
- guint8 *dhcp_anycast_addr,
+ GByteArray *dhcp_anycast_addr,
gboolean info_only);
GSList * nm_dhcp_manager_get_lease_ip_configs (NMDHCPManager *self,
diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c
index a0ede1ced9..a912d0022e 100644
--- a/src/dhcp-manager/tests/test-dhcp-dhclient.c
+++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c
@@ -34,7 +34,7 @@ test_config (const char *orig,
const char *hostname,
const char *dhcp_client_id,
const char *iface,
- guint8 *anycast_addr)
+ GByteArray *anycast_addr)
{
NMSettingIP4Config *s_ip4;
char *new;