Exemple #1
0
void initDimmunix() {
	histSize = 0;
	init_Cycle(&cycle);
	init_Cycle(&stack);
	joinPointFound = NULL;
	blocked = false;

	nSyncs = 0;
	nSyncThreads = 0;
	nYields = 0;

	pthread_mutex_init(&avoidanceLock, NULL);

    if((positions=(struct Queue*)malloc_zero(sizeof(struct Queue)*MAXPOSITIONS))==NULL){
        LOGD("ERROR ALLOCATING DIMMUNIX positions");
    }
    if((history=(struct Template*)malloc_zero(sizeof(struct Template)*MAXTEMPLATES))==NULL){
        LOGD("ERROR ALLOCATING DIMMUNIX history");
    }

    int i;
    for (i = 0; i < MAXPOSITIONS; i++) {
    	initQueue(&positions[i]);
    }

	loadHistory();

//	pthread_create(&monitorThread, NULL, printStats, NULL);

	enabled = true;

	LOGD("initialized Dimmunix");
}
Exemple #2
0
static int warts_trace_pmtud_state(const scamper_trace_t *trace,
				   warts_trace_pmtud_t *state,
				   warts_addrtable_t *table)
{
  warts_trace_pmtud_n_t *note;
  scamper_trace_hop_t *hop;
  uint8_t i;
  size_t size;
  int j;

  /* figure out what the structure of the pmtud header looks like */
  warts_trace_pmtud_params(trace, state);

  /* flags + params + number of hop records for pmtud structure */
  state->len = state->flags_len + state->params_len + 2;
  if(state->params_len != 0)
    state->len += 2;

  /* count the number of hop records */
  state->hopc = scamper_trace_pmtud_hop_count(trace);
  if(state->hopc > 0)
    {
      /* allocate an array of address indexes for the pmtud hop addresses */
      size = state->hopc * sizeof(warts_trace_hop_t);
      if((state->hops = (warts_trace_hop_t *)malloc_zero(size)) == NULL)
	return -1;

      /* record hop state for each pmtud hop */
      for(hop = trace->pmtud->hops, j=0; hop != NULL; hop = hop->hop_next)
	warts_trace_hop_state(trace,hop,&state->hops[j++],table,&state->len);
    }

  /* record state for each pmtud note */
  if(trace->pmtud->notec > 0)
    {
      size = trace->pmtud->notec * sizeof(warts_trace_pmtud_n_t);
      if((state->notes = (warts_trace_pmtud_n_t *)malloc_zero(size)) == NULL)
	return -1;
      for(i=0; i<trace->pmtud->notec; i++)
	{
	  note = &state->notes[i];
	  warts_trace_pmtud_n_params(trace->pmtud,trace->pmtud->notes[i],note);

	  /* increase length required for the trace record */
	  state->len += note->flags_len + note->params_len;
	  if(note->params_len != 0)
	    state->len += 2;
	}
    }

  return 0;
}
scamper_task_sig_t *scamper_task_sig_alloc(uint8_t type)
{
  scamper_task_sig_t *sig;
  if((sig = malloc_zero(sizeof(scamper_task_sig_t))) != NULL)
    sig->sig_type = type;
  return sig;
}
Exemple #4
0
/** Implements the init_input function of the plugin API */
int corsaro_dos_init_input(corsaro_in_t *corsaro)
{
  struct corsaro_dos_in_state_t *state;
  corsaro_plugin_t *plugin = PLUGIN(corsaro);
  assert(plugin != NULL);

  if((state = malloc_zero(sizeof(struct corsaro_dos_in_state_t)))
     == NULL)
    {
      corsaro_log_in(__func__, corsaro,
		"could not malloc corsaro_dos_state_t");
      goto err;
    }
  corsaro_plugin_register_state(corsaro->plugin_manager, plugin, state);

  /* we initially expect an corsaro interval record */
  state->expected_type = CORSARO_IN_RECORD_TYPE_IO_INTERVAL_START;

  /* don't set the vector_cnt until we actually see a header record */

  return 0;

 err:
  corsaro_dos_close_input(corsaro);
  return -1;
}
Exemple #5
0
/** Implements the init_output function of the plugin API */
int corsaro_anon_init_output(corsaro_t *corsaro)
{
  struct corsaro_anon_state_t *state;
  corsaro_plugin_t *plugin = PLUGIN(corsaro);

  assert(plugin != NULL);

  if((state = malloc_zero(sizeof(struct corsaro_anon_state_t))) == NULL)
    {
      corsaro_log(__func__, corsaro,
		"could not malloc corsaro_anon_state_t");
      goto err;
    }
  corsaro_plugin_register_state(corsaro->plugin_manager, plugin, state);

  /* set the defaults */
  state->encryption_type = CORSARO_ANON_ENC_CRYPTOPAN;
  state->encrypt_source = ANON_SOURCE;
  state->encrypt_destination = ANON_DEST;

  /* parse the arguments */
  if(parse_args(corsaro) != 0)
    {
      return -1;
    }

  assert(state->encryption_key != NULL);

  corsaro_anon_init(state->encryption_type, state->encryption_key);
  return 0;

 err:
  corsaro_anon_close_output(corsaro);
  return -1;
}
int scamper_dealias_probes_alloc(scamper_dealias_t *dealias, uint32_t cnt)
{
  size_t size = cnt * sizeof(scamper_dealias_probe_t *);
  if((dealias->probes = malloc_zero(size)) == NULL)
    return -1;
  return 0;
}
int scamper_dealias_bump_alloc(scamper_dealias_t *dealias)
{
  if((dealias->data = malloc_zero(sizeof(scamper_dealias_bump_t))) != NULL)
    return 0;

  return -1;
}
/*
 * scamper_task_alloc
 *
 * allocate and initialise a task object.
 */
