1 /* 2 * netlink/route/classifier-modules.h Classifier Module API 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) 2003-2009 Thomas Graf <tgraf@suug.ch> 10 */ 11 12 #ifndef NETLINK_CLASS_MODULES_H_ 13 #define NETLINK_CLASS_MODULES_H_ 14 15 #include <netlink/netlink.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /** 22 * Classifier operations 23 * @ingroup cls_api 24 */ 25 struct rtnl_cls_ops 26 { 27 /** 28 * Name of classifier module 29 */ 30 char co_kind[32]; 31 32 33 /** 34 * Size of private classifier data 35 */ 36 size_t co_size; 37 38 /** 39 * Dump callbacks 40 */ 41 void (*co_dump[NL_DUMP_MAX+1])(struct rtnl_cls *, 42 struct nl_dump_params *); 43 /** 44 * Must return the contents supposed to be in TCA_OPTIONS 45 */ 46 int (*co_get_opts)(struct rtnl_cls *, struct nl_msg *); 47 48 /** 49 * TCA_OPTIONS message parser 50 */ 51 int (*co_msg_parser)(struct rtnl_cls *); 52 53 /** 54 * Called before a class object gets destroyed 55 */ 56 void (*co_free_data)(struct rtnl_cls *); 57 58 /** 59 * Called whenever a classifier object needs to be cloned 60 */ 61 int (*co_clone)(struct rtnl_cls *, struct rtnl_cls *); 62 63 /** 64 * INTERNAL (Do not use) 65 */ 66 struct rtnl_cls_ops *co_next; 67 }; 68 69 extern int rtnl_cls_register(struct rtnl_cls_ops *); 70 extern int rtnl_cls_unregister(struct rtnl_cls_ops *); 71 extern struct rtnl_cls_ops * rtnl_cls_lookup_ops(struct rtnl_cls *); 72 extern struct rtnl_cls_ops * __rtnl_cls_lookup_ops(const char *kind); 73 74 #ifdef __cplusplus 75 } 76 #endif 77 78 #endif 79