1 //! Network access protocols.
2 //!
3 //! These protocols can be used to interact with network resources.
4 
5 pub mod pxe;
6 pub mod snp;
7 
8 /// Represents an IPv4/v6 address.
9 ///
10 /// Corresponds to the `EFI_IP_ADDRESS` type in the C API.
11 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
12 #[repr(C, align(4))]
13 pub struct IpAddress(pub [u8; 16]);
14 
15 impl IpAddress {
16     /// Construct a new IPv4 address.
17     #[must_use]
new_v4(ip_addr: [u8; 4]) -> Self18     pub const fn new_v4(ip_addr: [u8; 4]) -> Self {
19         let mut buffer = [0; 16];
20         buffer[0] = ip_addr[0];
21         buffer[1] = ip_addr[1];
22         buffer[2] = ip_addr[2];
23         buffer[3] = ip_addr[3];
24         Self(buffer)
25     }
26 
27     /// Construct a new IPv6 address.
28     #[must_use]
new_v6(ip_addr: [u8; 16]) -> Self29     pub const fn new_v6(ip_addr: [u8; 16]) -> Self {
30         Self(ip_addr)
31     }
32 }
33 
34 /// Represents a MAC (media access control) address.
35 ///
36 /// Corresponds to the `EFI_MAC_ADDRESS` type in the C API.
37 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
38 #[repr(C)]
39 pub struct MacAddress(pub [u8; 32]);
40