Skip to content

Commit

Permalink
client: Refactory client-state and client-info
Browse files Browse the repository at this point in the history
- Merge client-state with client-info and provide separate
calls for each separate subnode.
- Handle config related items under meta object.
- Disable stats by default with compilation flag
- Handle persistent under control
  • Loading branch information
wipawel committed Jul 28, 2014
1 parent 047edcf commit 3da98cf
Show file tree
Hide file tree
Showing 30 changed files with 1,149 additions and 733 deletions.
57 changes: 29 additions & 28 deletions client/compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,15 @@ ni_compat_netdev_free(ni_compat_netdev_t *compat)
}

void
ni_compat_netdev_client_info_set(ni_netdev_t *dev, const char *filename)
ni_compat_netdev_client_state_set(ni_netdev_t *dev, const char *filename)
{
if (dev) {
ni_netdev_set_client_info(dev,
ni_ifconfig_generate_client_info("compat", filename, NULL));
}
ni_client_state_t *cs;

if (!dev)
return;

cs = ni_netdev_get_client_state(dev);
ni_ifconfig_metadata_generate(&cs->config, "compat", filename);
}

/*
Expand Down Expand Up @@ -1256,7 +1259,7 @@ __ni_compat_generate_ipv6_devconf(xml_node_t *ifnode, const ni_ipv6_devinfo_t *i
static ni_bool_t
__ni_compat_generate_ifcfg(xml_node_t *ifnode, const ni_compat_netdev_t *compat)
{
const ni_netdev_t *dev = compat->dev;
ni_netdev_t *dev = compat->dev;
xml_node_t *linknode;

if (compat->control) {
Expand All @@ -1269,11 +1272,14 @@ __ni_compat_generate_ifcfg(xml_node_t *ifnode, const ni_compat_netdev_t *compat)
if (control->boot_stage)
xml_node_new_element("boot-stage", child, control->boot_stage);

if (control->persistent)
(void) xml_node_new("persistent", child);
else
if (control->usercontrol)
(void) xml_node_new("usercontrol", child);
if (control->persistent) {
xml_node_new_element(NI_CLIENT_STATE_XML_PERSISTENT_NODE, child,
ni_format_boolean(control->persistent));
}
if (control->usercontrol) {
xml_node_new_element(NI_CLIENT_STATE_XML_USERCONTROL_NODE, child,
ni_format_boolean(control->usercontrol));
}

if (control->link_timeout || control->link_priority || control->link_required) {
linkdet = xml_node_create(child, "link-detection");
Expand All @@ -1283,13 +1289,6 @@ __ni_compat_generate_ifcfg(xml_node_t *ifnode, const ni_compat_netdev_t *compat)
if (control->link_required)
(void) xml_node_new("require-link", linkdet);
}

/* <client-state> node generation based on STARTMODE value parsed in control */
if (control->persistent) {
child = xml_node_create(ifnode, NI_CLIENT_STATE_XML_STATE_NODE);
xml_node_new_element(NI_CLIENT_STATE_XML_PERSISTENT_NODE, child,
ni_format_boolean(control->persistent));
}
}

