Skip to content

Commit

Permalink
nanny: mark recheck as done when policy not applied
Browse files Browse the repository at this point in the history
  • Loading branch information
wipawel committed Jul 10, 2014
1 parent 09d2dc0 commit 2e22a15
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 20 deletions.
35 changes: 19 additions & 16 deletions nanny/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@

static const char * ni_managed_device_get_essid(xml_node_t *);

static void ni_managed_device_up(ni_managed_device_t *, const char *);
static void ni_factory_device_up(ni_fsm_t *, ni_ifworker_t *);
static int ni_managed_device_up(ni_managed_device_t *, const char *);
static int ni_factory_device_up(ni_fsm_t *, ni_ifworker_t *);

/*
* List handling functions
Expand Down Expand Up @@ -131,7 +131,7 @@ ni_managed_device_set_security_id(ni_managed_device_t *mdev, const ni_security_i
ni_security_id_set(&w->security_id, security_id);
}

static void
static int
ni_factory_device_up(ni_fsm_t *fsm, ni_ifworker_t *w)
{
ni_ifworker_array_t ifmarked = NI_IFWORKER_ARRAY_INIT;
Expand All @@ -149,12 +149,14 @@ ni_factory_device_up(ni_fsm_t *fsm, ni_ifworker_t *w)

ni_fsm_mark_matching_workers(fsm, &ifmarked, &ifmarker);
ni_ifworker_array_destroy(&ifmarked);

return 0;
}

/*
* Apply policy to a virtual (factory) device
*/
void
int
ni_factory_device_apply_policy(ni_fsm_t *fsm, ni_ifworker_t *w, ni_managed_policy_t *mpolicy)
{
const char *type_name;
Expand All @@ -174,22 +176,22 @@ ni_factory_device_apply_policy(ni_fsm_t *fsm, ni_ifworker_t *w, ni_managed_polic
if (config == NULL) {
ni_error("%s: error when applying policy to %s document",
w->name, type_name);
return;
return -1;
}
ni_debug_nanny("%s: using device config", w->name);
xml_node_print_debug(config, 0);

ni_ifworker_set_config(w, config, ni_fsm_policy_get_origin(policy));

/* Now do the fandango */
ni_factory_device_up(fsm, w);
return ni_factory_device_up(fsm, w);
}


/*
* Apply policy to a device
*/
void
int
ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *mpolicy)
{
ni_ifworker_t *w = mdev->worker;
Expand All @@ -211,7 +213,7 @@ ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *m
case NI_MANAGED_STATE_FAILED:
if (mdev->selected_policy == mpolicy && mdev->selected_policy_seq == mpolicy->seqno) {
ni_debug_nanny("%s: keep using policy %s", w->name, ni_fsm_policy_name(policy));
return;
return -1;
}

/* Just install the new policy and reconfigure. */
Expand All @@ -220,7 +222,7 @@ ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *m
case NI_MANAGED_STATE_BINDING:
ni_error("%s(%s): should not get here in state %s",
__func__, w->name, ni_managed_state_to_string(mdev->state));
return;
return -1;
}

ni_debug_nanny("%s: using policy %s", w->name, ni_fsm_policy_name(policy));
Expand All @@ -238,15 +240,15 @@ ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *m
if (mdev->state != NI_MANAGED_STATE_STOPPED)
ni_nanny_schedule_recheck(&mdev->nanny->down, w);
#endif
return;
return -1;
}
ni_debug_nanny("%s: using device config", w->name);
xml_node_print_debug(config, 0);

ni_managed_device_set_policy(mdev, mpolicy, config);

/* Now do the fandango */
ni_managed_device_up(mdev, ni_fsm_policy_get_origin(policy));
return ni_managed_device_up(mdev, ni_fsm_policy_get_origin(policy));
}

/*
Expand Down Expand Up @@ -296,7 +298,7 @@ ni_managed_device_up_done(ni_ifworker_t *w)
/*
* Bring up the device
*/
static void
static int
ni_managed_device_up(ni_managed_device_t *mdev, const char *origin)
{
ni_fsm_t *fsm = mdev->nanny->fsm;
Expand All @@ -306,7 +308,7 @@ ni_managed_device_up(ni_managed_device_t *mdev, const char *origin)
ni_security_id_t security_id = NI_SECURITY_ID_INIT;
ni_ifworker_array_t ifmarked = NI_IFWORKER_ARRAY_INIT;
ni_ifmarker_t ifmarker;
int rv;
int rv = -NI_ERROR_DEVICE_NOT_COMPATIBLE;

memset(&ifmarker, 0, sizeof(ifmarker));

Expand Down Expand Up @@ -335,7 +337,7 @@ ni_managed_device_up(ni_managed_device_t *mdev, const char *origin)
break;

default:
return;
goto failed;
}

if (ni_security_id_valid(&security_id))
Expand Down Expand Up @@ -368,18 +370,19 @@ ni_managed_device_up(ni_managed_device_t *mdev, const char *origin)
/* FIXME: Emit an event listing the secrets we're missing.
*/
mdev->state = previous_state;
return;
return -1;
}

mdev->state = NI_MANAGED_STATE_STARTING;
ni_fsm_mark_matching_workers(fsm, &ifmarked, &ifmarker);
ni_ifworker_array_destroy(&ifmarked);

return;
return 0;

failed:
ni_error("%s: cannot start device: %s", w->name, ni_strerror(rv));
mdev->state = NI_MANAGED_STATE_FAILED;
return -1;
}

/*
Expand Down
4 changes: 2 additions & 2 deletions nanny/nanny.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,9 @@ ni_nanny_recheck(ni_nanny_t *mgr, ni_ifworker_t *w)
mpolicy = ni_nanny_get_policy(mgr, policy);

if (factory_device)
ni_factory_device_apply_policy(mgr->fsm, w, mpolicy);
count += ni_factory_device_apply_policy(mgr->fsm, w, mpolicy);
else
ni_managed_device_apply_policy(mdev, mpolicy);
count += ni_managed_device_apply_policy(mdev, mpolicy);

return count;
}
Expand Down
4 changes: 2 additions & 2 deletions nanny/nanny.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,8 @@ extern void ni_managed_modem_up(ni_managed_device_t *, unsigned int);

extern ni_managed_device_t * ni_managed_device_new(ni_nanny_t *, ni_ifworker_t *, ni_managed_device_t **list);
extern void ni_managed_device_free(ni_managed_device_t *);
extern void ni_factory_device_apply_policy(ni_fsm_t *, ni_ifworker_t *, ni_managed_policy_t *);
extern void ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *mpolicy);
extern int ni_factory_device_apply_policy(ni_fsm_t *, ni_ifworker_t *, ni_managed_policy_t *);
extern int ni_managed_device_apply_policy(ni_managed_device_t *mdev, ni_managed_policy_t *mpolicy);
extern void ni_managed_device_set_policy(ni_managed_device_t *, ni_managed_policy_t *, xml_node_t *);
extern void ni_managed_device_down(ni_managed_device_t *mdev);

Expand Down

0 comments on commit 2e22a15

Please sign in to comment.