* Authors: Thomas Graf <tgraf@suug.ch>
*
* ==========================================================================
- *
+ *
* The metadata ematch compares two meta objects where each object
* represents either a meta value stored in the kernel or a static
* value provided by userspace. The objects are not provided by
dst->len = 3;
} else {
struct net_device *dev;
-
+
dev = dev_get_by_index(skb->sk->sk_bound_dev_if);
*err = var_dev(dev, dst);
if (dev)
* Core
**************************************************************************/
-static inline int meta_get(struct sk_buff *skb, struct tcf_pkt_info *info,
+static inline int meta_get(struct sk_buff *skb, struct tcf_pkt_info *info,
struct meta_value *v, struct meta_obj *dst)
{
int err = 0;
struct rtattr *tb[TCA_EM_META_MAX];
struct tcf_meta_hdr *hdr;
struct meta_match *meta = NULL;
-
+
if (rtattr_parse(tb, TCA_EM_META_MAX, data, len) < 0)
goto errout;
rtattr_failure:
return -1;
-}
+}
static struct tcf_ematch_ops em_meta_ops = {
.kind = TCF_EM_META,
return tcf_em_register(&em_meta_ops);
}
-static void __exit exit_em_meta(void)
+static void __exit exit_em_meta(void)
{
tcf_em_unregister(&em_meta_ops);
}
module_init(init_em_meta);
module_exit(exit_em_meta);
+
+MODULE_ALIAS_TCF_EMATCH(TCF_EM_META);