Example #1
0
/* ************************************************** */
int setnode(call_t *c, void *params) {
    struct nodedata *nodedata = malloc(sizeof(struct nodedata));
    param_t *param;
    uint64_t min_pausetime, max_pausetime;
    
    /* default values */
    get_node_position(c->node)->x = get_random_x_position();
    get_node_position(c->node)->y = get_random_y_position();
    get_node_position(c->node)->z = get_random_z_position();

    nodedata->pausetime = 2000000000;
    min_pausetime       = 0;
    max_pausetime       = 0;

    /* get parameters */
    das_init_traverse(params);
    while ((param = (param_t *) das_traverse(params)) != NULL) {
        if (!strcmp(param->key, "x")) {
            if (get_param_x_position(param->value, &(get_node_position(c->node)->x))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "y")) {
            if (get_param_y_position(param->value, &(get_node_position(c->node)->y))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "z")) {
            if (get_param_z_position(param->value, &(get_node_position(c->node)->z))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "pausetime")) {
            if (get_param_time(param->value, &(nodedata->pausetime))) {
                goto error;
            }
        }
        if (!strcmp(param->key, "min-pausetime")) {
            if (get_param_time(param->value, &min_pausetime)) {
                goto error;
            }
        }
        if (!strcmp(param->key, "max-pausetime")) {
            if (get_param_time(param->value, &max_pausetime)) {
                goto error;
            }
        }
    }
    
    if (min_pausetime < max_pausetime ) {
        nodedata->pausetime = get_random_time_range(min_pausetime, max_pausetime);
    }
    
    set_node_private_data(c, nodedata);
    return 0;

 error:
    free(nodedata);
    return -1;
}
Example #2
0
/* ************************************************** */
void update_position(call_t *c) {
    struct nodedata *nodedata = get_node_private_data(c);
        
    while  (nodedata->lupdate < get_time()) {
      
        if (nodedata->nupdate <= get_time()) {
            nodedata->lupdate = nodedata->nupdate;
            nodedata->nupdate += nodedata->pausetime;

            get_node_position(c->node)->x = get_random_x_position();
            get_node_position(c->node)->y = get_random_y_position();
            get_node_position(c->node)->z = get_random_z_position();
            PRINT_REPLAY("mobility %"PRId64" %d %lf %lf %lf\n", nodedata->lupdate, c->node, get_node_position(c->node)->x, get_node_position(c->node)->y, get_node_position(c->node)->z);
        } else {
            nodedata->lupdate = get_time();
            break;
        }
    }

    return;
}
int get_param_y_position(char *value, double *position) {
    *position = (!strcmp(value, "random") || !strcmp(value, "?")) ? 
	get_random_y_position() : strtod(value, NULL);
    return 0;
}