linux/net/sched/act_meta_mark.c
<<
>>
Prefs
   1/*
   2 * net/sched/act_meta_mark.c IFE skb->mark metadata module
   3 *
   4 *              This program is free software; you can redistribute it and/or
   5 *              modify it under the terms of the GNU General Public License
   6 *              as published by the Free Software Foundation; either version
   7 *              2 of the License, or (at your option) any later version.
   8 *
   9 * copyright Jamal Hadi Salim (2015)
  10 *
  11*/
  12
  13#include <linux/types.h>
  14#include <linux/kernel.h>
  15#include <linux/string.h>
  16#include <linux/errno.h>
  17#include <linux/skbuff.h>
  18#include <linux/rtnetlink.h>
  19#include <linux/module.h>
  20#include <linux/init.h>
  21#include <net/netlink.h>
  22#include <net/pkt_sched.h>
  23#include <uapi/linux/tc_act/tc_ife.h>
  24#include <net/tc_act/tc_ife.h>
  25#include <linux/rtnetlink.h>
  26
  27static int skbmark_encode(struct sk_buff *skb, void *skbdata,
  28                          struct tcf_meta_info *e)
  29{
  30        u32 ifemark = skb->mark;
  31
  32        return ife_encode_meta_u32(ifemark, skbdata, e);
  33}
  34
  35static int skbmark_decode(struct sk_buff *skb, void *data, u16 len)
  36{
  37        u32 ifemark = *(u32 *)data;
  38
  39        skb->mark = ntohl(ifemark);
  40        return 0;
  41}
  42
  43static int skbmark_check(struct sk_buff *skb, struct tcf_meta_info *e)
  44{
  45        return ife_check_meta_u32(skb->mark, e);
  46}
  47
  48static struct tcf_meta_ops ife_skbmark_ops = {
  49        .metaid = IFE_META_SKBMARK,
  50        .metatype = NLA_U32,
  51        .name = "skbmark",
  52        .synopsis = "skb mark 32 bit metadata",
  53        .check_presence = skbmark_check,
  54        .encode = skbmark_encode,
  55        .decode = skbmark_decode,
  56        .get = ife_get_meta_u32,
  57        .alloc = ife_alloc_meta_u32,
  58        .release = ife_release_meta_gen,
  59        .validate = ife_validate_meta_u32,
  60        .owner = THIS_MODULE,
  61};
  62
  63static int __init ifemark_init_module(void)
  64{
  65        return register_ife_op(&ife_skbmark_ops);
  66}
  67
  68static void __exit ifemark_cleanup_module(void)
  69{
  70        unregister_ife_op(&ife_skbmark_ops);
  71}
  72
  73module_init(ifemark_init_module);
  74module_exit(ifemark_cleanup_module);
  75
  76MODULE_AUTHOR("Jamal Hadi Salim(2015)");
  77MODULE_DESCRIPTION("Inter-FE skb mark metadata module");
  78MODULE_LICENSE("GPL");
  79MODULE_ALIAS_IFE_META(IFE_META_SKBMARK);
  80