On 08/05/18(Tue) 14:32, Alexander Bluhm wrote:
> Hi,
> 
> Historically there were slow and fast tcp timeouts.  That is why
> the delack timer has a different implementation.
> 
> Let's use the same macros for all TCP timer.
> 
> Index: netinet/tcp_input.c
> ===================================================================
> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_input.c,v
> retrieving revision 1.354
> diff -u -p -r1.354 tcp_input.c
> --- netinet/tcp_input.c       4 Dec 2017 13:40:34 -0000       1.354
> +++ netinet/tcp_input.c       8 May 2018 12:07:12 -0000
> @@ -176,12 +176,12 @@ do { \
>       struct ifnet *ifp = NULL; \
>       if (m && (m->m_flags & M_PKTHDR)) \
>               ifp = if_get(m->m_pkthdr.ph_ifidx); \
> -     if ((tp)->t_flags & TF_DELACK || \
> +     if (TCP_TIMER_ISARMED(tp, TCPT_DELACK) || \
>           (tcp_ack_on_push && (tiflags) & TH_PUSH) || \
>           (ifp && (ifp->if_flags & IFF_LOOPBACK))) \
>               tp->t_flags |= TF_ACKNOW; \
>       else \
> -             TCP_SET_DELACK(tp); \
> +             TCP_TIMER_ARM_MSEC(tp, TCPT_DELACK, tcp_delack_msecs); \

Here you introduce a behavior change. TCP_SET_DELACK() would not call
timeout_add_msec() if TF_DELACK was set, you're now calling it
unconditionally.  Is it safe?  Or should you add a TCP_TIMER_ISARMED()
check?

Reply via email to