@@ -25,7 +25,8 @@ pub struct Table {
2525// soft-npu table names
2626const ROUTER_V4_RT : & str = "ingress.router.v4_route.rtr" ;
2727const 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" ;
2930const LOCAL_V6 : & str = "ingress.local.local_v6" ;
3031const LOCAL_V4 : & str = "ingress.local.local_v4" ;
3132const 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" ;
4546const 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" ;
4852const NDP : & str = "pipe.Ingress.l3_router.Router6.Ndp.tbl" ;
4953const ARP : & str = "pipe.Ingress.l3_router.Router4.Arp.tbl" ;
5054const 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