Lines Matching full:flow

2 /* Flow Queue PIE discipline
18 /* Flow Queue PIE
24 * - Each flow has a PIE managed queue.
27 * - For a given flow, packets are not reordered.
35 * struct fq_pie_flow - contains data for each flow
36 * @vars: pie vars associated with the flow
38 * @backlog: size of data in the flow
39 * @qlen: number of packets in the flow
40 * @flowchain: flowchain for the flow
41 * @head: first packet in the flow
42 * @tail: last packet in the flow
116 /* add skb to flow queue (tail add) */
117 static inline void flow_queue_add(struct fq_pie_flow *flow, in flow_queue_add() argument
120 if (!flow->head) in flow_queue_add()
121 flow->head = skb; in flow_queue_add()
123 flow->tail->next = skb; in flow_queue_add()
124 flow->tail = skb; in flow_queue_add()
139 /* Classifies packet into corresponding flow */ in fq_pie_qdisc_enqueue()
212 static inline struct sk_buff *dequeue_head(struct fq_pie_flow *flow) in dequeue_head() argument
214 struct sk_buff *skb = flow->head; in dequeue_head()
216 flow->head = skb->next; in dequeue_head()
225 struct fq_pie_flow *flow; in fq_pie_qdisc_dequeue() local
237 flow = list_first_entry(head, struct fq_pie_flow, flowchain); in fq_pie_qdisc_dequeue()
238 /* Flow has exhausted all its credits */ in fq_pie_qdisc_dequeue()
239 if (flow->deficit <= 0) { in fq_pie_qdisc_dequeue()
240 flow->deficit += q->quantum; in fq_pie_qdisc_dequeue()
241 list_move_tail(&flow->flowchain, &q->old_flows); in fq_pie_qdisc_dequeue()
245 if (flow->head) { in fq_pie_qdisc_dequeue()
246 skb = dequeue_head(flow); in fq_pie_qdisc_dequeue()
256 list_move_tail(&flow->flowchain, &q->old_flows); in fq_pie_qdisc_dequeue()
258 list_del_init(&flow->flowchain); in fq_pie_qdisc_dequeue()
262 flow->qlen--; in fq_pie_qdisc_dequeue()
263 flow->deficit -= pkt_len; in fq_pie_qdisc_dequeue()
264 flow->backlog -= pkt_len; in fq_pie_qdisc_dequeue()
266 pie_process_dequeue(skb, &q->p_params, &flow->vars, flow->backlog); in fq_pie_qdisc_dequeue()
424 struct fq_pie_flow *flow = q->flows + idx; in fq_pie_init() local
426 INIT_LIST_HEAD(&flow->flowchain); in fq_pie_init()
427 pie_vars_init(&flow->vars); in fq_pie_init()
508 struct fq_pie_flow *flow = q->flows + idx; in fq_pie_reset() local
510 /* Removes all packets from flow */ in fq_pie_reset()
511 rtnl_kfree_skbs(flow->head, flow->tail); in fq_pie_reset()
512 flow->head = NULL; in fq_pie_reset()
514 INIT_LIST_HEAD(&flow->flowchain); in fq_pie_reset()
515 pie_vars_init(&flow->vars); in fq_pie_reset()
559 MODULE_DESCRIPTION("Flow Queue Proportional Integral controller Enhanced (FQ-PIE)");