Hello Kristian,
On 02/19/2014 06:51 PM, Kristian Kielhofner wrote:
It seems that with modparam("nathelper", "ping_nated_only", 0) set my configuration should work without always also setting nat_bflag (as that is used in various other places currently).
Seemingly, yes. From nh_timer:
rval = ul.get_all_ucontacts(buf, cblen, (ping_nated_only?ul.nat_flag:0), ((unsigned int)(unsigned long)timer_idx)*natping_interval+iteration, natping_processes*natping_interval);
The implication being that if ping_nated_only is < 1, contacts to ping are not filtered by the usrloc NAT flag. It did strike me as interesting that the usrloc API field is called 'nat_flag', but the usrloc modparam is called 'nat_bflag', but usrloc.c clearly reveals that they are one and the same:
unsigned int nat_flag; /*! nat_flag module parameter */ api->nat_flag = nat_bflag;
And the filter in get_all_mem_ucontacts() does apply the flags argument:
if ((c->cflags & flags) != flags) continue;
But it seems to me that it might not match if there are any other UL flags set besides the nat_bflag, e.g.
#define POWPOW (1 << 1) #define PINGPONG (1 << 2)
int flags = 0;
flags |= PINGPONG;
if((flags & POWPOW) != POWPOW) printf("Problem?\n");
sasha@tambourine:~$ ./ns Problem?
Are there other UL contact flags that could be in use here and breaking this comparison in get_all_mem_ucontacts()?