@@ -31,13 +31,14 @@ pub mod protocol;
3131pub  mod  table; 
3232pub  mod  time; 
3333
34+ mod  net; 
3435mod  status; 
3536
37+ pub  use  net:: * ; 
3638pub  use  status:: Status ; 
3739pub  use  uguid:: { Guid ,  guid} ; 
3840
3941use  core:: ffi:: c_void; 
40- use  core:: fmt:: { self ,  Debug ,  Formatter } ; 
4142
4243/// Handle to an event structure. 
4344pub  type  Event  = * mut  c_void ; 
@@ -106,140 +107,10 @@ impl From<Boolean> for bool {
106107    } 
107108} 
108109
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- 
234110#[ cfg( test) ]  
235111mod  tests { 
236112    use  super :: * ; 
237113
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- 
243114    #[ test]  
244115    /// Test the properties promised in [0]. This also applies for the other 
245116     /// architectures. 
@@ -257,34 +128,4 @@ mod tests {
257128        assert ! ( bool :: from( Boolean ( 0b11111110 ) ) ) ; 
258129        assert ! ( bool :: from( Boolean ( 0b11111111 ) ) ) ; 
259130    } 
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-     } 
290131} 
0 commit comments