Skip to content

Commit

Permalink
Merge pull request #181 from mtomaschewski/ifcfg
Browse files Browse the repository at this point in the history
  • Loading branch information
mtomaschewski committed Feb 27, 2014
2 parents ac9b735 + a918dad commit b06a1a7
Show file tree
Hide file tree
Showing 26 changed files with 436 additions and 346 deletions.
26 changes: 13 additions & 13 deletions client/compat.c
Expand Up @@ -1021,6 +1021,7 @@ static xml_node_t *
__ni_compat_generate_dynamic_addrconf(xml_node_t *ifnode, const char *name, ni_bool_t required, unsigned int update)
{
xml_node_t *aconf;
char *temp = NULL;

aconf = xml_node_new(name, ifnode);
xml_node_new_element("enabled", aconf, "true");
Expand All @@ -1031,17 +1032,22 @@ __ni_compat_generate_dynamic_addrconf(xml_node_t *ifnode, const char *name, ni_b
#endif

if (update) {
xml_node_t *child = xml_node_new("update", aconf);
ni_string_array_t names = NI_STRING_ARRAY_INIT;
const char *name;
unsigned int i;

for (i = 0; update != 0; ++i, update >>= 1) {
if (update & 1) {
const char *key = ni_addrconf_update_target_to_name(i);

if (key)
xml_node_new(key, child);
name = ni_addrconf_update_flag_to_name(i);
if (name)
ni_string_array_append(&names, name);
}
}
if (names.count && ni_string_join(&temp, &names, ",")) {
xml_node_new_element("update", aconf, temp);
ni_string_free(&temp);
}
ni_string_array_destroy(&names);
}

return aconf;
Expand All @@ -1055,7 +1061,8 @@ __ni_compat_generate_dhcp4_addrconf(xml_node_t *ifnode, const ni_compat_netdev_t
if (!compat->dhcp4.enabled)
return NULL;

dhcp = __ni_compat_generate_dynamic_addrconf(ifnode, "ipv4:dhcp", compat->dhcp4.required, compat->dhcp4.update);
dhcp = __ni_compat_generate_dynamic_addrconf(ifnode, "ipv4:dhcp",
compat->dhcp4.required, compat->dhcp4.update);

if (compat->dhcp4.hostname)
xml_node_dict_set(dhcp, "hostname", compat->dhcp4.hostname);
Expand All @@ -1073,13 +1080,6 @@ __ni_compat_generate_dhcp4_addrconf(xml_node_t *ifnode, const ni_compat_netdev_t
if (compat->dhcp4.vendor_class)
xml_node_dict_set(dhcp, "vendor-class", compat->dhcp4.vendor_class);

/* Ignored for now:
DHCLIENT_USE_LAST_LEASE
DHCLIENT_MODIFY_SMB_CONF
DHCLIENT_SET_HOSTNAME
DHCLIENT_SET_DEFAULT_ROUTE
*/

return dhcp;
}

Expand Down
126 changes: 95 additions & 31 deletions client/suse/compat-suse.c
Expand Up @@ -49,8 +49,10 @@

#include <wicked/objectmodel.h>
#include <wicked/dbus.h>
#include "appconfig.h"
#include "util_priv.h"
#include "client/wicked-client.h"
#include "duid.h"

typedef ni_bool_t (*try_function_t)(const ni_sysconfig_t *, ni_netdev_t *, const char *);

Expand Down Expand Up @@ -136,6 +138,9 @@ static int
__ni_suse_valid_ifname(const char *ifname)
{
size_t i, len = ni_string_len(ifname);
const char *black_list[] = {
"all", "default", NULL
}, **ptr;

if (!len || len >= IFNAMSIZ)
return FALSE;
Expand All @@ -151,6 +156,12 @@ __ni_suse_valid_ifname(const char *ifname)
continue;
return FALSE;
}

for (ptr = black_list; *ptr; ptr++) {
if (ni_string_eq(*ptr, ifname))
return FALSE;
}

return TRUE;
}

Expand Down Expand Up @@ -2626,12 +2637,13 @@ __ni_suse_addrconf_dhcp4_options(const ni_sysconfig_t *sc, ni_compat_netdev_t *c
{
const char *string;
unsigned int uint;
ni_bool_t ret;
ni_bool_t ret = TRUE;

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_HOSTNAME_OPTION")) != NULL) {
if (!strcasecmp(string, "AUTO")) {
ni_string_dup(&compat->dhcp4.hostname, __ni_suse_default_hostname);
} else if (ni_check_domain_name(string, ni_string_len(string), 0)) {
} else
if (ni_check_domain_name(string, ni_string_len(string), 0)) {
ni_string_dup(&compat->dhcp4.hostname, string);
} else {
ni_warn("%s: Cannot parse DHCLIENT_HOSTNAME_OPTION='%s'",
Expand All @@ -2642,21 +2654,54 @@ __ni_suse_addrconf_dhcp4_options(const ni_sysconfig_t *sc, ni_compat_netdev_t *c

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_CLIENT_ID")) != NULL)
ni_string_dup(&compat->dhcp4.client_id, string);

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_VENDOR_CLASS_ID")) != NULL)
ni_string_dup(&compat->dhcp4.vendor_class, string);

if (ni_sysconfig_get_integer(sc, "DHCLIENT_WAIT_AT_BOOT", &uint))
compat->dhcp4.acquire_timeout = uint? uint : NI_IFWORKER_INFINITE_TIMEOUT;
if (ni_sysconfig_get_integer(sc, "DHCLIENT_SLEEP", &uint))
compat->dhcp4.start_delay = uint;

if (ni_sysconfig_get_integer(sc, "DHCLIENT_TIMEOUT", &uint))
compat->dhcp4.acquire_timeout = uint;

if (ni_sysconfig_get_integer(sc, "DHCLIENT_LEASE_TIME", &uint))
compat->dhcp4.lease_time = ((int) uint >= 0)? uint : NI_IFWORKER_INFINITE_TIMEOUT;

/* Ignored for now:
DHCLIENT_USE_LAST_LEASE
WRITE_HOSTNAME_TO_HOSTS
DHCLIENT_MODIFY_SMB_CONF
DHCLIENT_SET_HOSTNAME
DHCLIENT_SET_DEFAULT_ROUTE
*/
string = ni_sysconfig_get_value(sc, "DHCLIENT_USE_LAST_LEASE");
compat->dhcp4.recover_lease = !ni_string_eq(string, "no");
string = ni_sysconfig_get_value(sc, "DHCLIENT_RELEASE_BEFORE_QUIT");
compat->dhcp4.release_lease = !ni_string_eq(string, "no");

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_SET_HOSTNAME"))) {
if (ni_string_eq(string, "yes")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_HOSTNAME, TRUE);
} else
if (ni_string_eq(string, "no")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_HOSTNAME, FALSE);
}
}
if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_SET_DEFAULT_ROUTE"))) {
if (ni_string_eq(string, "yes")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_DEFAULT_ROUTE, TRUE);
} else
if (ni_string_eq(string, "no")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_DEFAULT_ROUTE, FALSE);
}
}
if ((string = ni_sysconfig_get_value(sc, "DHCLIENT_MODIFY_SMB_CONF"))) {
if (ni_string_eq(string, "yes")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_SMB, TRUE);
} else
if (ni_string_eq(string, "no")) {
ni_addrconf_update_set(&compat->dhcp4.update,
NI_ADDRCONF_UPDATE_SMB, FALSE);
}
}

