@@ -27,17 +27,19 @@ mod enums;
27
27
28
28
pub mod capsule;
29
29
pub mod firmware_storage;
30
+
30
31
pub mod protocol;
31
32
pub mod table;
32
33
pub mod time;
33
34
35
+ mod net;
34
36
mod status;
35
37
38
+ pub use net:: * ;
36
39
pub use status:: Status ;
37
40
pub use uguid:: { Guid , guid} ;
38
41
39
42
use core:: ffi:: c_void;
40
- use core:: fmt:: { self , Debug , Formatter } ;
41
43
42
44
/// Handle to an event structure.
43
45
pub type Event = * mut c_void ;
@@ -106,140 +108,10 @@ impl From<Boolean> for bool {
106
108
}
107
109
}
108
110
109
- /// An IPv4 internet protocol address.
110
- #[ derive( Clone , Copy , Debug , Default , Eq , PartialEq , Ord , PartialOrd , Hash ) ]
111
- #[ repr( transparent) ]
112
- pub struct Ipv4Address ( pub [ u8 ; 4 ] ) ;
113
-
114
- impl From < core:: net:: Ipv4Addr > for Ipv4Address {
115
- fn from ( ip : core:: net:: Ipv4Addr ) -> Self {
116
- Self ( ip. octets ( ) )
117
- }
118
- }
119
-
120
- impl From < Ipv4Address > for core:: net:: Ipv4Addr {
121
- fn from ( ip : Ipv4Address ) -> Self {
122
- Self :: from ( ip. 0 )
123
- }
124
- }
125
-
126
- /// An IPv6 internet protocol address.
127
- #[ derive( Clone , Copy , Debug , Default , Eq , PartialEq , Ord , PartialOrd , Hash ) ]
128
- #[ repr( transparent) ]
129
- pub struct Ipv6Address ( pub [ u8 ; 16 ] ) ;
130
-
131
- impl From < core:: net:: Ipv6Addr > for Ipv6Address {
132
- fn from ( ip : core:: net:: Ipv6Addr ) -> Self {
133
- Self ( ip. octets ( ) )
134
- }
135
- }
136
-
137
- impl From < Ipv6Address > for core:: net:: Ipv6Addr {
138
- fn from ( ip : Ipv6Address ) -> Self {
139
- Self :: from ( ip. 0 )
140
- }
141
- }
142
-
143
- /// An IPv4 or IPv6 internet protocol address.
144
- ///
145
- /// Corresponds to the `EFI_IP_ADDRESS` type in the UEFI specification. This
146
- /// type is defined in the same way as edk2 for compatibility with C code. Note
147
- /// that this is an untagged union, so there's no way to tell which type of
148
- /// address an `IpAddress` value contains without additional context.
149
- #[ derive( Clone , Copy ) ]
150
- #[ repr( C ) ]
151
- pub union IpAddress {
152
- /// This member serves to align the whole type to a 4 bytes as required by
153
- /// the spec. Note that this is slightly different from `repr(align(4))`,
154
- /// which would prevent placing this type in a packed structure.
155
- pub addr : [ u32 ; 4 ] ,
156
-
157
- /// An IPv4 internet protocol address.
158
- pub v4 : Ipv4Address ,
159
-
160
- /// An IPv6 internet protocol address.
161
- pub v6 : Ipv6Address ,
162
- }
163
-
164
- impl IpAddress {
165
- /// Construct a new IPv4 address.
166
- #[ must_use]
167
- pub const fn new_v4 ( ip_addr : [ u8 ; 4 ] ) -> Self {
168
- Self {
169
- v4 : Ipv4Address ( ip_addr) ,
170
- }
171
- }
172
-
173
- /// Construct a new IPv6 address.
174
- #[ must_use]
175
- pub const fn new_v6 ( ip_addr : [ u8 ; 16 ] ) -> Self {
176
- Self {
177
- v6 : Ipv6Address ( ip_addr) ,
178
- }
179
- }
180
- }
181
-
182
- impl Debug for IpAddress {
183
- fn fmt ( & self , f : & mut Formatter < ' _ > ) -> fmt:: Result {
184
- // The type is an untagged union, so we don't know whether it contains
185
- // an IPv4 or IPv6 address. It's also not safe to just print the whole
186
- // 16 bytes, since they might not all be initialized.
187
- f. debug_struct ( "IpAddress" ) . finish ( )
188
- }
189
- }
190
-
191
- impl Default for IpAddress {
192
- fn default ( ) -> Self {
193
- Self { addr : [ 0u32 ; 4 ] }
194
- }
195
- }
196
-
197
- impl From < core:: net:: IpAddr > for IpAddress {
198
- fn from ( t : core:: net:: IpAddr ) -> Self {
199
- match t {
200
- core:: net:: IpAddr :: V4 ( ip) => Self {
201
- v4 : Ipv4Address :: from ( ip) ,
202
- } ,
203
- core:: net:: IpAddr :: V6 ( ip) => Self {
204
- v6 : Ipv6Address :: from ( ip) ,
205
- } ,
206
- }
207
- }
208
- }
209
-
210
- /// A Media Access Control (MAC) address.
211
- #[ derive( Clone , Copy , Debug , Default , Eq , PartialEq , Ord , PartialOrd , Hash ) ]
212
- #[ repr( transparent) ]
213
- pub struct MacAddress ( pub [ u8 ; 32 ] ) ;
214
-
215
- impl From < [ u8 ; 6 ] > for MacAddress {
216
- fn from ( octets : [ u8 ; 6 ] ) -> Self {
217
- let mut buffer = [ 0 ; 32 ] ;
218
- buffer[ 0 ] = octets[ 0 ] ;
219
- buffer[ 1 ] = octets[ 1 ] ;
220
- buffer[ 2 ] = octets[ 2 ] ;
221
- buffer[ 3 ] = octets[ 3 ] ;
222
- buffer[ 4 ] = octets[ 4 ] ;
223
- buffer[ 5 ] = octets[ 5 ] ;
224
- Self ( buffer)
225
- }
226
- }
227
-
228
- impl From < MacAddress > for [ u8 ; 6 ] {
229
- fn from ( MacAddress ( o) : MacAddress ) -> Self {
230
- [ o[ 0 ] , o[ 1 ] , o[ 2 ] , o[ 3 ] , o[ 4 ] , o[ 5 ] ]
231
- }
232
- }
233
-
234
111
#[ cfg( test) ]
235
112
mod tests {
236
113
use super :: * ;
237
114
238
- const TEST_IPV4 : [ u8 ; 4 ] = [ 91 , 92 , 93 , 94 ] ;
239
- const TEST_IPV6 : [ u8 ; 16 ] = [
240
- 101 , 102 , 103 , 104 , 105 , 106 , 107 , 108 , 109 , 110 , 111 , 112 , 113 , 114 , 115 , 116 ,
241
- ] ;
242
-
243
115
#[ test]
244
116
/// Test the properties promised in [0]. This also applies for the other
245
117
/// architectures.
@@ -257,34 +129,4 @@ mod tests {
257
129
assert ! ( bool :: from( Boolean ( 0b11111110 ) ) ) ;
258
130
assert ! ( bool :: from( Boolean ( 0b11111111 ) ) ) ;
259
131
}
260
-
261
- /// Test round-trip conversion between `Ipv4Address` and `core::net::Ipv4Addr`.
262
- #[ test]
263
- fn test_ip_addr4_conversion ( ) {
264
- let uefi_addr = Ipv4Address ( TEST_IPV4 ) ;
265
- let core_addr = core:: net:: Ipv4Addr :: from ( uefi_addr) ;
266
- assert_eq ! ( uefi_addr, Ipv4Address :: from( core_addr) ) ;
267
- }
268
-
269
- /// Test round-trip conversion between `Ipv6Address` and `core::net::Ipv6Addr`.
270
- #[ test]
271
- fn test_ip_addr6_conversion ( ) {
272
- let uefi_addr = Ipv6Address ( TEST_IPV6 ) ;
273
- let core_addr = core:: net:: Ipv6Addr :: from ( uefi_addr) ;
274
- assert_eq ! ( uefi_addr, Ipv6Address :: from( core_addr) ) ;
275
- }
276
-
277
- /// Test conversion from `core::net::IpAddr` to `IpvAddress`.
278
- ///
279
- /// Note that conversion in the other direction is not possible.
280
- #[ test]
281
- fn test_ip_addr_conversion ( ) {
282
- let core_addr = core:: net:: IpAddr :: V4 ( core:: net:: Ipv4Addr :: from ( TEST_IPV4 ) ) ;
283
- let uefi_addr = IpAddress :: from ( core_addr) ;
284
- assert_eq ! ( unsafe { uefi_addr. v4. 0 } , TEST_IPV4 ) ;
285
-
286
- let core_addr = core:: net:: IpAddr :: V6 ( core:: net:: Ipv6Addr :: from ( TEST_IPV6 ) ) ;
287
- let uefi_addr = IpAddress :: from ( core_addr) ;
288
- assert_eq ! ( unsafe { uefi_addr. v6. 0 } , TEST_IPV6 ) ;
289
- }
290
132
}
0 commit comments