1use std::fmt::Debug;
8
9use fidl::endpoints::{DiscoverableProtocolMarker, ProtocolMarker, ServerEnd};
10use futures::future::Either;
11use futures::TryStream;
12use net_types::ip::{GenericOverIp, Ip, IpInvariant, Ipv4, Ipv6};
13use thiserror::Error;
14use {
15 fidl_fuchsia_net_interfaces_admin as fnet_interfaces_admin, fidl_fuchsia_net_root as fnet_root,
16 fidl_fuchsia_net_routes_admin as fnet_routes_admin,
17};
18
19use crate::{impl_responder, FidlRouteIpExt, Responder, TableId};
20
21#[derive(Clone, Debug, Error)]
23pub enum RouteSetCreationError {
24 #[error("failed to create proxy: {0}")]
26 CreateProxy(fidl::Error),
27 #[error("failed to create route set: {0}")]
29 RouteSet(fidl::Error),
30}
31
32#[derive(Clone, Debug, Error)]
34pub enum RouteTableCreationError {
35 #[error("failed to create proxy: {0}")]
37 CreateProxy(fidl::Error),
38 #[error("failed to create route set: {0}")]
40 RouteTable(fidl::Error),
41}
42
43pub trait FidlRouteAdminIpExt: Ip {
45 type RouteTableMarker: DiscoverableProtocolMarker<
47 RequestStream = Self::RouteTableRequestStream,
48 Proxy: Clone,
49 >;
50 type GlobalRouteTableMarker: DiscoverableProtocolMarker;
52 type RouteSetMarker: ProtocolMarker<RequestStream = Self::RouteSetRequestStream>;
54 type RouteTableProviderMarker: DiscoverableProtocolMarker<Proxy: Clone>;
56 type RouteSetRequestStream: fidl::endpoints::RequestStream<Ok: Send, ControlHandle: Send>;
58 type RouteTableRequestStream: fidl::endpoints::RequestStream<Ok: Send, ControlHandle: Send>;
60 type AddRouteResponder: Responder<Payload = Result<bool, fnet_routes_admin::RouteSetError>>;
62 type RemoveRouteResponder: Responder<Payload = Result<bool, fnet_routes_admin::RouteSetError>>;
64 type RouteSetAuthenticateForInterfaceResponder: Responder<
66 Payload = Result<(), fnet_routes_admin::AuthenticateForInterfaceError>,
67 >;
68 type RouteTableGetTableIdResponder: Responder<Payload = u32>;
70 type RouteTableRemoveResponder: Responder<
72 Payload = Result<(), fnet_routes_admin::BaseRouteTableRemoveError>,
73 >;
74 type RouteTableGetAuthorizationResponder: Responder<
76 Payload = fnet_routes_admin::GrantForRouteTableAuthorization,
77 >;
78 type RouteTableControlHandle: fidl::endpoints::ControlHandle + Debug;
80
81 fn into_route_set_request(
83 request: fidl::endpoints::Request<Self::RouteSetMarker>,
84 ) -> RouteSetRequest<Self>;
85
86 fn into_route_table_request(
88 request: fidl::endpoints::Request<Self::RouteTableMarker>,
89 ) -> RouteTableRequest<Self>;
90
91 fn into_route_set_request_result(
93 request: <Self::RouteSetRequestStream as futures::Stream>::Item,
94 ) -> Result<RouteSetRequest<Self>, fidl::Error>;
95
96 fn into_route_table_request_result(
98 request: <Self::RouteTableRequestStream as futures::Stream>::Item,
99 ) -> Result<RouteTableRequest<Self>, fidl::Error>;
100}
101
102impl FidlRouteAdminIpExt for Ipv4 {
103 type RouteTableMarker = fnet_routes_admin::RouteTableV4Marker;
104 type GlobalRouteTableMarker = fnet_root::RoutesV4Marker;
105 type RouteSetMarker = fnet_routes_admin::RouteSetV4Marker;
106 type RouteTableProviderMarker = fnet_routes_admin::RouteTableProviderV4Marker;
107 type RouteSetRequestStream = fnet_routes_admin::RouteSetV4RequestStream;
108 type RouteTableRequestStream = fnet_routes_admin::RouteTableV4RequestStream;
109 type AddRouteResponder = fnet_routes_admin::RouteSetV4AddRouteResponder;
110 type RemoveRouteResponder = fnet_routes_admin::RouteSetV4RemoveRouteResponder;
111 type RouteSetAuthenticateForInterfaceResponder =
112 fnet_routes_admin::RouteSetV4AuthenticateForInterfaceResponder;
113 type RouteTableGetTableIdResponder = fnet_routes_admin::RouteTableV4GetTableIdResponder;
114 type RouteTableRemoveResponder = fnet_routes_admin::RouteTableV4RemoveResponder;
115 type RouteTableGetAuthorizationResponder =
116 fnet_routes_admin::RouteTableV4GetAuthorizationForRouteTableResponder;
117 type RouteTableControlHandle = fnet_routes_admin::RouteTableV4ControlHandle;
118
119 fn into_route_set_request(
120 request: fidl::endpoints::Request<Self::RouteSetMarker>,
121 ) -> RouteSetRequest<Self> {
122 RouteSetRequest::from(request)
123 }
124
125 fn into_route_table_request(
126 request: fidl::endpoints::Request<Self::RouteTableMarker>,
127 ) -> RouteTableRequest<Self> {
128 RouteTableRequest::from(request)
129 }
130
131 fn into_route_set_request_result(
132 request: <Self::RouteSetRequestStream as futures::Stream>::Item,
133 ) -> Result<RouteSetRequest<Self>, fidl::Error> {
134 request.map(RouteSetRequest::from)
135 }
136
137 fn into_route_table_request_result(
138 request: <Self::RouteTableRequestStream as futures::Stream>::Item,
139 ) -> Result<RouteTableRequest<Self>, fidl::Error> {
140 request.map(RouteTableRequest::from)
141 }
142}
143
144impl FidlRouteAdminIpExt for Ipv6 {
145 type RouteTableMarker = fnet_routes_admin::RouteTableV6Marker;
146 type GlobalRouteTableMarker = fnet_root::RoutesV6Marker;
147 type RouteSetMarker = fnet_routes_admin::RouteSetV6Marker;
148 type RouteTableProviderMarker = fnet_routes_admin::RouteTableProviderV6Marker;
149 type RouteSetRequestStream = fnet_routes_admin::RouteSetV6RequestStream;
150 type RouteTableRequestStream = fnet_routes_admin::RouteTableV6RequestStream;
151 type AddRouteResponder = fnet_routes_admin::RouteSetV6AddRouteResponder;
152 type RemoveRouteResponder = fnet_routes_admin::RouteSetV6RemoveRouteResponder;
153 type RouteSetAuthenticateForInterfaceResponder =
154 fnet_routes_admin::RouteSetV6AuthenticateForInterfaceResponder;
155 type RouteTableGetTableIdResponder = fnet_routes_admin::RouteTableV6GetTableIdResponder;
156 type RouteTableRemoveResponder = fnet_routes_admin::RouteTableV6RemoveResponder;
157 type RouteTableGetAuthorizationResponder =
158 fnet_routes_admin::RouteTableV6GetAuthorizationForRouteTableResponder;
159 type RouteTableControlHandle = fnet_routes_admin::RouteTableV6ControlHandle;
160
161 fn into_route_set_request(
162 request: fidl::endpoints::Request<Self::RouteSetMarker>,
163 ) -> RouteSetRequest<Self> {
164 RouteSetRequest::from(request)
165 }
166
167 fn into_route_table_request(
168 request: fidl::endpoints::Request<Self::RouteTableMarker>,
169 ) -> RouteTableRequest<Self> {
170 RouteTableRequest::from(request)
171 }
172
173 fn into_route_set_request_result(
174 request: <Self::RouteSetRequestStream as futures::Stream>::Item,
175 ) -> Result<RouteSetRequest<Self>, fidl::Error> {
176 request.map(RouteSetRequest::from)
177 }
178
179 fn into_route_table_request_result(
180 request: <Self::RouteTableRequestStream as futures::Stream>::Item,
181 ) -> Result<RouteTableRequest<Self>, fidl::Error> {
182 request.map(RouteTableRequest::from)
183 }
184}
185
186impl_responder!(
187 fnet_routes_admin::RouteSetV4AddRouteResponder,
188 Result<bool, fnet_routes_admin::RouteSetError>,
189);
190impl_responder!(
191 fnet_routes_admin::RouteSetV4RemoveRouteResponder,
192 Result<bool, fnet_routes_admin::RouteSetError>,
193);
194impl_responder!(
195 fnet_routes_admin::RouteSetV6AddRouteResponder,
196 Result<bool, fnet_routes_admin::RouteSetError>,
197);
198impl_responder!(
199 fnet_routes_admin::RouteSetV6RemoveRouteResponder,
200 Result<bool, fnet_routes_admin::RouteSetError>,
201);
202impl_responder!(
203 fnet_routes_admin::RouteSetV4AuthenticateForInterfaceResponder,
204 Result<(), fnet_routes_admin::AuthenticateForInterfaceError>,
205);
206impl_responder!(
207 fnet_routes_admin::RouteSetV6AuthenticateForInterfaceResponder,
208 Result<(), fnet_routes_admin::AuthenticateForInterfaceError>,
209);
210impl_responder!(fnet_routes_admin::RouteTableV4GetTableIdResponder, u32,);
211impl_responder!(fnet_routes_admin::RouteTableV6GetTableIdResponder, u32,);
212impl_responder!(
213 fnet_routes_admin::RouteTableV4RemoveResponder,
214 Result<(), fnet_routes_admin::BaseRouteTableRemoveError>,
215);
216impl_responder!(
217 fnet_routes_admin::RouteTableV6RemoveResponder,
218 Result<(), fnet_routes_admin::BaseRouteTableRemoveError>,
219);
220impl_responder!(
221 fnet_routes_admin::RouteTableV4GetAuthorizationForRouteTableResponder,
222 fnet_routes_admin::GrantForRouteTableAuthorization,
223);
224impl_responder!(
225 fnet_routes_admin::RouteTableV6GetAuthorizationForRouteTableResponder,
226 fnet_routes_admin::GrantForRouteTableAuthorization,
227);
228
229pub fn concretize_route_table_provider_request<I: Ip + FidlRouteAdminIpExt>(
233 item: <<<I as FidlRouteAdminIpExt>::RouteTableProviderMarker as ProtocolMarker>::RequestStream as futures::Stream>::Item,
234) -> Result<(ServerEnd<I::RouteTableMarker>, Option<String>), fidl::Error> {
235 #[derive(GenericOverIp)]
236 #[generic_over_ip(I, Ip)]
237 struct In<I: FidlRouteAdminIpExt>(<<<I as FidlRouteAdminIpExt>::RouteTableProviderMarker as ProtocolMarker>::RequestStream as futures::Stream>::Item);
238
239 #[derive(GenericOverIp)]
240 #[generic_over_ip(I, Ip)]
241 struct Out<I: FidlRouteAdminIpExt>(
242 Result<(ServerEnd<I::RouteTableMarker>, Option<String>), fidl::Error>,
243 );
244
245 let Out(result) = net_types::map_ip_twice!(I, In(item), |In(item)| Out(
246 item.map(unpack_route_table_provider_request::<I>)
247 ));
248 result
249}
250
251pub fn unpack_route_table_provider_request<I: Ip + FidlRouteAdminIpExt>(
253 request: <<I::RouteTableProviderMarker as ProtocolMarker>::RequestStream as TryStream>::Ok,
254) -> (ServerEnd<I::RouteTableMarker>, Option<String>) {
255 #[derive(GenericOverIp)]
256 #[generic_over_ip(I, Ip)]
257 struct Request<I: FidlRouteAdminIpExt>(
258 <<I::RouteTableProviderMarker as ProtocolMarker>::RequestStream as TryStream>::Ok,
259 );
260
261 #[derive(GenericOverIp)]
262 #[generic_over_ip(I, Ip)]
263 struct Contents<I: FidlRouteAdminIpExt>((ServerEnd<I::RouteTableMarker>, Option<String>));
264
265 let Contents(contents) = I::map_ip(
266 Request(request),
267 |Request(request)| {
268 let fnet_routes_admin::RouteTableProviderV4Request::NewRouteTable {
269 provider,
270 options: fnet_routes_admin::RouteTableOptionsV4 { name, __source_breaking },
271 control_handle: _,
272 } = request;
273 Contents((provider, name))
274 },
275 |Request(request)| {
276 let fnet_routes_admin::RouteTableProviderV6Request::NewRouteTable {
277 provider,
278 options: fnet_routes_admin::RouteTableOptionsV6 { name, __source_breaking },
279 control_handle: _,
280 } = request;
281 Contents((provider, name))
282 },
283 );
284 contents
285}
286
287pub fn new_route_table<I: Ip + FidlRouteAdminIpExt>(
290 route_table_provider_proxy: &<I::RouteTableProviderMarker as ProtocolMarker>::Proxy,
291 name: Option<String>,
292) -> Result<<I::RouteTableMarker as ProtocolMarker>::Proxy, RouteTableCreationError> {
293 let (route_table_proxy, route_table_server_end) =
294 fidl::endpoints::create_proxy::<I::RouteTableMarker>();
295
296 #[derive(GenericOverIp)]
297 #[generic_over_ip(I, Ip)]
298 struct NewRouteTableInput<'a, I: FidlRouteAdminIpExt> {
299 route_table_server_end: fidl::endpoints::ServerEnd<I::RouteTableMarker>,
300 route_table_provider_proxy: &'a <I::RouteTableProviderMarker as ProtocolMarker>::Proxy,
301 name: Option<String>,
302 }
303
304 let result = I::map_ip_in(
305 NewRouteTableInput::<'_, I> { route_table_server_end, route_table_provider_proxy, name },
306 |NewRouteTableInput { route_table_server_end, route_table_provider_proxy, name }| {
307 route_table_provider_proxy.new_route_table(
308 route_table_server_end,
309 &fnet_routes_admin::RouteTableOptionsV4 {
310 name,
311 ..fnet_routes_admin::RouteTableOptionsV4::default()
312 },
313 )
314 },
315 |NewRouteTableInput { route_table_server_end, route_table_provider_proxy, name }| {
316 route_table_provider_proxy.new_route_table(
317 route_table_server_end,
318 &fnet_routes_admin::RouteTableOptionsV6 {
319 name,
320 ..fnet_routes_admin::RouteTableOptionsV6::default()
321 },
322 )
323 },
324 );
325
326 result.map_err(RouteTableCreationError::RouteTable)?;
327 Ok(route_table_proxy)
328}
329
330pub fn new_route_set<I: Ip + FidlRouteAdminIpExt>(
333 route_table_proxy: &<I::RouteTableMarker as ProtocolMarker>::Proxy,
334) -> Result<<I::RouteSetMarker as ProtocolMarker>::Proxy, RouteSetCreationError> {
335 let (route_set_proxy, route_set_server_end) =
336 fidl::endpoints::create_proxy::<I::RouteSetMarker>();
337
338 #[derive(GenericOverIp)]
339 #[generic_over_ip(I, Ip)]
340 struct NewRouteSetInput<'a, I: FidlRouteAdminIpExt> {
341 route_set_server_end: fidl::endpoints::ServerEnd<I::RouteSetMarker>,
342 route_table_proxy: &'a <I::RouteTableMarker as ProtocolMarker>::Proxy,
343 }
344 let result = I::map_ip_in(
345 NewRouteSetInput::<'_, I> { route_set_server_end, route_table_proxy },
346 |NewRouteSetInput { route_set_server_end, route_table_proxy }| {
347 route_table_proxy.new_route_set(route_set_server_end)
348 },
349 |NewRouteSetInput { route_set_server_end, route_table_proxy }| {
350 route_table_proxy.new_route_set(route_set_server_end)
351 },
352 );
353
354 result.map_err(RouteSetCreationError::RouteSet)?;
355 Ok(route_set_proxy)
356}
357
358pub fn new_global_route_set<I: Ip + FidlRouteAdminIpExt>(
361 route_table_proxy: &<I::GlobalRouteTableMarker as ProtocolMarker>::Proxy,
362) -> Result<<I::RouteSetMarker as ProtocolMarker>::Proxy, RouteSetCreationError> {
363 let (route_set_proxy, route_set_server_end) =
364 fidl::endpoints::create_proxy::<I::RouteSetMarker>();
365
366 #[derive(GenericOverIp)]
367 #[generic_over_ip(I, Ip)]
368 struct NewRouteSetInput<'a, I: FidlRouteAdminIpExt> {
369 route_set_server_end: fidl::endpoints::ServerEnd<I::RouteSetMarker>,
370 route_table_proxy: &'a <I::GlobalRouteTableMarker as ProtocolMarker>::Proxy,
371 }
372 let result = I::map_ip_in(
373 NewRouteSetInput::<'_, I> { route_set_server_end, route_table_proxy },
374 |NewRouteSetInput { route_set_server_end, route_table_proxy }| {
375 route_table_proxy.global_route_set(route_set_server_end)
376 },
377 |NewRouteSetInput { route_set_server_end, route_table_proxy }| {
378 route_table_proxy.global_route_set(route_set_server_end)
379 },
380 );
381
382 result.map_err(RouteSetCreationError::RouteSet)?;
383 Ok(route_set_proxy)
384}
385
386pub async fn add_route<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
388 route_set: &<I::RouteSetMarker as ProtocolMarker>::Proxy,
389 route: &I::Route,
390) -> Result<Result<bool, fnet_routes_admin::RouteSetError>, fidl::Error> {
391 #[derive(GenericOverIp)]
392 #[generic_over_ip(I, Ip)]
393 struct AddRouteInput<'a, I: FidlRouteAdminIpExt + FidlRouteIpExt> {
394 route_set: &'a <I::RouteSetMarker as ProtocolMarker>::Proxy,
395 route: &'a I::Route,
396 }
397
398 I::map_ip_in(
399 AddRouteInput { route_set, route },
400 |AddRouteInput { route_set, route }| Either::Left(route_set.add_route(route)),
401 |AddRouteInput { route_set, route }| Either::Right(route_set.add_route(route)),
402 )
403 .await
404}
405
406pub async fn remove_route<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
408 route_set: &<I::RouteSetMarker as ProtocolMarker>::Proxy,
409 route: &I::Route,
410) -> Result<Result<bool, fnet_routes_admin::RouteSetError>, fidl::Error> {
411 #[derive(GenericOverIp)]
412 #[generic_over_ip(I, Ip)]
413 struct RemoveRouteInput<'a, I: FidlRouteAdminIpExt + FidlRouteIpExt> {
414 route_set: &'a <I::RouteSetMarker as ProtocolMarker>::Proxy,
415 route: &'a I::Route,
416 }
417
418 I::map_ip_in(
419 RemoveRouteInput { route_set, route },
420 |RemoveRouteInput { route_set, route }| Either::Left(route_set.remove_route(route)),
421 |RemoveRouteInput { route_set, route }| Either::Right(route_set.remove_route(route)),
422 )
423 .await
424}
425
426pub async fn authenticate_for_interface<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
429 route_set: &<I::RouteSetMarker as ProtocolMarker>::Proxy,
430 credential: fnet_interfaces_admin::ProofOfInterfaceAuthorization,
431) -> Result<Result<(), fnet_routes_admin::AuthenticateForInterfaceError>, fidl::Error> {
432 #[derive(GenericOverIp)]
433 #[generic_over_ip(I, Ip)]
434 struct AuthenticateForInterfaceInput<'a, I: FidlRouteAdminIpExt + FidlRouteIpExt> {
435 route_set: &'a <I::RouteSetMarker as ProtocolMarker>::Proxy,
436 credential: fnet_interfaces_admin::ProofOfInterfaceAuthorization,
437 }
438
439 I::map_ip_in(
440 AuthenticateForInterfaceInput { route_set, credential },
441 |AuthenticateForInterfaceInput { route_set, credential }| {
442 Either::Left(route_set.authenticate_for_interface(credential))
443 },
444 |AuthenticateForInterfaceInput { route_set, credential }| {
445 Either::Right(route_set.authenticate_for_interface(credential))
446 },
447 )
448 .await
449}
450
451#[derive(GenericOverIp)]
452#[generic_over_ip(I, Ip)]
453struct RouteTableProxy<'a, I: FidlRouteAdminIpExt + FidlRouteIpExt> {
454 route_table: &'a <I::RouteTableMarker as ProtocolMarker>::Proxy,
455}
456
457pub async fn detach_route_table<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
459 route_table: &<I::RouteTableMarker as ProtocolMarker>::Proxy,
460) -> Result<(), fidl::Error> {
461 let IpInvariant(result) = net_types::map_ip_twice!(
462 I,
463 RouteTableProxy { route_table },
464 |RouteTableProxy { route_table }| { IpInvariant(route_table.detach()) }
465 );
466
467 result
468}
469
470pub async fn remove_route_table<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
472 route_table: &<I::RouteTableMarker as ProtocolMarker>::Proxy,
473) -> Result<Result<(), fnet_routes_admin::BaseRouteTableRemoveError>, fidl::Error> {
474 let IpInvariant(result_fut) = net_types::map_ip_twice!(
475 I,
476 RouteTableProxy { route_table },
477 |RouteTableProxy { route_table }| { IpInvariant(route_table.remove()) }
478 );
479
480 result_fut.await
481}
482
483pub async fn get_table_id<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
486 route_table: &<I::RouteTableMarker as ProtocolMarker>::Proxy,
487) -> Result<TableId, fidl::Error> {
488 let IpInvariant(result_fut) = net_types::map_ip_twice!(
489 I,
490 RouteTableProxy { route_table },
491 |RouteTableProxy { route_table }| IpInvariant(route_table.get_table_id()),
492 );
493
494 result_fut.await.map(TableId::new)
495}
496
497pub async fn get_authorization_for_route_table<I: Ip + FidlRouteAdminIpExt + FidlRouteIpExt>(
500 route_table: &<I::RouteTableMarker as ProtocolMarker>::Proxy,
501) -> Result<fnet_routes_admin::GrantForRouteTableAuthorization, fidl::Error> {
502 let IpInvariant(result_fut) = net_types::map_ip_twice!(
503 I,
504 RouteTableProxy { route_table },
505 |RouteTableProxy { route_table }| IpInvariant(
506 route_table.get_authorization_for_route_table()
507 ),
508 );
509
510 result_fut.await
511}
512
513#[derive(GenericOverIp, Debug)]
515#[generic_over_ip(I, Ip)]
516pub enum RouteSetRequest<I: FidlRouteAdminIpExt> {
517 AddRoute {
519 route: Result<
521 crate::Route<I>,
522 crate::FidlConversionError<crate::RoutePropertiesRequiredFields>,
523 >,
524 responder: I::AddRouteResponder,
526 },
527 RemoveRoute {
529 route: Result<
531 crate::Route<I>,
532 crate::FidlConversionError<crate::RoutePropertiesRequiredFields>,
533 >,
534 responder: I::RemoveRouteResponder,
536 },
537 AuthenticateForInterface {
539 credential: fnet_interfaces_admin::ProofOfInterfaceAuthorization,
541 responder: I::RouteSetAuthenticateForInterfaceResponder,
543 },
544}
545
546impl From<fnet_routes_admin::RouteSetV4Request> for RouteSetRequest<Ipv4> {
547 fn from(value: fnet_routes_admin::RouteSetV4Request) -> Self {
548 match value {
549 fnet_routes_admin::RouteSetV4Request::AddRoute { route, responder } => {
550 RouteSetRequest::AddRoute { route: route.try_into(), responder }
551 }
552 fnet_routes_admin::RouteSetV4Request::RemoveRoute { route, responder } => {
553 RouteSetRequest::RemoveRoute { route: route.try_into(), responder }
554 }
555 fnet_routes_admin::RouteSetV4Request::AuthenticateForInterface {
556 credential,
557 responder,
558 } => RouteSetRequest::AuthenticateForInterface { credential, responder },
559 }
560 }
561}
562
563impl From<fnet_routes_admin::RouteSetV6Request> for RouteSetRequest<Ipv6> {
564 fn from(value: fnet_routes_admin::RouteSetV6Request) -> Self {
565 match value {
566 fnet_routes_admin::RouteSetV6Request::AddRoute { route, responder } => {
567 RouteSetRequest::AddRoute { route: route.try_into(), responder }
568 }
569 fnet_routes_admin::RouteSetV6Request::RemoveRoute { route, responder } => {
570 RouteSetRequest::RemoveRoute { route: route.try_into(), responder }
571 }
572 fnet_routes_admin::RouteSetV6Request::AuthenticateForInterface {
573 credential,
574 responder,
575 } => RouteSetRequest::AuthenticateForInterface { credential, responder },
576 }
577 }
578}
579
580#[derive(GenericOverIp, derivative::Derivative)]
582#[derivative(Debug(bound = ""))]
583#[generic_over_ip(I, Ip)]
584pub enum RouteTableRequest<I: FidlRouteAdminIpExt> {
585 GetTableId {
587 responder: I::RouteTableGetTableIdResponder,
589 },
590 Detach {
592 control_handle: I::RouteTableControlHandle,
594 },
595 Remove {
597 responder: I::RouteTableRemoveResponder,
599 },
600 GetAuthorizationForRouteTable {
602 responder: I::RouteTableGetAuthorizationResponder,
604 },
605 NewRouteSet {
607 route_set: fidl::endpoints::ServerEnd<I::RouteSetMarker>,
609 control_handle: I::RouteTableControlHandle,
611 },
612}
613
614impl From<fnet_routes_admin::RouteTableV4Request> for RouteTableRequest<Ipv4> {
615 fn from(value: fnet_routes_admin::RouteTableV4Request) -> Self {
616 match value {
617 fnet_routes_admin::RouteTableV4Request::NewRouteSet { route_set, control_handle } => {
618 RouteTableRequest::NewRouteSet { route_set, control_handle }
619 }
620 fnet_routes_admin::RouteTableV4Request::GetTableId { responder } => {
621 RouteTableRequest::GetTableId { responder }
622 }
623
624 fnet_routes_admin::RouteTableV4Request::Detach { control_handle } => {
625 RouteTableRequest::Detach { control_handle }
626 }
627
628 fnet_routes_admin::RouteTableV4Request::Remove { responder } => {
629 RouteTableRequest::Remove { responder }
630 }
631 fnet_routes_admin::RouteTableV4Request::GetAuthorizationForRouteTable { responder } => {
632 RouteTableRequest::GetAuthorizationForRouteTable { responder }
633 }
634 }
635 }
636}
637
638impl From<fnet_routes_admin::RouteTableV6Request> for RouteTableRequest<Ipv6> {
639 fn from(value: fnet_routes_admin::RouteTableV6Request) -> Self {
640 match value {
641 fnet_routes_admin::RouteTableV6Request::NewRouteSet { route_set, control_handle } => {
642 RouteTableRequest::NewRouteSet { route_set, control_handle }
643 }
644 fnet_routes_admin::RouteTableV6Request::GetTableId { responder } => {
645 RouteTableRequest::GetTableId { responder }
646 }
647
648 fnet_routes_admin::RouteTableV6Request::Detach { control_handle } => {
649 RouteTableRequest::Detach { control_handle }
650 }
651
652 fnet_routes_admin::RouteTableV6Request::Remove { responder } => {
653 RouteTableRequest::Remove { responder }
654 }
655 fnet_routes_admin::RouteTableV6Request::GetAuthorizationForRouteTable { responder } => {
656 RouteTableRequest::GetAuthorizationForRouteTable { responder }
657 }
658 }
659 }
660}