scamper_task_t *scamper_task_alloc(void *data, scamper_task_funcs_t *funcs)
{
  scamper_task_t *task;

  assert(data  != NULL);
  assert(funcs != NULL);

  if((task = malloc_zero(sizeof(scamper_task_t))) == NULL)
    {
      printerror(errno, strerror, __func__, "could not malloc task");
      goto err;
    }

  if((task->queue = scamper_queue_alloc(task)) == NULL)
    goto err;

  if((task->siglist = slist_alloc()) == NULL)
    goto err;

  task->funcs = funcs;
  task->data = data;

  return task;

 err:
  scamper_task_free(task);
  return NULL;
}
static scamper_file_t *file_open(int fd, char *fn, char mode, int type)
{
  scamper_file_t *sf;
  int (*open_func)(scamper_file_t *);

  if(mode == 'r')      open_func = file_open_read;
  else if(mode == 'w') open_func = file_open_write;
  else if(mode == 'a') open_func = file_open_append;
  else return NULL;

  if((sf = (scamper_file_t *)malloc_zero(sizeof(scamper_file_t))) == NULL)
    {
      return NULL;
    }

  sf->type = type;
  sf->fd   = fd;

  if(fn != NULL && (sf->filename = strdup(fn)) == NULL)
    {
      return NULL;
    }

  if(open_func(sf) == -1)
    {
      scamper_file_close(sf);
      return NULL;
    }

  return sf;
}
Exemple #10
0
/** Implements the init_output function of the plugin API */
int corsaro_dos_init_output(corsaro_t *corsaro)
{
  struct corsaro_dos_state_t *state;
  /* retrieve a pointer to the plugin struct with our name and id */
  corsaro_plugin_t *plugin = PLUGIN(corsaro);
  assert(plugin != NULL);

  /*
   * allocate memory for the state structure which will hold a pointer to the
   * output file and other statistics
   */
  if((state = malloc_zero(sizeof(struct corsaro_dos_state_t))) == NULL)
    {
      corsaro_log(__func__, corsaro,
		"could not malloc corsaro_dos_state_t");
      goto err;
    }
  /*
   * register the state structure with the plugin manager
   * this associates it with our plugin id so it can be retrieved later
   */
  corsaro_plugin_register_state(corsaro->plugin_manager, plugin, state);

  /* init the hash table for attack vectors */
  state->attack_hash = kh_init(av);

  return 0;

 err:
  corsaro_dos_close_output(corsaro);
  return -1;
}
Exemple #11
0
bgpstream_elem_t *bgpstream_elem_create() {
  // allocate memory for new element
  bgpstream_elem_t *ri = NULL;

  if((ri =
      (bgpstream_elem_t *) malloc_zero(sizeof(bgpstream_elem_t))) == NULL) {
    goto err;
  }
  // all fields are initialized to zero

  // need to create as path
  if((ri->aspath = bgpstream_as_path_create()) == NULL) {
    goto err;
  }

  // and a community set
  if((ri->communities = bgpstream_community_set_create()) == NULL) {
    goto err;
  }

  return ri;

 err:
  bgpstream_elem_destroy(ri);
  return NULL;
}
int scamper_dealias_replies_alloc(scamper_dealias_probe_t *probe, uint16_t cnt)
{
  size_t size = cnt * sizeof(scamper_dealias_reply_t *);
  if((probe->replies = malloc_zero(size)) == NULL)
    return -1;
  return 0;
}
int scamper_dealias_prefixscan_xs_alloc(scamper_dealias_prefixscan_t *p,
					uint16_t xc)
{
  if((p->xs = malloc_zero(sizeof(scamper_addr_t *) * xc)) != NULL)
    return 0;
  return -1;
}
int scamper_dealias_prefixscan_alloc(scamper_dealias_t *dealias)
{
  dealias->data = malloc_zero(sizeof(scamper_dealias_prefixscan_t));
  if(dealias->data != NULL)
    return 0;
  return -1;
}
int scamper_dealias_radargun_probedefs_alloc(scamper_dealias_radargun_t *rg,
					     uint32_t probedefc)
{
  size_t len = probedefc * sizeof(scamper_dealias_probedef_t);
  if((rg->probedefs = malloc_zero(len)) == NULL)
    return -1;
  return 0;
}
int scamper_dealias_prefixscan_probedefs_alloc(scamper_dealias_prefixscan_t *p,
					       uint32_t probedefc)
{
  size_t len = probedefc * sizeof(scamper_dealias_probedef_t);
  if((p->probedefs = malloc_zero(len)) != NULL)
    return 0;
  return -1;
}
Exemple #17
0
static scamper_fd_t *fd_alloc_dm(int type, int fd, const char *file,
				 const int line)
