• Home
  • Raw
  • Download

Lines Matching full:flow

37  * Each flow has a CoDel managed queue.
41 * For a given flow, packets are not reordered (CoDel uses a FIFO)
44 * Low memory footprint (64 bytes per flow)
52 u32 dropped; /* number of drops (or ECN marks) on this flow */
122 static inline struct sk_buff *dequeue_head(struct fq_codel_flow *flow) in dequeue_head() argument
124 struct sk_buff *skb = flow->head; in dequeue_head()
126 flow->head = skb->next; in dequeue_head()
131 /* add skb to flow queue (tail add) */
132 static inline void flow_queue_add(struct fq_codel_flow *flow, in flow_queue_add() argument
135 if (flow->head == NULL) in flow_queue_add()
136 flow->head = skb; in flow_queue_add()
138 flow->tail->next = skb; in flow_queue_add()
139 flow->tail = skb; in flow_queue_add()
149 struct fq_codel_flow *flow; in fq_codel_drop() local
153 /* Queue is full! Find the fat flow and drop packet(s) from it. in fq_codel_drop()
157 * In stress mode, we'll try to drop 64 packets from the flow, in fq_codel_drop()
167 /* Our goal is to drop half of this fat flow backlog */ in fq_codel_drop()
170 flow = &q->flows[idx]; in fq_codel_drop()
174 skb = dequeue_head(flow); in fq_codel_drop()
180 flow->dropped += i; in fq_codel_drop()
194 struct fq_codel_flow *flow; in fq_codel_enqueue() local
209 flow = &q->flows[idx]; in fq_codel_enqueue()
210 flow_queue_add(flow, skb); in fq_codel_enqueue()
214 if (list_empty(&flow->flowchain)) { in fq_codel_enqueue()
215 list_add_tail(&flow->flowchain, &q->new_flows); in fq_codel_enqueue()
217 flow->deficit = q->quantum; in fq_codel_enqueue()
218 flow->dropped = 0; in fq_codel_enqueue()
232 * in q->backlogs[] to find a fat flow. in fq_codel_enqueue()
245 * If we dropped a packet for this flow, return NET_XMIT_CN, in fq_codel_enqueue()
265 struct fq_codel_flow *flow; in dequeue_func() local
268 flow = container_of(vars, struct fq_codel_flow, cvars); in dequeue_func()
269 if (flow->head) { in dequeue_func()
270 skb = dequeue_head(flow); in dequeue_func()
271 q->backlogs[flow - q->flows] -= qdisc_pkt_len(skb); in dequeue_func()
291 struct fq_codel_flow *flow; in fq_codel_dequeue() local
302 flow = list_first_entry(head, struct fq_codel_flow, flowchain); in fq_codel_dequeue()
304 if (flow->deficit <= 0) { in fq_codel_dequeue()
305 flow->deficit += q->quantum; in fq_codel_dequeue()
306 list_move_tail(&flow->flowchain, &q->old_flows); in fq_codel_dequeue()
314 &flow->cvars, &q->cstats, qdisc_pkt_len, in fq_codel_dequeue()
317 flow->dropped += q->cstats.drop_count - prev_drop_count; in fq_codel_dequeue()
318 flow->dropped += q->cstats.ecn_mark - prev_ecn_mark; in fq_codel_dequeue()
323 list_move_tail(&flow->flowchain, &q->old_flows); in fq_codel_dequeue()
325 list_del_init(&flow->flowchain); in fq_codel_dequeue()
329 flow->deficit -= qdisc_pkt_len(skb); in fq_codel_dequeue()
342 static void fq_codel_flow_purge(struct fq_codel_flow *flow) in fq_codel_flow_purge() argument
344 rtnl_kfree_skbs(flow->head, flow->tail); in fq_codel_flow_purge()
345 flow->head = NULL; in fq_codel_flow_purge()
356 struct fq_codel_flow *flow = q->flows + i; in fq_codel_reset() local
358 fq_codel_flow_purge(flow); in fq_codel_reset()
359 INIT_LIST_HEAD(&flow->flowchain); in fq_codel_reset()
360 codel_vars_init(&flow->cvars); in fq_codel_reset()
505 struct fq_codel_flow *flow = q->flows + i; in fq_codel_init() local
507 INIT_LIST_HEAD(&flow->flowchain); in fq_codel_init()
508 codel_vars_init(&flow->cvars); in fq_codel_init()
636 const struct fq_codel_flow *flow = &q->flows[idx]; in fq_codel_dump_class_stats() local
641 xstats.class_stats.deficit = flow->deficit; in fq_codel_dump_class_stats()
643 codel_time_to_us(flow->cvars.ldelay); in fq_codel_dump_class_stats()
644 xstats.class_stats.count = flow->cvars.count; in fq_codel_dump_class_stats()
645 xstats.class_stats.lastcount = flow->cvars.lastcount; in fq_codel_dump_class_stats()
646 xstats.class_stats.dropping = flow->cvars.dropping; in fq_codel_dump_class_stats()
647 if (flow->cvars.dropping) { in fq_codel_dump_class_stats()
648 codel_tdiff_t delta = flow->cvars.drop_next - in fq_codel_dump_class_stats()
655 if (flow->head) { in fq_codel_dump_class_stats()
657 skb = flow->head; in fq_codel_dump_class_stats()
665 qs.drops = flow->dropped; in fq_codel_dump_class_stats()