mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
![Paul Gortmaker](/assets/img/avatar_default.png)
Ideally, header files under include/linux shouldn't be adding includes of other headers, in anticipation of their consumers, but just the headers needed for the header itself to pass parsing with CPP. The module.h is particularly bad in this sense, as it itself does include a whole bunch of other headers, due to the complexity of module support. Since tc_ife.h is not going into a module struct looking for specific fields, we can just let it know that module is a struct, just like about 60 other include/linux headers already do. Cc: Jamal Hadi Salim <jhs@mojatatu.com> Cc: Cong Wang <xiyou.wangcong@gmail.com> Cc: Jiri Pirko <jiri@resnulli.us> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
67 lines
2.1 KiB
C
67 lines
2.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __NET_TC_IFE_H
|
|
#define __NET_TC_IFE_H
|
|
|
|
#include <net/act_api.h>
|
|
#include <linux/etherdevice.h>
|
|
#include <linux/rtnetlink.h>
|
|
|
|
struct module;
|
|
|
|
struct tcf_ife_params {
|
|
u8 eth_dst[ETH_ALEN];
|
|
u8 eth_src[ETH_ALEN];
|
|
u16 eth_type;
|
|
u16 flags;
|
|
|
|
struct rcu_head rcu;
|
|
};
|
|
|
|
struct tcf_ife_info {
|
|
struct tc_action common;
|
|
struct tcf_ife_params __rcu *params;
|
|
/* list of metaids allowed */
|
|
struct list_head metalist;
|
|
};
|
|
#define to_ife(a) ((struct tcf_ife_info *)a)
|
|
|
|
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 *, gfp_t);
|
|
void (*release)(struct tcf_meta_info *);
|
|
int (*validate)(void *val, int len);
|
|
struct module *owner;
|
|
};
|
|
|
|
#define MODULE_ALIAS_IFE_META(metan) MODULE_ALIAS("ife-meta-" 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_alloc_meta_u32(struct tcf_meta_info *mi, void *metaval, gfp_t gfp);
|
|
int ife_alloc_meta_u16(struct tcf_meta_info *mi, void *metaval, gfp_t gfp);
|
|
int ife_check_meta_u32(u32 metaval, struct tcf_meta_info *mi);
|
|
int ife_check_meta_u16(u16 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);
|
|
int ife_encode_meta_u16(u16 metaval, void *skbdata, struct tcf_meta_info *mi);
|
|
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 */
|