| Address | Name | Description |
|---|---|---|
| Udp4TimerHandler | ||
| Udp4DpcHandler | ||
| ModuleEntryPoint | ||
| Udp4DriverBindingSupported | ||
| Udp4DriverBindingStart | ||
| Udp4DriverBindingStop | ||
| Udp4ServiceBindingCreateChild | ||
| Udp4ServiceBindingDestroyChild | ||
| Udp4CreateService | ||
| Udp4Configure | ||
| Udp4Groups | ||
| Udp4Routes | ||
| Udp4Transmit | ||
| Udp4Transmit2 | ||
| Udp4ValidateTxToken | ||
| Udp4Receive | ||
| Udp4Cancel | ||
| Udp4CancelTxRx | ||
| Udp4Poll | ||
| Udp4RxProcess | ||
| Udp4MatchInstanceByFilter | ||
| Udp4DeliverRxPacket | ||
| Udp4DeliverDgram | ||
| Udp4TryDeliverToken | ||
| Udp4SendIcmpError | ||
| Udp4SendIcmpErrorFromInstance | ||
| IpIoOpen | ||
| IpIoClose | ||
| IpIoAddAddr | ||
| IpIoRemoveAddr | ||
| NetMapInit | ||
| NetMapClean | ||
| NetMapInsert | ||
| NetMapInserttTail | ||
| NetMapRemoveEntry | ||
| NetMapIterate | ||
| ZeroMem | ||
| NetBufFree | ||
| Udp4FindInstanceByConfig | ||
| Udp4MatchConfig | ||
| 50ms | timer that recycles timed-out Rx tokens | |
| Check | service signature = 'Udp4' | |
| Iterate | through children list | |
| For | each configured instance with Rx timeout > 50000ms: | |
| decrement | timeout by 50000 (50ms) | |
| if | timeout expires (< 50000): signal event with EFI_TIMEOUT | |
| DPC | handler - queued packet delivery | |
| Removes | token from pending Rx map | |
| Stores | context in token | |
| Signals | token event | |
| Calls | DPC protocol to queue next DPC | |
| Initialize | global references (BootServices, RuntimeServices) | |
| Open | driver binding protocol on image handle | |
| Initialize | the component name and config strings | |
| Install | multiple protocol interfaces | |
| Initialize | ephemeral port from tick count | |
| Validate | parameters | |
| Check | signature via C CR macro | |
| Open | the UDP4 service binding protocol on controller | |
| Close | the protocol (we just tested existence) | |
| Allocate | and zero UDP4 service structure (80 bytes) | |
| Initialize | the service | |
| Install | service binding protocol on controller | |
| Get | the UDP4 service from controller | |
| Find | the first child with protocol opened | |
| Validate | instance signature | |
| Specific | child destruction requested | |
| For | each child in buffer, add to service's children map | |
| and | return | |
| No | specific children - destroy all | |
| Close | IP protocol on child | |
| Close | IP protocol from IpInfo | |
| Cleanup | IpInfo | |
| If | no children remain, clean up service | |
| Get | service from This via CR macro | |
| CR | check: (UINT32 )(This - 8) == 0x34737055 | |
| Allocate | instance (336 bytes = 0x1500) | |
| Initialize | instance structures | |
| Copy | the UDP4 protocol template into instance | |
| Add | an IP address via IpIoAddAddr | |
| Install | the UDP4 instance protocol on child handle | |
| Open | IP4 protocol on child handle (as child of service) | |
| Open | IP4 protocol on IpInfo child handle too | |
| Add | to service children list | |
| Get | instance from handle via instance protocol | |
| Validate | instance via CR macro | |
| Check | signature | |
| Mark | as destroying | |
| Close | IP protocols | |
| Uninstall | the instance protocol | |
| Remove | from children list | |
| Cleanup | NetMaps | |
| Initialize | the service structure | |
| Allocate | IpIo protocol (0xA0 = 160 bytes) | |
| Initialize | IpIo structures | |
| Create | timer event (16ms TPL, callback = Udp4TimerHandler) | |
| Open | IP44 child protocol for Rx | |
| Initialize | Rx callback context | |
| Set | up the IP layer Rx configuration | |
| Open | the IpIo protocol channel | |
| Proceed | - it's already configured | |
| Creat | the 50ms periodic timer | |
| Iterate | through children instances | |
| Check | delivered dgram que for timeouts | |
| Each | entry in DeliveredDgramQue has a timeout value | |
| If | timeout >= 50000: decrement by 50000 (50ms) | |
| Get | instance from This via CR macro (offset -32 from protocol start) | |
| This | is at Instance + 0x40 (offset of Udp4Protocol in UDP4_INSTANCE) | |
| Already | not configured and no new config - just return | |
| Validate | and process the config data | |
| Check | Type (broadcast/unicast/multicast) and port range | |
| For | each Type in the known list of options... | |
| Same | config - just update timeouts/tttt | |
| Configure | IP layer via IpIoConfigIp | |
| Copy | config data to instance | |
| Assign | ephemeral port if needed | |
| Compute | UDP checksum | |
| Deconfigigure | - close and clean | |
| Clean | delivered dgram que | |
| Remove | and rcycle each | |
| Get | instance from This | |
| Check | if multicast address is valid (must start with 11110 = 0xE00000000) | |
| Delegate | to IP layer | |
| Call | IP's Groups (or mcast group join/leave) | |
| If | JoinFlag: NetMapInsertt(&Instance->McastIps, McastAddr, NULL); | |
| Delegate | to IP layer via IpInfo->Ip protocol | |
| Then | call IP's Routes function | |
| Get | instance | |
| Check | if not configured: error | |
| Copy | config if provided | |
| Delegate | to the Transmit2 (internal transmit) | |
| Validate | token (fragment count, data length, etc.) | |
| Allocate | NET_BUF with fragment data | |
| Build | UDP header (8 bytes) | |
| If | remote address seecified, use it; else use instance's | |
| Compute | checksum if needed | |
| Inser | into TxTokens map and send via IpIo | |
| Remove | from map | |
| Validate | fragment data | |
| Sum | fragment lengths, check vs. DataLength | |
| Validate | source/dedestination port range | |
| Check | that dedestination port is set if no default route | |
| Check | if token already in Tx or or Rx map | |
| If | yes: return EFI_OUT_OF_RESOURCES (already queued) | |
| Clear | token's packet pointer and inser in RxTokens | |
| Try | to deliver any queued datagram immediately | |
| Request | DPC to process Rx | |
| Iterate | TxTokens map, cancel matching tokens | |
| If | token is specified and not found, return NOT_F_FOUND | |
| If | token is NULL, cancel all (and check that both maps are empty) | |
| Request | DPC | |
| If | this is an Tx token (has a packet buffer) | |
| Cancel | via IP layer | |
| Rx | token - just mark as cancelled | |
| Simply | receive any pending IP packets synchronously | |
| Then | call IP's Poll function | |
| Validate | packet - min 8 bytes for UDP header | |
| Get | UDP header from packet | |
| Extract | fields (network byte order) | |
| Udp4Len | = ByteSwap16(Udp4Header[22]); / length + header /); | |
| Build | UDP header info for matching | |
| Deliver | to matching instances | |
| No | one matched - send ICMP Unreachable | |
| Signal | all instances with pending Rx tokens | |
| If | UseDefaultAddr is set, always match (no filtering) | |
| Check | destination port | |
| Port | not set - must match station port of instance | |
| Check | dedestination IP (if set in instance) | |
| Check | source IP (if set in instance) | |
| Source | matches our address - not for us | |
| Check | source port (if set in instance) | |
| Port | filtering | |
| Check | multicast group membership | |
| Iterate | through all children | |
| Allocate | a delivered dgram structure | |
| Create | DPC event for async delivery | |
| Inser | into Instance->DeliveredDgramQue | |
| Increment | Packet's ref count | |
| Check | if there are any delivered dgrams queued | |
| Get | head of delivered dgram que | |
| Get | Rx token from NetMap | |
| No | Rx token available - dgram stays queued | |
| Clone | the packet for this token | |
| Copy | data from clone to token's fragment buffer | |
| Set | token status | |
| Remove | from RxTokens map | |
| Signal | the token event | |
| Move | the delivered dgram to delivered Rx tokens que | |
| Try | to deliver the next Rx token | |
| If | there's a pending Rx token and a queued dgram | |
| Get | the first pending Rx token | |
| Signal | it with an ICMP error from last status | |
| Find | an IpIo instance that matches the source of the bad packet | |
| Allocate | ICMP header buffer | |
| Build | ICMP Dedestination Unreachable (Type = 3, Code = 3 (Port Unreachable)) | |
| Send | via IpIo | |
| Build | ICMP error from instance's context | |
| Send | via Instance->Service->IpIo | |
| Open | IP protocol, set up Rx callback, listen handler | |
| Close | IP protocol, remove from global list | |
| Cancel | pending sends | |
| Allocate | IPIO_INFO (96 bytes) | |
| Create | child Rx protocol | |
| Create | event for Rx notification | |
| Add | to IpIo's open list | |
| Find | the IpInfo from the open list | |
| Decrement | ref count | |
| If | ref count <= 0: remove from list, close child protocol, free | |
| Free | all items in the map | |
| Return | first item | |
| Simple | byte-byte copy (or using rep stosb/movsb) | |
| If | UseDefaultAddr is set, don't compare station port |
Generated by HR650X BIOS Decompilation Project