2
2
3
3
#[ cfg( not( target_os = "android" ) ) ]
4
4
use n0_future:: { Either , TryStream , TryStreamExt } ;
5
+ #[ cfg( not( target_os = "android" ) ) ]
6
+ use netlink_packet_core:: { NetlinkMessage , NLM_F_DUMP , NLM_F_REQUEST } ;
7
+ #[ cfg( not( target_os = "android" ) ) ]
8
+ use netlink_packet_route:: { link:: LinkMessage , route:: RouteMessage , RouteNetlinkMessage } ;
5
9
use tokio:: {
6
10
fs:: File ,
7
11
io:: { AsyncBufReadExt , BufReader } ,
8
12
} ;
9
13
14
+ #[ cfg( not( target_os = "android" ) ) ]
15
+ type Handle = netlink_proto:: ConnectionHandle < RouteNetlinkMessage > ;
16
+ #[ cfg( not( target_os = "android" ) ) ]
17
+ type NetlinkError = netlink_proto:: Error < RouteNetlinkMessage > ;
18
+
10
19
use super :: DefaultRouteDetails ;
11
20
12
21
#[ derive( Debug , thiserror:: Error ) ]
@@ -89,13 +98,13 @@ async fn default_route_proc() -> Result<Option<DefaultRouteDetails>, Error> {
89
98
90
99
macro_rules! try_rtnl {
91
100
( $msg: expr, $message_type: path) => { {
92
- use netlink_packet_core:: { NetlinkMessage , NetlinkPayload } ;
101
+ use netlink_packet_core:: NetlinkPayload ;
93
102
use netlink_packet_route:: RouteNetlinkMessage ;
94
103
95
104
let ( header, payload) = $msg. into_parts( ) ;
96
105
match payload {
97
106
NetlinkPayload :: InnerMessage ( $message_type( msg) ) => msg,
98
- NetlinkPayload :: Error ( err) => return Err ( err) ,
107
+ NetlinkPayload :: Error ( err) => return Err ( Error :: from ( err) ) ,
99
108
_ => return Err ( Error :: UnexpectedNetlinkMessage ) ,
100
109
}
101
110
} } ;
@@ -145,8 +154,8 @@ async fn default_route_netlink() -> Result<Option<DefaultRouteDetails>, Error> {
145
154
use netlink_sys:: protocols:: NETLINK_ROUTE ;
146
155
use tracing:: { info_span, Instrument } ;
147
156
148
- let ( conn , handle, _receiver) =
149
- netlink_proto:: new_connection :: < netlink_packet_route :: RouteNetlinkMessage > ( NETLINK_ROUTE ) ?;
157
+ let ( connection , handle, _receiver) =
158
+ netlink_proto:: new_connection :: < RouteNetlinkMessage > ( NETLINK_ROUTE ) ?;
150
159
151
160
let task = tokio:: spawn ( connection. instrument ( info_span ! ( "netlink.conn" ) ) ) ;
152
161
@@ -165,25 +174,19 @@ async fn default_route_netlink() -> Result<Option<DefaultRouteDetails>, Error> {
165
174
} ) )
166
175
}
167
176
168
- type Handle = netlink_proto:: ConnectionHandle < netlink_packet_core:: RouteNetlinkMessage > ;
169
- type NetlinkError = netlink_proto:: Error < netlink_packet_core:: RouteNetlinkMessage > ;
170
-
171
- use netlink_packet_core:: { NetlinkMessage , NLM_F_DUMP , NLM_F_REQUEST } ;
172
- use netlink_packet_route:: { link:: LinkMessage , route:: RouteMessage , RouteNetlinkMessage } ;
173
-
174
177
#[ cfg( not( target_os = "android" ) ) ]
175
178
fn get_route (
176
179
mut handle : Handle ,
177
180
message : RouteMessage ,
178
- ) -> impl TryStream < Ok = RouteMessage , Error = Error > {
181
+ ) -> impl TryStream < Ok = RouteMessage , Err = Error > {
179
182
let mut req = NetlinkMessage :: from ( RouteNetlinkMessage :: GetRoute ( message) ) ;
180
183
req. header . flags = NLM_F_REQUEST | NLM_F_DUMP ;
181
184
182
185
match handle. request ( req, netlink_proto:: sys:: SocketAddr :: new ( 0 , 0 ) ) {
183
186
Ok ( response) => {
184
187
Either :: Left ( response. map ( move |msg| Ok ( try_rtnl ! ( msg, RouteNetlinkMessage :: NewRoute ) ) ) )
185
188
}
186
- Err ( e) => Either :: Right ( future :: err :: < RouteMessage , Error > ( e ) . into_stream ( ) ) ,
189
+ Err ( e) => Either :: Right ( n0_future :: stream :: once :: < Result < RouteMessage , Error > > ( e ) ) ,
187
190
}
188
191
}
189
192
@@ -195,7 +198,7 @@ fn create_route_message(family: netlink_packet_route::AddressFamily) -> RouteMes
195
198
message. header . protocol = RouteProtocol :: Static ;
196
199
message. header . scope = RouteScope :: Universe ;
197
200
message. header . kind = RouteType :: Unicast ;
198
- message. header . kind = family;
201
+ message. header . address_family = family;
199
202
message
200
203
}
201
204
@@ -205,7 +208,7 @@ async fn default_route_netlink_family(
205
208
handle : & Handle ,
206
209
family : netlink_packet_route:: AddressFamily ,
207
210
) -> Result < Option < ( String , u32 ) > , Error > {
208
- use netlink_packet_route:: { route:: RouteAttribute , AddressFamily } ;
211
+ use netlink_packet_route:: route:: RouteAttribute ;
209
212
210
213
let msg = create_route_message ( family) ;
211
214
let mut routes = get_route ( handle. clone ( ) , msg) ;
@@ -247,15 +250,15 @@ async fn default_route_netlink_family(
247
250
fn get_link (
248
251
mut handle : Handle ,
249
252
message : LinkMessage ,
250
- ) -> impl TryStream < Ok = LinkMessage , Error = Error > {
253
+ ) -> impl TryStream < Ok = LinkMessage , Err = Error > {
251
254
let mut req = NetlinkMessage :: from ( RouteNetlinkMessage :: GetLink ( message) ) ;
252
255
req. header . flags = NLM_F_REQUEST ;
253
256
254
257
match handle. request ( req, netlink_proto:: sys:: SocketAddr :: new ( 0 , 0 ) ) {
255
258
Ok ( response) => {
256
259
Either :: Left ( response. map ( move |msg| Ok ( try_rtnl ! ( msg, RouteNetlinkMessage :: NewLink ) ) ) )
257
260
}
258
- Err ( e) => Either :: Right ( future :: err :: < RouteMessage , Error > ( e ) . into_stream ( ) ) ,
261
+ Err ( e) => Either :: Right ( n0_future :: stream :: once :: < Result < RouteMessage , Error > > ( e ) ) ,
259
262
}
260
263
}
261
264
0 commit comments