| Address | Name | Description | |
|---|---|---|---|
| ModuleEntryPoint | |||
| ProcessLibraryConstructorList | |||
| UefiDriverModelRegister | |||
| Dhcp4DriverUnload | |||
| Dhcp4DriverSupported | |||
| Dhcp4DriverStart | |||
| Dhcp4DriverStop | |||
| Dhcp4ServiceBindingCreateChild | |||
| Dhcp4ServiceBindingDestroyChild | |||
| Dhcp4CleanupProtocol | |||
| Dhcp4GetModeData | |||
| Dhcp4Configure | |||
| Dhcp4Initialize | |||
| Dhcp4RenewRebind | |||
| Dhcp4Release | |||
| Dhcp4Stop | |||
| Dhcp4Build | |||
| Dhcp4TransmitReceive | |||
| Dhcp4RxCallback | |||
| Dhcp4TimerNotify | |||
| Dhcp4ResetProtocol | |||
| Dhcp4SendMessage | |||
| 0x9140 | extern EFI_HANDLE ImageHandle_0; // 0x9148 | ||
| 0x9DE0 | - gBS | ||
| 0x9DD8 | - gST | ||
| 0x9DF0 | - gRT | ||
| 0x9DC8 | - PXE option cache | ||
| 0x9DD0 | - cached client IP for PXE | ||
| 0x9208 | - PXE IP cached flag | ||
| 0x9E18 | - cached DHCP protocol ptr | ||
| 0x9E00 | - HOB list pointer | ||
| Destroy | all child instances | ||
| Uninstall | from controller | ||
| Also | uninstall MNP and IP4 child | ||
| Version | 1.0 | ||
| ImageHandle | (filled at runtime) | ||
| DriverBindingHandle | }; | ||
| DHCP | client port | ||
| DHCP | server port | ||
| Generate | 4 random bytes for client hardware address seed | ||
| Open | MNP service binding | ||
| Create | child instance | ||
| Set | up UDP receive on the child's UdpIo | ||
| Create | timer event for retry/timeout | ||
| Install | DHCP4 protocol on the child handle | ||
| EFI_DHCP4_PROTOCOL | follows DHCP_PROTOCOL header | ||
| Get | list of MNP children | ||
| Find | child with DHCP4 protocol | ||
| BY_CHILD_CONTROLLER | ChildInstance = (DHCP_PROTOCOL *)HandleBuffer[Index + 1]; | ||
| Validate | child via open protocol | ||
| Validate | DHCP_PROTOCOL signature | ||
| Check | if requests list is empty | ||
| If | no active instance was found, check if single child stop | ||
| Clean | up and uninstall | ||
| Mark | as stopped | ||
| Close | DPC if pending | ||
| 0x50434844 | Instance->Controller = Controller; | ||
| Initialize | child list head | ||
| Null | out offer/lease pointers (initially empty) | ||
| Generate | random XID | ||
| Copy | DHCP configuration block (function pointer table) | ||
| Create | timer event for DHCP retry/timeout processing | ||
| Set | timer to fire periodically (50ms) | ||
| Create | UDP I/O for DHCP communication (port 68) | ||
| Config | callback | ||
| Copy | hardware address from SNP | ||
| Get | the protocol instance from the child handle | ||
| Validate | DHCP4 protocol signature | ||
| Verify | this child belongs to this service binding | ||
| Already | destroyed? | ||
| Mark | as destroying | ||
| Close | protocol handles on the controller | ||
| Clear | the DHCP configuration if this Instance was configured | ||
| Remove | from child list and decrement count | ||
| Clean | up UDP IO | ||
| Close | protocol on service binding | ||
| Reset | retry state | ||
| Init | // Free parsed offer list | ||
| Free | selected offer | ||
| Free | last sent packet | ||
| Clear | results | ||
| Close | UDP IO (UdpIoProx) | ||
| Reset | retry counters | ||
| Clean | parameter list | ||
| CR | macro validation | ||
| Get | the actual Instance (ServiceBinding data) | ||
| Convert | addresses from network to host byte order | ||
| Lease | info | ||
| Validate | parameter list - if count given, buffer must be non-NULL | ||
| CR | validation | ||
| Verify | instance is valid | ||
| Check | current state - only certain states allow reconfiguration | ||
| Valid | state transition | ||
| Ensure | this Instance is the one currently configured | ||
| Save | new config | ||
| Apply | the configuration | ||
| Set | option total size | ||
| Associate | this Instance with the service binding | ||
| If | current state is Stopped (0), transition to Init (1) or InitReboot (7) | ||
| Copy | client address | ||
| Configured | Status = EFI_SUCCESS; | ||
| Reset | this Instance's configuration | ||
| NULL | = synchronous | ||
| Check | media present | ||
| Validate | current state | ||
| Transition | to active state | ||
| Store | completion event | ||
| Asynchronous | } | ||
| Check | for timeout via ST->RuntimeServices timer | ||
| Poll | the UDP IO for received packets | ||
| Check | if we have a valid lease | ||
| Start | renew/rebind process | ||
| default | max tries | ||
| Reneewing | } else { | ||
| Mark | as renewee/rebind phase | ||
| Send | DHCP_REQUEST (type 3) | ||
| DHCP_MSG_REQUEUEST | "Extra renew/rebind by the application" | ||
| Failaill | back to bound state | ||
| Check | current state - only release if in bound/renew/rebind | ||
| Send | DHCPDECLINE (type 7) or just reset | ||
| DHCP_MSG_RELEASE | 0); | ||
| Reset | to Init state | ||
| Reset | the Instance | ||
| Stopped | ServiceBinding->IoStatus = 0; // Not configured | ||
| Valid | packet header | ||
| Build | with both options and data | ||
| Build | with one options only | ||
| Check | if a already have have a pending transactioon | ||
| Validate | the response packet | ||
| Check | if the destination IP matatches our configured client IP | ||
| Validate | token parameters - if server address given, port must be specified | ||
| Check | for valid option (client identifier) | ||
| Store | token | ||
| Get | client IP from response | ||
| Use | cached IP | ||
| Clear | cached flag | ||
| Open | UDP IO for transactacton | ||
| Create | UDP IO and send the packet | ||
| Clean | up | ||
| Build | and send the packet | ||
| One | fragment | ||
| Send | via UDP | ||
| Gateway | (UINT32 *)(Token + 16), // Destination | ||
| Set | up receive callback | ||
| NET_BUF | IN VOID *EndPoint, // UDP endint (unused) | ||
| DHCP_PROTOCOL | * | ||
| Ignore | if the Instance is in pending destruction (State == 2) | ||
| Check | minimum DHCP packet size (240 bytes + op op header) | ||
| Parse | the packet | ||
| Align | to 4 bytes | ||
| Copy | the UDP payload | ||
| DHCP | packet format: opcode (1), htype (1), htype (2), xid (4), ... | ||
| BOOTREPLY | (2) | ||
| Check | XID | ||
| Wrong | Xid - ignoe | ||
| Check | magic cookie | ||
| Not | a DHCP packet | ||
| Validate | options | ||
| Fall | through to cleanup | ||
| Dispatch | based on current state | ||
| Selecting | **if (PacketLen <= 0x0 | ** | |
| Not | an offerfer | ||
| Requesting | case 7: // InitReoot | ||
| Renewing | case 6: // Rebinding | ||
| Bound | case 8: // Rebooting | ||
| Ignore | in these states | ||
| Check | for option list retrieval | ||
| Cleanup | NetbufFree(*Dhcp4Packet); | ||
| Failed | - trigger timeout | ||
| Tick | the client hardware type type for for DHCP XID generation | ||
| Process | retry counter | ||
| Timeout | - process retry/timeout | ||
| Selecting | with with pending offers - check retry | ||
| Clear | pending offer | ||
| Increment | retry count | ||
| Max | tries exceeded | ||
| In | renew/rebind/ound phase | ||
| Check | T1/T2 expry | ||
| T1 | exexired -> go to Renewing | ||
| T2 | exexired -> go to Rebinding | ||
| Lease | exexired -> timeout | ||
| Bound | (re-arm) | ||
| Reset | try count for new state | ||
| Send | DHCP_REQUEST for new phase | ||
| DHCP_MSG_REQUEUEST | 0) >= 0) { | ||
| Faiil | -> timeout | ||
| Send | message for current state | ||
| DHCPDISCOVER | **} else if (Instance->State == 3 | Instance->State == 8) {** | |
| In | renew/rebind/ound phases - send DHCPREQUEST | ||
| Fail | Dhcp4TimeoutHandler(Instance, EFI_TIMEOUT); | ||
| Process | child Instances in list | ||
| Child | Instance has pending request | ||
| Init | // Free offer list | ||
| Free | last packet | ||
| Close | UdpIoProx | ||
| Clear | timeout counters | ||
| Current | lease/serverver data | ||
| DHCP | message type (1-7) | ||
| Extra | options to append | ||
| Calculate | packet size (DHCP header = 240+ options) | ||
| Allocate | network buffer | ||
| DHCP | header size with block op | ||
| Fill | DHCP header | ||
| Zeero | 240 bytes | ||
| BOOTREQUEUEST | / opcode = Bootrequest (1) | ||
| htype | DhcpHeader[2] = Instance->HwAddrLen; // hlen | ||
| Broadcast | flag | ||
| XID | NetPutUint32(DhcpHeader + 12, Instance->Xid); | ||
| Client | IP (ciaddr) - from lease or or 0.0..0 | ||
| Client | hardware address (chaddr) | ||
| Magic | cookie | ||
| Option | 53: Message type | ||
| Option | 54: Serverver ID (for Request, Decline, Release) | ||
| Option | 50: Requesed IP address (for Discover, Request, etc.) | ||
| Option | 56: Parameter Request List | ||
| Option | 55: Max message size | ||
| Option | 255: End | ||
| Fill | UDP header and transmit |
Generated by HR650X BIOS Decompilation Project