#include <linux/bitmap.h>
#include <linux/spinlock.h>
#include <linux/rcupdate.h>
+#include <linux/can.h>
-//--------------------------------------
-//FIXME put in some *.h file shared with userspace "tc"?
-struct canprio_rule {
- __u32 canid;
- __u32 canid_mask;
-};
-struct canprio_rule *canprio_rules;
+struct can_filter *canprio_rules;
int canprio_rules_count = 0;
//--------------------------------------
static const struct nla_policy canprio_policy[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(struct canprio_rule)) }, //FIXME
+ [TCA_CANPRIO_RULES] = { .len = (sizeof(struct can_filter)) }, //FIXME
[TCA_CANPRIO_INV_EN] = { .type = NLA_U32 },
};
return -EINVAL;
canprio_rules = nla_data(tb[TCA_CANPRIO_RULES]);
- canprio_rules_count = (nla_len(tb[TCA_CANPRIO_RULES]) / sizeof(struct canprio_rule));
+ canprio_rules_count = (nla_len(tb[TCA_CANPRIO_RULES]) / sizeof(struct can_filter));
printk(" rules_count = %u\n", canprio_rules_count);
for (i = 0; i < canprio_rules_count; i++) {
/* FIXME: shouldn't use here the same logic as in
* can_rcv_filter() to filter for various combination
* of flags (EFF, RTR) */
- if (canprio_rules[i].canid & CAN_EFF_FLAG) {
- err = canprio_eff_match_add(f, canprio_rules[i].canid, canprio_rules[i].canid_mask);
+ if (canprio_rules[i].can_id & CAN_EFF_FLAG) {
+ err = canprio_eff_match_add(f, canprio_rules[i].can_id, canprio_rules[i].can_mask);
if (err < 0)
goto errout;
} else {
- canprio_sff_match_add(f, canprio_rules[i].canid, canprio_rules[i].canid_mask);
+ canprio_sff_match_add(f, canprio_rules[i].can_id, canprio_rules[i].can_mask);
}
printk(" can ID to match = 0x%x with mask 0x%x\n",
- canprio_rules[i].canid, canprio_rules[i].canid_mask);
+ canprio_rules[i].can_id, canprio_rules[i].can_mask);
}
f->inv_match_en = 0;