problem with &expire_func

> 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).

    Vern

hi vern

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

any further ideas?

cheers
christoph