|
|
@@ -18,6 +18,16 @@ MODULE_DESCRIPTION("Xtables: add/match connection trackling labels");
|
|
|
MODULE_ALIAS("ipt_connlabel");
|
|
|
MODULE_ALIAS("ip6t_connlabel");
|
|
|
|
|
|
+static bool connlabel_match(const struct nf_conn *ct, u16 bit)
|
|
|
+{
|
|
|
+ struct nf_conn_labels *labels = nf_ct_labels_find(ct);
|
|
|
+
|
|
|
+ if (!labels)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ return BIT_WORD(bit) < labels->words && test_bit(bit, labels->bits);
|
|
|
+}
|
|
|
+
|
|
|
static bool
|
|
|
connlabel_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
|
|
{
|
|
|
@@ -33,7 +43,7 @@ connlabel_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
|
|
if (info->options & XT_CONNLABEL_OP_SET)
|
|
|
return (nf_connlabel_set(ct, info->bit) == 0) ^ invert;
|
|
|
|
|
|
- return nf_connlabel_match(ct, info->bit) ^ invert;
|
|
|
+ return connlabel_match(ct, info->bit) ^ invert;
|
|
|
}
|
|
|
|
|
|
static int connlabel_mt_check(const struct xt_mtchk_param *par)
|