@@ -7,9 +7,7 @@ use log::{debug, info, warn, LevelFilter};
7
7
use mctp:: { AsyncListener , AsyncRespChannel , Eid } ;
8
8
use mctp_estack:: {
9
9
control:: { ControlEvent , MctpControl } ,
10
- router:: {
11
- PortBottom , PortBuilder , PortId , PortLookup , PortStorage , Router ,
12
- } ,
10
+ router:: { Port , PortId , PortLookup , PortTop , Router } ,
13
11
} ;
14
12
use std:: time:: Instant ;
15
13
@@ -81,15 +79,15 @@ struct Routes {}
81
79
82
80
impl PortLookup for Routes {
83
81
fn by_eid (
84
- & mut self ,
82
+ & self ,
85
83
_eid : Eid ,
86
84
source_port : Option < PortId > ,
87
- ) -> Option < PortId > {
85
+ ) -> ( Option < PortId > , Option < usize > ) {
88
86
// we're an endpoint device, don't forward packets from other ports
89
87
if source_port. is_some ( ) {
90
- return None ;
88
+ return ( None , None ) ;
91
89
}
92
- Some ( PortId ( 0 ) )
90
+ ( Some ( PortId ( 0 ) ) , None )
93
91
}
94
92
}
95
93
@@ -101,10 +99,10 @@ async fn update_router_time(router: &Router<'_>, start_time: Instant) {
101
99
}
102
100
}
103
101
104
- async fn run < ' a > (
102
+ async fn run (
105
103
mut transport : Transport ,
106
- mut port : PortBottom < ' _ > ,
107
- router : & ' a Router < ' a > ,
104
+ mut port : Port < ' _ > ,
105
+ router : & Router < ' _ > ,
108
106
start_time : Instant ,
109
107
) -> std:: io:: Result < ( ) > {
110
108
let portid = PortId ( 0 ) ;
@@ -146,8 +144,8 @@ async fn echo<'a>(router: &'a Router<'a>) -> std::io::Result<()> {
146
144
}
147
145
}
148
146
149
- async fn control < ' a > (
150
- router : & ' a Router < ' a > ,
147
+ async fn control (
148
+ router : & Router < ' _ > ,
151
149
ctrl_ev_sender : async_channel:: Sender < ControlEvent > ,
152
150
) -> std:: io:: Result < ( ) > {
153
151
let mut l = router. listener ( mctp:: MCTP_TYPE_CONTROL ) ?;
@@ -183,7 +181,7 @@ async fn control<'a>(
183
181
}
184
182
185
183
#[ cfg( feature = "nvme-mi" ) ]
186
- async fn nvme_mi < ' a > ( router : & ' a Router < ' a > ) -> std:: io:: Result < ( ) > {
184
+ async fn nvme_mi ( router : & Router < ' _ > ) -> std:: io:: Result < ( ) > {
187
185
let mut l = router. listener ( mctp:: MCTP_TYPE_NVME ) ?;
188
186
189
187
let mut subsys = Subsystem :: new ( SubsystemInfo :: environment ( ) ) ;
@@ -226,16 +224,16 @@ async fn nvme_mi<'a>(router: &'a Router<'a>) -> std::io::Result<()> {
226
224
}
227
225
}
228
226
#[ cfg( not( feature = "nvme-mi" ) ) ]
229
- async fn nvme_mi < ' a > ( _router : & ' a Router < ' a > ) -> std:: io:: Result < ( ) > {
227
+ async fn nvme_mi ( _router : & Router < ' _ > ) -> std:: io:: Result < ( ) > {
230
228
futures:: future:: pending ( ) . await
231
229
}
232
230
233
231
#[ cfg( feature = "pldm" ) ]
234
232
mod pldm;
235
233
#[ cfg( not( feature = "pldm" ) ) ]
236
234
mod pldm {
237
- pub async fn pldm < ' a > (
238
- _router : & ' a super :: Router < ' a > ,
235
+ pub async fn pldm (
236
+ _router : & super :: Router < ' _ > ,
239
237
_recv : async_channel:: Receiver < super :: ControlEvent > ,
240
238
) -> std:: io:: Result < ( ) > {
241
239
futures:: future:: pending ( ) . await
@@ -249,36 +247,29 @@ fn main() -> Result<()> {
249
247
simplelog:: SimpleLogger :: init ( LevelFilter :: Debug , conf) ?;
250
248
251
249
let eid = Eid ( 0 ) ;
252
- let mtu = 68usize ;
253
250
254
- let mut port_storage = PortStorage :: < 4 > :: new ( ) ;
255
- let mut port = PortBuilder :: new ( & mut port_storage) ;
256
- let ( port_top, port_bottom) = port. build ( mtu) . unwrap ( ) ;
257
- let ports = [ port_top] ;
251
+ let mut port_top = PortTop :: new ( ) ;
252
+ let routes = Routes { } ;
253
+ let mut router = Router :: new ( eid, & routes, 0 ) ;
254
+ let port_id = router. add_port ( & mut port_top) ?;
255
+ let port = router. port ( port_id) ?;
258
256
259
- let start_time = Instant :: now ( ) ;
260
-
261
- let stack = mctp_estack:: Stack :: new ( eid, mtu, 0u64 ) ;
262
-
263
- let mut routes = Routes { } ;
264
- let router = Router :: new ( stack, & ports, & mut routes) ;
265
-
266
- let ( transport, mut port) = match opts. transport {
257
+ let ( transport, mut t_port) = match opts. transport {
267
258
TransportSubcommand :: Serial ( s) => {
268
259
let serial = serial:: MctpSerial :: new ( & s. tty ) ?;
269
260
info ! ( "Created MCTP Serial transport on {}" , s. tty) ;
270
261
let t = Transport :: Serial ( serial) ;
271
262
( t, None )
272
263
}
273
264
TransportSubcommand :: Usb ( u) => {
274
- let ( usbredir, port ) = usbredir:: MctpUsbRedir :: new ( & u. path ) ?;
265
+ let ( usbredir, t_port ) = usbredir:: MctpUsbRedir :: new ( & u. path ) ?;
275
266
info ! ( "Created MCTP USB transport on {}" , u. path) ;
276
267
let t = Transport :: Usb ( usbredir) ;
277
- ( t, Some ( port ) )
268
+ ( t, Some ( t_port ) )
278
269
}
279
270
} ;
280
271
281
- let fut = match port {
272
+ let fut = match t_port {
282
273
Some ( ref mut p) => futures:: future:: Either :: Left ( p. process ( ) ) ,
283
274
None => futures:: future:: Either :: Right ( futures:: future:: pending ( ) ) ,
284
275
} ;
@@ -288,12 +279,13 @@ fn main() -> Result<()> {
288
279
smol:: block_on ( async {
289
280
select ! (
290
281
_ = fut. fuse( ) => ( ) ,
291
- _ = run( transport, port_bottom , & router, start_time ) . fuse( ) => ( ) ,
282
+ _ = run( transport, port , & router, Instant :: now ( ) ) . fuse( ) => ( ) ,
292
283
_ = control( & router, ctrl_ev_tx) . fuse( ) => ( ) ,
293
284
_ = nvme_mi( & router) . fuse( ) => ( ) ,
294
285
_ = pldm:: pldm( & router, ctrl_ev_rx) . fuse( ) => ( ) ,
295
- )
296
- } ) ;
286
+ ) ;
287
+ Ok :: < _ , anyhow:: Error > ( ( ) )
288
+ } ) ?;
297
289
298
290
Ok ( ( ) )
299
291
}
0 commit comments