| 435 | #endif |
| 436 | |
| 437 | static void |
| 438 | tcp_lro_log(struct tcpcb *tp, struct lro_ctrl *lc, |
| 439 | struct lro_entry *le, struct mbuf *m, int frm, int32_t tcp_data_len, |
| 440 | uint32_t th_seq , uint32_t th_ack, uint16_t th_win) |
| 441 | { |
| 442 | if (tp->t_logstate != TCP_LOG_STATE_OFF) { |
| 443 | union tcp_log_stackspecific log; |
| 444 | struct timeval tv; |
| 445 | uint32_t cts; |
| 446 | |
| 447 | cts = tcp_get_usecs(&tv); |
| 448 | memset(&log, 0, sizeof(union tcp_log_stackspecific)); |
| 449 | log.u_bbr.flex8 = frm; |
| 450 | log.u_bbr.flex1 = tcp_data_len; |
| 451 | if (m) |
| 452 | log.u_bbr.flex2 = m->m_pkthdr.len; |
| 453 | else |
| 454 | log.u_bbr.flex2 = 0; |
| 455 | log.u_bbr.flex3 = le->append_cnt; |
| 456 | log.u_bbr.flex4 = le->p_len; |
| 457 | log.u_bbr.flex5 = le->m_head->m_pkthdr.len; |
| 458 | log.u_bbr.delRate = le->m_head->m_flags; |
| 459 | log.u_bbr.rttProp = le->m_head->m_pkthdr.rcv_tstmp; |
| 460 | log.u_bbr.flex6 = lc->lro_length_lim; |
| 461 | log.u_bbr.flex7 = lc->lro_ackcnt_lim; |
| 462 | log.u_bbr.inflight = th_seq; |
| 463 | log.u_bbr.timeStamp = cts; |
| 464 | log.u_bbr.epoch = le->next_seq; |
| 465 | log.u_bbr.delivered = th_ack; |
| 466 | log.u_bbr.lt_epoch = le->ack_seq; |
| 467 | log.u_bbr.pacing_gain = th_win; |
| 468 | log.u_bbr.cwnd_gain = le->window; |
| 469 | log.u_bbr.cur_del_rate = (uintptr_t)m; |
| 470 | log.u_bbr.bw_inuse = (uintptr_t)le->m_head; |
| 471 | log.u_bbr.pkts_out = le->mbuf_cnt; /* Total mbufs added */ |
| 472 | log.u_bbr.applimited = le->ulp_csum; |
| 473 | log.u_bbr.lost = le->mbuf_appended; |
| 474 | TCP_LOG_EVENTP(tp, NULL, |
| 475 | &tp->t_inpcb->inp_socket->so_rcv, |
| 476 | &tp->t_inpcb->inp_socket->so_snd, |
| 477 | TCP_LOG_LRO, 0, |
| 478 | 0, &log, false, &tv); |
| 479 | } |
| 480 | } |
| 481 | |
| 482 | static void |
| 483 | tcp_flush_out_le(struct tcpcb *tp, struct lro_ctrl *lc, struct lro_entry *le, int locked) |
no test coverage detected