Exemple #1
0
static int warts_trace_dtree_params(const scamper_file_t *sf,
				    const scamper_trace_t *trace,
				    warts_addrtable_t *table,
				    warts_trace_dtree_t *state)
{
  scamper_trace_dtree_t *dtree = trace->dtree;
  const warts_var_t *var;
  int i, max_id = 0;

  /* unset all the flags possible */
  memset(state->flags, 0, trace_dtree_vars_mfb);
  state->params_len = 0;

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

      /* not used any more */
      if(var->id == WARTS_TRACE_DTREE_LSS_STOP_GID ||
	 var->id == WARTS_TRACE_DTREE_GSS_STOP_GID)
	continue;

      if((var->id == WARTS_TRACE_DTREE_LSS_STOP && dtree->lss_stop == NULL) ||
	 (var->id == WARTS_TRACE_DTREE_LSS_NAME && dtree->lss == NULL) ||
	 (var->id == WARTS_TRACE_DTREE_GSS_STOP && dtree->gss_stop == NULL) ||
	 (var->id == WARTS_TRACE_DTREE_FLAGS    && dtree->flags == 0))
	continue;

      flag_set(state->flags, var->id, &max_id);

      /* variables that don't have a fixed size */
      if(var->id == WARTS_TRACE_DTREE_LSS_STOP)
	{
	  state->params_len += warts_addr_size(table, dtree->lss_stop);
	  continue;
	}
      else if(var->id == WARTS_TRACE_DTREE_LSS_NAME)
	{
	  state->params_len += warts_str_size(dtree->lss);
	  continue;
	}
      else if(var->id == WARTS_TRACE_DTREE_GSS_STOP)
	{
	  state->params_len += warts_addr_size(table, dtree->gss_stop);
	  continue;
	}

      assert(var->size != -1);
      state->params_len += var->size;
    }

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

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

  return 0;
}
static void warts_neighbourdisc_params(const scamper_neighbourdisc_t *nd,
				       warts_addrtable_t *table,
				       uint8_t *flags, uint16_t *flags_len,
				       uint16_t *params_len)
{
  int i, max_id = 0;
  const warts_var_t *var;

  memset(flags, 0, neighbourdisc_vars_mfb);
  *params_len = 0;

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

      if(var->id == WARTS_NEIGHBOURDISC_LIST && nd->list == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_CYCLE && nd->cycle == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_USERID && nd->userid == 0)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_IFNAME && nd->ifname == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_SRC_IP && nd->src_ip == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_SRC_MAC && nd->src_mac == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_DST_IP && nd->dst_ip == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_DST_MAC && nd->dst_mac == NULL)
	continue;
      else if(var->id == WARTS_NEIGHBOURDISC_PROBEC && nd->probec == 0)
	continue;

      flag_set(flags, var->id, &max_id);

      if(var->size < 0)
	{
	  if(var->id == WARTS_NEIGHBOURDISC_SRC_IP)
	    *params_len += warts_addr_size(table, nd->src_ip);
	  else if(var->id == WARTS_NEIGHBOURDISC_SRC_MAC)
	    *params_len += warts_addr_size(table, nd->src_mac);
	  else if(var->id == WARTS_NEIGHBOURDISC_DST_IP)
	    *params_len += warts_addr_size(table, nd->dst_ip);
	  else if(var->id == WARTS_NEIGHBOURDISC_DST_MAC)
	    *params_len += warts_addr_size(table, nd->dst_mac);
	  else if(var->id == WARTS_NEIGHBOURDISC_IFNAME)
	    *params_len += warts_str_size(nd->ifname);
	  continue;
	}

      assert(var->size >= 0);
      *params_len += var->size;
    }

  *flags_len = fold_flags(flags, max_id);
  return;
}
static void warts_tbit_app_http_params(const scamper_tbit_t *tbit,
				       warts_tbit_app_http_t *state)
{
  scamper_tbit_app_http_t *http = tbit->app_data;
  const warts_var_t *var;
  int i, max_id = 0;

  /* unset all the flags possible */
  memset(state->flags, 0, tbit_app_http_vars_mfb);
  state->params_len = 0;

  for(i=0; i<sizeof(tbit_app_http_vars)/sizeof(warts_var_t); i++)
    {
      var = &tbit_app_http_vars[i];
      if(var->id == WARTS_TBIT_APP_HTTP_HOST && http->host == NULL)
	continue;
      if(var->id == WARTS_TBIT_APP_HTTP_FILE && http->file == NULL)
	continue;

      flag_set(state->flags, var->id, &max_id);

      if(var->size < 0)
	{
	  if(var->id == WARTS_TBIT_APP_HTTP_HOST)
	    state->params_len += warts_str_size(http->host);
	  else if(var->id == WARTS_TBIT_APP_HTTP_FILE)
	    state->params_len += warts_str_size(http->file);
	  continue;
	}

      assert(var->size >= 0);
      state->params_len += var->size;
    }

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

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

  return;
}