The branch stable/14 has been updated by tuexen:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=7aa9563e20f9f48fc29285140b23849b5b31d28a

commit 7aa9563e20f9f48fc29285140b23849b5b31d28a
Author:     Michael Tuexen <tue...@freebsd.org>
AuthorDate: 2025-07-21 08:07:36 +0000
Commit:     Michael Tuexen <tue...@freebsd.org>
CommitDate: 2025-09-05 18:28:35 +0000

    tcp: use a single counter for limiting the RST rate
    
    Using two counters does not provide any benefit, but it provides an
    externally observable signal whether there is a listening port.
    
    Reviewed by:            Nick Banks, Peter Lei
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D51440
    
    (cherry picked from commit d31bdbc3661f6535d5ce4bc98c3687e10aa56720)
---
 sys/netinet/icmp_var.h                   |  9 ++++-----
 sys/netinet/ip_icmp.c                    |  3 +--
 sys/netinet/tcp_input.c                  | 31 ++++++++++++++++++-------------
 sys/netinet/tcp_stacks/bbr.c             | 22 +++++++++++-----------
 sys/netinet/tcp_stacks/rack.c            | 22 +++++++++++-----------
 sys/netinet/tcp_stacks/rack_bbr_common.c |  2 +-
 6 files changed, 46 insertions(+), 43 deletions(-)

diff --git a/sys/netinet/icmp_var.h b/sys/netinet/icmp_var.h
index a53a9d7865c3..f0d832a37261 100644
--- a/sys/netinet/icmp_var.h
+++ b/sys/netinet/icmp_var.h
@@ -92,11 +92,10 @@ extern int badport_bandlim(int);
 #define BANDLIM_ICMP_UNREACH 0
 #define BANDLIM_ICMP_ECHO 1
 #define BANDLIM_ICMP_TSTAMP 2
-#define BANDLIM_RST_CLOSEDPORT 3 /* No connection, and no listeners */
-#define BANDLIM_RST_OPENPORT 4   /* No connection, listener */
-#define BANDLIM_ICMP6_UNREACH 5
-#define BANDLIM_SCTP_OOTB 6
-#define BANDLIM_MAX 7
+#define BANDLIM_TCP_RST 3
+#define BANDLIM_ICMP6_UNREACH 4
+#define BANDLIM_SCTP_OOTB 5
+#define BANDLIM_MAX 6
 #endif
 
 #endif
diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c
index 122293a36a15..644b87858f17 100644
--- a/sys/netinet/ip_icmp.c
+++ b/sys/netinet/ip_icmp.c
@@ -1104,8 +1104,7 @@ static const char *icmp_rate_descrs[BANDLIM_MAX] = {
        [BANDLIM_ICMP_UNREACH] = "icmp unreach",
        [BANDLIM_ICMP_ECHO] = "icmp ping",
        [BANDLIM_ICMP_TSTAMP] = "icmp tstamp",
-       [BANDLIM_RST_CLOSEDPORT] = "closed port RST",
-       [BANDLIM_RST_OPENPORT] = "open port RST",
+       [BANDLIM_TCP_RST] = "tcp reset",
        [BANDLIM_ICMP6_UNREACH] = "icmp6 unreach",
        [BANDLIM_SCTP_OOTB] = "sctp ootb",
 };
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 10b422c300b5..32050d02d268 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -638,6 +638,7 @@ tcp_input_with_port(struct mbuf **mp, int *offp, int proto, 
uint16_t port)
 #endif /* INET6 */
        struct tcpopt to;               /* options in this segment */
        char *s = NULL;                 /* address and port logging */
+       bool closed_port = false;       /* segment is hitting a closed port */
 
        NET_EPOCH_ASSERT();
 
@@ -924,7 +925,8 @@ findpcb:
                                log(LOG_INFO, "%s; %s: Connection attempt "
                                    "to closed port\n", s, __func__);
                }
-               rstreason = BANDLIM_RST_CLOSEDPORT;
+               rstreason = BANDLIM_TCP_RST;
+               closed_port = true;
                goto dropwithreset;
        }
        INP_LOCK_ASSERT(inp);
@@ -1015,12 +1017,14 @@ findpcb:
                 * down or it is in the CLOSED state.  Either way we drop the
                 * segment and send an appropriate response.
                 */
-               rstreason = BANDLIM_RST_CLOSEDPORT;
+               rstreason = BANDLIM_TCP_RST;
+               closed_port = true;
                goto dropwithreset;
        }
 
        if ((tp->t_port != port) && (tp->t_state > TCPS_LISTEN)) {
-               rstreason = BANDLIM_RST_CLOSEDPORT;
+               rstreason = BANDLIM_TCP_RST;
+               closed_port = true;
                goto dropwithreset;
        }
 
@@ -1111,7 +1115,7 @@ findpcb:
                                 * of the failure cause.
                                 */
                                INP_WUNLOCK(inp);
