@@ -25,21 +25,18 @@ pub(crate) mod iface;
2525pub ( crate ) mod link;
2626pub ( crate ) mod socket;
2727
28- use alloc:: rc:: Rc ;
29- use alloc:: sync:: Arc ;
30- use alloc:: string:: ToString ;
31- use alloc:: vec:: Vec ;
28+ use alloc:: { rc:: Rc , string:: ToString , sync:: Arc , vec:: Vec } ;
3229use core:: cell:: RefCell ;
3330use smoltcp:: wire:: IpAddress ;
3431use spin;
3532
36- use crate :: net:: iface_list ;
37- use crate :: net :: link :: LinkLayer ;
38- use crate :: net :: link:: LINK_REGISTRY ;
39- use crate :: net :: smoltcp:: iface:: NetIface ;
40- use crate :: net :: socket:: PosixSocket ;
41- use crate :: net :: SocketFd ;
42- use crate :: net :: smoltcp :: link :: SmoltcpDevice ;
33+ use crate :: net:: {
34+ iface_list ,
35+ link:: LinkLayer ,
36+ smoltcp:: { iface:: NetIface , link :: SmoltcpDevice } ,
37+ socket:: PosixSocket ,
38+ SocketFd ,
39+ } ;
4340
4441/// Entry in the device registration list: (name, set_default, Arc<dyn SmoltcpDevice>).
4542pub ( crate ) type DeviceEntry = ( & ' static str , bool , Arc < spin:: RwLock < dyn SmoltcpDevice > > ) ;
@@ -51,25 +48,18 @@ pub(crate) type DeviceEntry = (&'static str, bool, Arc<spin::RwLock<dyn SmoltcpD
5148/// Each entry is `(device, name, set_default)`. Returns the created
5249/// `NetIface` instances in registration order.
5350pub ( crate ) fn init_devices ( devices : & [ DeviceEntry ] ) -> Vec < Arc < NetIface > > {
54- let link_devices: Vec < Arc < spin:: RwLock < dyn LinkLayer > > > =
55- devices. iter ( ) . map ( |( _, _, link) | link. clone ( ) as Arc < spin:: RwLock < dyn LinkLayer > > ) . collect ( ) ;
56- LINK_REGISTRY . init ( link_devices) ;
57-
5851 let mut ifaces = Vec :: new ( ) ;
59- for ( i, ( name, set_default, _ ) ) in devices. iter ( ) . enumerate ( ) {
60- let link = devices [ i ] . 2 . clone ( ) ;
61- let iface = Arc :: new ( NetIface :: new ( name . to_string ( ) , link , i ) ) ;
62- iface_list:: register ( iface. clone ( ) , * set_default) ;
52+ for ( i, ( name, set_default, link ) ) in devices. iter ( ) . enumerate ( ) {
53+ let iface = Arc :: new ( NetIface :: new ( name . to_string ( ) , link . clone ( ) , i ) ) ;
54+ let link_layer : Arc < spin :: RwLock < dyn LinkLayer > > = link . clone ( ) ;
55+ iface_list:: register ( iface. clone ( ) , link_layer , * set_default) ;
6356 ifaces. push ( iface) ;
6457 }
6558 ifaces
6659}
6760
6861/// Bind a socket to the default NetIface.
69- pub ( crate ) fn bind_default_interface (
70- socket_fd : SocketFd ,
71- socket : Rc < RefCell < dyn PosixSocket > > ,
72- ) {
62+ pub ( crate ) fn bind_default_interface ( socket_fd : SocketFd , socket : Rc < RefCell < dyn PosixSocket > > ) {
7363 if let Some ( interface) = iface_list:: default ( ) {
7464 let mut socket = socket. borrow_mut ( ) ;
7565 socket. bind_interface ( interface. clone ( ) ) ;
@@ -86,21 +76,20 @@ pub(crate) fn bind_interface_by_addr(
8676 socket : Rc < RefCell < dyn PosixSocket > > ,
8777 binding_addr : IpAddress ,
8878) {
89- iface_list:: find ( |iface| iface. contains_addr ( binding_addr) )
90- . map_or_else (
91- || {
92- if let Some ( interface) = iface_list:: default ( ) {
93- let mut socket = socket. borrow_mut ( ) ;
94- socket. bind_interface ( interface. clone ( ) ) ;
95- log:: debug!( "Socket Fd={} binding to {}" , socket_fd, interface) ;
96- } else {
97- log:: error!( "Socket Fd={} binding fail, find no interface" , socket_fd) ;
98- }
99- } ,
100- |iface| {
79+ iface_list:: find ( |iface| iface. contains_addr ( binding_addr) ) . map_or_else (
80+ || {
81+ if let Some ( interface) = iface_list:: default ( ) {
10182 let mut socket = socket. borrow_mut ( ) ;
102- socket. bind_interface ( iface. clone ( ) ) ;
103- log:: debug!( "Socket Fd={} binding to {}" , socket_fd, iface) ;
104- } ,
105- )
106- }
83+ socket. bind_interface ( interface. clone ( ) ) ;
84+ log:: debug!( "Socket Fd={} binding to {}" , socket_fd, interface) ;
85+ } else {
86+ log:: error!( "Socket Fd={} binding fail, find no interface" , socket_fd) ;
87+ }
88+ } ,
89+ |iface| {
90+ let mut socket = socket. borrow_mut ( ) ;
91+ socket. bind_interface ( iface. clone ( ) ) ;
92+ log:: debug!( "Socket Fd={} binding to {}" , socket_fd, iface) ;
93+ } ,
94+ )
95+ }
0 commit comments