Home | History | Annotate | Download | only in route
      1 /*
      2  * netlink/route/tc.h		Traffic Control
      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-2011 Thomas Graf <tgraf (at) suug.ch>
     10  */
     11 
     12 #ifndef NETLINK_TC_H_
     13 #define NETLINK_TC_H_
     14 
     15 #include <netlink/netlink.h>
     16 #include <netlink/cache.h>
     17 #include <netlink/data.h>
     18 #include <netlink/route/link.h>
     19 #include <linux/pkt_sched.h>
     20 #include <linux/pkt_cls.h>
     21 
     22 #ifdef __cplusplus
     23 extern "C" {
     24 #endif
     25 
     26 enum rtnl_tc_type {
     27 	RTNL_TC_TYPE_QDISC,
     28 	RTNL_TC_TYPE_CLASS,
     29 	RTNL_TC_TYPE_CLS,
     30 	RTNL_TC_TYPE_ACT,
     31 	__RTNL_TC_TYPE_MAX,
     32 };
     33 
     34 #define RTNL_TC_TYPE_MAX (__RTNL_TC_TYPE_MAX - 1)
     35 
     36 /**
     37  * Compute tc handle based on major and minor parts
     38  * @ingroup tc
     39  */
     40 #define TC_HANDLE(maj, min)	(TC_H_MAJ((maj) << 16) | TC_H_MIN(min))
     41 
     42 /**
     43  * Traffic control object
     44  * @ingroup tc
     45  */
     46 struct rtnl_tc;
     47 
     48 /**
     49  * Macro to cast qdisc/class/classifier to tc object
     50  * @ingroup tc
     51  *
     52  * @code
     53  * rtnl_tc_set_mpu(TC_CAST(qdisc), 40);
     54  * @endcode
     55  */
     56 #define TC_CAST(ptr)		((struct rtnl_tc *) (ptr))
     57 
     58 /**
     59  * Traffic control statistical identifier
     60  * @ingroup tc
     61  *
     62  * @code
     63  * uint64_t n = rtnl_tc_get_stat(TC_CAST(class), RTNL_TC_PACKETS);
     64  * @endcode
     65  */
     66 enum rtnl_tc_stat {
     67 	RTNL_TC_PACKETS,	/**< Number of packets seen */
     68 	RTNL_TC_BYTES,		/**< Total bytes seen */
     69 	RTNL_TC_RATE_BPS,	/**< Current bits/s (rate estimator) */
     70 	RTNL_TC_RATE_PPS,	/**< Current packet/s (rate estimator) */
     71 	RTNL_TC_QLEN,		/**< Current queue length */
     72 	RTNL_TC_BACKLOG,	/**< Current backlog length */
     73 	RTNL_TC_DROPS,		/**< Total number of packets dropped */
     74 	RTNL_TC_REQUEUES,	/**< Total number of requeues */
     75 	RTNL_TC_OVERLIMITS,	/**< Total number of overlimits */
     76 	__RTNL_TC_STATS_MAX,
     77 };
     78 
     79 #define RTNL_TC_STATS_MAX (__RTNL_TC_STATS_MAX - 1)
     80 
     81 extern void		rtnl_tc_set_ifindex(struct rtnl_tc *, int);
     82 extern int		rtnl_tc_get_ifindex(struct rtnl_tc *);
     83 extern void		rtnl_tc_set_link(struct rtnl_tc *, struct rtnl_link *);
     84 extern struct rtnl_link *rtnl_tc_get_link(struct rtnl_tc *);
     85 extern void		rtnl_tc_set_mtu(struct rtnl_tc *, uint32_t);
     86 extern uint32_t		rtnl_tc_get_mtu(struct rtnl_tc *);
     87 extern void		rtnl_tc_set_mpu(struct rtnl_tc *, uint32_t);
     88 extern uint32_t		rtnl_tc_get_mpu(struct rtnl_tc *);
     89 extern void		rtnl_tc_set_overhead(struct rtnl_tc *, uint32_t);
     90 extern uint32_t		rtnl_tc_get_overhead(struct rtnl_tc *);
     91 extern void		rtnl_tc_set_linktype(struct rtnl_tc *, uint32_t);
     92 extern uint32_t		rtnl_tc_get_linktype(struct rtnl_tc *);
     93 extern void		rtnl_tc_set_handle(struct rtnl_tc *, uint32_t);
     94 extern uint32_t		rtnl_tc_get_handle(struct rtnl_tc *);
     95 extern void		rtnl_tc_set_parent(struct rtnl_tc *, uint32_t);
     96 extern uint32_t		rtnl_tc_get_parent(struct rtnl_tc *);
     97 extern int		rtnl_tc_set_kind(struct rtnl_tc *, const char *);
     98 extern char *		rtnl_tc_get_kind(struct rtnl_tc *);
     99 extern uint64_t		rtnl_tc_get_stat(struct rtnl_tc *, enum rtnl_tc_stat);
    100 
    101 extern int		rtnl_tc_calc_txtime(int, int);
    102 extern int		rtnl_tc_calc_bufsize(int, int);
    103 extern int		rtnl_tc_calc_cell_log(int);
    104 
    105 extern int		rtnl_tc_read_classid_file(void);
    106 extern char *		rtnl_tc_handle2str(uint32_t, char *, size_t);
    107 extern int		rtnl_tc_str2handle(const char *, uint32_t *);
    108 extern int		rtnl_classid_generate(const char *, uint32_t *,
    109 					      uint32_t);
    110 
    111 #ifdef __cplusplus
    112 }
    113 #endif
    114 
    115 #endif
    116