-                               rstreason = BANDLIM_RST_OPENPORT;
+                               rstreason = BANDLIM_TCP_RST;
                                lookupflag &= ~INPLOOKUP_WILDCARD;
                                goto findpcb;
                        }
@@ -1202,7 +1206,7 @@ tfo_socket_result:
                                    s, __func__);
                        syncache_badack(&inc, port);    /* XXX: Not needed! */
                        TCPSTAT_INC(tcps_badsyn);
-                       rstreason = BANDLIM_RST_OPENPORT;
+                       rstreason = BANDLIM_TCP_RST;
                        goto dropwithreset;
                }
                /*
@@ -1278,7 +1282,7 @@ tfo_socket_result:
                                        "Connection attempt to deprecated "
                                        "IPv6 address rejected\n",
                                        s, __func__);
-                               rstreason = BANDLIM_RST_OPENPORT;
+                               rstreason = BANDLIM_TCP_RST;
                                goto dropwithreset;
                        }
                }
@@ -1408,9 +1412,10 @@ dropwithreset:
         * When blackholing do not respond with a RST but
         * completely ignore the segment and drop it.
         */
-       if (((rstreason == BANDLIM_RST_OPENPORT && V_blackhole == 3) ||
-           (rstreason == BANDLIM_RST_CLOSEDPORT &&
-           ((V_blackhole == 1 && (thflags & TH_SYN)) || V_blackhole > 1))) &&
+       if (rstreason == BANDLIM_TCP_RST &&
+           ((!closed_port && V_blackhole == 3) ||
+            (closed_port &&
+             ((V_blackhole == 1 && (thflags & TH_SYN)) || V_blackhole > 1))) &&
            (V_blackhole_local || (
 #ifdef INET6
            isipv6 ? !in6_localip(&ip6->ip6_src) :
@@ -1980,7 +1985,7 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct 
tcphdr *th,
                if ((thflags & TH_ACK) &&
                    (SEQ_LEQ(th->th_ack, tp->snd_una) ||
                     SEQ_GT(th->th_ack, tp->snd_max))) {
-                               rstreason = BANDLIM_RST_OPENPORT;
+                               rstreason = BANDLIM_TCP_RST;
                                tcp_log_end_status(tp, 
TCP_EI_STATUS_RST_IN_FRONT);
                                goto dropwithreset;
                }
@@ -1993,7 +1998,7 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct 
tcphdr *th,
                         * FIN, or a RST.
                         */
                        if ((thflags & (TH_SYN|TH_ACK)) == (TH_SYN|TH_ACK)) {
-                               rstreason = BANDLIM_RST_OPENPORT;
+                               rstreason = BANDLIM_TCP_RST;
                                tcp_log_end_status(tp, 
TCP_EI_STATUS_RST_IN_FRONT);
                                goto dropwithreset;
                        } else if (thflags & TH_SYN) {
@@ -2261,7 +2266,7 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct 
tcphdr *th,
         * for the "LAND" DoS attack.
         */
        if (tp->t_state == TCPS_SYN_RECEIVED && SEQ_LT(th->th_seq, tp->irs)) {
-               rstreason = BANDLIM_RST_OPENPORT;
+               rstreason = BANDLIM_TCP_RST;
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
                goto dropwithreset;
        }
@@ -3418,7 +3423,7 @@ dropafterack:
        if (tp->t_state == TCPS_SYN_RECEIVED && (thflags & TH_ACK) &&
            (SEQ_GT(tp->snd_una, th->th_ack) ||
             SEQ_GT(th->th_ack, tp->snd_max)) ) {
-               rstreason = BANDLIM_RST_OPENPORT;
+               rstreason = BANDLIM_TCP_RST;
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
                goto dropwithreset;
        }
diff --git a/sys/netinet/tcp_stacks/bbr.c b/sys/netinet/tcp_stacks/bbr.c
index 66fab54bd010..af7bb8cb642f 100644
--- a/sys/netinet/tcp_stacks/bbr.c
+++ b/sys/netinet/tcp_stacks/bbr.c
@@ -8752,7 +8752,7 @@ bbr_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
            (SEQ_LEQ(th->th_ack, tp->iss) ||
            SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if ((thflags & (TH_ACK | TH_RST)) == (TH_ACK | TH_RST)) {
@@ -8954,7 +8954,7 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
            (SEQ_LEQ(th->th_ack, tp->snd_una) ||
             SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if (IS_FASTOPEN(tp->t_flags)) {
@@ -8966,7 +8966,7 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
                 */
                if ((thflags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK)) {
                        tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-                       ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, 
tlen);
+                       ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                        return (1);
                } else if (thflags & TH_SYN) {
                        /* non-initial SYN is ignored */
@@ -8999,7 +8999,7 @@ bbr_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
         */
        if (SEQ_LT(th->th_seq, tp->irs)) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if (ctf_drop_checks(to, m, th, tp, &tlen, &thflags, &drop_hdrlen, 
&ret_val)) {
@@ -9277,7 +9277,7 @@ bbr_do_established(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -9374,7 +9374,7 @@ bbr_do_close_wait(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -9524,7 +9524,7 @@ bbr_do_fin_wait_1(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -9626,7 +9626,7 @@ bbr_do_closing(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -9728,7 +9728,7 @@ bbr_do_lastack(struct mbuf *m, struct tcphdr *th, struct 
socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -9837,7 +9837,7 @@ bbr_do_fin_wait_2(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        bbr_log_progress_event(bbr, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -11492,7 +11492,7 @@ bbr_do_segment_nounlock(struct tcpcb *tp, struct mbuf 
*m, struct tcphdr *th,
        if ((tp->t_state == TCPS_SYN_SENT) && (thflags & TH_ACK) &&
            (SEQ_LEQ(th->th_ack, tp->iss) || SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_RST_OPENPORT, 
tlen);
+               ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if (tiwin > bbr->r_ctl.rc_high_rwnd)
diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c
index beb7428638db..34dfdf9ce4f5 100644
--- a/sys/netinet/tcp_stacks/rack.c
+++ b/sys/netinet/tcp_stacks/rack.c
@@ -13265,7 +13265,7 @@ rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
            (SEQ_LEQ(th->th_ack, tp->iss) ||
            SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if ((thflags & (TH_ACK | TH_RST)) == (TH_ACK | TH_RST)) {
@@ -13461,7 +13461,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
            (SEQ_LEQ(th->th_ack, tp->snd_una) ||
            SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if (IS_FASTOPEN(tp->t_flags)) {
@@ -13474,7 +13474,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                 */
                if ((thflags & (TH_SYN | TH_ACK)) == (TH_SYN | TH_ACK)) {
                        tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-                       ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, 
tlen);
+                       ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                        return (1);
                } else if (thflags & TH_SYN) {
                        /* non-initial SYN is ignored */
@@ -13508,7 +13508,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
         */
        if (SEQ_LT(th->th_seq, tp->irs)) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return (1);
        }
        if (_ctf_drop_checks(to, m, th, tp, &tlen, &thflags, &drop_hdrlen, 
&ret_val,
@@ -13776,7 +13776,7 @@ rack_do_established(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
        if (sbavail(&so->so_snd)) {
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event(rack, tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -13877,7 +13877,7 @@ rack_do_close_wait(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event((struct tcp_rack *)tp->t_fb_ptr,
                                                tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -14032,7 +14032,7 @@ rack_do_fin_wait_1(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event((struct tcp_rack *)tp->t_fb_ptr,
                                                tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -14138,7 +14138,7 @@ rack_do_closing(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event((struct tcp_rack *)tp->t_fb_ptr,
                                                tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -14244,7 +14244,7 @@ rack_do_lastack(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event((struct tcp_rack *)tp->t_fb_ptr,
                                                tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -14353,7 +14353,7 @@ rack_do_fin_wait_2(struct mbuf *m, struct tcphdr *th, 
struct socket *so,
                if (ctf_progress_timeout_check(tp, true)) {
                        rack_log_progress_event((struct tcp_rack *)tp->t_fb_ptr,
                                                tp, tick, PROGRESS_DROP, 
__LINE__);
-                       ctf_do_dropwithreset_conn(m, tp, th, 
BANDLIM_RST_OPENPORT, tlen);
+                       ctf_do_dropwithreset_conn(m, tp, th, BANDLIM_TCP_RST, 
tlen);
                        return (1);
                }
        }
@@ -16938,7 +16938,7 @@ rack_do_segment_nounlock(struct tcpcb *tp, struct mbuf 
*m, struct tcphdr *th,
        if ((tp->t_state == TCPS_SYN_SENT) && (thflags & TH_ACK) &&
            (SEQ_LEQ(th->th_ack, tp->iss) || SEQ_GT(th->th_ack, tp->snd_max))) {
                tcp_log_end_status(tp, TCP_EI_STATUS_RST_IN_FRONT);
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
 #ifdef TCP_ACCOUNTING
                sched_unpin();
 #endif
diff --git a/sys/netinet/tcp_stacks/rack_bbr_common.c 
b/sys/netinet/tcp_stacks/rack_bbr_common.c
index b78988b75c72..e5ccc7ebb236 100644
--- a/sys/netinet/tcp_stacks/rack_bbr_common.c
+++ b/sys/netinet/tcp_stacks/rack_bbr_common.c
@@ -682,7 +682,7 @@ __ctf_do_dropafterack(struct mbuf *m, struct tcpcb *tp, 
struct tcphdr *th, int32
            (SEQ_GT(tp->snd_una, th->th_ack) ||
            SEQ_GT(th->th_ack, tp->snd_max))) {
                *ret_val = 1;
-               ctf_do_dropwithreset(m, tp, th, BANDLIM_RST_OPENPORT, tlen);
+               ctf_do_dropwithreset(m, tp, th, BANDLIM_TCP_RST, tlen);
                return;
        } else
                *ret_val = 0;

Reply via email to