Lines Matching refs:flow

55 unsigned int lro_eject_req = 0; /* Counter for tracking flow ejections */
131 struct lro_flow *flow;
148 flow = &lro_flow_list[*flow_id];
150 if ((flow->lr_faddr.s_addr == ip_hdr->ip_src.s_addr) &&
151 (flow->lr_laddr.s_addr == ip_hdr->ip_dst.s_addr) &&
152 (flow->lr_fport == tcp_hdr->th_sport) &&
153 (flow->lr_lport == tcp_hdr->th_dport)) {
154 if (flow->lr_tcphdr == NULL) {
155 if (ntohl(seqnum) == flow->lr_seq) {
160 __func__, ntohl(seqnum), flow->lr_seq);
163 if (SEQ_GT(ntohl(seqnum), flow->lr_seq)) {
170 flow->lr_flags |= LRO_EJECT_REQ;
176 if (flow->lr_flags & LRO_EJECT_REQ) {
181 if (SEQ_GT(tcp_hdr->th_ack, flow->lr_tcphdr->th_ack)) {
185 flow->lr_tcphdr->th_ack);
194 flow->lr_flags |= LRO_EJECT_REQ;
206 struct lro_flow *flow = NULL;
208 flow = &lro_flow_list[flow_id];
210 flow->lr_hash_map = hash;
211 flow->lr_faddr.s_addr = ip_hdr->ip_src.s_addr;
212 flow->lr_laddr.s_addr = ip_hdr->ip_dst.s_addr;
213 flow->lr_fport = tcp_hdr->th_sport;
214 flow->lr_lport = tcp_hdr->th_dport;
216 flow->lr_timestamp = timestamp;
217 flow->lr_seq = ntohl(tcp_hdr->th_seq) + payload_len;
218 flow->lr_flags = 0;
227 struct lro_flow *flow = NULL;
231 flow = &lro_flow_list[flow_id];
232 if (flow->lr_mhead) {
234 printf("%s: lr_mhead %x %d \n", __func__, flow->lr_seq,
238 last = flow->lr_mtail;
244 flow->lr_mtail = lro_mb;
246 ip = mtod(flow->lr_mhead, struct ip *);
248 flow->lr_mhead->m_pkthdr.len += lro_mb->m_pkthdr.len;
250 if (flow->lr_len == 0) {
251 panic_plain("%s: Inconsistent LRO flow state", __func__);
253 flow->lr_len += payload_len;
254 flow->lr_seq += payload_len;
259 flow->lr_mhead->m_pkthdr.aux_flags |= MAUXF_SW_LRO_PKT;
260 flow->lr_mhead->m_pkthdr.lro_npkts++; /* for tcpstat.tcps_rcvpack */
261 if (flow->lr_mhead->m_pkthdr.lro_pktlen <
267 flow->lr_mhead->m_pkthdr.lro_pktlen =
272 if ((flow->lr_tsval) &&
273 (TSTMP_GT(topt->to_tsval, ntohl(*(flow->lr_tsval))))) {
274 *(flow->lr_tsval) = htonl(topt->to_tsval);
276 if ((flow->lr_tsecr) &&
278 (TSTMP_GT(topt->to_tsecr, ntohl(*(flow->lr_tsecr))))) {
281 topt->to_tsecr - ntohl(*(flow->lr_tsecr)));
283 *(flow->lr_tsecr) = htonl(topt->to_tsecr);
288 flow->lr_tcphdr->th_flags |= thflags;
291 flow->lr_tcphdr->th_win = tcphdr->th_win;
294 flow->lr_mhead = flow->lr_mtail = lro_mb;
295 flow->lr_mhead->m_pkthdr.aux_flags |= MAUXF_SW_LRO_PKT;
296 flow->lr_tcphdr = tcphdr;
300 flow->lr_tsval = tsval;
301 flow->lr_tsecr = tsecr;
303 flow->lr_len = payload_len;
304 flow->lr_timestamp = tcp_now;
307 flow->lr_seq = ntohl(tcphdr->th_seq) + payload_len;
379 /* kick the oldest flow */
391 candidate_flow = i; /* this is now the flow to be used */
476 /* list all the conditions that can trigger a flow ejection here */
598 struct lro_flow *flow;
606 flow = &lro_flow_list[i];
607 if (flow->lr_mhead != NULL) {
613 if (((tcp_now - flow->lr_timestamp) >= coalesc_time) ||
614 (flow->lr_mhead->m_pkthdr.lro_npkts >=
619 flow->lr_len,
620 flow->lr_mhead->m_pkthdr.lro_npkts,
621 flow->lr_timestamp, tcp_now);
636 printf("tcp_lro_flush_flows: did not flush flow of len =%d deadline = %x timestamp = %x \n",
637 flow->lr_len, tcp_now, flow->lr_timestamp);
641 if (flow->lr_flags & LRO_EJECT_REQ) {
845 * When TCP detects a stable, steady flow without out of ordering,