代码信息
代码地址及tag:https://github.com/tianocore/edk2/releases/tag/edk2-stable202105
头文件
所在目录:
edk2_code\MdePkg\Include\Protocol\Ip4.h
主要结构体
这里边包含获取状态、配置、发送、接收等等IPV4报文主要方法定义:
struct _EFI_IP4_PROTOCOL {
EFI_IP4_GET_MODE_DATA GetModeData;
EFI_IP4_CONFIGURE Configure;
EFI_IP4_GROUPS Groups;
EFI_IP4_ROUTES Routes;
EFI_IP4_TRANSMIT Transmit;
EFI_IP4_RECEIVE Receive;
EFI_IP4_CANCEL Cancel;
EFI_IP4_POLL Poll;
};
实现部分
这下边是这些方法详细实现代码所在的目录:
edk2_code\NetworkPkg\Ip4Dxe\Ip4Impl.c
函数名:
EFI_STATUS
EFIAPI
EfiIp4Transmit (
IN EFI_IP4_PROTOCOL *This,
IN EFI_IP4_COMPLETION_TOKEN *Token
)
EFI_STATUS
EFIAPI
EfiIp4Receive (
IN EFI_IP4_PROTOCOL *This,
IN EFI_IP4_COMPLETION_TOKEN *Token
)
{
EFI_STATUS
EFIAPI
EfiIp4GetModeData (
IN CONST EFI_IP4_PROTOCOL *This,
OUT EFI_IP4_MODE_DATA *Ip4ModeData OPTIONAL,
OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
);
EFI_STATUS
EFIAPI
EfiIp4Configure (
IN EFI_IP4_PROTOCOL *This,
IN EFI_IP4_CONFIG_DATA *IpConfigData OPTIONAL
);
等等
代码库中IPV4代码使用的一个示例:
shell命令执行PING,源码所在目录:
edk2_code\ShellPkg\Library\UefiShellNetwork1CommandsLib\Ping.c
函数入口:
SHELL_STATUS
ShellPing (
IN UINT32 SendNumber,
IN UINT32 BufferSize,
IN EFI_IPv6_ADDRESS *SrcAddress,
IN EFI_IPv6_ADDRESS *DstAddress,
IN UINT32 IpChoice
)
{省略源码}
这是在我WINDOWS 10电脑上网络测试,用的是本地IP(192.168.3.3),测试了一个PING不通的IP:192.168.3.5,测试了一个外网IP:www.baidu.com(180.101.49.11)
在我系统测试效果(注:下图系统所在的电脑跟上图电脑在同一个局域网,并且可以访问外网),看起来有点丑,不过还好,可以看(小红手是我系统的鼠标造型):