• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/net/sched/

Lines Matching defs:flow

32  * Each class maps the flow(s) it is handling to a given VC. Multiple classes
47 * - should lock the flow while there is data in the queue (?)
68 struct atm_flow_data *excess; /* flow for excess traffic;
82 /* ------------------------- Class/flow operations ------------------------- */
85 static int find_flow(struct atm_qdisc_data *qdisc,struct atm_flow_data *flow)
89 DPRINTK("find_flow(qdisc %p,flow %p)\n",qdisc,flow);
91 if (walk == flow) return 1;
101 struct atm_flow_data *flow;
103 for (flow = p->flows; flow; flow = flow->next)
104 if (flow->classid == classid) break;
105 return flow;
113 struct atm_flow_data *flow = (struct atm_flow_data *) arg;
115 DPRINTK("atm_tc_graft(sch %p,[qdisc %p],flow %p,new %p,old %p)\n",sch,
116 p,flow,new,old);
117 if (!find_flow(p,flow)) return -EINVAL;
119 *old = xchg(&flow->q,new);
127 struct atm_flow_data *flow = (struct atm_flow_data *) cl;
129 DPRINTK("atm_tc_leaf(sch %p,flow %p)\n",sch,flow);
130 return flow ? flow->q : NULL;
137 struct atm_flow_data *flow;
140 flow = lookup_flow(sch,classid);
141 if (flow) flow->ref++;
142 DPRINTK("atm_tc_get: flow %p\n",flow);
143 return (unsigned long) flow;
162 struct atm_flow_data *flow = (struct atm_flow_data *) cl;
165 DPRINTK("atm_tc_put(sch %p,[qdisc %p],flow %p)\n",sch,p,flow);
166 if (--flow->ref) return;
169 if (*prev == flow) break;
171 printk(KERN_CRIT "atm_tc_put: class %p not found\n",flow);
174 *prev = flow->next;
175 DPRINTK("atm_tc_put: qdisc %p\n",flow->q);
176 qdisc_destroy(flow->q);
177 tcf_destroy_chain(flow->filter_list);
178 if (flow->sock) {
180 file_count(flow->sock->file));
181 flow->vcc->pop = flow->old_pop;
182 sockfd_put(flow->sock);
184 if (flow->excess) atm_tc_put(sch,(unsigned long) flow->excess);
185 if (flow != &p->link) kfree(flow);
187 * If flow == &p->link, the qdisc no longer works at this point and
214 struct atm_flow_data *flow = (struct atm_flow_data *) *arg;
223 "flow %p,opt %p)\n",sch,p,classid,parent,flow,opt);
232 * native ATM API. In order to send a flow to a different VC, the old
236 if (flow) return -EBUSY;
275 if (find_flow(p,flow)) {
291 flow = kmalloc(sizeof(struct atm_flow_data)+hdr_len,GFP_KERNEL);
292 DPRINTK("atm_tc_change: flow %p\n",flow);
293 if (!flow) {
297 memset(flow,0,sizeof(*flow));
298 flow->filter_list = NULL;
299 if (!(flow->q = qdisc_create_dflt(sch->dev,&pfifo_qdisc_ops,classid)))
300 flow->q = &noop_qdisc;
301 DPRINTK("atm_tc_change: qdisc %p\n",flow->q);
302 flow->sock = sock;
303 flow->vcc = ATM_SD(sock); /* speedup */
304 flow->vcc->user_back = flow;
305 DPRINTK("atm_tc_change: vcc %p\n",flow->vcc);
306 flow->old_pop = flow->vcc->pop;
307 flow->parent = p;
308 flow->vcc->pop = sch_atm_pop;
309 flow->classid = classid;
310 flow->ref = 1;
311 flow->excess = excess;
312 flow->next = p->link.next;
313 p->link.next = flow;
314 flow->hdr_len = hdr_len;
316 memcpy(flow->hdr,hdr,hdr_len);
318 memcpy(flow->hdr,llc_oui_ip,sizeof(llc_oui_ip));
319 *arg = (unsigned long) flow;
331 struct atm_flow_data *flow = (struct atm_flow_data *) arg;
333 DPRINTK("atm_tc_delete(sch %p,[qdisc %p],flow %p)\n",sch,p,flow);
334 if (!find_flow(PRIV(sch),flow)) return -EINVAL;
335 if (flow->filter_list || flow == &p->link) return -EBUSY;
340 if (flow->ref < 2) {
341 printk(KERN_ERR "atm_tc_delete: flow->ref == %d\n",flow->ref);
344 if (flow->ref > 2) return -EBUSY; /* catch references via excess, etc.*/
353 struct atm_flow_data *flow;
357 for (flow = p->flows; flow; flow = flow->next) {
359 if (walker->fn(sch,(unsigned long) flow,walker) < 0) {
371 struct atm_flow_data *flow = (struct atm_flow_data *) cl;
373 DPRINTK("atm_tc_find_tcf(sch %p,[qdisc %p],flow %p)\n",sch,p,flow);
374 return flow ? &flow->filter_list : &p->link.filter_list;
384 struct atm_flow_data *flow = NULL ; /* @@@ */
392 !(flow = (struct atm_flow_data *) atm_tc_get(sch,skb->priority)))
393 for (flow = p->flows; flow; flow = flow->next)
394 if (flow->filter_list) {
395 result = tc_classify(skb,flow->filter_list,
398 flow = (struct atm_flow_data *) res.class;
399 if (!flow) flow = lookup_flow(sch,res.classid);
402 if (!flow) flow = &p->link;
404 if (flow->vcc)
405 ATM_SKB(skb)->atm_options = flow->vcc->atm_options;
413 if (flow->excess) flow = flow->excess;
431 (ret = flow->q->enqueue(skb,flow->q)) != 0) {
433 if (flow) flow->qstats.drops++;
438 flow->bstats.bytes += skb->len;
439 flow->bstats.packets++;
449 if (flow == &p->link) {
460 * avoid checking net_device's flow control here, simply because sch_atm
470 struct atm_flow_data *flow;
474 for (flow = p->link.next; flow; flow = flow->next)
479 while ((skb = flow->q->dequeue(flow->q))) {
480 if (!atm_may_send(flow->vcc,skb->truesize)) {
481 (void) flow->q->ops->requeue(skb,flow->q);
484 D2PRINTK("atm_tc_dequeue: sending on class %p\n",flow);
487 if (skb_headroom(skb) < flow->hdr_len) {
490 new = skb_realloc_headroom(skb,flow->hdr_len);
497 ATM_SKB(skb)->vcc = flow->vcc;
498 memcpy(skb_push(skb,flow->hdr_len),flow->hdr,
499 flow->hdr_len);
501 &sk_atm(flow->vcc)->sk_wmem_alloc);
503 (void) flow->vcc->send(flow->vcc,skb);
542 struct atm_flow_data *flow;
546 for (flow = p->flows; flow; flow = flow->next)
547 if (flow->q->ops->drop && (len = flow->q->ops->drop(flow->q)))
577 struct atm_flow_data *flow;
580 for (flow = p->flows; flow; flow = flow->next) qdisc_reset(flow->q);
588 struct atm_flow_data *flow;
592 while ((flow = p->flows)) {
593 tcf_destroy_chain(flow->filter_list);
594 flow->filter_list = NULL;
595 if (flow->ref > 1)
596 printk(KERN_ERR "atm_destroy: %p->ref = %d\n",flow,
597 flow->ref);
598 atm_tc_put(sch,(unsigned long) flow);
599 if (p->flows == flow) {
600 printk(KERN_ERR "atm_destroy: putting flow %p didn't "
601 "kill it\n",flow);
602 p->flows = flow->next; /* brute force */
614 struct atm_flow_data *flow = (struct atm_flow_data *) cl;
618 DPRINTK("atm_tc_dump_class(sch %p,[qdisc %p],flow %p,skb %p,tcm %p)\n",
619 sch,p,flow,skb,tcm);
620 if (!find_flow(p,flow)) return -EINVAL;
621 tcm->tcm_handle = flow->classid;
622 tcm->tcm_info = flow->q->handle;
625 RTA_PUT(skb,TCA_ATM_HDR,flow->hdr_len,flow->hdr);
626 if (flow->vcc) {
631 pvc.sap_addr.itf = flow->vcc->dev ? flow->vcc->dev->number : -1;
632 pvc.sap_addr.vpi = flow->vcc->vpi;
633 pvc.sap_addr.vci = flow->vcc->vci;
635 state = ATM_VF2VS(flow->vcc->flags);
638 if (flow->excess)
639 RTA_PUT(skb,TCA_ATM_EXCESS,sizeof(u32),&flow->classid);
656 struct atm_flow_data *flow = (struct atm_flow_data *) arg;
658 flow->qstats.qlen = flow->q->q.qlen;
660 if (gnet_stats_copy_basic(d, &flow->bstats) < 0 ||
661 gnet_stats_copy_queue(d, &flow->qstats) < 0)