@@ -412,18 +412,25 @@ type 'a conn_state = {
412
412
sndq : Cstruct .t list ; (* reverse list of data to be sent out *)
413
413
rcv_notify : 'a ;
414
414
snd_notify : 'a ;
415
+ created : Mtime .t ;
415
416
}
416
417
417
- let conn_state mk_notify ~rcvbufsize ~sndbufsize tcp_state control_block = {
418
+ let conn_state created mk_notify ~rcvbufsize ~sndbufsize tcp_state control_block = {
418
419
tcp_state ; control_block ;
419
420
cantrcvmore = false ; cantsndmore = false ;
420
421
rcvq = [] ; sndq = [] ;
421
422
rcvbufsize ; sndbufsize ;
422
423
rcv_notify = mk_notify () ; snd_notify = mk_notify () ;
424
+ created ;
423
425
}
424
426
425
427
let pp_conn_state now ppf c =
426
- Fmt. pf ppf " TCP %a cb %a" pp_fsm c.tcp_state (pp_control now) c.control_block
428
+ let created_span = Mtime.Span. of_uint64_ns (Mtime. to_uint64_ns c.created) in
429
+ Fmt. pf ppf " TCP (since %a) %a cb %a"
430
+ Duration. pp
431
+ (Mtime. to_uint64_ns
432
+ (Option. value ~default: Mtime. min_stamp (Mtime. sub_span now created_span)))
433
+ pp_fsm c.tcp_state (pp_control now) c.control_block
427
434
428
435
module IS = Set. Make (struct type t = int let compare = compare_int end )
429
436
@@ -452,13 +459,13 @@ end
452
459
453
460
(* path mtu (its global to a stack) *)
454
461
type 'a t = {
455
- rng : int -> Cstruct .t ;
462
+ rng : int -> string ;
456
463
listeners : IS .t ;
457
464
connections : 'a conn_state CM .t ;
458
465
stats : Stats .t ;
459
466
id : string ;
460
467
mutable ctr : int ;
461
- metrics : (string -> Metrics .field list , 'a conn_state CM .t * Stats .t -> Metrics .data ) Metrics .src ;
468
+ metrics : (string -> Metrics .field list , Mtime .t * 'a conn_state CM .t * Stats .t -> Metrics .data ) Metrics .src ;
462
469
transitions : (string -> Metrics .field list , string -> Metrics .data ) Metrics .src ;
463
470
mk_notify : unit -> 'a ;
464
471
}
@@ -468,6 +475,9 @@ module States = Map.Make (struct
468
475
let compare a b = compare a b
469
476
end )
470
477
478
+ let src = Logs.Src. create " tcp.state" ~doc: " TCP state"
479
+ module Log = (val Logs. src_log src : Logs.LOG )
480
+
471
481
let metrics () =
472
482
let tcp_states =
473
483
[ Syn_sent ; Syn_received ; Established ; Close_wait ; Fin_wait_1 ;
@@ -476,9 +486,11 @@ let metrics () =
476
486
in
477
487
let open Metrics in
478
488
let doc = " uTCP metrics" in
479
- let data (connections , stats ) =
489
+ let data (now , connections , stats ) =
480
490
let rcvq, sndq, states =
481
- CM. fold (fun _ conn (rcvq , sndq , acc ) ->
491
+ CM. fold (fun k conn (rcvq , sndq , acc ) ->
492
+ if Mtime. (Span. to_uint64_ns (span now conn.created)) > Duration. of_min 1 then
493
+ Log. info (fun m -> m " %a in %a" Connection. pp k (pp_conn_state now) conn);
482
494
rcvq + Cstruct. lenv conn.rcvq,
483
495
sndq + Cstruct. lenv conn.sndq,
484
496
States. update conn.tcp_state (fun v -> Some (succ (Option. value ~default: 0 v))) acc)
@@ -502,8 +514,8 @@ let metrics () =
502
514
let tag = Tags. string " stack-id" in
503
515
Src. v ~doc ~tags: Tags. [ tag ] ~data " utcp"
504
516
505
- let add_metrics t =
506
- Metrics. add t.metrics (fun x -> x t.id) (fun d -> d (t.connections, t.stats))
517
+ let add_metrics t now =
518
+ Metrics. add t.metrics (fun x -> x t.id) (fun d -> d (now, t.connections, t.stats))
507
519
508
520
let transitions () =
509
521
let create () =
0 commit comments