Lines Matching +full:1 +full:p
26 * x:0 1 use entry [0]
28 * x:y y>0 y+1 use entry [y]
30 * x:indices-1 indices use entry [indices-1]
32 * x:y y+1 use entry [y & (indices-1)]
34 * 0xffff 0x10000 use entry [indices-1]
38 #define NO_DEFAULT_INDEX (1 << 16)
57 static inline int dsmark_valid_index(struct dsmark_qdisc_data *p, u16 index) in dsmark_valid_index() argument
59 return index <= p->indices && index > 0; in dsmark_valid_index()
68 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_graft() local
70 pr_debug("%s(sch %p,[qdisc %p],new %p,old %p)\n", in dsmark_graft()
71 __func__, sch, p, new, old); in dsmark_graft()
80 *old = qdisc_replace(sch, new, &p->q); in dsmark_graft()
86 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_leaf() local
87 return p->q; in dsmark_leaf()
92 return TC_H_MIN(classid) + 1; in dsmark_find()
98 pr_debug("%s(sch %p,[qdisc %p],classid %x)\n", in dsmark_bind_filter()
108 static const struct nla_policy dsmark_policy[TCA_DSMARK_MAX + 1] = {
120 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_change() local
122 struct nlattr *tb[TCA_DSMARK_MAX + 1]; in dsmark_change()
125 pr_debug("%s(sch %p,[qdisc %p],classid %x,parent %x), arg 0x%lx\n", in dsmark_change()
126 __func__, sch, p, classid, parent, *arg); in dsmark_change()
128 if (!dsmark_valid_index(p, *arg)) { in dsmark_change()
142 p->mv[*arg - 1].value = nla_get_u8(tb[TCA_DSMARK_VALUE]); in dsmark_change()
145 p->mv[*arg - 1].mask = nla_get_u8(tb[TCA_DSMARK_MASK]); in dsmark_change()
155 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_delete() local
157 if (!dsmark_valid_index(p, arg)) in dsmark_delete()
160 p->mv[arg - 1].mask = 0xff; in dsmark_delete()
161 p->mv[arg - 1].value = 0; in dsmark_delete()
168 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_walk() local
171 pr_debug("%s(sch %p,[qdisc %p],walker %p)\n", in dsmark_walk()
172 __func__, sch, p, walker); in dsmark_walk()
177 for (i = 0; i < p->indices; i++) { in dsmark_walk()
178 if (p->mv[i].mask == 0xff && !p->mv[i].value) in dsmark_walk()
181 if (walker->fn(sch, i + 1, walker) < 0) { in dsmark_walk()
182 walker->stop = 1; in dsmark_walk()
194 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_tcf_block() local
196 return p->block; in dsmark_tcf_block()
205 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_enqueue() local
208 pr_debug("%s(skb %p,sch %p,[qdisc %p])\n", __func__, skb, sch, p); in dsmark_enqueue()
210 if (p->set_tc_index) { in dsmark_enqueue()
243 struct tcf_proto *fl = rcu_dereference_bh(p->filter_list); in dsmark_enqueue()
264 if (p->default_index != NO_DEFAULT_INDEX) in dsmark_enqueue()
265 skb->tc_index = p->default_index; in dsmark_enqueue()
270 err = qdisc_enqueue(skb, p->q, to_free); in dsmark_enqueue()
289 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_dequeue() local
293 pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p); in dsmark_dequeue()
295 skb = qdisc_dequeue_peeked(p->q); in dsmark_dequeue()
303 index = skb->tc_index & (p->indices - 1); in dsmark_dequeue()
308 ipv4_change_dsfield(ip_hdr(skb), p->mv[index].mask, in dsmark_dequeue()
309 p->mv[index].value); in dsmark_dequeue()
312 ipv6_change_dsfield(ipv6_hdr(skb), p->mv[index].mask, in dsmark_dequeue()
313 p->mv[index].value); in dsmark_dequeue()
321 if (p->mv[index].mask != 0xff || p->mv[index].value) in dsmark_dequeue()
332 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_peek() local
334 pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p); in dsmark_peek()
336 return p->q->ops->peek(p->q); in dsmark_peek()
342 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_init() local
343 struct nlattr *tb[TCA_DSMARK_MAX + 1]; in dsmark_init()
349 pr_debug("%s(sch %p,[qdisc %p],opt %p)\n", __func__, sch, p, opt); in dsmark_init()
354 err = tcf_block_get(&p->block, &p->filter_list, sch, extack); in dsmark_init()
368 if (hweight32(indices) != 1) in dsmark_init()
375 p->mv = p->embedded; in dsmark_init()
377 p->mv = kmalloc_array(indices, sizeof(*p->mv), GFP_KERNEL); in dsmark_init()
378 if (!p->mv) { in dsmark_init()
383 p->mv[i].mask = 0xff; in dsmark_init()
384 p->mv[i].value = 0; in dsmark_init()
386 p->indices = indices; in dsmark_init()
387 p->default_index = default_index; in dsmark_init()
388 p->set_tc_index = nla_get_flag(tb[TCA_DSMARK_SET_TC_INDEX]); in dsmark_init()
390 p->q = qdisc_create_dflt(sch->dev_queue, &pfifo_qdisc_ops, sch->handle, in dsmark_init()
392 if (p->q == NULL) in dsmark_init()
393 p->q = &noop_qdisc; in dsmark_init()
395 qdisc_hash_add(p->q, true); in dsmark_init()
397 pr_debug("%s: qdisc %p\n", __func__, p->q); in dsmark_init()
406 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_reset() local
408 pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p); in dsmark_reset()
409 if (p->q) in dsmark_reset()
410 qdisc_reset(p->q); in dsmark_reset()
415 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_destroy() local
417 pr_debug("%s(sch %p,[qdisc %p])\n", __func__, sch, p); in dsmark_destroy()
419 tcf_block_put(p->block); in dsmark_destroy()
420 qdisc_put(p->q); in dsmark_destroy()
421 if (p->mv != p->embedded) in dsmark_destroy()
422 kfree(p->mv); in dsmark_destroy()
428 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_dump_class() local
431 pr_debug("%s(sch %p,[qdisc %p],class %ld\n", __func__, sch, p, cl); in dsmark_dump_class()
433 if (!dsmark_valid_index(p, cl)) in dsmark_dump_class()
436 tcm->tcm_handle = TC_H_MAKE(TC_H_MAJ(sch->handle), cl - 1); in dsmark_dump_class()
437 tcm->tcm_info = p->q->handle; in dsmark_dump_class()
442 if (nla_put_u8(skb, TCA_DSMARK_MASK, p->mv[cl - 1].mask) || in dsmark_dump_class()
443 nla_put_u8(skb, TCA_DSMARK_VALUE, p->mv[cl - 1].value)) in dsmark_dump_class()
455 struct dsmark_qdisc_data *p = qdisc_priv(sch); in dsmark_dump() local
461 if (nla_put_u16(skb, TCA_DSMARK_INDICES, p->indices)) in dsmark_dump()
464 if (p->default_index != NO_DEFAULT_INDEX && in dsmark_dump()
465 nla_put_u16(skb, TCA_DSMARK_DEFAULT_INDEX, p->default_index)) in dsmark_dump()
468 if (p->set_tc_index && in dsmark_dump()