#ifndef _ALTQ_QOP_H_
#define _ALTQ_QOP_H_
#include <sys/queue.h>
#include <sys/types.h>
#include <altq/altq.h>
#include <altq/altq_red.h>
struct ifinfo;
struct classinfo;
struct fltrinfo;
struct qdisc_parser {
const char *qname;
int (*interface_parser)(const char *ifname, int argc, char **argv);
int (*class_parser)(const char *ifname, const char *clname,
const char *parent, int argc, char **argv);
};
struct qdisc_ops {
int qdisc_type;
const char *qname;
int (*attach)(struct ifinfo *);
int (*detach)(struct ifinfo *);
int (*clear)(struct ifinfo *);
int (*enable)(struct ifinfo *);
int (*disable)(struct ifinfo *);
int (*add_class)(struct classinfo *);
int (*modify_class)(struct classinfo *, void *);
int (*delete_class)(struct classinfo *);
int (*add_filter)(struct fltrinfo *);
int (*delete_filter)(struct fltrinfo *);
};
struct ifinfo {
LIST_ENTRY(ifinfo) next;
char *ifname;
uint64_t bandwidth;
u_int ifmtu;
u_int ifindex;
int enabled;
LIST_HEAD(, classinfo) cllist;
LIST_HEAD(, fltrinfo) fltr_rules;
struct classinfo *resv_class;
struct qdisc_ops *qdisc;
void *private;
int (*enable_hook)(struct ifinfo *);
int (*delete_hook)(struct ifinfo *);
};
struct classinfo {
LIST_ENTRY(classinfo) next;
u_long handle;
char *clname;
struct ifinfo *ifinfo;
struct classinfo *parent;
struct classinfo *sibling;
struct classinfo *child;
LIST_HEAD(, fltrinfo) fltrlist;
void *private;
int (*delete_hook)(struct classinfo *);
};
struct fltrinfo {
LIST_ENTRY(fltrinfo) next;
LIST_ENTRY(fltrinfo) nextrule;
u_long handle;
char *flname;
struct flow_filter fltr;
struct classinfo *clinfo;
int line_no;
int dontwarn;
};
int do_command(FILE *infp);
int qcmd_enable(const char *ifname);
int qcmd_disable(const char *ifname);
int qcmd_delete_if(const char *ifname);
int qcmd_clear_hierarchy(const char *ifname);
int qcmd_enableall(void);
int qcmd_disableall(void);
int qcmd_config(void);
int qcmd_init(void);
int qcmd_clear(const char *ifname);
int qcmd_destroyall(void);
int qcmd_restart(void);
int qcmd_delete_class(const char *ifname, const char *clname);
int qcmd_add_filter(const char *ifname, const char *clname, const char *flname,
const struct flow_filter *fltr);
int qcmd_delete_filter(const char *ifname, const char *clname,
const char *flname);
int qcmd_tbr_register(const char *ifname, uint64_t rate, u_int size);
int qop_enable(struct ifinfo *ifinfo);
int qop_disable(struct ifinfo *ifinfo);
int qop_delete_if(struct ifinfo *ifinfo);
int qop_clear(struct ifinfo *ifinfo);
int qop_add_if(struct ifinfo **rp, const char *ifname, uint64_t bandwidth,
struct qdisc_ops *qdisc_ops, void *if_private);
int qop_delete_if(struct ifinfo *ifinfo);
int qop_add_class(struct classinfo **rp, const char *clname,
struct ifinfo *ifinfo, struct classinfo *parent,
void *class_private);
int qop_modify_class(struct classinfo *clinfo, void *arg);
int qop_delete_class(struct classinfo *clinfo);
int qop_add_filter(struct fltrinfo **rp,
struct classinfo *clinfo,
const char *flname,
const struct flow_filter *fltr,
struct fltrinfo **conflict);
int qop_delete_filter(struct fltrinfo *fltr);
int is_q_enabled(const char *ifname);
struct ifinfo *ifname2ifinfo(const char *ifname);
struct ifinfo *input_ifname2ifinfo(const char *ifname);
struct classinfo *clname2clinfo(const struct ifinfo *ifinfo,
const char *clname);
struct classinfo * clhandle2clinfo(struct ifinfo *ifinfo, u_long handle);
struct fltrinfo *flname2flinfo(const struct classinfo *clinfo,
const char *flname);
struct fltrinfo *flhandle2fltrinfo(struct ifinfo *ifinfo, u_long handle);
void print_filter(const struct flow_filter *filt);
const char *qoperror(int qoperrno);
u_int get_ifindex(const char *ifname);
struct classinfo *get_rootclass(struct ifinfo *ifinfo);
struct classinfo *get_nextclass(struct classinfo *clinfo);
uint64_t atobps(const char *s);
u_long atobytes(const char *s);
int qop_red_set_defaults(int th_min, int th_max, int inv_pmax);
int qop_rio_set_defaults(struct redparams *params);
int open_module(const char *devname, int flags);
int client_input(FILE *fp);
#define QOPERR_OK 0
#define QOPERR_SYSCALL 1
#define QOPERR_NOMEM 2
#define QOPERR_INVAL 3
#define QOPERR_RANGE 4
#define QOPERR_BADIF 5
#define QOPERR_BADCLASS 6
#define QOPERR_BADFILTER 7
#define QOPERR_CLASS 8
#define QOPERR_CLASS_INVAL 9
#define QOPERR_CLASS_PERM 10
#define QOPERR_FILTER 11
#define QOPERR_FILTER_INVAL 12
#define QOPERR_FILTER_SHADOW 13
#define QOPERR_ADMISSION 14
#define QOPERR_ADMISSION_NOBW 15
#define QOPERR_ADMISSION_DELAY 16
#define QOPERR_ADMISSION_NOSVC 17
#define QOPERR_POLICY 18
#define QOPERR_MAX 18
extern int filter_dontwarn;
extern const char *altqconfigfile;
extern const char *qop_errlist[];
extern struct qdisc_ops nop_qdisc;
extern char *cur_ifname(void);
extern struct qdisc_parser qdisc_parser[];
#ifndef RSVPD
#define LOG log_write
void log_write(int, int, const char *, ...);
#define IsDebug(type) (l_debug >= LOG_DEBUG && (m_debug & (type)))
#define DEBUG_ALTQ 0x40
#define ntoh16(x) ((u_int16_t)ntohs((u_int16_t)(x)))
#define ntoh32(x) ((u_int32_t)ntohl((u_int32_t)(x)))
#define hton16(x) ((u_int16_t)htons((u_int16_t)(x)))
#define hton32(x) ((u_int32_t)htonl((u_int32_t)(x)))
extern int if_num;
extern int m_debug;
extern int l_debug;
extern int line_no;
extern int daemonize;
#endif
#ifdef INET6
static inline uint32_t IN6ADDR32_GET(const struct in6_addr *a, size_t i) {
uint32_t ret;
memcpy(&ret, &(a)->s6_addr[i << 2], sizeof(ret));
return ret;
}
static inline void IN6ADDR32_SET(struct in6_addr *a, size_t i, uint32_t val) {
memcpy(&(a)->s6_addr[i << 2], &val, sizeof(val));
}
#endif
#endif