struct Qdisc *prio_classify(struct sk_buff *skb, struct Qdisc *sch,int *r)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
u32 band = skb->priority;
struct tcf_result res;
prio_dequeue(struct Qdisc* sch)
{
struct sk_buff *skb;
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
int prio;
struct Qdisc *qdisc;
static unsigned int prio_drop(struct Qdisc* sch)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
int prio;
unsigned int len;
struct Qdisc *qdisc;
prio_reset(struct Qdisc* sch)
{
int prio;
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
for (prio=0; prio<q->bands; prio++)
qdisc_reset(q->queues[prio]);
prio_destroy(struct Qdisc* sch)
{
int prio;
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
struct tcf_proto *tp;
while ((tp = q->filter_list) != NULL) {
tcf_destroy(tp);
}
- for (prio=0; prio<q->bands; prio++)
+ for (prio=0; prio<q->bands; prio++) {
qdisc_destroy(q->queues[prio]);
+ q->queues[prio] = &noop_qdisc;
+ }
}
static int prio_tune(struct Qdisc *sch, struct rtattr *opt)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
struct tc_prio_qopt *qopt = RTA_DATA(opt);
int i;
static int prio_init(struct Qdisc *sch, struct rtattr *opt)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
int i;
for (i=0; i<TCQ_PRIO_BANDS; i++)
static int prio_dump(struct Qdisc *sch, struct sk_buff *skb)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
unsigned char *b = skb->tail;
struct tc_prio_qopt opt;
static int prio_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
struct Qdisc **old)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
unsigned long band = arg - 1;
if (band >= q->bands)
static struct Qdisc *
prio_leaf(struct Qdisc *sch, unsigned long arg)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
unsigned long band = arg - 1;
if (band >= q->bands)
static unsigned long prio_get(struct Qdisc *sch, u32 classid)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
unsigned long band = TC_H_MIN(classid);
if (band - 1 >= q->bands)
static int prio_change(struct Qdisc *sch, u32 handle, u32 parent, struct rtattr **tca, unsigned long *arg)
{
unsigned long cl = *arg;
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
if (cl - 1 > q->bands)
return -ENOENT;
static int prio_delete(struct Qdisc *sch, unsigned long cl)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
if (cl - 1 > q->bands)
return -ENOENT;
return 0;
static int prio_dump_class(struct Qdisc *sch, unsigned long cl, struct sk_buff *skb,
struct tcmsg *tcm)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
if (cl - 1 > q->bands)
return -ENOENT;
static void prio_walk(struct Qdisc *sch, struct qdisc_walker *arg)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
int prio;
if (arg->stop)
static struct tcf_proto ** prio_find_tcf(struct Qdisc *sch, unsigned long cl)
{
- struct prio_sched_data *q = qdisc_priv(sch);
+ struct prio_sched_data *q = (struct prio_sched_data *)sch->data;
if (cl)
return NULL;