File tree Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Expand file tree Collapse file tree 2 files changed +32
-0
lines changed Original file line number Diff line number Diff line change 19
19
- ` [u8; 32] ` --> ` MacAddress `
20
20
- ` [u8; 4] ` --> ` Ipv4Address ` , ` IpAddress `
21
21
- ` [u8; 16] ` <--> ` Ipv6Address ` , ` IpAddress `
22
+ - Added ` ::into_std_ip_addr() ` for ` IpAddress `
23
+ - Added ` ::try_into_ethernet_mac_addr() ` for ` MacAddress `
22
24
23
25
## Changed
24
26
- The documentation for UEFI protocols has been streamlined and improved.
Original file line number Diff line number Diff line change @@ -161,6 +161,25 @@ impl IpAddress {
161
161
pub const fn as_ptr_mut ( & mut self ) -> * mut Self {
162
162
core:: ptr:: addr_of_mut!( * self )
163
163
}
164
+
165
+ /// Transforms this EFI type to the Rust standard library's type.
166
+ ///
167
+ /// # Arguments
168
+ /// - `is_ipv6`: Whether the internal data should be interpreted as IPv6 or
169
+ /// IPv4 address.
170
+ ///
171
+ /// # Safety
172
+ /// Callers must be sure that all underlying bytes were initialized.
173
+ #[ must_use]
174
+ pub unsafe fn into_std_ip_addr ( self , is_ipv6 : bool ) -> StdIpAddr {
175
+ if is_ipv6 {
176
+ // SAFETY: Caller assumes that the underlying data is initialized.
177
+ StdIpAddr :: V6 ( StdIpv6Addr :: from ( unsafe { self . v6 . octets ( ) } ) )
178
+ } else {
179
+ // SAFETY: Caller assumes that the underlying data is initialized.
180
+ StdIpAddr :: V4 ( StdIpv4Addr :: from ( unsafe { self . v4 . octets ( ) } ) )
181
+ }
182
+ }
164
183
}
165
184
166
185
impl Debug for IpAddress {
@@ -237,6 +256,17 @@ impl MacAddress {
237
256
pub const fn octets ( self ) -> [ u8 ; 32 ] {
238
257
self . 0
239
258
}
259
+
260
+ /// Tries to interpret the MAC address as normal 6-byte MAC address, as used
261
+ /// in ethernet.
262
+ pub fn try_into_ethernet_mac_addr ( self ) -> Result < [ u8 ; 6 ] , [ u8 ; 32 ] > {
263
+ let extra = self . octets ( ) [ 4 ..] . iter ( ) . any ( |& x| x != 0 ) ;
264
+ if extra {
265
+ Err ( self . 0 )
266
+ } else {
267
+ Ok ( self . octets ( ) [ ..4 ] . try_into ( ) . unwrap ( ) )
268
+ }
269
+ }
240
270
}
241
271
242
272
// Normal/typical MAC addresses, such as in Ethernet.
You can’t perform that action at this time.
0 commit comments