Skip to content

Commit

Permalink
server: Discover initial client-state and persistent
Browse files Browse the repository at this point in the history
Do no discover initial values from the client.
  • Loading branch information
wipawel committed Jun 2, 2014
1 parent 7b7f4e3 commit fd1682f
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 20 deletions.
3 changes: 2 additions & 1 deletion include/wicked/netinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,8 @@ extern void ni_netdev_set_client_info(ni_netdev_t *, ni_device_clientinfo_t *);
extern ni_device_clientinfo_t * ni_netdev_get_client_info(ni_netdev_t *);
extern void ni_netdev_set_client_state(ni_netdev_t *, ni_client_state_t *);
extern ni_client_state_t * ni_netdev_get_client_state(ni_netdev_t *);
extern void ni_netdev_load_client_state(ni_netdev_t *);
extern ni_bool_t ni_netdev_load_client_state(ni_netdev_t *);
extern void ni_netdev_discover_client_state(ni_netdev_t *);
extern ni_bool_t ni_netdev_supports_arp(ni_netdev_t *);

extern void ni_netdev_clear_addresses(ni_netdev_t *);
Expand Down
5 changes: 4 additions & 1 deletion server/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,10 @@ discover_state(ni_dbus_server_t *server)
for (ifp = ni_netconfig_devlist(nc); ifp; ifp = ifp->next) {
discover_udev_netdev_state(ifp);
ni_objectmodel_register_netif(server, ifp, NULL);
ni_netdev_load_client_state(ifp);
if (!ni_netdev_get_client_state(ifp)) {
if (!ni_netdev_load_client_state(ifp))
ni_netdev_discover_client_state(ifp);
}
}
#ifdef MODEM
for (modem = ni_netconfig_modem_list(nc); modem; modem = modem->list.next)
Expand Down
11 changes: 1 addition & 10 deletions src/fsm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2133,7 +2133,6 @@ ni_ifworker_start(ni_fsm_t *fsm, ni_ifworker_t *w, unsigned long timeout)
{
unsigned int min_state = w->target_range.min;
unsigned int max_state = w->target_range.max;
unsigned int cur_state = w->fsm.state;
unsigned int j;
int rv;

Expand Down Expand Up @@ -2184,16 +2183,8 @@ ni_ifworker_start(ni_fsm_t *fsm, ni_ifworker_t *w, unsigned long timeout)
ni_ifworker_state_name(w->fsm.state),
ni_ifworker_state_name(w->target_state));

if (w->target_state != NI_FSM_STATE_NONE) {
ni_client_state_t *cs = &w->client_state;

if (!ni_client_state_is_valid(cs)) {
ni_client_state_set_state(cs, cur_state);
NI_CLIENT_STATE_SET_CONTROL_FLAG(cs->persistent,
cur_state >= NI_FSM_STATE_LINK_UP, TRUE);
}
if (w->target_state != NI_FSM_STATE_NONE)
ni_ifworker_set_timeout(w, timeout);
}

/* For each of the DBus calls we will execute on this device,
* check whether there are constraints on child devices that
Expand Down
42 changes: 34 additions & 8 deletions src/netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <wicked/ipv6.h>
#include <wicked/pci.h>
#include <wicked/lldp.h>
#include <wicked/fsm.h>
#include "netinfo_priv.h"
#include "util_priv.h"
#include "appconfig.h"
Expand Down Expand Up @@ -568,19 +569,44 @@ ni_netdev_get_client_state(ni_netdev_t *dev)
return dev ? dev->client_state : NULL;
}

void
ni_bool_t
ni_netdev_load_client_state(ni_netdev_t *dev)
{
ni_client_state_t client_state;

if (!ni_netdev_get_client_state(dev)) {
ni_client_state_init(&client_state);
if (ni_client_state_load(&client_state, dev->link.ifindex)) {
ni_netdev_set_client_state(dev, ni_client_state_clone(&client_state));
ni_debug_ifconfig("loading client-state structure from a file for %s",
dev->name);
}
ni_assert(dev);

ni_client_state_init(&client_state);
if (ni_client_state_load(&client_state, dev->link.ifindex)) {
ni_netdev_set_client_state(dev, ni_client_state_clone(&client_state));
ni_debug_ifconfig("loading client-state structure from a file for %s",
dev->name);
return TRUE;
}

return FALSE;
}

void
ni_netdev_discover_client_state(ni_netdev_t *dev)
{
ni_fsm_state_t state = NI_FSM_STATE_DEVICE_EXISTS;
ni_client_state_t *cs;

ni_assert(dev);

if (ni_netdev_device_is_up(dev))
state = NI_FSM_STATE_DEVICE_UP;
if (ni_netdev_link_is_up(dev))
state = NI_FSM_STATE_LINK_UP;
if (ni_netdev_network_is_up(dev))
state = NI_FSM_STATE_LINK_UP;

cs = ni_client_state_new(state);
NI_CLIENT_STATE_SET_CONTROL_FLAG(cs->persistent,
state >= NI_FSM_STATE_LINK_UP, TRUE);

ni_netdev_set_client_state(dev, cs);
}

/*
Expand Down

0 comments on commit fd1682f

Please sign in to comment.