forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support to encoding decoding skb prio on IFE action
Example usage: Set the skb priority using skbedit then allow it to be encoded sudo tc qdisc add dev $ETH root handle 1: prio sudo tc filter add dev $ETH parent 1: protocol ip prio 10 \ u32 match ip protocol 1 0xff flowid 1:2 \ action skbedit prio 17 \ action ife encode \ allow prio \ dst 02:15:15:15:15:15 Note: You dont need the skbedit action if you are already encoding the skb priority earlier. A zero skb priority will not be sent Alternative hard code static priority of decimal 33 (unlike skbedit) then mark of 0x12 every time the filter matches sudo $TC filter add dev $ETH parent 1: protocol ip prio 10 \ u32 match ip protocol 1 0xff flowid 1:2 \ action ife encode \ type 0xDEAD \ use prio 33 \ use mark 0x12 \ dst 02:15:15:15:15:15 Signed-off-by: Jamal Hadi Salim <[email protected]> Acked-by: Cong Wang <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
Showing
3 changed files
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
* net/sched/act_meta_prio.c IFE skb->priority metadata module | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
* | ||
* copyright Jamal Hadi Salim (2015) | ||
* | ||
*/ | ||
|
||
#include <linux/types.h> | ||
#include <linux/kernel.h> | ||
#include <linux/string.h> | ||
#include <linux/errno.h> | ||
#include <linux/skbuff.h> | ||
#include <linux/rtnetlink.h> | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
#include <net/netlink.h> | ||
#include <net/pkt_sched.h> | ||
#include <uapi/linux/tc_act/tc_ife.h> | ||
#include <net/tc_act/tc_ife.h> | ||
|
||
static int skbprio_check(struct sk_buff *skb, struct tcf_meta_info *e) | ||
{ | ||
return ife_check_meta_u32(skb->priority, e); | ||
} | ||
|
||
static int skbprio_encode(struct sk_buff *skb, void *skbdata, | ||
struct tcf_meta_info *e) | ||
{ | ||
u32 ifeprio = skb->priority; /* avoid having to cast skb->priority*/ | ||
|
||
return ife_encode_meta_u32(ifeprio, skbdata, e); | ||
} | ||
|
||
static int skbprio_decode(struct sk_buff *skb, void *data, u16 len) | ||
{ | ||
u32 ifeprio = *(u32 *)data; | ||
|
||
skb->priority = ntohl(ifeprio); | ||
return 0; | ||
} | ||
|
||
static struct tcf_meta_ops ife_prio_ops = { | ||
.metaid = IFE_META_PRIO, | ||
.metatype = NLA_U32, | ||
.name = "skbprio", | ||
.synopsis = "skb prio metadata", | ||
.check_presence = skbprio_check, | ||
.encode = skbprio_encode, | ||
.decode = skbprio_decode, | ||
.get = ife_get_meta_u32, | ||
.alloc = ife_alloc_meta_u32, | ||
.owner = THIS_MODULE, | ||
}; | ||
|
||
static int __init ifeprio_init_module(void) | ||
{ | ||
return register_ife_op(&ife_prio_ops); | ||
} | ||
|
||
static void __exit ifeprio_cleanup_module(void) | ||
{ | ||
unregister_ife_op(&ife_prio_ops); | ||
} | ||
|
||
module_init(ifeprio_init_module); | ||
module_exit(ifeprio_cleanup_module); | ||
|
||
MODULE_AUTHOR("Jamal Hadi Salim(2015)"); | ||
MODULE_DESCRIPTION("Inter-FE skb prio metadata action"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_ALIAS_IFE_META(IFE_META_PRIO); |