Skip to content

Commit 7b7831c

Browse files
committed
table counter support
1 parent dbab082 commit 7b7831c

3 files changed

Lines changed: 21 additions & 8 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ dlpi = { git = "https://github.com/oxidecomputer/dlpi-sys", branch = "main" }
1313
indicatif = "0.17.2"
1414
libc = "0.2.137"
1515
libloading = "0.7.3"
16-
p4rs = { git = "https://github.com/oxidecomputer/p4", branch = "main" }
16+
p4rs = { git = "https://github.com/oxidecomputer/p4", branch = "counter" }
1717
p9ds = { git = "https://github.com/oxidecomputer/p9fs", branch = "main" }
1818
p9kp = { git = "https://github.com/oxidecomputer/p9fs", branch = "main" }
1919
serde = { version = "1.0.147", features = ["derive"] }

src/mgmt.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use p4rs::{Pipeline, TableEntry};
44
use serde::{Deserialize, Serialize};
55
use slog::Logger;
6-
use std::collections::BTreeMap;
6+
use std::collections::{BTreeMap, HashMap};
77
use std::fs::OpenOptions;
88
use std::io::{Read, Write};
99
use std::os::unix::io::AsRawFd;
@@ -19,13 +19,15 @@ pub enum ManagementRequest {
1919
RadixRequest,
2020
TableAdd(TableAdd),
2121
TableRemove(TableRemove),
22+
TableCounters(TableCounters),
2223
DumpRequest,
2324
}
2425

2526
#[derive(Debug, Serialize, Deserialize)]
2627
pub enum ManagementResponse {
2728
RadixResponse(u16),
2829
DumpResponse(BTreeMap<String, Vec<TableEntry>>),
30+
TableCountersResponse(Option<HashMap<Vec<u8>, u128>>),
2931
}
3032

3133
#[derive(Debug, Default, Serialize, Deserialize)]
@@ -42,6 +44,11 @@ pub struct TableRemove {
4244
pub keyset_data: Vec<u8>,
4345
}
4446

47+
#[derive(Debug, Default, Serialize, Deserialize)]
48+
pub struct TableCounters {
49+
pub table: String,
50+
}
51+
4552
pub async fn handle_management_message(
4653
msg: ManagementRequest,
4754
pipeline: Arc<Mutex<Box<dyn Pipeline>>>,
@@ -65,6 +72,17 @@ pub async fn handle_management_message(
6572
ManagementRequest::TableRemove(tm) => {
6673
pl.remove_table_entry(&tm.table, &tm.keyset_data);
6774
}
75+
ManagementRequest::TableCounters(tc) => {
76+
let response = match pl.get_table_counters(&tc.table) {
77+
None => ManagementResponse::TableCountersResponse(None),
78+
Some(counters) => {
79+
let entries = counters.entries.lock().unwrap().clone();
80+
ManagementResponse::TableCountersResponse(Some(entries))
81+
}
82+
};
83+
let buf = serde_json::to_vec(&response).unwrap();
84+
uds.send_to(&buf, uds_dst).await.unwrap();
85+
}
6886
ManagementRequest::RadixRequest => {
6987
let response = ManagementResponse::RadixResponse(radix as u16);
7088
let buf = serde_json::to_vec(&response).unwrap();

0 commit comments

Comments
 (0)