diff --git a/tools/tcpaccept.py b/tools/tcpaccept.py
index b128086..24b88f2 100755
--- a/tools/tcpaccept.py
+++ b/tools/tcpaccept.py
@@ -37,0 +38,2 @@ parser.add_argument("-t", "--timestamp", action="store_true",
+parser.add_argument("--track-only-backlog-drop", action="store_true",
+    help="trace only listen backlog dropped packets")
@@ -54,0 +57,2 @@ struct ipv4_data_t {
+    u32 backlog;
+    u32 max_backlog;
@@ -65,0 +70,2 @@ struct ipv6_data_t {
+    u32 backlog;
+    u32 max_backlog;
@@ -128,0 +135,2 @@ int kretprobe__inet_csk_accept(struct pt_regs *ctx)
+    ##TRACK_ONLY_BACKLOG_DROP##
+
@@ -135,0 +144,2 @@ int kretprobe__inet_csk_accept(struct pt_regs *ctx)
+        data4.backlog = newsk->sk_ack_backlog;
+        data4.max_backlog = newsk->sk_max_ack_backlog;
@@ -144,0 +155,2 @@ int kretprobe__inet_csk_accept(struct pt_regs *ctx)
+        data6.backlog = newsk->sk_ack_backlog;
+        data6.max_backlog = newsk->sk_max_ack_backlog;
@@ -164,0 +177 @@ TRACEPOINT_PROBE(sock, inet_sock_set_state)
+
@@ -168,0 +182,4 @@ TRACEPOINT_PROBE(sock, inet_sock_set_state)
+    struct sock *newsk = (struct sock *) args->skaddr;
+
+    ##TRACK_ONLY_BACKLOG_DROP##
+
@@ -176,0 +194,2 @@ TRACEPOINT_PROBE(sock, inet_sock_set_state)
+        data4.backlog = newsk->sk_ack_backlog;
+        data4.max_backlog = newsk->sk_max_ack_backlog;
@@ -184,0 +204,2 @@ TRACEPOINT_PROBE(sock, inet_sock_set_state)
+        data6.backlog = newsk->sk_ack_backlog;
+        data6.max_backlog = newsk->sk_max_ack_backlog;
@@ -208,0 +230,8 @@ else:
+
+if args.track_only_backlog_drop:
+    bpf_text = bpf_text.replace(
+      '##TRACK_ONLY_BACKLOG_DROP##',
+      'if (newsk->sk_ack_backlog < newsk->sk_max_ack_backlog) return 0;')
+else:
+    bpf_text = bpf_text.replace('##TRACK_ONLY_BACKLOG_DROP##', '')
+
@@ -220,0 +250,2 @@ class Data_ipv4(ct.Structure):
+        ("backlog", ct.c_uint),
+        ("max_backlog", ct.c_uint),
@@ -231,0 +263,2 @@ class Data_ipv6(ct.Structure):
+        ("backlog", ct.c_uint),
+        ("max_backlog", ct.c_uint),
@@ -247,5 +280,13 @@ def print_ipv4_event(cpu, data, size):
-    printb(b"%-6d %-12.12s %-2d %-16s %-16s %-4d" % (event.pid,
-        event.task, event.ip,
-        inet_ntop(AF_INET, pack("I", event.daddr)).encode(),
-        inet_ntop(AF_INET, pack("I", event.saddr)).encode(),
-        event.lport))
+
+    fields = [event.pid,
+              event.task,
+              event.ip,
+              inet_ntop(AF_INET, pack("I", event.daddr)).encode(),
+              inet_ntop(AF_INET, pack("I", event.saddr)).encode(),
+              event.lport,
+              ]
+
+    if args.track_only_backlog_drop:
+        fields +=[event.backlog, event.max_backlog]
+
+    printb(format_ % tuple(fields))
@@ -260,5 +301,13 @@ def print_ipv6_event(cpu, data, size):
-    printb(b"%-6d %-12.12s %-2d %-16s %-16s %-4d" % (event.pid,
-        event.task, event.ip,
-        inet_ntop(AF_INET6, event.daddr).encode(),
-        inet_ntop(AF_INET6, event.saddr).encode(),
-        event.lport))
+
+    fields = [event.pid,
+              event.task,
+              event.ip,
+              inet_ntop(AF_INET6, event.daddr).encode(),
+              inet_ntop(AF_INET6, event.saddr).encode(),
+              event.lport,
+              ]
+
+    if args.track_only_backlog_drop:
+        fields += [event.backlog, event.max_backlog]
+
+    printb(format_ % tuple(fields))
@@ -268,0 +318,10 @@ b = BPF(text=bpf_text)
+# common format and fields
+format_ = b"%-6d %-12.12s %-2d %-16s %-16s %-4d"
+header = ["PID",
+          "COMM",
+          "IP",
+          "RADDR",
+          "LADDR",
+          "LPORT"]
+
+
@@ -272,2 +330,0 @@ if args.timestamp:
-print("%-6s %-12s %-2s %-16s %-16s %-4s" % ("PID", "COMM", "IP", "RADDR",
-    "LADDR", "LPORT"))
@@ -275 +332,6 @@ print("%-6s %-12s %-2s %-16s %-16s %-4s" % ("PID", "COMM", "IP", "RADDR",
-start_ts = 0
+if args.track_only_backlog_drop:
+    format_ = b"%-6d %-12.12s %-2d %-16s %-16s %-6d %-8d %-11d "
+    header += ["BACKLOG", "MAX_BACKLOG"]
+    print("%-6s %-12s %-2s %-16s %-16s %-4s %-8s %-11s" % tuple(header))
+else:
+    print("%-6s %-12s %-2s %-16s %-16s %-4s" % tuple(header))
@@ -276,0 +339,2 @@ start_ts = 0
+
+start_ts = 0