#endif
{
  scamper_fd_t *fdn = NULL;
  size_t size;
  int i;

#ifndef DMALLOC
  if((fdn = malloc_zero(sizeof(scamper_fd_t))) == NULL)
#else
  if((fdn = malloc_zero_dm(sizeof(scamper_fd_t), file, line)) == NULL)
#endif
    {
      goto err;
    }
  fdn->type   = type;
  fdn->fd     = fd;
  fdn->refcnt = 1;

  /* set up to poll read ability */
  if((fdn->read.node = dlist_node_alloc(&fdn->read)) == NULL)
    {
      goto err;
    }
  fdn->read.fdn   = fdn;
  fdn->read.flags = SCAMPER_FD_POLL_FLAG_INACTIVE;

  /* set up to poll write ability */
  if((fdn->write.node = dlist_node_alloc(&fdn->write)) == NULL)
    {
      goto err;
    }
  fdn->write.fdn   = fdn;
  fdn->write.flags = SCAMPER_FD_POLL_FLAG_INACTIVE;

  /* store the fd in an array indexed by the fd number */
  if(fd+1 > fd_array_s)
    {
      size = sizeof(scamper_fd_t *) * (fd+1);
      if(realloc_wrap((void **)&fd_array, size) != 0)
	goto err;
      for(i=fd_array_s; i<fd+1; i++)
	fd_array[i] = NULL;
      fd_array_s = fd+1;
    }
  fd_array[fd] = fdn;

  return fdn;

 err:
  if(fdn != NULL) fd_free(fdn);
  return NULL;
}
/** Implements the init_output function of the plugin API */
int bgpcorsaro_pfxmonitor_init_output(bgpcorsaro_t *bgpcorsaro)
{
  struct bgpcorsaro_pfxmonitor_state_t *state;
  bgpcorsaro_plugin_t *plugin = PLUGIN(bgpcorsaro);
  assert(plugin != NULL);

  if ((state = malloc_zero(sizeof(struct bgpcorsaro_pfxmonitor_state_t))) ==
      NULL) {
    bgpcorsaro_log(__func__, bgpcorsaro,
                   "could not malloc bgpcorsaro_pfxmonitor_state_t");
    goto err;
  }
  bgpcorsaro_plugin_register_state(bgpcorsaro->plugin_manager, plugin, state);

  /* initialize state with default values */
  state = STATE(bgpcorsaro);
  strncpy(state->metric_prefix, PFXMONITOR_DEFAULT_METRIC_PFX,
          PFXMONITOR_METRIC_PFX_LEN);
  strncpy(state->ip_space_name, PFXMONITOR_DEFAULT_IPSPACE_NAME,
          PFXMONITOR_METRIC_PFX_LEN);

  if ((state->poi = bgpstream_ip_counter_create()) == NULL) {
    goto err;
  }
  state->peer_asns_th = PFXMONITOR_DEFAULT_PEER_ASNS_THRESHOLD;
  state->more_specific = 0;

  /* parse the arguments */
  if (parse_args(bgpcorsaro) != 0) {
    goto err;
  }

  graphite_safe(state->metric_prefix);
  graphite_safe(state->ip_space_name);

  /* create all the sets and maps we need */
  if ((state->overlapping_pfx_cache = bgpstream_pfx_storage_set_create()) ==
        NULL ||
      (state->non_overlapping_pfx_cache = bgpstream_pfx_storage_set_create()) ==
        NULL ||
      (state->pfx_info = kh_init(pfx_info_map)) == NULL ||
      (state->unique_origins = bgpstream_id_set_create()) == NULL ||
      (state->peer_asns = bgpstream_id_set_create()) == NULL) {
    goto err;
  }

  /* defer opening the output file until we start the first interval */

  return 0;

err:
  bgpcorsaro_pfxmonitor_close_output(bgpcorsaro);
  return -1;
}
scamper_route_t *scamper_route_alloc(scamper_addr_t *dst, void *param,
				     void (*cb)(scamper_route_t *rt))
{
  scamper_route_t *route;
  if((route = malloc_zero(sizeof(scamper_route_t))) == NULL)
    return NULL;
  route->dst = scamper_addr_use(dst);
  route->param = param;
  route->cb = cb;
  return route;
}
Exemple #20
0
/* allocate memory for a new bgpstream filter */
bgpstream_filter_mgr_t *bgpstream_filter_mgr_create()
{
  bgpstream_debug("\tBSF_MGR: create start");
  bgpstream_filter_mgr_t *bs_filter_mgr =
    (bgpstream_filter_mgr_t *)malloc_zero(sizeof(bgpstream_filter_mgr_t));
  if (bs_filter_mgr == NULL) {
    return NULL; // can't allocate memory
  }
  bgpstream_debug("\tBSF_MGR: create end");
  return bs_filter_mgr;
}
int scamper_task_sig_add(scamper_task_t *task, scamper_task_sig_t *sig)
{
  s2t_t *s2t;
  if((s2t = malloc_zero(sizeof(s2t_t))) == NULL)
    return -1;
  s2t->sig = sig;
  s2t->task = task;
  if(slist_tail_push(task->siglist, s2t) == NULL)
    return -1;
  return 0;
}
Exemple #22
0
static int warts_dealias_radargun_state(const scamper_file_t *sf,
					const void *data,
					warts_dealias_data_t *state,
					warts_addrtable_t *table, uint32_t *len)
{
  const scamper_dealias_radargun_t *rg = data;
  const warts_var_t *var;
  int max_id = 0;
  size_t size;
  uint32_t i;

  if(rg->probedefc == 0)
    return -1;

  size = rg->probedefc * sizeof(warts_dealias_probedef_t);
  if((state->probedefs = malloc_zero(size)) == NULL)
    return -1;

  memset(state->flags, 0, dealias_radargun_vars_mfb);
  state->params_len = 0;

  for(i=0; i<sizeof(dealias_radargun_vars)/sizeof(warts_var_t); i++)
    {
      var = &dealias_radargun_vars[i];

      if(var->id == WARTS_DEALIAS_RADARGUN_FLAGS)
	{
	  if(rg->flags == 0)
	    continue;
	}

      flag_set(state->flags, var->id, &max_id);
      assert(var->size >= 0);
      state->params_len += var->size;
    }

  state->flags_len = fold_flags(state->flags, max_id);

  for(i=0; i<rg->probedefc; i++)
    {
      if(warts_dealias_probedef_params(sf, &rg->probedefs[i],
				       &state->probedefs[i], table, len) != 0)
	{
	  return -1;
	}
    }

  /* increase length required for the radargun record */
  *len += state->flags_len + state->params_len;
  if(state->params_len != 0) *len += 2;

  return 0;
}
bgpstream_csvfile_datasource_t *
bgpstream_csvfile_datasource_create(bgpstream_filter_mgr_t *filter_mgr, 
                                    char *csvfile_file)
{
  bgpstream_debug("\t\tBSDS_CSVFILE: create csvfile_ds start");  
  bgpstream_csvfile_datasource_t *csvfile_ds = (bgpstream_csvfile_datasource_t*) malloc_zero(sizeof(bgpstream_csvfile_datasource_t));
  if(csvfile_ds == NULL) {
    bgpstream_log_err("\t\tBSDS_CSVFILE: create csvfile_ds can't allocate memory");    
    goto err;
  }  
  if(csvfile_file == NULL)
    {
      bgpstream_log_err("\t\tBSDS_CSVFILE: create csvfile_ds no file provided");    
      goto err;
    }
  if((csvfile_ds->csvfile_file = strdup(csvfile_file)) == NULL)
    {
      bgpstream_log_err("\t\tBSDS_CSVFILE: can't allocate memory for filename");    
      goto err;
    }
  
  /* cvs file parser options */
  unsigned char options = CSV_STRICT | CSV_REPALL_NL | CSV_STRICT_FINI |
                CSV_APPEND_NULL | CSV_EMPTY_IS_NULL;

  if(csv_init(&(csvfile_ds->parser), options) !=0)
    {
      bgpstream_log_err("\t\tBSDS_CSVFILE: can't initialize csv parser");    
      goto err;
    }

  csvfile_ds->current_field = CSVFILE_PATH;
  
  csvfile_ds->filter_mgr = filter_mgr;
  csvfile_ds->input_mgr = NULL;

  csvfile_ds->num_results = 0;

  csvfile_ds->max_ts_infile = 0;
  csvfile_ds->last_processed_ts = 0;
  csvfile_ds->max_accepted_ts = 0;

  bgpstream_debug("\t\tBSDS_CSVFILE: create csvfile_ds end");
  return csvfile_ds;
  
 err:
  bgpstream_csvfile_datasource_destroy(csvfile_ds);
  return NULL;
}
Exemple #24
0
static int warts_dealias_probe_state(const scamper_file_t *sf,
				     const scamper_dealias_probe_t *probe,
				     warts_dealias_probe_t *state,
				     warts_addrtable_t *table, uint32_t *len)
{
  int i = 0;
  size_t size;

  memset(state->flags, 0, dealias_probe_vars_mfb);
  state->params_len = 0;

  flag_set(state->flags, WARTS_DEALIAS_PROBE_DEF, &i);
  state->params_len += 4;
  flag_set(state->flags, WARTS_DEALIAS_PROBE_TX, &i);
  state->params_len += 8;
  flag_set(state->flags, WARTS_DEALIAS_PROBE_REPLYC, &i);
  state->params_len += 2;
  flag_set(state->flags, WARTS_DEALIAS_PROBE_IPID, &i);
  state->params_len += 2;
  flag_set(state->flags, WARTS_DEALIAS_PROBE_SEQ, &i);
  state->params_len += 4;

  state->flags_len = fold_flags(state->flags, i);
  state->replies = NULL;

  if(probe->replyc > 0)
    {
      size = sizeof(warts_dealias_reply_t) * probe->replyc;
      if((state->replies = malloc_zero(size)) == NULL)
	return -1;

      for(i=0; i<probe->replyc; i++)
	{
	  if(warts_dealias_reply_state(probe->replies[i], &state->replies[i],
				       sf, table, len) != 0)
	    {
	      free(state->replies);
	      state->replies = NULL;
	      return -1;
	    }
	}
    }

  /* increase length required for the probe record */
  *len += state->flags_len + state->params_len;
  if(state->params_len != 0) *len += 2;

  return 0;
}
static rtsock_pair_t *rtsock_pair_alloc(scamper_route_t *route, int seq)
{
  rtsock_pair_t *pair;
  if((pair = malloc_zero(sizeof(rtsock_pair_t))) == NULL)
    return NULL;
  pair->route = route;
  pair->seq = seq;
  if((pair->node = dlist_head_push(pairs, pair)) == NULL)
    {
      free(pair);
      return NULL;
    }
  route->internal = pair;
  return pair;
}
Exemple #26
0
struct Position* getPosition(char* _stack) {