return ret;
}
Expand All @@ -2668,6 +2713,7 @@ static ni_bool_t
__ni_suse_addrconf_dhcp6_options(const ni_sysconfig_t *sc, ni_compat_netdev_t *compat)
{
ni_bool_t ret = TRUE;
unsigned int uint;
const char *string;

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT6_MODE")) != NULL) {
Expand Down Expand Up @@ -2705,35 +2751,42 @@ __ni_suse_addrconf_dhcp6_options(const ni_sysconfig_t *sc, ni_compat_netdev_t *c

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT6_CLIENT_ID")) != NULL) {
ni_opaque_t duid;
int len;
/* Hmm... consider to move duid.[ch] to src ...
* type (2) + hwtype (2) + hwaddr (6) => 10 for duid type 3 (LL)
* type (2) + uuid (128) => 130 for duid type 4 (UUID)
*/
len = ni_parse_hex(string, duid.data, sizeof(duid.data));
if (len >= 10 && len <= 130) {
if (ni_duid_parse_hex(&duid, string)) {
ni_string_dup(&compat->dhcp6.client_id, string);
} else {
ni_warn("%s: Cannot parse DHCLIENT6_CLIENT_ID='%s' as DUID in hex",
ni_warn("%s: Cannot parse DHCLIENT6_CLIENT_ID='%s' as DUID",
ni_basename(sc->pathname), string);
ret = FALSE;
}
}

#if 0 /* FIXME: Use defaults for now */
if (ni_sysconfig_get_integer(sc, "DHCLIENT_SLEEP", &uint))
compat->dhcp6.start_delay = uint;

if (ni_sysconfig_get_integer(sc, "DHCLIENT6_WAIT_AT_BOOT", &uint))
compat->dhcp4.acquire_timeout = uint? uint : NI_IFWORKER_INFINITE_TIMEOUT;
if (ni_sysconfig_get_integer(sc, "DHCLIENT6_LEASE_TIME", &uint))
compat->dhcp4.lease_time = ((int) uint >= 0)? uint : NI_IFWORKER_INFINITE_TIMEOUT;
if (ni_sysconfig_get_integer(sc, "DHCLIENT_TIMEOUT", &uint))
compat->dhcp6.acquire_timeout = uint;

if (ni_sysconfig_get_integer(sc, "DHCLIENT_LEASE_TIME", &uint))
compat->dhcp6.lease_time = ((int) uint >= 0)? uint : NI_IFWORKER_INFINITE_TIMEOUT;

/* TODO: Trigger autoip4 after DHCLIENT_WAIT_AT_BOOT when enabled */

string = ni_sysconfig_get_value(sc, "DHCLIENT_USE_LAST_LEASE");
compat->dhcp6.recover_lease = !ni_string_eq(string, "no");
string = ni_sysconfig_get_value(sc, "DHCLIENT_RELEASE_BEFORE_QUIT");
compat->dhcp6.release_lease = !ni_string_eq(string, "no");

if ((string = ni_sysconfig_get_value(sc, "DHCLIENT6_SET_HOSTNAME"))) {
if (ni_string_eq(string, "yes")) {
ni_addrconf_update_set(&compat->dhcp6.update,
NI_ADDRCONF_UPDATE_HOSTNAME, TRUE);
} else
if (ni_string_eq(string, "no")) {
ni_addrconf_update_set(&compat->dhcp6.update,
NI_ADDRCONF_UPDATE_HOSTNAME, FALSE);
}
}

/* Ignored for now:
DHCLIENT_USE_LAST_LEASE
DHCLIENT_MODIFY_SMB_CONF
DHCLIENT_SET_HOSTNAME
DHCLIENT_SET_DEFAULT_ROUTE
*/
#endif
return ret;
}

Expand All @@ -2743,6 +2796,12 @@ __ni_suse_addrconf_dhcp4(const ni_sysconfig_t *sc, ni_compat_netdev_t *compat, n
if (compat->dhcp4.enabled)
return TRUE;

/* init wicked defaults */
compat->dhcp4.update = ni_config_addrconf_update_mask(NI_ADDRCONF_DHCP, AF_INET);
/* apply sysconfig defaults */
ni_addrconf_update_set(&compat->dhcp4.update, NI_ADDRCONF_UPDATE_DEFAULT_ROUTE, TRUE);
ni_addrconf_update_set(&compat->dhcp4.update, NI_ADDRCONF_UPDATE_HOSTNAME, FALSE);

if (__ni_suse_dhcp_defaults)
__ni_suse_addrconf_dhcp4_options(__ni_suse_dhcp_defaults, compat);

Expand All @@ -2760,6 +2819,11 @@ __ni_suse_addrconf_dhcp6(const ni_sysconfig_t *sc, ni_compat_netdev_t *compat, n
if (compat->dhcp6.enabled)
return TRUE;

/* init wicked defaults */
compat->dhcp6.update = ni_config_addrconf_update_mask(NI_ADDRCONF_DHCP, AF_INET6);
/* apply sysconfig defaults */
ni_addrconf_update_set(&compat->dhcp6.update, NI_ADDRCONF_UPDATE_HOSTNAME, FALSE);

if (__ni_suse_dhcp_defaults)
__ni_suse_addrconf_dhcp6_options(__ni_suse_dhcp_defaults, compat);

Expand Down
10 changes: 10 additions & 0 deletions client/wicked-client.h
Expand Up @@ -54,8 +54,12 @@ typedef struct ni_compat_netdev {
char * hostname;
char * client_id;
char * vendor_class;

unsigned int start_delay;
unsigned int acquire_timeout;
unsigned int lease_time;
ni_bool_t recover_lease;
ni_bool_t release_lease;

unsigned int update;
} dhcp4;
Expand All @@ -69,6 +73,12 @@ typedef struct ni_compat_netdev {
char * hostname;
char * client_id;

unsigned int start_delay;
unsigned int acquire_timeout;
unsigned int lease_time;
ni_bool_t recover_lease;
ni_bool_t release_lease;

unsigned int update;
} dhcp6;
} ni_compat_netdev_t;
Expand Down
3 changes: 2 additions & 1 deletion dhcp4/dbus-api.c
Expand Up @@ -23,6 +23,7 @@
#include <wicked/dbus-service.h>
#include <wicked/dbus-errors.h>
#include <wicked/objectmodel.h>
#include "appconfig.h"
#include "dhcp4/dhcp.h"

static ni_dhcp4_request_t * ni_objectmodel_dhcp4_request_from_dict(const ni_dbus_variant_t *);
Expand Down Expand Up @@ -259,7 +260,7 @@ ni_dhcp4_request_new(void)
req->enabled = TRUE; /* used by wickedd */

/* By default, we try to obtain all sorts of config from the server */
req->update = ~0;
req->update = ni_config_addrconf_update_mask(NI_ADDRCONF_DHCP, AF_INET);

return req;
}
Expand Down
8 changes: 4 additions & 4 deletions dhcp4/device.c
Expand Up @@ -357,11 +357,11 @@ static unsigned int
ni_dhcp4_do_bits(unsigned int update_flags)
{
static unsigned int do_mask[32] = {
[NI_ADDRCONF_UPDATE_DEFAULT_ROUTE] = DHCP4_DO_GATEWAY,
[NI_ADDRCONF_UPDATE_HOSTNAME] = DHCP4_DO_HOSTNAME,
[NI_ADDRCONF_UPDATE_RESOLVER] = DHCP4_DO_RESOLVER,
[NI_ADDRCONF_UPDATE_DNS] = DHCP4_DO_DNS,
[NI_ADDRCONF_UPDATE_NIS] = DHCP4_DO_NIS,
[NI_ADDRCONF_UPDATE_NTP] = DHCP4_DO_NTP,
[NI_ADDRCONF_UPDATE_DEFAULT_ROUTE] = DHCP4_DO_GATEWAY,
};
unsigned int bit, result = 0;

Expand All @@ -379,11 +379,11 @@ __ni_dhcp4_print_flags(unsigned int flags)
{ "arp", DHCP4_DO_ARP },
{ "csr", DHCP4_DO_CSR },
{ "mscsr", DHCP4_DO_MSCSR },
{ "gateway", DHCP4_DO_GATEWAY },
{ "hostname", DHCP4_DO_HOSTNAME },
{ "resolver", DHCP4_DO_RESOLVER },
{ "dns", DHCP4_DO_DNS },
{ "nis", DHCP4_DO_NIS },
{ "ntp", DHCP4_DO_NTP },
{ "gateway", DHCP4_DO_GATEWAY },
{ NULL }
};
static char buffer[1024];
Expand Down
4 changes: 2 additions & 2 deletions dhcp4/dhcp.h
Expand Up @@ -91,7 +91,7 @@ typedef struct ni_dhcp4_device {
enum {
DHCP4_DO_ARP = 0x00000001, /* TODO: -> wickedd */
DHCP4_DO_HOSTNAME = 0x00000002,
DHCP4_DO_RESOLVER = 0x00000004,
DHCP4_DO_DNS = 0x00000004,
DHCP4_DO_NIS = 0x00000008,
DHCP4_DO_NTP = 0x00000010,
DHCP4_DO_CSR = 0x00000020,
Expand All @@ -104,7 +104,7 @@ enum {
DHCP4_DO_LPR = 0x00001000,
DHCP4_DO_LOG = 0x00002000,
DHCP4_DO_POSIX_TZ = 0x00004000,
DHCP4_DO_DEFAULT = DHCP4_DO_ARP|DHCP4_DO_HOSTNAME|DHCP4_DO_RESOLVER|
DHCP4_DO_DEFAULT = DHCP4_DO_ARP|DHCP4_DO_HOSTNAME|DHCP4_DO_DNS|
DHCP4_DO_NIS|DHCP4_DO_NTP|DHCP4_DO_CSR|
DHCP4_DO_GATEWAY|DHCP4_DO_ROOT|
DHCP4_DO_NDS|DHCP4_DO_SMB|DHCP4_DO_SIP|
Expand Down
2 changes: 1 addition & 1 deletion dhcp4/protocol.c
Expand Up @@ -450,7 +450,7 @@ ni_dhcp4_build_message(const ni_dhcp4_device_t *dev,
else
ni_buffer_putc(msgbuf, DHCP4_FQDN);
}
if (options->flags & DHCP4_DO_RESOLVER) {
if (options->flags & DHCP4_DO_DNS) {
ni_buffer_putc(msgbuf, DHCP4_DNSSEARCH);
ni_buffer_putc(msgbuf, DHCP4_DNSDOMAIN);
ni_buffer_putc(msgbuf, DHCP4_DNSSERVER);
Expand Down
4 changes: 2 additions & 2 deletions dhcp6/dbus-api.c
Expand Up @@ -34,7 +34,7 @@
#include <wicked/objectmodel.h>
#include <wicked/dbus-service.h>
#include <wicked/dbus-errors.h>

#include "appconfig.h"
#include "dhcp6/dhcp6.h"
#include "util_priv.h"

Expand Down Expand Up @@ -289,7 +289,7 @@ ni_dhcp6_request_new(void)
req->rapid_commit = TRUE;

/* By default, we try to obtain all sorts of config from the server */
req->update = ~0;
req->update = ni_config_addrconf_update_mask(NI_ADDRCONF_DHCP, AF_INET6);

return req;
}
Expand Down
7 changes: 6 additions & 1 deletion extensions/functions
Expand Up @@ -177,4 +177,9 @@ function netif_exists {
test -d "/sys/class/net/$ifname"
}

wicked_log_call "$0 $@"
##################################################################
#
# To enable extension debug (/var/log/wickedd.log), comment out:
#
#wicked_log_call "$0 $@"
#

0 comments on commit b06a1a7

Please sign in to comment.