struct canprio_rule *canprio_rules;
int canprio_rules_count = 0;
-int canprio_inv_en;
+int canprio_inv_en = 0;
//--------------------------------------
/* Definition of Netlink messages */
TCA_CANPRIO_A_UNSPEC,
TCA_CANPRIO_CLASSID,
TCA_CANPRIO_RULES,
+ TCA_CANPRIO_INV_EN, /* enable inverse rules */
__TCA_CANPRIO_MAX,
};
#define TCA_CANPRIO_MAX (__TCA_CANPRIO_MAX - 1)
[TCA_CANPRIO_CLASSID] = { .type = NLA_U32 },
//FIXME Be aware of possible problems with 64bit kernel and 32bit userspace etc.
[TCA_CANPRIO_RULES] = { .len = sizeof(canprio_rules) },
+ [TCA_CANPRIO_INV_EN] = { .type = NLA_U32 },
};
struct canprio_head {
if (canid & CAN_EFF_FLAG) {
} else {
- if(test_bit(canid, f->match)) {
+ if(test_bit(canid, f->match) ^ canprio_inv_en) {
printk( " canprio_classify() match ok: ID 0x%x\n", canid);
*res = f->res;
return TC_POLICE_OK;
canprio_rules[i].canid, canprio_rules[i].canid_mask);
}
+ canprio_inv_en = nla_get_u32(tb[TCA_CANPRIO_INV_EN]);
+
//Add newly created filter to list of all filters
tcf_tree_lock(tp);
list_add(&f->link, &head->flist);