    int hash = hashOfStack(_stack);

    struct Queue* q = &positions[hash];

    struct Position* pos = findInQueuePos(q, _stack);
    if(pos == NULL){
        pos = (struct Position*)malloc_zero(sizeof(struct Position));
        init_Position(pos, _stack);
        addToQueue(q, pos);
    }
    //LOGD("pos = %s", pos->id);

    return pos;
}
scamper_task_anc_t *scamper_task_anc_add(scamper_task_t *task, void *data,
					 void (*freedata)(void *))
{
  scamper_task_anc_t *anc = NULL;
  if(task->ancillary == NULL && (task->ancillary = dlist_alloc()) == NULL)
    return NULL;
  if((anc = malloc_zero(sizeof(scamper_task_anc_t))) == NULL)
    return NULL;
  anc->data = data;
  anc->freedata = freedata;
  if((anc->node = dlist_tail_push(task->ancillary, anc)) == NULL)
    {
      free(anc);
      return NULL;
    }
  return anc;
}
Exemple #28
0
static addr2mac_t *addr2mac_alloc(const int ifindex, scamper_addr_t *ip,
				  scamper_addr_t *mac, time_t expire)
{
  addr2mac_t *addr2mac;

  if((addr2mac = malloc_zero(sizeof(addr2mac_t))) == NULL)
    {
      printerror(errno, strerror, __func__, "could not malloc addr2mac");
      return NULL;
    }

  addr2mac->ifindex = ifindex;
  addr2mac->ip      = ip  != NULL ? scamper_addr_use(ip)  : NULL;
  addr2mac->mac     = mac != NULL ? scamper_addr_use(mac) : NULL;
  addr2mac->expire  = expire;
  return addr2mac;
}
static int warts_tracelb_probeset_state(const scamper_file_t *sf,
					const scamper_tracelb_probeset_t *set,
					warts_tracelb_probeset_t *state,
					warts_addrtable_t *table,
					uint32_t *len)
{
  const warts_var_t *var;
  int i, max_id = 0;
  size_t size;

  state->probec = set->probec;

  memset(state->flags, 0, tracelb_probeset_vars_mfb);
  state->params_len = 0;

  for(i=0; i<sizeof(tracelb_probeset_vars)/sizeof(warts_var_t); i++)
    {
      var = &tracelb_probeset_vars[i];
      flag_set(state->flags, var->id, &max_id);
      state->params_len += var->size;
    }

  state->flags_len = fold_flags(state->flags, max_id);

  *len += state->flags_len + state->params_len;
  if(state->params_len != 0) *len += 2;

  if(set->probec > 0)
    {
      size = sizeof(warts_tracelb_probe_t) * set->probec;
      if((state->probes = malloc_zero(size)) == NULL)
	{
	  return -1;
	}

      for(i=0; i<set->probec; i++)
	{
	  if(warts_tracelb_probe_state(sf, set->probes[i], &state->probes[i],
				       table, len) != 0)
	    return -1;
	}
    }

  return 0;
}
Exemple #30
0
static int warts_dealias_ally_state(const scamper_file_t *sf, const void *data,
				    warts_dealias_data_t *state,
				    warts_addrtable_t *table, uint32_t *len)
{
  const scamper_dealias_ally_t *ally = data;
  int max_id = 0;
  size_t size = sizeof(warts_dealias_probedef_t) * 2;

  if((state->probedefs = malloc_zero(size)) == NULL)
    return -1;

  memset(state->flags, 0, dealias_ally_vars_mfb);
  state->params_len = 0;

  flag_set(state->flags, WARTS_DEALIAS_ALLY_WAIT_PROBE, &max_id);
  state->params_len += 2;
  flag_set(state->flags, WARTS_DEALIAS_ALLY_WAIT_TIMEOUT, &max_id);
  state->params_len += 1;
  flag_set(state->flags, WARTS_DEALIAS_ALLY_ATTEMPTS, &max_id);
  state->params_len += 1;
  flag_set(state->flags, WARTS_DEALIAS_ALLY_FUDGE, &max_id);
  state->params_len += 2;

  if(ally->flags != 0)
    {
      flag_set(state->flags, WARTS_DEALIAS_ALLY_FLAGS, &max_id);
      state->params_len += 1;
    }

  state->flags_len = fold_flags(state->flags, max_id);

  if(warts_dealias_probedef_params(sf, &ally->probedefs[0],
				   &state->probedefs[0], table, len) != 0 ||
     warts_dealias_probedef_params(sf, &ally->probedefs[1],
				   &state->probedefs[1], table, len) != 0)
    {
      return -1;
    }

  /* increase length required for the ally record */
  *len += state->flags_len + state->params_len;
  if(state->params_len != 0) *len += 2;

  return 0;
}