33use p4rs:: { Pipeline , TableEntry } ;
44use serde:: { Deserialize , Serialize } ;
55use slog:: Logger ;
6- use std:: collections:: { BTreeMap , HashMap } ;
6+ use std:: collections:: BTreeMap ;
77use std:: fs:: OpenOptions ;
88use std:: io:: { Read , Write } ;
99use std:: os:: unix:: io:: AsRawFd ;
@@ -27,7 +27,13 @@ pub enum ManagementRequest {
2727pub enum ManagementResponse {
2828 RadixResponse ( u16 ) ,
2929 DumpResponse ( BTreeMap < String , Vec < TableEntry > > ) ,
30- TableCountersResponse ( Option < HashMap < Vec < u8 > , u128 > > ) ,
30+ TableCountersResponse ( Option < Vec < TableCounter > > ) ,
31+ }
32+
33+ #[ derive( Debug , Serialize , Deserialize ) ]
34+ pub struct TableCounter {
35+ pub key : Vec < u8 > ,
36+ pub value : u128 ,
3137}
3238
3339#[ derive( Debug , Default , Serialize , Deserialize ) ]
@@ -76,7 +82,14 @@ pub async fn handle_management_message(
7682 let response = match pl. get_table_counters ( & tc. table ) {
7783 None => ManagementResponse :: TableCountersResponse ( None ) ,
7884 Some ( counters) => {
79- let entries = counters. entries . lock ( ) . unwrap ( ) . clone ( ) ;
85+ let entries = counters
86+ . entries
87+ . lock ( )
88+ . unwrap ( )
89+ . clone ( )
90+ . into_iter ( )
91+ . map ( |( k, v) | TableCounter { key : k, value : v } )
92+ . collect ( ) ;
8093 ManagementResponse :: TableCountersResponse ( Some ( entries) )
8194 }
8295 } ;
0 commit comments