Mr Dash Four <mr.dash.four@xxxxxxxxxxxxxx> wrote:
> 1. ipset bug - "ipset --help" produces multiples of hash:ip,port,net, hash:net,iface, hash:net,port & hash:net. Executing "ipset --help" gives me this:
> Supported set types:
> list:set
> hash:ip,port,net
> hash:ip,port,net
> hash:ip,port,net
> hash:ip,port,ip
> hash:ip,port
> hash:net,iface
> hash:net,iface
> hash:net,port
> hash:net,port
> hash:net,port
> hash:net
> hash:net
> hash:net
> hash:ip
> bitmap:port
> bitmap:ip,mac
> bitmap:ip
>
> 2. tc ematch bug
> tc filter add dev ifb0 protocol ip parent f:0 prio 10\
> basic match (ipset'(set1 src,src,dst)' or ipset'(set2 dst,src,src)' or ipset'(set3 src,dst)') and ipset'(set4 src,src)'\
> flowid f:38
>
> produces the following error: syntax error near unexpected token `('
Probably from your shell? Escaping the outer ( ) via \ works for me:
.. match \(ipset'(set1 src,src,dst)' or ipset'(set2 dst,src,src)' or ipset'(set3 \
src,dst)'\) and ipset'(set4 src,src)' flowid ...
$ tc filter show dev ifb0
filter parent ffff: protocol ip pref 10 basic handle 0x1 flowid f:38
(
ipset(set1 src,src,dst)
OR ipset(set2 dst,src,src)
OR ipset(set3 src,dst)
) AND ipset(set4 src,src)
> 3. Numerous tc ematch ipset bugs:
Well, i did warn you :-)
> 3.1. bitmap:port can't produce any matches
>
> ipset n b_test-port bitmap:port range 22-22 timeout 0
> ipset a b_test-port 22
>
> tc filter add dev ifb0 protocol ip parent f:0 prio 14\
> basic match ipset'(b_test-port src)'\
> flowid f:26
>
> produces no matches. This is also true when port match is present in an "and" | "or" logical expression, like ipset'(b_ssh-host src)' and ipset'(b_ssh-port src)'
True. The bug is that classifiers run with skb->data pointing to the L2 header,
but netfilter starts with skb->data pointing to L3 header.
Please, consider re-testing with this patchlet:
diff --git a/net/sched/em_ipset.c b/net/sched/em_ipset.c
index 0a153d0..13ec7b6 100644
--- a/net/sched/em_ipset.c
+++ b/net/sched/em_ipset.c
@@ -56,6 +56,7 @@ static int em_ipset_match(struct sk_buff *skb, struct tcf_ematch *em,
struct ip_set_adt_opt opt;
struct xt_action_param acpar;
const struct xt_set_info *set = (const void *) em->data;
+ int ret, network_offset;
switch (skb->protocol) {
case htons(ETH_P_IP):
@@ -84,7 +85,12 @@ static int em_ipset_match(struct sk_buff *skb, struct tcf_ematch *em,
opt.flags = set->flags;
opt.cmdflags = 0;
opt.timeout = ~0u;
- return ip_set_test(set->index, skb, &acpar, &opt);
+
+ network_offset = skb_network_offset(skb);
+ skb_pull(skb, network_offset);
+ ret = ip_set_test(set->index, skb, &acpar, &opt);
+ skb_push(skb, network_offset);
+ return ret;
}
> 3.2. hash:ip,port produces no matches:
>
> ipset n h_test-hosts hash:ip,port family inet timeout 0 hashsize 64
> ipset a h_test-hosts 10.1.1.7,tcp:22
>
> tc filter add dev ifb0 protocol ip parent f:0 prio 21\
> basic match ipset'(h_test-hosts src,src)'\
> flowid f:33
Haven't tried this, but anything trying to access
transport headers won't work due to bug above.
Thanks for testing!
Florian
--
To unsubscribe from this list: send the line "unsubscribe lartc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Bugtraq]
[Fedora Legacy]
[GCC Help]
[Yosemite News]
[Yosemite Photos]
[IP Tables]
[Netfilter Devel]
[Fedora Users]