@@ -459,8 +459,103 @@ ring_handle_list(const char *cmd __rte_unused,
459
459
return 0 ;
460
460
}
461
461
462
+ static const char *
463
+ ring_prod_sync_type_to_name (struct rte_ring * r )
464
+ {
465
+ switch (r -> prod .sync_type ) {
466
+ case RTE_RING_SYNC_MT :
467
+ return "MP" ;
468
+ case RTE_RING_SYNC_ST :
469
+ return "SP" ;
470
+ case RTE_RING_SYNC_MT_RTS :
471
+ return "MP_RTS" ;
472
+ case RTE_RING_SYNC_MT_HTS :
473
+ return "MP_HTS" ;
474
+ default :
475
+ return "Unknown" ;
476
+ }
477
+ }
478
+
479
+ static const char *
480
+ ring_cons_sync_type_to_name (struct rte_ring * r )
481
+ {
482
+ switch (r -> cons .sync_type ) {
483
+ case RTE_RING_SYNC_MT :
484
+ return "MC" ;
485
+ case RTE_RING_SYNC_ST :
486
+ return "SC" ;
487
+ case RTE_RING_SYNC_MT_RTS :
488
+ return "MC_RTS" ;
489
+ case RTE_RING_SYNC_MT_HTS :
490
+ return "MC_HTS" ;
491
+ default :
492
+ return "Unknown" ;
493
+ }
494
+ }
495
+
496
+ struct ring_info_cb_arg {
497
+ char * ring_name ;
498
+ struct rte_tel_data * d ;
499
+ };
500
+
501
+ static void
502
+ ring_info_cb (struct rte_ring * r , void * arg )
503
+ {
504
+ struct ring_info_cb_arg * ring_arg = (struct ring_info_cb_arg * )arg ;
505
+ struct rte_tel_data * d = ring_arg -> d ;
506
+ const struct rte_memzone * mz ;
507
+
508
+ if (strncmp (r -> name , ring_arg -> ring_name , RTE_RING_NAMESIZE ))
509
+ return ;
510
+
511
+ rte_tel_data_add_dict_string (d , "name" , r -> name );
512
+ rte_tel_data_add_dict_int (d , "socket" , r -> memzone -> socket_id );
513
+ rte_tel_data_add_dict_int (d , "flags" , r -> flags );
514
+ rte_tel_data_add_dict_string (d , "producer_type" ,
515
+ ring_prod_sync_type_to_name (r ));
516
+ rte_tel_data_add_dict_string (d , "consumer_type" ,
517
+ ring_cons_sync_type_to_name (r ));
518
+ rte_tel_data_add_dict_uint (d , "size" , r -> size );
519
+ rte_tel_data_add_dict_uint_hex (d , "mask" , r -> mask , 0 );
520
+ rte_tel_data_add_dict_uint (d , "capacity" , r -> capacity );
521
+ rte_tel_data_add_dict_uint (d , "used_count" , rte_ring_count (r ));
522
+
523
+ mz = r -> memzone ;
524
+ if (mz == NULL )
525
+ return ;
526
+ rte_tel_data_add_dict_string (d , "mz_name" , mz -> name );
527
+ rte_tel_data_add_dict_uint (d , "mz_len" , mz -> len );
528
+ rte_tel_data_add_dict_uint (d , "mz_hugepage_sz" , mz -> hugepage_sz );
529
+ rte_tel_data_add_dict_int (d , "mz_socket_id" , mz -> socket_id );
530
+ rte_tel_data_add_dict_uint_hex (d , "mz_flags" , mz -> flags , 0 );
531
+ }
532
+
533
+ static int
534
+ ring_handle_info (const char * cmd __rte_unused , const char * params ,
535
+ struct rte_tel_data * d )
536
+ {
537
+ char name [RTE_RING_NAMESIZE ] = {0 };
538
+ struct ring_info_cb_arg ring_arg ;
539
+
540
+ if (params == NULL || strlen (params ) == 0 ||
541
+ strlen (params ) >= RTE_RING_NAMESIZE )
542
+ return - EINVAL ;
543
+
544
+ rte_strlcpy (name , params , RTE_RING_NAMESIZE );
545
+
546
+ ring_arg .ring_name = name ;
547
+ ring_arg .d = d ;
548
+
549
+ rte_tel_data_start_dict (d );
550
+ ring_walk (ring_info_cb , & ring_arg );
551
+
552
+ return 0 ;
553
+ }
554
+
462
555
RTE_INIT (ring_init_telemetry )
463
556
{
464
557
rte_telemetry_register_cmd ("/ring/list" , ring_handle_list ,
465
558
"Returns list of available rings. Takes no parameters" );
559
+ rte_telemetry_register_cmd ("/ring/info" , ring_handle_info ,
560
+ "Returns ring info. Parameters: ring_name." );
466
561
}
0 commit comments