version 1.19, 2011/04/05 15:07:46 |
version 1.20, 2011/10/13 18:32:30 |
|
|
{ |
{ |
const struct pf_addr *aa, *ab; |
const struct pf_addr *aa, *ab; |
u_int16_t pa, pb; |
u_int16_t pa, pb; |
int af, ret, ii, io; |
int af, side, ret, ii, io; |
|
|
af = s1->af; |
side = s1->direction == PF_IN ? PF_SK_STACK : PF_SK_WIRE; |
|
|
if (af > s2->af) |
if (s1->key[side].af > s2->key[side].af) |
return sortdir; |
return sortdir; |
if (af < s2->af) |
if (s1->key[side].af < s2->key[side].af) |
return -sortdir; |
return -sortdir; |
|
|
ii = io = 0; |
ii = io = 0; |
|
|
if (dir == PF_OUT) /* looking for source addr */ |
if (dir == PF_OUT) /* looking for source addr */ |
io = 1; |
io = 1; |
else /* looking for dest addr */ |
else /* looking for dest addr */ |
ii = 1; |
ii = 1; |
|
|
if (s1->direction == PF_IN) { |
if (s1->key[PF_SK_STACK].af != s1->key[PF_SK_WIRE].af) { |
|
dir = PF_OUT; |
|
side = PF_SK_STACK; |
|
} else { |
|
dir = s1->direction; |
|
side = PF_SK_WIRE; |
|
} |
|
|
|
if (dir == PF_IN) { |
aa = &s1->key[PF_SK_STACK].addr[ii]; |
aa = &s1->key[PF_SK_STACK].addr[ii]; |
pa = s1->key[PF_SK_STACK].port[ii]; |
pa = s1->key[PF_SK_STACK].port[ii]; |
|
af = s1->key[PF_SK_STACK].af; |
} else { |
} else { |
aa = &s1->key[PF_SK_WIRE].addr[io]; |
aa = &s1->key[side].addr[io]; |
pa = s1->key[PF_SK_WIRE].port[io]; |
pa = s1->key[side].port[io]; |
|
af = s1->key[side].af; |
} |
} |
|
|
if (s2->direction == PF_IN) { |
if (s2->key[PF_SK_STACK].af != s2->key[PF_SK_WIRE].af) { |
|
dir = PF_OUT; |
|
side = PF_SK_STACK; |
|
} else { |
|
dir = s2->direction; |
|
side = PF_SK_WIRE; |
|
} |
|
|
|
if (dir == PF_IN) { |
ab = &s2->key[PF_SK_STACK].addr[ii]; |
ab = &s2->key[PF_SK_STACK].addr[ii]; |
pb = s2->key[PF_SK_STACK].port[ii]; |
pb = s2->key[PF_SK_STACK].port[ii]; |
|
af = s1->key[PF_SK_STACK].af; |
} else { |
} else { |
ab = &s2->key[PF_SK_WIRE].addr[io]; |
ab = &s2->key[side].addr[io]; |
pb = s2->key[PF_SK_WIRE].port[io]; |
pb = s2->key[side].port[io]; |
|
af = s1->key[side].af; |
} |
} |
|
|
ret = compare_addr(af, aa, ab); |
ret = compare_addr(af, aa, ab); |
|
|
{ |
{ |
const struct pf_addr *aa, *ab; |
const struct pf_addr *aa, *ab; |
u_int16_t pa, pb; |
u_int16_t pa, pb; |
int af, ret, ii, io; |
int af, side, ret, ii, io; |
|
|
af = s1->af; |
side = s1->direction == PF_IN ? PF_SK_STACK : PF_SK_WIRE; |
|
|
|
if (s1->key[side].af > s2->key[side].af) |
if (af > s2->af) |
|
return sortdir; |
return sortdir; |
if (af < s2->af) |
if (s1->key[side].af < s2->key[side].af) |
return -sortdir; |
return -sortdir; |
|
|
ii = io = 0; |
ii = io = 0; |
|
|
if (dir == PF_OUT) /* looking for source addr */ |
if (dir == PF_OUT) /* looking for source addr */ |
io = 1; |
io = 1; |
else /* looking for dest addr */ |
else /* looking for dest addr */ |
ii = 1; |
ii = 1; |
|
|
if (s1->direction == PF_IN) { |
if (s1->key[PF_SK_STACK].af != s1->key[PF_SK_WIRE].af) { |
|
dir = PF_OUT; |
|
side = PF_SK_STACK; |
|
} else { |
|
dir = s1->direction; |
|
side = PF_SK_WIRE; |
|
} |
|
|
|
if (dir == PF_IN) { |
aa = &s1->key[PF_SK_STACK].addr[ii]; |
aa = &s1->key[PF_SK_STACK].addr[ii]; |
pa = s1->key[PF_SK_STACK].port[ii]; |
pa = s1->key[PF_SK_STACK].port[ii]; |
|
af = s1->key[PF_SK_STACK].af; |
} else { |
} else { |
aa = &s1->key[PF_SK_WIRE].addr[io]; |
aa = &s1->key[side].addr[io]; |
pa = s1->key[PF_SK_WIRE].port[io]; |
pa = s1->key[side].port[io]; |
|
af = s1->key[side].af; |
} |
} |
|
|
if (s2->direction == PF_IN) { |
if (s2->key[PF_SK_STACK].af != s2->key[PF_SK_WIRE].af) { |
|
dir = PF_OUT; |
|
side = PF_SK_STACK; |
|
} else { |
|
dir = s2->direction; |
|
side = PF_SK_WIRE; |
|
} |
|
|
|
if (dir == PF_IN) { |
ab = &s2->key[PF_SK_STACK].addr[ii]; |
ab = &s2->key[PF_SK_STACK].addr[ii]; |
pb = s2->key[PF_SK_STACK].port[ii]; |
pb = s2->key[PF_SK_STACK].port[ii]; |
|
af = s1->key[PF_SK_STACK].af; |
} else { |
} else { |
ab = &s2->key[PF_SK_WIRE].addr[io]; |
ab = &s2->key[side].addr[io]; |
pb = s2->key[PF_SK_WIRE].port[io]; |
pb = s2->key[side].port[io]; |
|
af = s1->key[side].af; |
} |
} |
|
|
|
|
|
|
|
|
void |
void |
print_fld_host2(field_def *fld, struct pfsync_state_key *ks, |
print_fld_host2(field_def *fld, struct pfsync_state_key *ks, |
struct pfsync_state_key *kn, int idx, int af) |
struct pfsync_state_key *kn, int idx) |
{ |
{ |
struct pf_addr *as = &ks->addr[idx]; |
struct pf_addr *as = &ks->addr[idx]; |
struct pf_addr *an = &kn->addr[idx]; |
struct pf_addr *an = &kn->addr[idx]; |
|
|
u_int16_t ps = ntohs(ks->port[idx]); |
u_int16_t ps = ntohs(ks->port[idx]); |
u_int16_t pn = ntohs(kn->port[idx]); |
u_int16_t pn = ntohs(kn->port[idx]); |
|
|
|
int asf = ks->af; |
|
int anf = kn->af; |
|
|
if (fld == NULL) |
if (fld == NULL) |
return; |
return; |
|
|
|
|
} |
} |
|
|
tb_start(); |
tb_start(); |
tb_print_addr(as, NULL, af); |
tb_print_addr(as, NULL, asf); |
|
|
if (af == AF_INET) |
if (asf == AF_INET) |
tbprintf(":%u", ps); |
tbprintf(":%u", ps); |
else |
else |
tbprintf("[%u]", ps); |
tbprintf("[%u]", ps); |
|
|
print_fld_tb(fld); |
print_fld_tb(fld); |
|
|
if (PF_ANEQ(as, an, af) || ps != pn) { |
if (asf != anf || PF_ANEQ(as, an, asf) || ps != pn) { |
tb_start(); |
tb_start(); |
tb_print_addr(an, NULL, af); |
tb_print_addr(an, NULL, anf); |
|
|
if (af == AF_INET) |
if (anf == AF_INET) |
tbprintf(":%u", pn); |
tbprintf(":%u", pn); |
else |
else |
tbprintf("[%u]", pn); |
tbprintf("[%u]", pn); |
|
|
struct pfsync_state_peer *src, *dst; |
struct pfsync_state_peer *src, *dst; |
struct protoent *p; |
struct protoent *p; |
u_int64_t sz; |
u_int64_t sz; |
|
int afto, dir; |
|
|
if (s->direction == PF_OUT) { |
afto = s->key[PF_SK_STACK].af == s->key[PF_SK_WIRE].af ? 0 : 1; |
|
dir = afto ? PF_OUT : s->direction; |
|
|
|
if (dir == PF_OUT) { |
src = &s->src; |
src = &s->src; |
dst = &s->dst; |
dst = &s->dst; |
} else { |
} else { |
|
|
else |
else |
print_fld_uint(FLD_PROTO, s->proto); |
print_fld_uint(FLD_PROTO, s->proto); |
|
|
if (s->direction == PF_OUT) { |
if (dir == PF_OUT) { |
print_fld_host2(FLD_SRC, &s->key[PF_SK_WIRE], |
print_fld_host2(FLD_SRC, |
&s->key[PF_SK_STACK], 1, s->af); |
&s->key[afto ? PF_SK_STACK : PF_SK_WIRE], |
print_fld_host2(FLD_DEST, &s->key[PF_SK_WIRE], |
&s->key[PF_SK_STACK], 1); |
&s->key[PF_SK_STACK], 0, s->af); |
print_fld_host2(FLD_DEST, |
|
&s->key[afto ? PF_SK_STACK : PF_SK_WIRE], |
|
&s->key[afto ? PF_SK_WIRE : PF_SK_STACK], 0); |
} else { |
} else { |
print_fld_host2(FLD_SRC, &s->key[PF_SK_STACK], |
print_fld_host2(FLD_SRC, &s->key[PF_SK_STACK], |
&s->key[PF_SK_WIRE], 0, s->af); |
&s->key[PF_SK_WIRE], 0); |
print_fld_host2(FLD_DEST, &s->key[PF_SK_STACK], |
print_fld_host2(FLD_DEST, &s->key[PF_SK_STACK], |
&s->key[PF_SK_WIRE], 1, s->af); |
&s->key[PF_SK_WIRE], 1); |
} |
} |
|
|
if (s->direction == PF_OUT) |
if (dir == PF_OUT) |
print_fld_str(FLD_DIR, "Out"); |
print_fld_str(FLD_DIR, "Out"); |
else |
else |
print_fld_str(FLD_DIR, "In"); |
print_fld_str(FLD_DIR, "In"); |