Change routing0_data_to_addrs BIF to return vector of addresses.

Because the order of addresses in type 0 routing headers is
interesting/important.
This commit is contained in:
Jon Siwek 2012-03-26 14:35:01 -05:00
parent d889f14638
commit 0ceca706f6
3 changed files with 14 additions and 13 deletions

View file

@ -2050,18 +2050,15 @@ function is_v6_addr%(a: addr%): bool
# ===========================================================================
## Converts the *data* field of :bro:type:`ip6_routing` records that have
## *rtype* of 0 into a set of addresses.
## *rtype* of 0 into a vector of addresses.
##
## s: The *data* field of an :bro:type:`ip6_routing` record that has
## an *rtype* of 0.
##
## Returns: The set of addresses contained in the routing header data.
function routing0_data_to_addrs%(s: string%): addr_set
## Returns: The vector of addresses contained in the routing header data.
function routing0_data_to_addrs%(s: string%): addr_vec
%{
BroType* index_type = base_type(TYPE_ADDR);
TypeList* set_index = new TypeList(index_type);
set_index->Append(index_type);
TableVal* tv = new TableVal(new SetType(set_index, 0));
VectorVal* rval = new VectorVal(new VectorType(base_type(TYPE_ADDR)));
int len = s->Len();
const u_char* bytes = s->Bytes();
@ -2074,12 +2071,12 @@ function routing0_data_to_addrs%(s: string%): addr_set
while ( len > 0 )
{
IPAddr a(IPAddr::IPv6, (const uint32*) bytes, IPAddr::Network);
tv->Assign(new AddrVal(a), 0);
rval->Assign(rval->Size(), new AddrVal(a), 0);
bytes += 16;
len -= 16;
}
return tv;
return rval;
%}
## Converts a :bro:type:`addr` to a :bro:type:`index_vec`.