Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/netinet tcp_input: Adjust for ND changes



details:   https://anonhg.NetBSD.org/src/rev/4b82bcb14749
branches:  trunk
changeset: 954815:4b82bcb14749
user:      roy <roy%NetBSD.org@localhost>
date:      Fri Sep 11 15:08:25 2020 +0000

description:
tcp_input: Adjust for ND changes

diffstat:

 sys/netinet/tcp_input.c |  64 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 43 insertions(+), 21 deletions(-)

diffs (124 lines):

diff -r 7911140878aa -r 4b82bcb14749 sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c   Fri Sep 11 15:03:33 2020 +0000
+++ b/sys/netinet/tcp_input.c   Fri Sep 11 15:08:25 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tcp_input.c,v 1.420 2020/09/11 09:08:47 kardel Exp $   */
+/*     $NetBSD: tcp_input.c,v 1.421 2020/09/11 15:08:25 roy Exp $      */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -148,7 +148,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.420 2020/09/11 09:08:47 kardel Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tcp_input.c,v 1.421 2020/09/11 15:08:25 roy Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -253,24 +253,46 @@
 /*
  * Neighbor Discovery, Neighbor Unreachability Detection Upper layer hint.
  */
-#ifdef INET6
-static inline void
-nd6_hint(struct tcpcb *tp)
+static void
+nd_hint(struct tcpcb *tp)
 {
-       struct rtentry *rt = NULL;
-
-       if (tp != NULL && tp->t_in6pcb != NULL && tp->t_family == AF_INET6 &&
-           (rt = rtcache_validate(&tp->t_in6pcb->in6p_route)) != NULL) {
+       struct route *ro = NULL;
+       struct rtentry *rt;
+
+       if (tp == NULL)
+               return;
+
+       switch (tp->t_family) {
+#ifdef INET6
+       case AF_INET6:
+               if (tp->t_in6pcb != NULL)
+                       ro = &tp->t_in6pcb->in6p_route;
+               break;
+#endif
+       }
+
+       if (ro == NULL)
+               return;
+
+       rt = rtcache_validate(ro);
+       if (rt == NULL)
+               return;
+
+       switch (tp->t_family) {
+#ifdef INET
+       case AF_INET:
+               arp_nud_hint(rt);
+               break;
+#endif
+#ifdef INET6
+       case AF_INET6:
                nd6_nud_hint(rt);
-               rtcache_unref(rt, &tp->t_in6pcb->in6p_route);
+               break;
+#endif
        }
+
+       rtcache_unref(rt, ro);
 }
-#else
-static inline void
-nd6_hint(struct tcpcb *tp)
-{
-}
-#endif
 
 /*
  * Compute ACK transmission behavior.  Delay the ACK unless
@@ -769,7 +791,7 @@
 
        tp->rcv_nxt += q->ipqe_len;
        pkt_flags = q->ipqe_flags & TH_FIN;
-       nd6_hint(tp);
+       nd_hint(tp);
 
        TAILQ_REMOVE(&tp->segq, q, ipqe_q);
        TAILQ_REMOVE(&tp->timeq, q, ipqe_timeq);
@@ -1884,7 +1906,7 @@
                                tcps[TCP_STAT_RCVACKPACK]++;
                                tcps[TCP_STAT_RCVACKBYTE] += acked;
                                TCP_STAT_PUTREF();
-                               nd6_hint(tp);
+                               nd_hint(tp);
 
                                if (acked > (tp->t_lastoff - tp->t_inoff))
                                        tp->t_lastm = NULL;
@@ -1967,7 +1989,7 @@
                        tcps[TCP_STAT_RCVPACK]++;
                        tcps[TCP_STAT_RCVBYTE] += tlen;
                        TCP_STAT_PUTREF();
-                       nd6_hint(tp);
+                       nd_hint(tp);
                /*
                 * Automatic sizing enables the performance of large buffers
                 * and most of the efficiency of small ones by only allocating
@@ -2595,7 +2617,7 @@
                 */
                tp->t_congctl->newack(tp, th);
 
-               nd6_hint(tp);
+               nd_hint(tp);
                if (acked > so->so_snd.sb_cc) {
                        tp->snd_wnd -= so->so_snd.sb_cc;
                        sbdrop(&so->so_snd, (int)so->so_snd.sb_cc);
@@ -2801,7 +2823,7 @@
                        tcps[TCP_STAT_RCVPACK]++;
                        tcps[TCP_STAT_RCVBYTE] += tlen;
                        TCP_STAT_PUTREF();
-                       nd6_hint(tp);
+                       nd_hint(tp);
                        if (so->so_state & SS_CANTRCVMORE) {
                                m_freem(m);
                        } else {



Home | Main Index | Thread Index | Old Index