in DfciPkg/Application/DfciMenu/DfciRequest.c [378:440]
EFIAPI TimerTick (
IN EFI_EVENT Event,
IN VOID *Context
) {
UINTN DataSize;
EFI_IP4_CONFIG2_INTERFACE_INFO *Info;
EFI_IP4_CONFIG2_PROTOCOL *Ip4Config2;
DFCI_NETWORK_REQUEST *NetworkRequest;
EFI_STATUS Status;
NetworkRequest = (DFCI_NETWORK_REQUEST *) Context;
Status = gBS->HandleProtocol(NetworkRequest->HttpNic.NicHandle,
&gEfiIp4Config2ProtocolGuid,
(VOID **) &Ip4Config2);
if (EFI_ERROR(Status)) {
DEBUG((DEBUG_ERROR, "Tick error locating IPv4 Config2 protocol. Code=%r\n", Status));
if (NULL != NetworkRequest->HttpNic.WaitEvent) {
gBS->SignalEvent (NetworkRequest->HttpNic.WaitEvent);
}
return;
}
DataSize = 0;
Status = Ip4Config2->GetData (Ip4Config2,
Ip4Config2DataTypeInterfaceInfo,
&DataSize,
&Info);
if (EFI_BUFFER_TOO_SMALL != Status) {
DEBUG((DEBUG_ERROR, "Error obtaining IP4 Interface Info size. Code=%r\n", Status));
} else {
Info = AllocatePool (DataSize);
if (NULL == Info) {
DEBUG((DEBUG_ERROR, "Error allocating %d bytes for Info\n", DataSize));
} else {
Info->StationAddress.Addr[0] = 0;
Status = Ip4Config2->GetData (Ip4Config2,
Ip4Config2DataTypeInterfaceInfo,
&DataSize,
Info);
if (EFI_ERROR(Status)) {
DEBUG((DEBUG_ERROR, "Error obtaining IP4 Interface Info. Code=%r\n", Status));
DEBUG((DEBUG_ERROR, " DataSize=%d, StructSize=%d\n",
DataSize,
sizeof(EFI_IP4_CONFIG2_INTERFACE_INFO) ));
} else {
if (Info->StationAddress.Addr[0] != 0) {
if (NULL != NetworkRequest->HttpNic.WaitEvent) {
gBS->SignalEvent (NetworkRequest->HttpNic.WaitEvent);
}
DEBUG((DEBUG_INFO, "DHCP Local Address is %d.%d.%d.%d.\n",
Info->StationAddress.Addr[0],
Info->StationAddress.Addr[1],
Info->StationAddress.Addr[2],
Info->StationAddress.Addr[3]));
}
}
FreePool (Info);
}
}
}