16ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru/*
26ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru * netlink/route/class.h       Classes
36ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *
46ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *	This library is free software; you can redistribute it and/or
56ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *	modify it under the terms of the GNU Lesser General Public
66ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *	License as published by the Free Software Foundation version 2.1
76ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *	of the License.
86ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru *
96ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
106ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru */
116ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
126ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#ifndef NETLINK_CLASS_H_
136ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#define NETLINK_CLASS_H_
146ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
156ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#include <netlink/netlink.h>
166ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#include <netlink/route/tc.h>
176ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#include <netlink/route/qdisc.h>
186ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
196ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#ifdef __cplusplus
206ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern "C" {
216ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#endif
226ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
236ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Querustruct rtnl_class;
246ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
256ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern struct nl_object_ops class_obj_ops;
266ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
276ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern struct rtnl_class *	rtnl_class_alloc(void);
286ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_put(struct rtnl_class *);
296ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int		rtnl_class_alloc_cache(struct nl_sock *, int,
306ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru					       struct nl_cache **);
316ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern struct rtnl_class *rtnl_class_get(struct nl_cache *, int, uint32_t);
326ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
336ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru/* leaf qdisc access */
346ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern struct rtnl_qdisc *	rtnl_class_leaf_qdisc(struct rtnl_class *,
356ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						      struct nl_cache *);
366ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
376ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int		rtnl_class_build_add_request(struct rtnl_class *, int,
386ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						     struct nl_msg **);
396ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int		rtnl_class_add(struct nl_sock *, struct rtnl_class *,
406ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru				       int);
416ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
426ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int	rtnl_class_build_delete_request(struct rtnl_class *,
436ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru											struct nl_msg **);
446ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int	rtnl_class_delete(struct nl_sock *, struct rtnl_class *);
456ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
466ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_set_ifindex(struct rtnl_class *, int);
476ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern int		rtnl_class_get_ifindex(struct rtnl_class *);
486ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_set_handle(struct rtnl_class *, uint32_t);
496ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern uint32_t		rtnl_class_get_handle(struct rtnl_class *);
506ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_set_parent(struct rtnl_class *, uint32_t);
516ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern uint32_t		rtnl_class_get_parent(struct rtnl_class *);
526ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_set_kind(struct rtnl_class *, const char *);
536ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern char *		rtnl_class_get_kind(struct rtnl_class *);
546ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern uint64_t		rtnl_class_get_stat(struct rtnl_class *,
556ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru					    enum rtnl_tc_stats_id);
566ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
576ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru/* iterators */
586ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_foreach_child(struct rtnl_class *,
596ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						 struct nl_cache *,
606ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						 void (*cb)(struct nl_object *,
616ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						 	    void *),
626ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru						 void *);
636ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queruextern void		rtnl_class_foreach_cls(struct rtnl_class *,
646ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru					       struct nl_cache *,
656ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru					       void (*cb)(struct nl_object *,
666ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru							  void *),
676ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru					       void *);
686ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
696ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#ifdef __cplusplus
706ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru}
716ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#endif
726ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru
736ccf7349d61f73ac26a0675d735d903ab919c658Jean-Baptiste Queru#endif
74