uefi_raw/protocol/network/
ip4_config2.rs

1use crate::protocol::network::ip4::Ip4RouteTable;
2use crate::{guid, Char16, Event, Guid, Ipv4Address, MacAddress, Status};
3use core::ffi::c_void;
4
5newtype_enum! {
6    pub enum Ip4Config2DataType: i32 => {
7        INTERFACE_INFO = 0,
8        POLICY         = 1,
9        MANUAL_ADDRESS = 2,
10        GATEWAY        = 3,
11        DNS_SERVER     = 4,
12        MAXIMUM        = 5,
13    }
14}
15
16#[derive(Debug)]
17#[repr(C)]
18pub struct Ip4Config2InterfaceInfo {
19    pub name: [Char16; 32],
20    pub if_type: u8,
21    pub hw_addr_size: u32,
22    pub hw_addr: MacAddress,
23    pub station_addr: Ipv4Address,
24    pub subnet_mask: Ipv4Address,
25    pub route_table_size: u32,
26    pub route_table: *mut Ip4RouteTable,
27}
28
29newtype_enum! {
30    pub enum Ip4Config2Policy: i32 => {
31        STATIC = 0,
32        DHCP   = 1,
33        MAX    = 2,
34    }
35}
36
37#[derive(Debug)]
38#[repr(C)]
39pub struct Ip4Config2ManualAddress {
40    pub address: Ipv4Address,
41    pub subnet_mask: Ipv4Address,
42}
43
44#[derive(Debug)]
45#[repr(C)]
46pub struct Ip4Config2Protocol {
47    pub set_data: unsafe extern "efiapi" fn(
48        this: *mut Self,
49        data_type: Ip4Config2DataType,
50        data_size: usize,
51        data: *const c_void,
52    ) -> Status,
53
54    pub get_data: unsafe extern "efiapi" fn(
55        this: *mut Self,
56        data_type: Ip4Config2DataType,
57        data_size: *mut usize,
58        data: *mut c_void,
59    ) -> Status,
60
61    pub register_data_notify: unsafe extern "efiapi" fn(
62        this: *mut Self,
63        data_type: Ip4Config2DataType,
64        event: Event,
65    ) -> Status,
66
67    pub unregister_data_notify: unsafe extern "efiapi" fn(
68        this: *mut Self,
69        data_type: Ip4Config2DataType,
70        event: Event,
71    ) -> Status,
72}
73
74impl Ip4Config2Protocol {
75    pub const GUID: Guid = guid!("5b446ed1-e30b-4faa-871a-3654eca36080");
76}