1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */ 2*4dc78e53SAndroid Build Coastguard Worker /* 3*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2008-2010 Thomas Graf <[email protected]> 4*4dc78e53SAndroid Build Coastguard Worker */ 5*4dc78e53SAndroid Build Coastguard Worker 6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_CLS_EMATCH_H_ 7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_CLS_EMATCH_H_ 8*4dc78e53SAndroid Build Coastguard Worker 9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h> 10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/msg.h> 11*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/classifier.h> 12*4dc78e53SAndroid Build Coastguard Worker #include <linux/pkt_cls.h> 13*4dc78e53SAndroid Build Coastguard Worker 14*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 15*4dc78e53SAndroid Build Coastguard Worker extern "C" { 16*4dc78e53SAndroid Build Coastguard Worker #endif 17*4dc78e53SAndroid Build Coastguard Worker 18*4dc78e53SAndroid Build Coastguard Worker /* FIXME: Should be moved to the kernel header at some point */ 19*4dc78e53SAndroid Build Coastguard Worker #define RTNL_EMATCH_PROGID 2 20*4dc78e53SAndroid Build Coastguard Worker 21*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch; 22*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree; 23*4dc78e53SAndroid Build Coastguard Worker 24*4dc78e53SAndroid Build Coastguard Worker /** 25*4dc78e53SAndroid Build Coastguard Worker * Extended Match Operations 26*4dc78e53SAndroid Build Coastguard Worker */ 27*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_ops 28*4dc78e53SAndroid Build Coastguard Worker { 29*4dc78e53SAndroid Build Coastguard Worker int eo_kind; 30*4dc78e53SAndroid Build Coastguard Worker const char * eo_name; 31*4dc78e53SAndroid Build Coastguard Worker size_t eo_minlen; 32*4dc78e53SAndroid Build Coastguard Worker size_t eo_datalen; 33*4dc78e53SAndroid Build Coastguard Worker 34*4dc78e53SAndroid Build Coastguard Worker int (*eo_parse)(struct rtnl_ematch *, void *, size_t); 35*4dc78e53SAndroid Build Coastguard Worker void (*eo_dump)(struct rtnl_ematch *, 36*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *); 37*4dc78e53SAndroid Build Coastguard Worker int (*eo_fill)(struct rtnl_ematch *, struct nl_msg *); 38*4dc78e53SAndroid Build Coastguard Worker void (*eo_free)(struct rtnl_ematch *); 39*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head eo_list; 40*4dc78e53SAndroid Build Coastguard Worker }; 41*4dc78e53SAndroid Build Coastguard Worker 42*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_register(struct rtnl_ematch_ops *); 43*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_ematch_ops * rtnl_ematch_lookup_ops(int); 44*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_ematch_ops * rtnl_ematch_lookup_ops_by_name(const char *); 45*4dc78e53SAndroid Build Coastguard Worker 46*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_ematch * rtnl_ematch_alloc(void); 47*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_add_child(struct rtnl_ematch *, 48*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch *); 49*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_unlink(struct rtnl_ematch *); 50*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_free(struct rtnl_ematch *); 51*4dc78e53SAndroid Build Coastguard Worker 52*4dc78e53SAndroid Build Coastguard Worker extern void * rtnl_ematch_data(struct rtnl_ematch *); 53*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_set_flags(struct rtnl_ematch *, 54*4dc78e53SAndroid Build Coastguard Worker uint16_t); 55*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_unset_flags(struct rtnl_ematch *, 56*4dc78e53SAndroid Build Coastguard Worker uint16_t); 57*4dc78e53SAndroid Build Coastguard Worker extern uint16_t rtnl_ematch_get_flags(struct rtnl_ematch *); 58*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_set_ops(struct rtnl_ematch *, 59*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_ops *); 60*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_set_kind(struct rtnl_ematch *, 61*4dc78e53SAndroid Build Coastguard Worker uint16_t); 62*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_set_name(struct rtnl_ematch *, 63*4dc78e53SAndroid Build Coastguard Worker const char *); 64*4dc78e53SAndroid Build Coastguard Worker 65*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_ematch_tree *rtnl_ematch_tree_alloc(uint16_t); 66*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_tree_free(struct rtnl_ematch_tree *); 67*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_tree_add(struct rtnl_ematch_tree *, 68*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch *); 69*4dc78e53SAndroid Build Coastguard Worker 70*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_ematch_tree *rtnl_ematch_tree_clone(struct rtnl_ematch_tree *); 71*4dc78e53SAndroid Build Coastguard Worker 72*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_parse_attr(struct nlattr *, 73*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree **); 74*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_fill_attr(struct nl_msg *, int, 75*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree *); 76*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_ematch_tree_dump(struct rtnl_ematch_tree *, 77*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *); 78*4dc78e53SAndroid Build Coastguard Worker 79*4dc78e53SAndroid Build Coastguard Worker 80*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_ematch_parse_expr(const char *, char **, 81*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree **); 82*4dc78e53SAndroid Build Coastguard Worker 83*4dc78e53SAndroid Build Coastguard Worker extern char * rtnl_ematch_offset2txt(uint8_t, uint16_t, 84*4dc78e53SAndroid Build Coastguard Worker char *, size_t); 85*4dc78e53SAndroid Build Coastguard Worker extern char * rtnl_ematch_opnd2txt(uint8_t, char *, size_t); 86*4dc78e53SAndroid Build Coastguard Worker 87*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 88*4dc78e53SAndroid Build Coastguard Worker } 89*4dc78e53SAndroid Build Coastguard Worker #endif 90*4dc78e53SAndroid Build Coastguard Worker 91*4dc78e53SAndroid Build Coastguard Worker #endif 92