A few special values exist though:
TC_H_ROOT:
root qdisc (directly attached to the device)TC_H_INGRESS:
ingress qdisc (directly attached to the device)TC_H_UNSPEC:
unspecified qdisc (no reference)
// Allocate a new empty qdisc to be filled out struct rtnl_qdisc *qdisc = rtnl_qdisc_alloc(); // ... specify the kind of the Qdisc rtnl_qdisc_set_kind(qdisc, "pfifo"); // Specify the device the qdisc should be attached to rtnl_qdisc_set_ifindex(qdisc, ifindex); // ... specify the parent qdisc rtnl_qdisc_set_parent(qdisc, TC_H_ROOT); // Specifying the handle is not required but makes reidentifying easier // and may help to avoid adding a qdisc twice. rtnl_qdisc_set_handle(qdisc, 0x000A0000); // Now on to specify the qdisc specific options, see the relevant qdisc // modules for documentation, in this example we set the upper limit of // the packet fifo qdisc to 64 rtnl_qdisc_fifo_set_limit(qdisc, 64); rtnl_qdisc_add(handle, qdisc, NLM_R_REPLACE); // Free up the memory rtnl_qdisc_put(qdisc);
// Allocate a new empty qdisc to be filled out with the parameters // specifying the qdisc to be deleted. Alternatively a fully equiped // Qdisc object from a cache can be used. struct rtnl_qdisc *qdisc = rtnl_qdisc_alloc(); // The interface index of the device the qdisc is on and the parent handle // are the least required fields to be filled out. // Note: Specify TC_H_ROOT or TC_H_INGRESS as parent handle to delete the // root respectively root ingress qdisc. rtnl_qdisc_set_ifindex(qdisc, ifindex); rtnl_qdisc_set_parent(qdisc, parent_handle); // If required for identification, the handle can be specified as well. rtnl_qdisc_set_handle(qdisc, qdisc_handle); // Not required but maybe helpful as sanity check, the kind of the qdisc // can be specified to avoid mistakes. rtnl_qdisc_set_kind(qdisc, "pfifo"); // Finally delete the qdisc with rtnl_qdisc_delete(), alternatively // rtnl_qdisc_build_delete_request() can be invoked to generate an // appropritate netlink message to send out. rtnl_qdisc_delete(handle, qdisc); // Free up the memory rtnl_qdisc_put(qdisc);
Modules | |
Blackhole | |
Class Based Queueing (CBQ) | |
Differentiated Services Marker (DSMARK) | |
Packet/Bytes FIFO (pfifo/bfifo) | |
The FIFO qdisc comes in two flavours:. | |
Hierachical Token Bucket (HTB) | |
Network Emulator | |
For further documentation see http://linux-net.osdl.org/index.php/Netem. | |
(Fast) Prio | |
| |
Random Early Detection (RED) | |
Stochastic Fairness Queueing (SFQ) | |
| |
Token Bucket Filter (TBF) | |
Data Structures | |
struct | rtnl_qdisc_ops |
Qdisc Operations. More... | |
QDisc Module API | |
int | rtnl_qdisc_register (struct rtnl_qdisc_ops *ops) |
Register a qdisc module. | |
int | rtnl_qdisc_unregister (struct rtnl_qdisc_ops *ops) |
Unregister a qdisc module. | |
QDisc Addition | |
nl_msg * | rtnl_qdisc_build_add_request (struct rtnl_qdisc *qdisc, int flags) |
Build a netlink message to add a new qdisc. | |
int | rtnl_qdisc_add (struct nl_handle *handle, struct rtnl_qdisc *qdisc, int flags) |
Add a new qdisc. | |
QDisc Modification | |
nl_msg * | rtnl_qdisc_build_change_request (struct rtnl_qdisc *qdisc, struct rtnl_qdisc *new) |
Build a netlink message to change attributes of a existing qdisc. | |
int | rtnl_qdisc_change (struct nl_handle *handle, struct rtnl_qdisc *qdisc, struct rtnl_qdisc *new) |
Change attributes of a qdisc. | |
QDisc Deletion | |
nl_msg * | rtnl_qdisc_build_delete_request (struct rtnl_qdisc *qdisc) |
Build a netlink request message to delete a qdisc. | |
int | rtnl_qdisc_delete (struct nl_handle *handle, struct rtnl_qdisc *qdisc) |
Delete a qdisc. | |
General | |
rtnl_qdisc * | rtnl_qdisc_alloc (void) |
Allocate a new qdisc object. | |
void | rtnl_qdisc_put (struct rtnl_qdisc *qdisc) |
Give back reference on rqdisc object. | |
void | rtnl_qdisc_free (struct rtnl_qdisc *qdisc) |
Free qdisc object. | |
Qdisc Cache Management | |
nl_cache * | rtnl_qdisc_alloc_cache (struct nl_handle *handle) |
Build a qdisc cache including all qdiscs currently configured in the kernel. | |
rtnl_qdisc * | rtnl_qdisc_get_by_parent (struct nl_cache *cache, int ifindex, uint32_t parent) |
Look up qdisc by its parent in the provided cache. | |
rtnl_qdisc * | rtnl_qdisc_get (struct nl_cache *cache, int ifindex, uint32_t handle) |
Look up qdisc by its handle in the provided cache. | |
Qdisc Specific Options | |
nl_msg * | rtnl_qdisc_get_opts (struct rtnl_qdisc *qdisc) |
Return qdisc specific options for use in TCA_OPTIONS. | |
Iterators | |
void | rtnl_qdisc_foreach_child (struct rtnl_qdisc *qdisc, struct nl_cache *cache, void(*cb)(struct nl_object *, void *), void *arg) |
Call a callback for each child class of a qdisc. | |
void | rtnl_qdisc_foreach_cls (struct rtnl_qdisc *qdisc, struct nl_cache *cache, void(*cb)(struct nl_object *, void *), void *arg) |
Call a callback for each filter attached to the qdisc. | |
Attribute Modification | |
void | rtnl_qdisc_set_ifindex (struct rtnl_qdisc *qdisc, int ifindex) |
Set the interface index of a qdisc to the specified value. | |
int | rtnl_qdisc_get_ifindex (struct rtnl_qdisc *qdisc) |
Get the interface index of a qdisc. | |
void | rtnl_qdisc_set_handle (struct rtnl_qdisc *qdisc, uint32_t handle) |
Set the handle of a qdisc to the specified value. | |
uint32_t | rtnl_qdisc_get_handle (struct rtnl_qdisc *qdisc) |
Get the handle of a qdisc. | |
void | rtnl_qdisc_set_parent (struct rtnl_qdisc *qdisc, uint32_t parent) |
Set the parent handle of a qdisc to the specified value. | |
uint32_t | rtnl_qdisc_get_parent (struct rtnl_qdisc *qdisc) |
Get the parent handle of a qdisc. | |
void | rtnl_qdisc_set_kind (struct rtnl_qdisc *qdisc, const char *name) |
Set the kind of a qdisc to the specified value. | |
char * | rtnl_qdisc_get_kind (struct rtnl_qdisc *qdisc) |
Get the kind of a qdisc. | |
uint64_t | rtnl_qdisc_get_stat (struct rtnl_qdisc *qdisc, enum rtnl_tc_stats_id id) |
Get the statistic specified by the id. |
int rtnl_qdisc_register | ( | struct rtnl_qdisc_ops * | ops | ) |
Register a qdisc module.
ops | qdisc module operations |
Definition at line 130 of file qdisc.c.
References rtnl_qdisc_ops::qo_kind, and rtnl_qdisc_ops::qo_next.
int rtnl_qdisc_unregister | ( | struct rtnl_qdisc_ops * | ops | ) |
Unregister a qdisc module.
ops | qdisc module operations |
Definition at line 151 of file qdisc.c.
References rtnl_qdisc_ops::qo_kind, and rtnl_qdisc_ops::qo_next.
struct nl_msg* rtnl_qdisc_build_add_request | ( | struct rtnl_qdisc * | qdisc, | |
int | flags | |||
) |
Build a netlink message to add a new qdisc.
qdisc | qdisc to add | |
flags | additional netlink message flags |
Common message flags used:
Definition at line 336 of file qdisc.c.
References NLM_F_CREATE.
Referenced by rtnl_qdisc_add().
int rtnl_qdisc_add | ( | struct nl_handle * | handle, | |
struct rtnl_qdisc * | qdisc, | |||
int | flags | |||
) |
Add a new qdisc.
handle | netlink handle | |
qdisc | qdisc to delete | |
flags | additional netlink message flags |
Common message flags used:
Definition at line 363 of file qdisc.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_qdisc_build_add_request().
struct nl_msg* rtnl_qdisc_build_change_request | ( | struct rtnl_qdisc * | qdisc, | |
struct rtnl_qdisc * | new | |||
) |
Build a netlink message to change attributes of a existing qdisc.
qdisc | qdisc to change | |
new | new qdisc attributes |
Definition at line 400 of file qdisc.c.
References NLM_F_REPLACE.
Referenced by rtnl_qdisc_change().
int rtnl_qdisc_change | ( | struct nl_handle * | handle, | |
struct rtnl_qdisc * | qdisc, | |||
struct rtnl_qdisc * | new | |||
) |
Change attributes of a qdisc.
handle | netlink handle | |
qdisc | qdisc to change | |
new | new qdisc attributes |
Definition at line 418 of file qdisc.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_qdisc_build_change_request().
struct nl_msg* rtnl_qdisc_build_delete_request | ( | struct rtnl_qdisc * | qdisc | ) |
Build a netlink request message to delete a qdisc.
qdisc | qdisc to delete |
Definition at line 454 of file qdisc.c.
References nlmsg_append(), nlmsg_build_simple(), tcmsg::tcm_family, tcmsg::tcm_handle, tcmsg::tcm_ifindex, and tcmsg::tcm_parent.
Referenced by rtnl_qdisc_delete().
int rtnl_qdisc_delete | ( | struct nl_handle * | handle, | |
struct rtnl_qdisc * | qdisc | |||
) |
Delete a qdisc.
handle | netlink handle | |
qdisc | qdisc to delete |
Definition at line 487 of file qdisc.c.
References nl_send_auto_complete(), nl_wait_for_ack(), nlmsg_free(), and rtnl_qdisc_build_delete_request().
struct rtnl_qdisc* rtnl_qdisc_alloc | ( | void | ) |
Allocate a new qdisc object.
Definition at line 515 of file qdisc.c.
References nl_object_alloc_from_ops().
void rtnl_qdisc_put | ( | struct rtnl_qdisc * | qdisc | ) |
Give back reference on rqdisc object.
qdisc | Qdisc object to be given back. |
Definition at line 527 of file qdisc.c.
References nl_object_put().
void rtnl_qdisc_free | ( | struct rtnl_qdisc * | qdisc | ) |
Free qdisc object.
qdisc | Qdisc object to be freed. |
Definition at line 538 of file qdisc.c.
References nl_object_free().
struct nl_cache* rtnl_qdisc_alloc_cache | ( | struct nl_handle * | handle | ) |
Build a qdisc cache including all qdiscs currently configured in the kernel.
handle | netlink handle |
Definition at line 562 of file qdisc.c.
References nl_cache_alloc_from_ops(), nl_cache_free(), and nl_cache_update().
struct rtnl_qdisc* rtnl_qdisc_get_by_parent | ( | struct nl_cache * | cache, | |
int | ifindex, | |||
uint32_t | parent | |||
) |
Look up qdisc by its parent in the provided cache.
cache | qdisc cache | |
ifindex | interface the qdisc is attached to | |
parent | parent handle |
Definition at line 585 of file qdisc.c.
References nl_object_get().
Referenced by rtnl_class_leaf_qdisc().
struct rtnl_qdisc* rtnl_qdisc_get | ( | struct nl_cache * | cache, | |
int | ifindex, | |||
uint32_t | handle | |||
) |
Look up qdisc by its handle in the provided cache.
cache | qdisc cache | |
ifindex | interface the qdisc is attached to | |
handle | qdisc handle |
Definition at line 610 of file qdisc.c.
References nl_object_get().
struct nl_msg* rtnl_qdisc_get_opts | ( | struct rtnl_qdisc * | qdisc | ) |
Return qdisc specific options for use in TCA_OPTIONS.
qdisc | qdisc carrying the optiosn |
Definition at line 641 of file qdisc.c.
References rtnl_qdisc_ops::qo_get_opts.
void rtnl_qdisc_foreach_child | ( | struct rtnl_qdisc * | qdisc, | |
struct nl_cache * | cache, | |||
void(*)(struct nl_object *, void *) | cb, | |||
void * | arg | |||
) |
Call a callback for each child class of a qdisc.
qdisc | the parent qdisc | |
cache | a class cache including all classes of the interface the specified qdisc is attached to | |
cb | callback function | |
arg | argument to be passed to callback function |
Definition at line 667 of file qdisc.c.
References nl_cache_foreach_filter(), rtnl_class_alloc(), rtnl_class_put(), rtnl_class_set_ifindex(), rtnl_class_set_kind(), and rtnl_class_set_parent().
void rtnl_qdisc_foreach_cls | ( | struct rtnl_qdisc * | qdisc, | |
struct nl_cache * | cache, | |||
void(*)(struct nl_object *, void *) | cb, | |||
void * | arg | |||
) |
Call a callback for each filter attached to the qdisc.
qdisc | the parent qdisc | |
cache | a filter cache including at least all the filters attached to the specified qdisc | |
cb | callback function | |
arg | argument to be passed to callback function |
Definition at line 693 of file qdisc.c.
References nl_cache_foreach_filter(), rtnl_cls_alloc(), rtnl_cls_put(), rtnl_cls_set_ifindex(), and rtnl_cls_set_parent().
void rtnl_qdisc_set_ifindex | ( | struct rtnl_qdisc * | qdisc, | |
int | ifindex | |||
) |
int rtnl_qdisc_get_ifindex | ( | struct rtnl_qdisc * | qdisc | ) |
void rtnl_qdisc_set_handle | ( | struct rtnl_qdisc * | qdisc, | |
uint32_t | handle | |||
) |
uint32_t rtnl_qdisc_get_handle | ( | struct rtnl_qdisc * | qdisc | ) |
void rtnl_qdisc_set_parent | ( | struct rtnl_qdisc * | qdisc, | |
uint32_t | parent | |||
) |
uint32_t rtnl_qdisc_get_parent | ( | struct rtnl_qdisc * | qdisc | ) |
void rtnl_qdisc_set_kind | ( | struct rtnl_qdisc * | qdisc, | |
const char * | name | |||
) |
char* rtnl_qdisc_get_kind | ( | struct rtnl_qdisc * | qdisc | ) |
uint64_t rtnl_qdisc_get_stat | ( | struct rtnl_qdisc * | qdisc, | |
enum rtnl_tc_stats_id | id | |||
) |