> global mytable: table[addr] of bool &write_expire=10sec &expire_func=myfunc;
>
> function myfunc(t: table[addr] of bool , idx: any): interval {
> local srcIP: addr;
>
> print network_time(),"help!!!";
> [srcIP] = idx;
>
> return 0secs;
> }
The problem here is that if there's just a single index, it's transmitted
in the call to the expire_func as its own type rather than as a combo "any"
type. So you need to instead use:
function myfunc(t: table[addr] of bool , idx: addr): interval {
local srcIP: addr;
srcIP = idx;
return 0secs;
}
(Or "local srcIP = idx", or just use idx directly in the function.)
Bro shouldn't of course crash for the example above as you gave it.
I've entered fixing this into the bug-tracker, but using the type directly
as I show is the proper way to do this (i.e., not merely a workaround).
The problem here is that if there's just a single index, it's transmitted
in the call to the expire_func as its own type rather than as a combo
"any" type. So you need to instead use:
function myfunc(t: table[addr] of bool , idx: addr): interval {
local srcIP: addr;
srcIP = idx;
return 0secs;
}
(Or "local srcIP = idx", or just use idx directly in the function.)
Bro shouldn't of course crash for the example above as you gave it.
I've entered fixing this into the bug-tracker, but using the type directly
as I show is the proper way to do this (i.e., not merely a workaround).
i already tried these cases:
function myfunc(t: table[addr] of bool , idx: addr): interval {
local srcIP: addr;
srcIP = idx;
return 0secs;
}
results in this error when i want to start bro:
policy/test.bro, line xx (srcIP = idx): error, type clash in assignment
and:
function myfunc(t: table[addr] of count, idx: any): interval {
local srcIP = idx;
print t[srcIP];
return 0secs;
}
results in:
addr, line 0 and policy/test.bro, line xx
(addr and srcIP): error, type clash
policy/test.bro, line xx and addr, line 0
(srcIP and addr): error, type mismatch
policy/test.bro, line xx (t[srcIP]): error, not an index type