Skip to content

Commit 55d4d6e

Browse files
committed
update softnpu for ecmp-enabled sidecar-lite
1 parent 05bd01b commit 55d4d6e

File tree

1 file changed

+70
-28
lines changed

1 file changed

+70
-28
lines changed

asic/src/softnpu/table.rs

Lines changed: 70 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ pub struct Table {
2525
// soft-npu table names
2626
const ROUTER_V4_RT: &str = "ingress.router.v4_route.rtr";
2727
const ROUTER_V4_IDX: &str = "ingress.router.v4_idx.rtr";
28-
const ROUTER_V6: &str = "ingress.router.v6.rtr";
28+
const ROUTER_V6_RT: &str = "ingress.router.v6_route.rtr";
29+
const ROUTER_V6_IDX: &str = "ingress.router.v6_idx.rtr";
2930
const LOCAL_V6: &str = "ingress.local.local_v6";
3031
const LOCAL_V4: &str = "ingress.local.local_v4";
3132
const NAT_V4: &str = "ingress.nat.nat_v4";
@@ -44,7 +45,10 @@ const ROUTER4_LOOKUP_RT: &str =
4445
"pipe.Ingress.l3_router.Router4.lookup_idx.route";
4546
const ROUTER4_LOOKUP_IDX: &str =
4647
"pipe.Ingress.l3_router.Router4.lookup_idx.lookup";
47-
const ROUTER6_LOOKUP: &str = "pipe.Ingress.l3_router.Router6.lookup.tbl";
48+
const ROUTER6_LOOKUP_RT: &str =
49+
"pipe.Ingress.l3_router.Router6.lookup_idx.route";
50+
const ROUTER6_LOOKUP_IDX: &str =
51+
"pipe.Ingress.l3_router.Router6.lookup_idx.lookup";
4852
const NDP: &str = "pipe.Ingress.l3_router.Router6.Ndp.tbl";
4953
const ARP: &str = "pipe.Ingress.l3_router.Router4.Arp.tbl";
5054
const DPD_MAC_REWRITE: &str = "pipe.Ingress.mac_rewrite.mac_rewrite";
@@ -65,8 +69,11 @@ impl TableOps<Handle> for Table {
6569
ROUTER4_LOOKUP_IDX => {
6670
(Some(ROUTER_V4_IDX.into()), Some(ROUTER4_LOOKUP_IDX.into()))
6771
}
68-
ROUTER6_LOOKUP => {
69-
(Some(ROUTER_V6.into()), Some(ROUTER6_LOOKUP.into()))
72+
ROUTER6_LOOKUP_RT => {
73+
(Some(ROUTER_V6_RT.into()), Some(ROUTER6_LOOKUP_RT.into()))
74+
}
75+
ROUTER6_LOOKUP_IDX => {
76+
(Some(ROUTER_V6_IDX.into()), Some(ROUTER6_LOOKUP_IDX.into()))
7077
}
7178
SWITCH_ADDR4 => (Some(LOCAL_V4.into()), Some(SWITCH_ADDR4.into())),
7279
SWITCH_ADDR6 => (Some(LOCAL_V6.into()), Some(SWITCH_ADDR6.into())),
@@ -225,20 +232,51 @@ impl TableOps<Handle> for Table {
225232
}
226233
("forward_vlan", params)
227234
}
228-
(ROUTER6_LOOKUP, "forward") => {
235+
(ROUTER6_LOOKUP_IDX, "index") => {
229236
let mut params = Vec::new();
230237
for arg in action_data.args.iter() {
231238
match &arg.value {
232-
ValueTypes::U64(v) => match arg.name.as_str() {
233-
"port" => {
234-
params.extend_from_slice(
235-
&(*v as u16).to_le_bytes(),
236-
);
239+
ValueTypes::U64(v) => {
240+
// 16 bit index
241+
// 8 bit slot count
242+
match arg.name.as_str() {
243+
"idx" => {
244+
let v = *v as u16;
245+
params.extend_from_slice(&v.to_le_bytes());
246+
}
247+
"slots" => {
248+
let v = *v as u8;
249+
params.extend_from_slice(&v.to_le_bytes());
250+
}
251+
x => {
252+
error!(hdl.log, "unexpected parameter: {dpd_table}::index {x}")
253+
}
237254
}
238-
x => {
239-
error!(hdl.log, "unexpected parameter: {dpd_table}::forward {x}")
255+
}
256+
ValueTypes::Ptr(v) => {
257+
params.extend_from_slice(v.as_slice());
258+
}
259+
}
260+
}
261+
("index", params)
262+
}
263+
(ROUTER6_LOOKUP_RT, "forward") => {
264+
let mut params = Vec::new();
265+
for arg in action_data.args.iter() {
266+
match &arg.value {
267+
ValueTypes::U64(v) => {
268+
// 16 bit port
269+
match arg.name.as_str() {
270+
"port" => {
271+
params.extend_from_slice(
272+
&(*v as u16).to_le_bytes(),
273+
);
274+
}
275+
x => {
276+
error!(hdl.log, "unexpected parameter: {dpd_table}::forward {x}")
277+
}
240278
}
241-
},
279+
}
242280
ValueTypes::Ptr(v) => {
243281
let mut buf = v.clone();
244282
buf.reverse();
@@ -248,25 +286,29 @@ impl TableOps<Handle> for Table {
248286
}
249287
("forward", params)
250288
}
251-
(ROUTER6_LOOKUP, "forward_vlan") => {
289+
(ROUTER6_LOOKUP_RT, "forward_vlan") => {
252290
let mut params = Vec::new();
253291
for arg in action_data.args.iter() {
254292
match &arg.value {
255-
ValueTypes::U64(v) => match arg.name.as_str() {
256-
"port" => {
257-
params.extend_from_slice(
258-
&(*v as u16).to_le_bytes(),
259-
);
260-
}
261-
"vlan_id" => {
262-
params.extend_from_slice(
263-
&(*v as u16).to_le_bytes(),
264-
);
265-
}
266-
x => {
267-
error!(hdl.log, "unexpected parameter: {dpd_table}::forward_vlan {x}")
293+
ValueTypes::U64(v) => {
294+
// 16 bit port
295+
// 12 bit vlan
296+
match arg.name.as_str() {
297+
"vlan_id" => {
298+
params.extend_from_slice(
299+
&(*v as u16).to_le_bytes(),
300+
);
301+
}
302+
"port" => {
303+
params.extend_from_slice(
304+
&(*v as u16).to_le_bytes(),
305+
);
306+
}
307+
x => {
308+
error!(hdl.log, "unexpected parameter: {dpd_table}::forward_vlan {x}")
309+
}
268310
}
269-
},
311+
}
270312
ValueTypes::Ptr(v) => {
271313
let mut buf = v.clone();
272314
buf.reverse();

0 commit comments

Comments
 (0)