void rng_clean(void) { void *i; for (i = (void *)1; i < hash_index; i++) { rng_t *rng = (rng_t *) hadas_get(rngs, i); gsl_rng_free(rng->r); free(rng); } hadas_destroy(rngs); return; }
void rng_clean(void) { /* edit by Fabrice Theoleyre <*****@*****.**> */ void *i = NULL; for (i = (char*)i + 1; i < hash_index; i = (char*)i + 1) { /* end of edition */ rng_t *rng = (rng_t *) hadas_get(rngs, i); gsl_rng_free(rng->r); free(rng); } hadas_destroy(rngs); return; }
int unsetnode(call_t *c) { struct nodedata *nodedata = get_node_private_data(c); struct route *route; int i = get_node_count(); while (i--) { if ((route = (struct route *) hadas_get(nodedata->routes, (void *) ((unsigned long) i))) != NULL) { free(route); } } hadas_destroy(nodedata->routes); free(nodedata); return 0; }
/* ************************************************** */ int set_header(call_t *c, packet_t *packet, destination_t *dst) { struct nodedata *nodedata = get_node_private_data(c); struct route *route = hadas_get(nodedata->routes, (void *) ((unsigned long) (dst->id))); struct routing_header *header = (struct routing_header *) (packet->data + nodedata->overhead); call_t c0 = {get_entity_bindings_down(c)->elts[0], c->node, c->entity}; destination_t n_hop; if (route == NULL) { return -1; } header->dst = dst->id; header->src = c->node; n_hop.id = route->n_hop; return SET_HEADER(&c0, packet, &n_hop); }
/* ************************************************** */ void forward(call_t *c, packet_t *packet) { struct nodedata *nodedata = get_node_private_data(c); call_t c0 = {get_entity_bindings_down(c)->elts[0], c->node, c->entity}; struct routing_header *header = (struct routing_header *) (packet->data + nodedata->overhead); struct route *route = hadas_get(nodedata->routes, (void *) ((unsigned long) (header->dst))); destination_t destination; if (route == NULL) { packet_dealloc(packet); return; } destination.id = route->n_hop; if (SET_HEADER(&c0, packet, (void *) &destination) == -1) { packet_dealloc(packet); return; } TX(&c0, packet); }
/** * get RNG from ID **/ gsl_rng *get_rng_by_id(void *rng_id){ rng_t *rng = (rng_t *)hadas_get(rngs, rng_id); gsl_rng *r = (gsl_rng *) rng->r; return r; }
void destroy_rng(void *rng_id) { rng_t *rng = (rng_t *) hadas_get(rngs, rng_id); gsl_rng_free(rng->r); hadas_delete(rngs, rng_id); }