Home | History | Annotate | Download | only in cls
      1 /*
      2  * netlink/route/cls/ematch.h		Extended Matches
      3  *
      4  *	This library is free software; you can redistribute it and/or
      5  *	modify it under the terms of the GNU Lesser General Public
      6  *	License as published by the Free Software Foundation version 2.1
      7  *	of the License.
      8  *
      9  * Copyright (c) 2008 Thomas Graf <tgraf (at) suug.ch>
     10  */
     11 
     12 #ifndef NETLINK_CLS_EMATCH_H_
     13 #define NETLINK_CLS_EMATCH_H_
     14 
     15 #include <netlink/netlink.h>
     16 #include <netlink/route/classifier.h>
     17 #include <linux/pkt_cls.h>
     18 
     19 #ifdef __cplusplus
     20 extern "C" {
     21 #endif
     22 
     23 struct rtnl_ematch;
     24 struct rtnl_ematch_tree;
     25 
     26 struct rtnl_ematch_ops
     27 {
     28 	int				eo_kind;
     29 	const char *			eo_name;
     30 	size_t				eo_datalen;
     31 
     32 	int			      (*eo_parse)(struct rtnl_ematch *,
     33 						  void *, size_t);
     34 	void			      (*eo_dump)(struct rtnl_ematch *,
     35 						 struct nl_dump_params *);
     36 	struct nl_list_head		eo_list;
     37 };
     38 
     39 extern int	rtnl_ematch_register(struct rtnl_ematch_ops *);
     40 extern int	rtnl_ematch_unregister(struct rtnl_ematch_ops *);
     41 
     42 extern struct rtnl_ematch_ops *
     43 		rtnl_ematch_lookup_ops(int);
     44 extern struct rtnl_ematch_ops *
     45 		rtnl_ematch_lookup_ops_name(const char *);
     46 
     47 extern struct rtnl_ematch *
     48 		rtnl_ematch_alloc(struct rtnl_ematch_ops *);
     49 extern void	rtnl_ematch_add_child(struct rtnl_ematch *,
     50 				      struct rtnl_ematch *);
     51 extern void	rtnl_ematch_unlink(struct rtnl_ematch *);
     52 extern void	rtnl_ematch_free(struct rtnl_ematch *);
     53 
     54 extern void *	rtnl_ematch_data(struct rtnl_ematch *);
     55 extern void	rtnl_ematch_set_flags(struct rtnl_ematch *, uint16_t);
     56 extern void	rtnl_ematch_unset_flags(struct rtnl_ematch *, uint16_t);
     57 extern uint16_t	rtnl_ematch_get_flags(struct rtnl_ematch *);
     58 
     59 extern struct rtnl_ematch_tree *
     60 		rtnl_ematch_tree_alloc(uint16_t);
     61 extern void	rtnl_ematch_tree_free(struct rtnl_ematch_tree *);
     62 
     63 extern int	rtnl_ematch_parse(struct nlattr *, struct rtnl_ematch_tree **);
     64 extern void	rtnl_ematch_tree_add_tail(struct rtnl_ematch_tree *,
     65 					  struct rtnl_ematch *);
     66 extern void	rtnl_ematch_tree_dump(struct rtnl_ematch_tree *,
     67 				      struct nl_dump_params *);
     68 
     69 #ifdef __cplusplus
     70 }
     71 #endif
     72 
     73 #endif
     74