Lines Matching full:flow
2 /* Flow Queue PIE discipline
19 /* Flow Queue PIE
25 * - Each flow has a PIE managed queue.
28 * - For a given flow, packets are not reordered.
36 * struct fq_pie_flow - contains data for each flow
37 * @vars: pie vars associated with the flow
39 * @backlog: size of data in the flow
40 * @qlen: number of packets in the flow
41 * @flowchain: flowchain for the flow
42 * @head: first packet in the flow
43 * @tail: last packet in the flow
118 /* add skb to flow queue (tail add) */
119 static inline void flow_queue_add(struct fq_pie_flow *flow, in flow_queue_add() argument
122 if (!flow->head) in flow_queue_add()
123 flow->head = skb; in flow_queue_add()
125 flow->tail->next = skb; in flow_queue_add()
126 flow->tail = skb; in flow_queue_add()
141 /* Classifies packet into corresponding flow */ in fq_pie_qdisc_enqueue()
227 static inline struct sk_buff *dequeue_head(struct fq_pie_flow *flow) in dequeue_head() argument
229 struct sk_buff *skb = flow->head; in dequeue_head()
231 flow->head = skb->next; in dequeue_head()
240 struct fq_pie_flow *flow; in fq_pie_qdisc_dequeue() local
252 flow = list_first_entry(head, struct fq_pie_flow, flowchain); in fq_pie_qdisc_dequeue()
253 /* Flow has exhausted all its credits */ in fq_pie_qdisc_dequeue()
254 if (flow->deficit <= 0) { in fq_pie_qdisc_dequeue()
255 flow->deficit += q->quantum; in fq_pie_qdisc_dequeue()
256 list_move_tail(&flow->flowchain, &q->old_flows); in fq_pie_qdisc_dequeue()
260 if (flow->head) { in fq_pie_qdisc_dequeue()
261 skb = dequeue_head(flow); in fq_pie_qdisc_dequeue()
271 list_move_tail(&flow->flowchain, &q->old_flows); in fq_pie_qdisc_dequeue()
273 list_del_init(&flow->flowchain); in fq_pie_qdisc_dequeue()
277 flow->qlen--; in fq_pie_qdisc_dequeue()
278 flow->deficit -= pkt_len; in fq_pie_qdisc_dequeue()
279 flow->backlog -= pkt_len; in fq_pie_qdisc_dequeue()
281 pie_process_dequeue(skb, &q->p_params, &flow->vars, flow->backlog); in fq_pie_qdisc_dequeue()
454 struct fq_pie_flow *flow = q->flows + idx; in fq_pie_init() local
456 INIT_LIST_HEAD(&flow->flowchain); in fq_pie_init()
457 pie_vars_init(&flow->vars); in fq_pie_init()
539 struct fq_pie_flow *flow = q->flows + idx; in fq_pie_reset() local
541 /* Removes all packets from flow */ in fq_pie_reset()
542 rtnl_kfree_skbs(flow->head, flow->tail); in fq_pie_reset()
543 flow->head = NULL; in fq_pie_reset()
545 INIT_LIST_HEAD(&flow->flowchain); in fq_pie_reset()
546 pie_vars_init(&flow->vars); in fq_pie_reset()
589 MODULE_DESCRIPTION("Flow Queue Proportional Integral controller Enhanced (FQ-PIE)");