1 /* 2 * netlink-private/route/tc-api.h Traffic Control 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) 2011-2013 Thomas Graf <tgraf@suug.ch> 10 */ 11 12 #ifndef NETLINK_TC_API_H_ 13 #define NETLINK_TC_API_H_ 14 15 #include <netlink/netlink.h> 16 #include <netlink/msg.h> 17 #include <netlink/route/tc.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 /** 24 * Traffic control object operations 25 * @ingroup tc 26 * 27 * This structure holds function pointers and settings implementing 28 * the features of each traffic control object implementation. 29 */ 30 struct rtnl_tc_ops 31 { 32 /** 33 * Name of traffic control module 34 */ 35 char *to_kind; 36 37 /** 38 * Type of traffic control object 39 */ 40 enum rtnl_tc_type to_type; 41 42 43 /** 44 * Size of private data 45 */ 46 size_t to_size; 47 48 /** 49 * Dump callbacks 50 */ 51 void (*to_dump[NL_DUMP_MAX+1])(struct rtnl_tc *, void *, 52 struct nl_dump_params *); 53 /** 54 * Used to fill the contents of TCA_OPTIONS 55 */ 56 int (*to_msg_fill)(struct rtnl_tc *, void *, struct nl_msg *); 57 58 /** 59 * Uesd to to fill tc related messages, unlike with to_msg_fill, 60 * the contents is not encapsulated with a TCA_OPTIONS nested 61 * attribute. 62 */ 63 int (*to_msg_fill_raw)(struct rtnl_tc *, void *, struct nl_msg *); 64 65 /** 66 * TCA_OPTIONS message parser 67 */ 68 int (*to_msg_parser)(struct rtnl_tc *, void *); 69 70 /** 71 * Called before a tc object is destroyed 72 */ 73 void (*to_free_data)(struct rtnl_tc *, void *); 74 75 /** 76 * Called whenever a classifier object needs to be cloned 77 */ 78 int (*to_clone)(void *, void *); 79 80 /** 81 * Internal, don't touch 82 */ 83 struct nl_list_head to_list; 84 }; 85 86 struct rtnl_tc_type_ops 87 { 88 enum rtnl_tc_type tt_type; 89 90 char *tt_dump_prefix; 91 92 /** 93 * Dump callbacks 94 */ 95 void (*tt_dump[NL_DUMP_MAX+1])(struct rtnl_tc *, 96 struct nl_dump_params *); 97 }; 98 99 extern int rtnl_tc_msg_parse(struct nlmsghdr *, 100 struct rtnl_tc *); 101 extern int rtnl_tc_msg_build(struct rtnl_tc *, int, 102 int, struct nl_msg **); 103 104 extern void rtnl_tc_free_data(struct nl_object *); 105 extern int rtnl_tc_clone(struct nl_object *, 106 struct nl_object *); 107 extern void rtnl_tc_dump_line(struct nl_object *, 108 struct nl_dump_params *); 109 extern void rtnl_tc_dump_details(struct nl_object *, 110 struct nl_dump_params *); 111 extern void rtnl_tc_dump_stats(struct nl_object *, 112 struct nl_dump_params *); 113 extern uint64_t rtnl_tc_compare(struct nl_object *, 114 struct nl_object *, 115 uint64_t, int); 116 117 void * rtnl_tc_data_peek(struct rtnl_tc *tc); 118 extern void * rtnl_tc_data(struct rtnl_tc *); 119 extern void * rtnl_tc_data_check(struct rtnl_tc *, 120 struct rtnl_tc_ops *, int *); 121 122 extern struct rtnl_tc_ops * rtnl_tc_lookup_ops(enum rtnl_tc_type, 123 const char *); 124 extern struct rtnl_tc_ops * rtnl_tc_get_ops(struct rtnl_tc *); 125 extern int rtnl_tc_register(struct rtnl_tc_ops *); 126 extern void rtnl_tc_unregister(struct rtnl_tc_ops *); 127 128 extern void rtnl_tc_type_register(struct rtnl_tc_type_ops *); 129 extern void rtnl_tc_type_unregister(struct rtnl_tc_type_ops *); 130 131 #ifdef __cplusplus 132 } 133 #endif 134 135 #endif 136