-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Jamal Hadi Salim says: ==================== net_sched: Add support for IFE action As agreed at netconf in Seville, here's the patch finally (1 year was just too long to wait for an ethertype. Now we are just going have the user configure one). Described in netdev01 paper: "Distributing Linux Traffic Control Classifier-Action Subsystem" Authors: Jamal Hadi Salim and Damascene M. Joachimpillai The original motivation and deployment of this work was to horizontally scale packet processing at scope of a chasis or rack. This means one could take a tc policy and split it across machines connected over L2. The paper refers to this as "pipeline stage indexing". Other use cases which evolved out of the original intent include but are not limited to carrying OAM information, carrying exception handling metadata, carrying programmed authentication and authorization information, encapsulating programmed compliance information, service IDs etc. Read the referenced paper for more details. The architecture allows for incremental updates for new metadatum support to cover different use cases. This patch set includes support for basic skb metadatum. Followup patches will have more examples of metadata and other features. v4 changes: Integrate more feedback from Cong v3 changes: Integrate with the new namespace changes Remove skbhash and queue mapping metadata (but keep their claim for ids) Integrate feedback from Cong Integrate feedback from Daniel v2 changes: Remove module option for an upper bound of metadata Integrate feedback from Cong Integrate feedback from Daniel ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
- Loading branch information
Showing
7 changed files
with
1,149 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
#ifndef __NET_TC_IFE_H | ||
#define __NET_TC_IFE_H | ||
|
||
#include <net/act_api.h> | ||
#include <linux/etherdevice.h> | ||
#include <linux/rtnetlink.h> | ||
#include <linux/module.h> | ||
|
||
#define IFE_METAHDRLEN 2 | ||
struct tcf_ife_info { | ||
struct tcf_common common; | ||
u8 eth_dst[ETH_ALEN]; | ||
u8 eth_src[ETH_ALEN]; | ||
u16 eth_type; | ||
u16 flags; | ||
/* list of metaids allowed */ | ||
struct list_head metalist; | ||
}; | ||
#define to_ife(a) \ | ||
container_of(a->priv, struct tcf_ife_info, common) | ||
|
||
struct tcf_meta_info { | ||
const struct tcf_meta_ops *ops; | ||
void *metaval; | ||
u16 metaid; | ||
struct list_head metalist; | ||
}; | ||
|
||
struct tcf_meta_ops { | ||
u16 metaid; /*Maintainer provided ID */ | ||
u16 metatype; /*netlink attribute type (look at net/netlink.h) */ | ||
const char *name; | ||
const char *synopsis; | ||
struct list_head list; | ||
int (*check_presence)(struct sk_buff *, struct tcf_meta_info *); | ||
int (*encode)(struct sk_buff *, void *, struct tcf_meta_info *); | ||
int (*decode)(struct sk_buff *, void *, u16 len); | ||
int (*get)(struct sk_buff *skb, struct tcf_meta_info *mi); | ||
int (*alloc)(struct tcf_meta_info *, void *); | ||
void (*release)(struct tcf_meta_info *); | ||
int (*validate)(void *val, int len); | ||
struct module *owner; | ||
}; | ||
|
||
#define MODULE_ALIAS_IFE_META(metan) MODULE_ALIAS("ifemeta" __stringify_1(metan)) | ||
|
||
int ife_get_meta_u32(struct sk_buff *skb, struct tcf_meta_info *mi); | ||
int ife_get_meta_u16(struct sk_buff *skb, struct tcf_meta_info *mi); | ||
int ife_tlv_meta_encode(void *skbdata, u16 attrtype, u16 dlen, | ||
const void *dval); | ||
int ife_alloc_meta_u32(struct tcf_meta_info *mi, void *metaval); | ||
int ife_alloc_meta_u16(struct tcf_meta_info *mi, void *metaval); | ||
int ife_check_meta_u32(u32 metaval, struct tcf_meta_info *mi); | ||
int ife_encode_meta_u32(u32 metaval, void *skbdata, struct tcf_meta_info *mi); | ||
int ife_validate_meta_u32(void *val, int len); | ||
int ife_validate_meta_u16(void *val, int len); | ||
void ife_release_meta_gen(struct tcf_meta_info *mi); | ||
int register_ife_op(struct tcf_meta_ops *mops); | ||
int unregister_ife_op(struct tcf_meta_ops *mops); | ||
|
||
#endif /* __NET_TC_IFE_H */ |
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,38 @@ | ||
#ifndef __UAPI_TC_IFE_H | ||
#define __UAPI_TC_IFE_H | ||
|
||
#include <linux/types.h> | ||
#include <linux/pkt_cls.h> | ||
|
||
#define TCA_ACT_IFE 25 | ||
/* Flag bits for now just encoding/decoding; mutually exclusive */ | ||
#define IFE_ENCODE 1 | ||
#define IFE_DECODE 0 | ||
|
||
struct tc_ife { | ||
tc_gen; | ||
__u16 flags; | ||
}; | ||
|
||
/*XXX: We need to encode the total number of bytes consumed */ | ||
enum { | ||
TCA_IFE_UNSPEC, | ||
TCA_IFE_PARMS, | ||
TCA_IFE_TM, | ||
TCA_IFE_DMAC, | ||
TCA_IFE_SMAC, | ||
TCA_IFE_TYPE, | ||
TCA_IFE_METALST, | ||
__TCA_IFE_MAX | ||
}; | ||
#define TCA_IFE_MAX (__TCA_IFE_MAX - 1) | ||
|
||
#define IFE_META_SKBMARK 1 | ||
#define IFE_META_HASHID 2 | ||
#define IFE_META_PRIO 3 | ||
#define IFE_META_QMAP 4 | ||
/*Can be overridden at runtime by module option*/ | ||
#define __IFE_META_MAX 5 | ||
#define IFE_META_MAX (__IFE_META_MAX - 1) | ||
|
||
#endif |
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
Oops, something went wrong.