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:
Thomas Haller
2014-03-10 16:11:21 +01:00
parent e3eb7605be
commit d14ffbdb9c
10 changed files with 31 additions and 34 deletions

View File

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

View File

@@ -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)
{

View File

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

View File

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

View File

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

View File

@@ -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)

View File

@@ -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)

View File

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

View File

@@ -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,

View File

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