switch (dev->link.type) {
Expand Down Expand Up @@ -1386,22 +1385,24 @@ ni_compat_generate_interfaces(xml_document_array_t *array, ni_compat_ifconfig_t

for (i = 0; i < ifcfg->netdevs.count; ++i) {
ni_compat_netdev_t *compat = ifcfg->netdevs.data[i];
ni_device_clientinfo_t *client_info = compat->dev->client_info;
ni_client_state_t *cs = ni_netdev_get_client_state(compat->dev);
ni_client_state_config_t *conf = &cs->config;

config_doc = xml_document_new();
ni_compat_generate_ifcfg(compat, config_doc);

if (client_info) {
const char *origin = client_info->config_origin;
if (!ni_string_empty(origin)) {
xml_location_set(config_doc->root, xml_location_create(origin, 0));
if (conf) {
xml_node_t *root = xml_document_root(config_doc);

if (!ni_string_empty(conf->origin)) {
xml_location_set(root, xml_location_create(conf->origin, 0));
ni_debug_ifconfig("%s: location: %s, line: %u", __func__,
xml_node_get_location_filename(config_doc->root),
xml_node_get_location_line(config_doc->root));
}
if (!raw) {
ni_ifconfig_add_client_info(config_doc, client_info, NULL);
xml_node_get_location_filename(root),
xml_node_get_location_line(root));
}

if (!raw)
ni_ifconfig_metadata_add_to_node(root, conf);
}

if (ni_ifconfig_validate_adding_doc(config_doc, check_prio))
Expand Down
50 changes: 13 additions & 37 deletions client/ifcheck.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ static ni_bool_t opt_quiet;
ni_bool_t
ni_ifcheck_device_configured(ni_netdev_t *dev)
{
ni_device_clientinfo_t *ci;
ni_client_state_t *cs;

if (!dev || !(ci = dev->client_info) || ni_string_empty(ci->config_origin))
if (!dev || !(cs = dev->client_state) || ni_string_empty(cs->config.origin))
return FALSE;
return TRUE;
}
Expand All @@ -75,36 +75,11 @@ ni_ifcheck_device_network_is_up(ni_netdev_t *dev)
return dev && !!(dev->link.ifflags & NI_IFF_NETWORK_UP);
}

unsigned int
__ifcheck_device_fsm_state(ni_netdev_t *dev)
{
ni_device_clientinfo_t *ci;

if (dev && (ci = dev->client_info)) {
ni_fsm_state_t state;

if (ni_ifworker_state_from_name(ci->state, &state))
return state;
}
return NI_FSM_STATE_NONE;
}

ni_bool_t
ni_ifcheck_device_fsm_is_up(ni_netdev_t *dev)
{
return __ifcheck_device_fsm_state(dev) >= NI_FSM_STATE_DEVICE_UP;
}

ni_bool_t
ni_ifcheck_device_fsm_link_is_up(ni_netdev_t *dev)
{
return __ifcheck_device_fsm_state(dev) >= NI_FSM_STATE_LINK_UP;
}

ni_bool_t
ni_ifcheck_device_is_persistent(ni_netdev_t *dev)
{
return dev && dev->client_state && dev->client_state->persistent;
ni_client_state_t *cs = dev ? dev->client_state : NULL;
return cs && cs->control.persistent;
}

ni_bool_t
Expand Down Expand Up @@ -148,10 +123,11 @@ ni_ifcheck_worker_config_matches(ni_ifworker_t *w)
{
ni_netdev_t *dev;

if (w && !xml_node_is_empty(w->config.node) && (dev = w->device)) {
ni_device_clientinfo_t *ci = dev->client_info;
if (ni_ifcheck_worker_config_exists(w) && (dev = w->device)) {
ni_client_state_t *cs = dev->client_state;

return ci && ni_uuid_equal(&ci->config_uuid, &w->config.uuid);
return cs &&
ni_uuid_equal(&cs->config.uuid, &w->config.meta.uuid);
}
return FALSE;
}
Expand All @@ -162,7 +138,8 @@ ni_ifcheck_worker_not_in_state(ni_ifworker_t *w, ni_fsm_state_t state_val)
ni_fsm_state_t state_dev;

ni_assert(w);
state_dev = __ifcheck_device_fsm_state(w->device);
/* FIXME: add state mapping */
state_dev = NI_FSM_STATE_NONE;

if (state_val < NI_FSM_STATE_DEVICE_EXISTS && state_dev > state_val)
return TRUE;
Expand Down Expand Up @@ -357,8 +334,7 @@ ni_do_ifcheck(int argc, char **argv)
for (i = 0; i < marked.count; ++i) {
ni_ifworker_t *w = marked.data[i];
ni_netdev_t *dev = w->device;
ni_device_clientinfo_t *client_info =
dev ? dev->client_info : NULL;
ni_client_state_t *cs = dev ? dev->client_state : NULL;
unsigned int j;

if (ni_string_array_index(&ifnames, w->name) != -1)
Expand Down Expand Up @@ -389,9 +365,9 @@ ni_do_ifcheck(int argc, char **argv)
(changed ? "yes" : "no"));
if (changed) {
ni_debug_wicked("%s: config file uuid is %s", w->name,
ni_uuid_print(&w->config.uuid));
ni_uuid_print(&w->config.meta.uuid));
ni_debug_wicked("%s: system dev. uuid is %s", w->name,
client_info? ni_uuid_print(&client_info->config_uuid) : "NOT SET");
cs ? ni_uuid_print(&cs->config.uuid) : "NOT SET");
set_status(&status, NI_WICKED_ST_CHANGED_CONFIG);
}
break;
Expand Down
2 changes: 0 additions & 2 deletions client/ifcheck.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ extern int ni_do_ifcheck(int argc, char **argv);
extern ni_bool_t ni_ifcheck_device_configured(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_is_up(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_link_is_up(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_fsm_is_up(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_fsm_link_is_up(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_network_is_up(ni_netdev_t *);
extern ni_bool_t ni_ifcheck_device_is_persistent(ni_netdev_t *);

Expand Down
38 changes: 23 additions & 15 deletions client/ifstatus.c
Original file line number Diff line number Diff line change
Expand Up @@ -408,16 +408,16 @@ ni_ifstatus_show_routes(const ni_netdev_t *dev, ni_bool_t verbose)
static inline void
ni_ifstatus_show_config(const ni_netdev_t *dev, ni_bool_t verbose)
{
ni_device_clientinfo_t *ci = dev->client_info;
ni_client_state_t *cs = dev->client_state;

/* currently the runtime config only ... */
if (ci && !ni_string_empty(ci->config_origin)) {
if_printf("", "config:", "%s", ci->config_origin);
if (cs && !ni_string_empty(cs->config.origin)) {
if_printf("", "config:", "%s", cs->config.origin);

if (verbose && !ni_uuid_is_null(&ci->config_uuid)) {
if (verbose && !ni_uuid_is_null(&cs->config.uuid)) {
printf(",\n");
if_printf("", " ", "uuid: %s\n",
ni_uuid_print(&ci->config_uuid));
ni_uuid_print(&cs->config.uuid));
} else {
printf("\n");
}
Expand Down Expand Up @@ -465,18 +465,26 @@ ni_ifstatus_show_leases(const ni_netdev_t *dev, ni_bool_t verbose)
}

static inline void
ni_ifstatus_show_cstate(const ni_netdev_t *dev, ni_bool_t verbose)
ni_ifstatus_show_control(const ni_netdev_t *dev, ni_bool_t verbose)
{
ni_device_clientinfo_t *ci = dev->client_info;
ni_client_state_t *cs = dev->client_state;
ni_stringbuf_t buf = NI_STRINGBUF_INIT_DYNAMIC;
ni_client_state_t *cs;

if (ci && !ni_string_empty(ci->state)) {
if_printf("", "cstate:", "%s%s\n", ci->state,
(verbose && cs && cs->persistent) ?
", persistent" : "");
} else if (verbose) {
if_printf("", "cstate:", "none\n");
if (!verbose || !dev || !ni_client_state_is_valid((cs = dev->client_state)))
return;

if (cs->control.persistent)
ni_stringbuf_printf(&buf, "persistent");

if (cs->control.usercontrol) {
ni_stringbuf_printf(&buf, "%susercontrol",
cs->control.persistent ? ", " : "");
}

if (ni_stringbuf_empty(&buf))
ni_stringbuf_printf(&buf, "none");

if_printf("", "control:", "%s\n", buf.string);
}

void
Expand Down Expand Up @@ -668,7 +676,7 @@ ni_do_ifstatus(int argc, char **argv)
/* TODO: Hmm... this is the running config only;
* show current config info too?
*/
ni_ifstatus_show_cstate (dev, opt_verbose > OPT_NORMAL);
ni_ifstatus_show_control (dev, opt_verbose > OPT_NORMAL);
ni_ifstatus_show_config (dev, opt_verbose > OPT_NORMAL);
ni_ifstatus_show_leases (dev, opt_verbose > OPT_NORMAL);

Expand Down
4 changes: 2 additions & 2 deletions client/ifup.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ ni_ifup_start_policy(ni_ifworker_t *w)

policy = ni_convert_cfg_into_policy_node(ifcfg,
__ni_ifup_generate_match(NI_NANNY_IFPOLICY_MATCH, w),
pname, w->config.origin);
pname, w->config.meta.origin);
ni_string_free(&pname);
if (!policy) {
policy = ifcfg; /* Free cloned config*/
Expand Down Expand Up @@ -162,7 +162,7 @@ ni_ifup_start_policy(ni_ifworker_t *w)
ni_debug_application("%s: adding policy %s to nanny", w->name,
xml_node_get_attr(policy, NI_NANNY_IFPOLICY_NAME));

if (ni_nanny_addpolicy_node(policy, w->config.origin) <= 0)
if (ni_nanny_addpolicy_node(policy, w->config.meta.origin) <= 0)
goto error;

ni_debug_application("%s: nanny hired!", w->name);
Expand Down
8 changes: 4 additions & 4 deletions client/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ do_show_xml(int argc, char **argv)
ni_dbus_variant_t result = NI_DBUS_VARIANT_INIT;
DBusError error = DBUS_ERROR_INIT;
const char *ifname = NULL;
int opt_raw = 0;
int opt_raw = FALSE;
#ifdef MODEM
int opt_modems = 0;
#endif
Expand All @@ -581,7 +581,7 @@ do_show_xml(int argc, char **argv)
while ((c = getopt_long(argc, argv, "", local_options, NULL)) != EOF) {
switch (c) {
case OPT_RAW:
opt_raw = 1;
opt_raw = TRUE;
break;

#ifdef MODEM
Expand Down Expand Up @@ -707,7 +707,7 @@ do_show_config(int argc, char **argv, const char *root_schema)
" --help\n"
" Show this help text.\n"
" --raw\n"
" Do not display <client-info> tags\n"
" Do not display <client-state> tags\n"
" --output <path>\n"
" Specify output file\n"
);
Expand Down Expand Up @@ -1521,7 +1521,7 @@ do_convert(int argc, char **argv)
" --help\n"
" Show this help text.\n"
" --raw\n"
" Do not display <client-info> tags\n"
" Do not display <client-state> tags\n"
" --output <path>\n"
" Specify output file\n"
);
Expand Down
Loading

0 comments on commit 3da98cf

Please sign in to comment.