Beispiel #1
0
static uint32
__bro_table_val_hash(BroTableVal *tv)
{
  uint32 result;

  D_ENTER;

  if (! tv)
    D_RETURN_(0);

  result = __bro_sobject_hash((BroSObject*) tv->table_type);
  result ^= __bro_sobject_hash((BroSObject*) tv->attrs);
  result ^= __bro_table_hash(tv->table);

  D_RETURN_(result);

}
Beispiel #2
0
static uint32
__bro_val_hash(BroVal *val)
{
  uint32 result;
  int i;

  D_ENTER;

  if (! val)
    D_RETURN_(0);

  result = __bro_sobject_hash((BroSObject*) val->val_type);

  switch (val->val_type->internal_tag)
    {
    case BRO_INTTYPE_INT:
    case BRO_INTTYPE_UNSIGNED:
      result ^= val->val_int64;
      break;
    case BRO_INTTYPE_IPADDR:
      for ( i = 0; i < 4; ++i )
        result ^= val->val_addr.addr[i];
      break;

    case BRO_INTTYPE_DOUBLE:
      result ^= (uint32) val->val_double;
      break;

    case BRO_INTTYPE_STRING:
      result ^= __bro_ht_str_hash(val->val_str.str_val);
      break;

    case BRO_INTTYPE_SUBNET:
      for ( i = 0; i < 4; ++i )
        result ^= val->val_subnet.sn_net.addr[i];

      result ^= val->val_subnet.sn_width;
      break;

    case BRO_INTTYPE_OTHER:
      D(("WARNING -- __bro_val_hash() invoked on derived type.\n"));
      break;

    default:
      D(("Unknown internal type tag: %i\n", val->val_type->internal_tag));
      break;
    }

  D_RETURN_(result);
}
Beispiel #3
0
static uint32
__bro_list_val_hash(BroListVal *lv)
{
  uint32 result;
  BroList *l;

  D_ENTER;

  if (! lv)
    D_RETURN_(0);

  result = lv->len ^ lv->type_tag;

  for (l = lv->list; l; l = __bro_list_next(l))
    result ^= __bro_sobject_hash((BroSObject *) __bro_list_data(l));

  D_RETURN_(result);
}
Beispiel #4
0
uint32
__bro_vector_hash(BroVector *vec)
	{
	int i;
	uint32 result;

	D_ENTER;

	if ( ! vec )
		D_RETURN_(0);

	result = vec->length;

	for ( i = 0; i < vec->length; ++i )
		result ^= __bro_sobject_hash((BroSObject*) vec->vector[i]);

	D_RETURN_(result);
	}