The branch stable/14 has been updated by tuexen:

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

commit b339da5b23e8871dd2b56f510ba3db1e09223be3
Author:     Michael Tuexen <[email protected]>
AuthorDate: 2025-10-06 23:24:43 +0000
Commit:     Michael Tuexen <[email protected]>
CommitDate: 2025-10-10 11:26:44 +0000

    sockstat: support reporting of BBLog state
    
    Add a -b option to print the BBLog state for TCP sockets.
    Manually tweaked for stable/14.
    
    Reviewed by:            jtl, rrs
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D52944
    
    (cherry picked from commit d801cc2d8542854a5dee9bfb25a15af6fa1dafad)
---
 usr.bin/sockstat/sockstat.1 | 11 +++++++--
 usr.bin/sockstat/sockstat.c | 54 +++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 61 insertions(+), 4 deletions(-)

diff --git a/usr.bin/sockstat/sockstat.1 b/usr.bin/sockstat/sockstat.1
index ca486a088b13..eba4b1c4aed5 100644
--- a/usr.bin/sockstat/sockstat.1
+++ b/usr.bin/sockstat/sockstat.1
@@ -25,7 +25,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd October 15, 2024
+.Dd October 7, 2025
 .Dt SOCKSTAT 1
 .Os
 .Sh NAME
@@ -33,7 +33,7 @@
 .Nd list open sockets
 .Sh SYNOPSIS
 .Nm
-.Op Fl 46CcfIiLlnqSsUuvw
+.Op Fl 46bCcfIiLlnqSsUuvw
 .Op Fl j Ar jail
 .Op Fl p Ar ports
 .Op Fl P Ar protocols
@@ -54,6 +54,9 @@ Show
 Show
 .Dv AF_INET6
 (IPv6) sockets.
+.It Fl b
+Show the BBLog state of the socket.
+This is currently only implemented for TCP.
 .It Fl C
 Display the congestion control module, if applicable.
 This is currently only implemented for TCP.
@@ -195,6 +198,10 @@ is specified (only for SCTP).
 The connection state if
 .Fl s
 is specified (only for SCTP or TCP).
+.It Li BBLOG STATE
+The BBLog state if
+.Fl b
+is specified (only for TCP).
 .It Li STACK
 The protocol stack if
 .Fl S
diff --git a/usr.bin/sockstat/sockstat.c b/usr.bin/sockstat/sockstat.c
index 11434a6efa68..4548eb8a0b11 100644
--- a/usr.bin/sockstat/sockstat.c
+++ b/usr.bin/sockstat/sockstat.c
@@ -52,6 +52,7 @@
 #include <netinet/tcp_fsm.h>
 #include <netinet/tcp_seq.h>
 #include <netinet/tcp_var.h>
+#include <netinet/tcp_log_buf.h>
 #include <arpa/inet.h>
 
 #include <capsicum_helpers.h>
@@ -81,6 +82,7 @@
 
 static int      opt_4;         /* Show IPv4 sockets */
 static int      opt_6;         /* Show IPv6 sockets */
+static bool     opt_b;         /* Show BBLog state */
 static int      opt_C;         /* Show congestion control */
 static int      opt_c;         /* Show connected sockets */
 static int      opt_f;         /* Show FIB numbers */
@@ -143,6 +145,7 @@ struct sock {
        int proto;
        int state;
        int fibnum;
+       int bblog_state;
        const char *protoname;
        char stack[TCP_FUNCTION_NAME_LEN_MAX];
        char cc[TCP_CA_NAME_MAX];
@@ -797,6 +800,7 @@ gather_inet(int proto)
                sock->vflag = xip->inp_vflag;
                if (proto == IPPROTO_TCP) {
                        sock->state = xtp->t_state;
+                       sock->bblog_state = xtp->t_logstate;
                        memcpy(sock->stack, xtp->xt_stack,
                            TCP_FUNCTION_NAME_LEN_MAX);
                        memcpy(sock->cc, xtp->xt_cc, TCP_CA_NAME_MAX);
@@ -1105,6 +1109,37 @@ sctp_path_state(int state)
        }
 }
 
+static const char *
+bblog_state(int state)
+{
+       switch (state) {
+       case TCP_LOG_STATE_OFF:
+               return "OFF";
+               break;
+       case TCP_LOG_STATE_TAIL:
+               return "TAIL";
+               break;
+       case TCP_LOG_STATE_HEAD:
+               return "HEAD";
+               break;
+       case TCP_LOG_STATE_HEAD_AUTO:
+               return "HEAD_AUTO";
+               break;
+       case TCP_LOG_STATE_CONTINUAL:
+               return "CONTINUAL";
+               break;
+       case TCP_LOG_STATE_TAIL_AUTO:
+               return "TAIL_AUTO";
+               break;
+       case TCP_LOG_VIA_BBPOINTS:
+               return "BBPOINTS";
+               break;
+       default:
+               return "UNKNOWN";
+               break;
+       }
+}
+
 static void
 displaysock(struct sock *s, int pos)
 {
@@ -1299,6 +1334,16 @@ displaysock(struct sock *s, int pos)
                                }
                                offset += 13;
                        }
+                       if (opt_b) {
+                               if (s->proto == IPPROTO_TCP) {
+                                       do
+                                               pos += xprintf(" ");
+                                       while (pos < offset);
+                                       pos += xprintf("%s",
+                                           bblog_state(s->bblog_state));
+                               }
+                               offset += 13;
+                       }
                        if (opt_S) {
                                if (s->proto == IPPROTO_TCP) {
                                        do
@@ -1359,6 +1404,8 @@ display(void)
                        printf(" %-12s", "PATH STATE");
                        printf(" %-12s", "CONN STATE");
                }
+               if (opt_b)
+                       printf(" %-12s", "BBLOG STATE");
                if (opt_S)
                        printf(" %-*.*s", TCP_FUNCTION_NAME_LEN_MAX,
                            TCP_FUNCTION_NAME_LEN_MAX, "STACK");
@@ -1477,7 +1524,7 @@ static void
 usage(void)
 {
        errx(1,
-    "usage: sockstat [-46CcfIiLlnqSsUuvw] [-j jid] [-p ports] [-P protocols]");
+    "usage: sockstat [-46bCcfIiLlnqSsUuvw] [-j jid] [-p ports] [-P 
protocols]");
 }
 
 int
@@ -1491,7 +1538,7 @@ main(int argc, char *argv[])
        int o, i;
 
        opt_j = -1;
-       while ((o = getopt(argc, argv, "46CcfIij:Llnp:P:qSsUuvw")) != -1)
+       while ((o = getopt(argc, argv, "46bCcfIij:Llnp:P:qSsUuvw")) != -1)
                switch (o) {
                case '4':
                        opt_4 = 1;
@@ -1499,6 +1546,9 @@ main(int argc, char *argv[])
                case '6':
                        opt_6 = 1;
                        break;
+               case 'b':
+                       opt_b = true;
+                       break;
                case 'C':
                        opt_C = 1;
                        break;

Reply via email to