beautypg.com

Sun Microsystems Netra CP2500 User Manual

Page 30

background image

16

Netra CP2500 Board Programming Guide • March 2007

ptr = strchr(wd_name, ’:’);

if (ptr == NULL) { /* invalid format */

(void) fprintf(stderr, "%s:Node not found:%d\n",

prog, picl2errno(PICL_NODENOTFOUND));

return (PICL_NODENOTFOUND);

}

wd_arg.name = wd_name;

wd_arg.action = action;

wd_arg.error_code = 0;

if (timeout) {

errno = 0;

wd_arg.timeout = strtol(timeout, NULL, 10);

if (errno != 0) {

(void) fprintf(stderr, "%s:Illegal timeout value\n",

prog);

return (PICL_INVALIDARG);

}

} else {

wd_arg.timeout = ILLEGAL_TIMEOUT; /* need not program timeout */

}

err = picl_walk_tree_by_class(rooth, PICL_WATCHDOG_CONTROLLER,

(void *)&wd_arg, wd_set_params);

return (err);

}

/*

* This is the callback function that gets called due to

* picl_walk_tree_by_class function call from control_wd function.

* This function is used to arm/disarm the watchdog controller.

*/

static int

wd_change_state(picl_nodehdl_t nodeh, void *arg)

{

int err = PICL_SUCCESS;

char cntrl_name[PICL_PROPNAMELEN_MAX];

wdadm_args_t *wd_arg = NULL;

wd_arg = (wdadm_args_t *)arg;

if (wd_arg == NULL || wd_arg->name == NULL)

return (PICL_WALK_TERMINATE);

err = picl_get_propval_by_name(nodeh, PICL_PROP_NAME,

(void *)cntrl_name, PICL_PROPNAMELEN_MAX);

if (err != PICL_SUCCESS) {

CODE EXAMPLE 1-1

System Watchdog Node Management Code Example (Continued)