socket_proxy_testing/
lib.rs1use fidl_fuchsia_net::IpAddress;
6use fidl_fuchsia_net_policy_socketproxy::{
7 Network, NetworkDnsServers, NetworkInfo, NetworkRegistryAddResult, NetworkRegistryRemoveResult,
8 NetworkRegistrySetDefaultResult, NetworkRegistryUpdateResult, StarnixNetworkInfo,
9 StarnixNetworksProxy,
10};
11use fidl_fuchsia_posix_socket::OptionalUint32;
12use std::future::Future;
13
14fn starnix_network_info(mark: u32) -> NetworkInfo {
15 NetworkInfo::Starnix(StarnixNetworkInfo {
16 mark: Some(mark),
17 handle: Some(0),
18 ..Default::default()
19 })
20}
21
22fn starnix_network(network_id: u32) -> Network {
23 Network {
24 network_id: Some(network_id),
25 info: Some(starnix_network_info(network_id)),
26 dns_servers: Some(Default::default()),
27 ..Default::default()
28 }
29}
30
31pub trait ToNetwork {
32 fn to_network(self) -> Network;
33}
34
35impl ToNetwork for u32 {
36 fn to_network(self) -> Network {
37 starnix_network(self)
38 }
39}
40
41impl ToNetwork for (u32, Vec<IpAddress>) {
42 fn to_network(self) -> Network {
43 let (v4, v6) = self.1.iter().fold((Vec::new(), Vec::new()), |(mut v4s, mut v6s), s| {
44 match s {
45 IpAddress::Ipv4(v4) => v4s.push(*v4),
46 IpAddress::Ipv6(v6) => v6s.push(*v6),
47 }
48 (v4s, v6s)
49 });
50 let base = starnix_network(self.0);
51 Network {
52 dns_servers: Some(NetworkDnsServers {
53 v4: Some(v4),
54 v6: Some(v6),
55 ..Default::default()
56 }),
57 ..base
58 }
59 }
60}
61
62impl<N: ToNetwork + Clone> ToNetwork for &N {
63 fn to_network(self) -> Network {
64 self.clone().to_network()
65 }
66}
67
68pub trait NetworkRegistry {
69 fn set_default(
70 &self,
71 network_id: &OptionalUint32,
72 ) -> impl Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>>;
73 fn add(
74 &self,
75 network: &Network,
76 ) -> impl Future<Output = Result<NetworkRegistryAddResult, fidl::Error>>;
77 fn update(
78 &self,
79 network: &Network,
80 ) -> impl Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>>;
81 fn remove(
82 &self,
83 network_id: u32,
84 ) -> impl Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>>;
85}
86
87macro_rules! impl_network_registry {
88 ($($ty:ty),*) => {
89 $(
90 impl NetworkRegistry for $ty {
91 fn set_default(
92 &self,
93 network_id: &OptionalUint32,
94 ) -> impl Future<Output = Result<NetworkRegistrySetDefaultResult, fidl::Error>> {
95 self.set_default(network_id)
96 }
97
98 fn add(
99 &self,
100 network: &Network,
101 ) -> impl Future<Output = Result<NetworkRegistryAddResult, fidl::Error>> {
102 self.add(network)
103 }
104
105 fn update(
106 &self,
107 network: &Network,
108 ) -> impl Future<Output = Result<NetworkRegistryUpdateResult, fidl::Error>> {
109 self.update(network)
110 }
111
112 fn remove(
113 &self,
114 network_id: u32,
115 ) -> impl Future<Output = Result<NetworkRegistryRemoveResult, fidl::Error>> {
116 self.remove(network_id)
117 }
118 }
119 )*
120 };
121 ($($ty:ty),*,) => { impl_network_registry!($($ty),*); };
122}
123
124impl_network_registry!(StarnixNetworksProxy);