X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FIp4Dxe%2FIp4If.c;h=b312017d2227301c047669c5e24f27bac3fa99da;hp=edb0b197ca3edbf452281596931d0184670edec8;hb=d1050b9dff1cace252aff86630bfdb59dff5f507;hpb=2f88bd3a1296c522317f1c21377876de63de5be7 diff --git a/NetworkPkg/Ip4Dxe/Ip4If.c b/NetworkPkg/Ip4Dxe/Ip4If.c index edb0b197ca..b312017d22 100644 --- a/NetworkPkg/Ip4Dxe/Ip4If.c +++ b/NetworkPkg/Ip4Dxe/Ip4If.c @@ -24,7 +24,7 @@ EFI_MAC_ADDRESS mZeroMacAddress; VOID EFIAPI Ip4OnFrameSentDpc ( - IN VOID *Context + IN VOID *Context ); /** @@ -37,8 +37,8 @@ Ip4OnFrameSentDpc ( VOID EFIAPI Ip4OnFrameSent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); /** @@ -53,7 +53,7 @@ Ip4OnFrameSent ( VOID EFIAPI Ip4OnArpResolvedDpc ( - IN VOID *Context + IN VOID *Context ); /** @@ -67,8 +67,8 @@ Ip4OnArpResolvedDpc ( VOID EFIAPI Ip4OnArpResolved ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); /** @@ -85,7 +85,7 @@ Ip4OnArpResolved ( VOID EFIAPI Ip4OnFrameReceivedDpc ( - IN VOID *Context + IN VOID *Context ); /** @@ -98,8 +98,8 @@ Ip4OnFrameReceivedDpc ( VOID EFIAPI Ip4OnFrameReceived ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ); /** @@ -115,13 +115,12 @@ Ip4OnFrameReceived ( **/ VOID Ip4CancelFrameArp ( - IN IP4_ARP_QUE *ArpQue, - IN EFI_STATUS IoStatus, - IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, - IN VOID *Context + IN IP4_ARP_QUE *ArpQue, + IN EFI_STATUS IoStatus, + IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, + IN VOID *Context ); - /** Wrap a transmit request into a newly allocated IP4_LINK_TX_TOKEN. @@ -140,12 +139,12 @@ Ip4CancelFrameArp ( **/ IP4_LINK_TX_TOKEN * Ip4WrapLinkTxToken ( - IN IP4_INTERFACE *Interface, - IN IP4_PROTOCOL *IpInstance OPTIONAL, - IN NET_BUF *Packet, - IN IP4_FRAME_CALLBACK CallBack, - IN VOID *Context, - IN IP4_SERVICE *IpSb + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance OPTIONAL, + IN NET_BUF *Packet, + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context, + IN IP4_SERVICE *IpSb ) { EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken; @@ -154,8 +153,10 @@ Ip4WrapLinkTxToken ( EFI_STATUS Status; UINT32 Count; - Token = AllocatePool (sizeof (IP4_LINK_TX_TOKEN) + \ - (Packet->BlockOpNum - 1) * sizeof (EFI_MANAGED_NETWORK_FRAGMENT_DATA)); + Token = AllocatePool ( + sizeof (IP4_LINK_TX_TOKEN) + \ + (Packet->BlockOpNum - 1) * sizeof (EFI_MANAGED_NETWORK_FRAGMENT_DATA) + ); if (Token == NULL) { return NULL; @@ -173,8 +174,8 @@ Ip4WrapLinkTxToken ( CopyMem (&Token->DstMac, &mZeroMacAddress, sizeof (Token->DstMac)); CopyMem (&Token->SrcMac, &Interface->Mac, sizeof (Token->SrcMac)); - MnpToken = &(Token->MnpToken); - MnpToken->Status = EFI_NOT_READY; + MnpToken = &(Token->MnpToken); + MnpToken->Status = EFI_NOT_READY; Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL, @@ -189,8 +190,8 @@ Ip4WrapLinkTxToken ( return NULL; } - MnpTxData = &Token->MnpTxData; - MnpToken->Packet.TxData = MnpTxData; + MnpTxData = &Token->MnpTxData; + MnpToken->Packet.TxData = MnpTxData; MnpTxData->DestinationAddress = &Token->DstMac; MnpTxData->SourceAddress = &Token->SrcMac; @@ -198,15 +199,14 @@ Ip4WrapLinkTxToken ( MnpTxData->DataLength = Packet->TotalSize; MnpTxData->HeaderLength = 0; - Count = Packet->BlockOpNum; + Count = Packet->BlockOpNum; - NetbufBuildExt (Packet, (NET_FRAGMENT *) MnpTxData->FragmentTable, &Count); - MnpTxData->FragmentCount = (UINT16)Count; + NetbufBuildExt (Packet, (NET_FRAGMENT *)MnpTxData->FragmentTable, &Count); + MnpTxData->FragmentCount = (UINT16)Count; return Token; } - /** Free the link layer transmit token. It will close the event then free the memory used. @@ -216,7 +216,7 @@ Ip4WrapLinkTxToken ( **/ VOID Ip4FreeLinkTxToken ( - IN IP4_LINK_TX_TOKEN *Token + IN IP4_LINK_TX_TOKEN *Token ) { NET_CHECK_SIGNATURE (Token, IP4_FRAME_TX_SIGNATURE); @@ -225,7 +225,6 @@ Ip4FreeLinkTxToken ( FreePool (Token); } - /** Create an IP_ARP_QUE structure to request ARP service. @@ -238,12 +237,12 @@ Ip4FreeLinkTxToken ( **/ IP4_ARP_QUE * Ip4CreateArpQue ( - IN IP4_INTERFACE *Interface, - IN IP4_ADDR DestIp + IN IP4_INTERFACE *Interface, + IN IP4_ADDR DestIp ) { - IP4_ARP_QUE *ArpQue; - EFI_STATUS Status; + IP4_ARP_QUE *ArpQue; + EFI_STATUS Status; ArpQue = AllocatePool (sizeof (IP4_ARP_QUE)); @@ -270,13 +269,12 @@ Ip4CreateArpQue ( return NULL; } - ArpQue->Ip = DestIp; + ArpQue->Ip = DestIp; CopyMem (&ArpQue->Mac, &mZeroMacAddress, sizeof (ArpQue->Mac)); return ArpQue; } - /** Remove all the transmit requests queued on the ARP queue, then free it. @@ -287,8 +285,8 @@ Ip4CreateArpQue ( **/ VOID Ip4FreeArpQue ( - IN IP4_ARP_QUE *ArpQue, - IN EFI_STATUS IoStatus + IN IP4_ARP_QUE *ArpQue, + IN EFI_STATUS IoStatus ) { NET_CHECK_SIGNATURE (ArpQue, IP4_FRAME_ARP_SIGNATURE); @@ -302,7 +300,6 @@ Ip4FreeArpQue ( FreePool (ArpQue); } - /** Create a link layer receive token to wrap the receive request @@ -317,10 +314,10 @@ Ip4FreeArpQue ( **/ IP4_LINK_RX_TOKEN * Ip4CreateLinkRxToken ( - IN IP4_INTERFACE *Interface, - IN IP4_PROTOCOL *IpInstance, - IN IP4_FRAME_CALLBACK CallBack, - IN VOID *Context + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance, + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context ) { EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken; @@ -338,8 +335,8 @@ Ip4CreateLinkRxToken ( Token->CallBack = CallBack; Token->Context = Context; - MnpToken = &Token->MnpToken; - MnpToken->Status = EFI_NOT_READY; + MnpToken = &Token->MnpToken; + MnpToken->Status = EFI_NOT_READY; Status = gBS->CreateEvent ( EVT_NOTIFY_SIGNAL, @@ -358,7 +355,6 @@ Ip4CreateLinkRxToken ( return Token; } - /** Free the link layer request token. It will close the event then free the memory used. @@ -368,17 +364,15 @@ Ip4CreateLinkRxToken ( **/ VOID Ip4FreeFrameRxToken ( - IN IP4_LINK_RX_TOKEN *Token + IN IP4_LINK_RX_TOKEN *Token ) { - NET_CHECK_SIGNATURE (Token, IP4_FRAME_RX_SIGNATURE); gBS->CloseEvent (Token->MnpToken.Event); FreePool (Token); } - /** Remove all the frames on the ARP queue that pass the FrameToCancel, that is, either FrameToCancel is NULL or it returns true for the frame. @@ -392,15 +386,15 @@ Ip4FreeFrameRxToken ( **/ VOID Ip4CancelFrameArp ( - IN IP4_ARP_QUE *ArpQue, - IN EFI_STATUS IoStatus, - IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, - IN VOID *Context + IN IP4_ARP_QUE *ArpQue, + IN EFI_STATUS IoStatus, + IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, + IN VOID *Context ) { - LIST_ENTRY *Entry; - LIST_ENTRY *Next; - IP4_LINK_TX_TOKEN *Token; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IP4_LINK_TX_TOKEN *Token; NET_LIST_FOR_EACH_SAFE (Entry, Next, &ArpQue->Frames) { Token = NET_LIST_USER_STRUCT (Entry, IP4_LINK_TX_TOKEN, Link); @@ -414,7 +408,6 @@ Ip4CancelFrameArp ( } } - /** Remove all the frames on the interface that pass the FrameToCancel, either queued on ARP queues or that have already been delivered to @@ -430,16 +423,16 @@ Ip4CancelFrameArp ( **/ VOID Ip4CancelFrames ( - IN IP4_INTERFACE *Interface, - IN EFI_STATUS IoStatus, - IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, - IN VOID *Context + IN IP4_INTERFACE *Interface, + IN EFI_STATUS IoStatus, + IN IP4_FRAME_TO_CANCEL FrameToCancel OPTIONAL, + IN VOID *Context ) { - LIST_ENTRY *Entry; - LIST_ENTRY *Next; - IP4_ARP_QUE *ArpQue; - IP4_LINK_TX_TOKEN *Token; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IP4_ARP_QUE *ArpQue; + IP4_LINK_TX_TOKEN *Token; // // Cancel all the pending frames on ARP requests @@ -467,7 +460,6 @@ Ip4CancelFrames ( } } - /** Create an IP4_INTERFACE. Delay the creation of ARP instance until the interface is configured. @@ -488,8 +480,8 @@ Ip4CreateInterface ( IN EFI_HANDLE ImageHandle ) { - IP4_INTERFACE *Interface; - EFI_SIMPLE_NETWORK_MODE SnpMode; + IP4_INTERFACE *Interface; + EFI_SIMPLE_NETWORK_MODE SnpMode; if (Mnp == NULL) { return NULL; @@ -503,7 +495,7 @@ Ip4CreateInterface ( Interface->Signature = IP4_INTERFACE_SIGNATURE; InitializeListHead (&Interface->Link); - Interface->RefCnt = 1; + Interface->RefCnt = 1; Interface->Ip = IP4_ALLZERO_ADDRESS; Interface->SubnetMask = IP4_ALLZERO_ADDRESS; @@ -530,7 +522,7 @@ Ip4CreateInterface ( CopyMem (&Interface->Mac, &SnpMode.CurrentAddress, sizeof (Interface->Mac)); CopyMem (&Interface->BroadcastMac, &SnpMode.BroadcastAddress, sizeof (Interface->BroadcastMac)); - Interface->HwaddrLen = SnpMode.HwAddressSize; + Interface->HwaddrLen = SnpMode.HwAddressSize; InitializeListHead (&Interface->IpInstances); Interface->PromiscRecv = FALSE; @@ -538,7 +530,6 @@ Ip4CreateInterface ( return Interface; } - /** Set the interface's address, create and configure the ARP child if necessary. @@ -554,13 +545,13 @@ Ip4CreateInterface ( **/ EFI_STATUS Ip4SetAddress ( - IN OUT IP4_INTERFACE *Interface, - IN IP4_ADDR IpAddr, - IN IP4_ADDR SubnetMask + IN OUT IP4_INTERFACE *Interface, + IN IP4_ADDR IpAddr, + IN IP4_ADDR SubnetMask ) { - EFI_ARP_CONFIG_DATA ArpConfig; - EFI_STATUS Status; + EFI_ARP_CONFIG_DATA ArpConfig; + EFI_STATUS Status; NET_CHECK_SIGNATURE (Interface, IP4_INTERFACE_SIGNATURE); @@ -572,10 +563,10 @@ Ip4SetAddress ( // RFC793. If that isn't the case, we are aggregating the // networks, use the subnet's mask instead. // - Interface->Ip = IpAddr; - Interface->SubnetMask = SubnetMask; - Interface->SubnetBrdcast = (IpAddr | ~SubnetMask); - Interface->NetBrdcast = (IpAddr | ~SubnetMask); + Interface->Ip = IpAddr; + Interface->SubnetMask = SubnetMask; + Interface->SubnetBrdcast = (IpAddr | ~SubnetMask); + Interface->NetBrdcast = (IpAddr | ~SubnetMask); // // Do clean up for Arp child @@ -621,7 +612,7 @@ Ip4SetAddress ( Status = gBS->OpenProtocol ( Interface->ArpHandle, &gEfiArpProtocolGuid, - (VOID **) &Interface->Arp, + (VOID **)&Interface->Arp, Interface->Image, Interface->Controller, EFI_OPEN_PROTOCOL_BY_DRIVER @@ -667,7 +658,6 @@ ON_ERROR: return Status; } - /** Filter function to cancel all the frame related to an IP instance. @@ -682,19 +672,17 @@ ON_ERROR: **/ BOOLEAN Ip4CancelInstanceFrame ( - IN IP4_LINK_TX_TOKEN *Frame, - IN VOID *Context + IN IP4_LINK_TX_TOKEN *Frame, + IN VOID *Context ) { - if (Frame->IpInstance == (IP4_PROTOCOL *) Context) { + if (Frame->IpInstance == (IP4_PROTOCOL *)Context) { return TRUE; } return FALSE; } - - /** If there is a pending receive request, cancel it. Don't call the receive request's callback because this function can be only @@ -709,11 +697,11 @@ Ip4CancelInstanceFrame ( **/ VOID Ip4CancelReceive ( - IN IP4_INTERFACE *Interface + IN IP4_INTERFACE *Interface ) { - EFI_TPL OldTpl; - IP4_LINK_RX_TOKEN *Token; + EFI_TPL OldTpl; + IP4_LINK_RX_TOKEN *Token; if ((Token = Interface->RecvRequest) != NULL) { OldTpl = gBS->RaiseTPL (TPL_CALLBACK); @@ -725,7 +713,6 @@ Ip4CancelReceive ( } } - /** Free the interface used by IpInstance. All the IP instance with the same Ip/Netmask pair share the same interface. It is reference @@ -742,8 +729,8 @@ Ip4CancelReceive ( **/ EFI_STATUS Ip4FreeInterface ( - IN IP4_INTERFACE *Interface, - IN IP4_PROTOCOL *IpInstance OPTIONAL + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance OPTIONAL ) { NET_CHECK_SIGNATURE (Interface, IP4_INTERFACE_SIGNATURE); @@ -773,11 +760,11 @@ Ip4FreeInterface ( if (Interface->Arp != NULL) { gBS->CloseProtocol ( - Interface->ArpHandle, - &gEfiArpProtocolGuid, - Interface->Image, - Interface->Controller - ); + Interface->ArpHandle, + &gEfiArpProtocolGuid, + Interface->Image, + Interface->Controller + ); NetLibDestroyServiceChild ( Interface->Controller, @@ -805,16 +792,16 @@ Ip4FreeInterface ( **/ EFI_STATUS Ip4SendFrameToDefaultRoute ( - IN IP4_ARP_QUE *ArpQue + IN IP4_ARP_QUE *ArpQue ) { - LIST_ENTRY *Entry; - LIST_ENTRY *Next; - IP4_ROUTE_CACHE_ENTRY *RtCacheEntry; - IP4_LINK_TX_TOKEN *Token; - IP4_ADDR Gateway; - EFI_STATUS Status; - IP4_ROUTE_ENTRY *DefaultRoute; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IP4_ROUTE_CACHE_ENTRY *RtCacheEntry; + IP4_LINK_TX_TOKEN *Token; + IP4_ADDR Gateway; + EFI_STATUS Status; + IP4_ROUTE_ENTRY *DefaultRoute; // // ARP resolve failed when using /32 subnet mask. @@ -830,18 +817,22 @@ Ip4SendFrameToDefaultRoute ( if (Token->IpInstance != NULL) { RtCacheEntry = Ip4FindRouteCache (Token->IpInstance->RouteTable, NTOHL (ArpQue->Ip), Token->Interface->Ip); } + if (RtCacheEntry == NULL) { RtCacheEntry = Ip4FindRouteCache (Token->IpSb->DefaultRouteTable, NTOHL (ArpQue->Ip), Token->Interface->Ip); } + if (RtCacheEntry == NULL) { - Status= EFI_NO_MAPPING; + Status = EFI_NO_MAPPING; goto ON_ERROR; } - DefaultRoute = (IP4_ROUTE_ENTRY*)RtCacheEntry->Tag; + + DefaultRoute = (IP4_ROUTE_ENTRY *)RtCacheEntry->Tag; if (DefaultRoute == NULL) { - Status= EFI_NO_MAPPING; + Status = EFI_NO_MAPPING; goto ON_ERROR; } + // // Try to send the frame to the default route. // @@ -850,15 +841,17 @@ Ip4SendFrameToDefaultRoute ( // // ARP resolve for the default route is failed, return error to caller. // - Status= EFI_NO_MAPPING; + Status = EFI_NO_MAPPING; goto ON_ERROR; } + RtCacheEntry->NextHop = Gateway; - Status = Ip4SendFrame (Token->Interface,Token->IpInstance,Token->Packet,Gateway,Token->CallBack,Token->Context,Token->IpSb); + Status = Ip4SendFrame (Token->Interface, Token->IpInstance, Token->Packet, Gateway, Token->CallBack, Token->Context, Token->IpSb); if (EFI_ERROR (Status)) { - Status= EFI_NO_MAPPING; + Status = EFI_NO_MAPPING; goto ON_ERROR; } + Ip4FreeRouteCacheEntry (RtCacheEntry); } @@ -868,12 +861,12 @@ ON_ERROR: if (RtCacheEntry != NULL) { Ip4FreeRouteCacheEntry (RtCacheEntry); } + Token->CallBack (Token->IpInstance, Token->Packet, Status, 0, Token->Context); Ip4FreeLinkTxToken (Token); return Status; } - /** Callback function when ARP request are finished. It will cancel all the queued frame if the ARP requests failed. Or transmit them @@ -886,18 +879,18 @@ ON_ERROR: VOID EFIAPI Ip4OnArpResolvedDpc ( - IN VOID *Context + IN VOID *Context ) { - LIST_ENTRY *Entry; - LIST_ENTRY *Next; - IP4_ARP_QUE *ArpQue; - IP4_INTERFACE *Interface; - IP4_LINK_TX_TOKEN *Token; - EFI_STATUS Status; - EFI_STATUS IoStatus; - - ArpQue = (IP4_ARP_QUE *) Context; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IP4_ARP_QUE *ArpQue; + IP4_INTERFACE *Interface; + IP4_LINK_TX_TOKEN *Token; + EFI_STATUS Status; + EFI_STATUS IoStatus; + + ArpQue = (IP4_ARP_QUE *)Context; NET_CHECK_SIGNATURE (ArpQue, IP4_FRAME_ARP_SIGNATURE); RemoveEntryList (&ArpQue->Link); @@ -919,6 +912,7 @@ Ip4OnArpResolvedDpc ( // IoStatus = Ip4SendFrameToDefaultRoute (ArpQue); } + goto ON_EXIT; } @@ -927,13 +921,13 @@ Ip4OnArpResolvedDpc ( // queue. It isn't necessary for us to cache the ARP binding because // we always check the ARP cache first before transmit. // - IoStatus = EFI_SUCCESS; + IoStatus = EFI_SUCCESS; Interface = ArpQue->Interface; NET_LIST_FOR_EACH_SAFE (Entry, Next, &ArpQue->Frames) { RemoveEntryList (Entry); - Token = NET_LIST_USER_STRUCT (Entry, IP4_LINK_TX_TOKEN, Link); + Token = NET_LIST_USER_STRUCT (Entry, IP4_LINK_TX_TOKEN, Link); CopyMem (&Token->DstMac, &ArpQue->Mac, sizeof (Token->DstMac)); // @@ -970,8 +964,8 @@ ON_EXIT: VOID EFIAPI Ip4OnArpResolved ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { // @@ -980,8 +974,6 @@ Ip4OnArpResolved ( QueueDpc (TPL_CALLBACK, Ip4OnArpResolvedDpc, Context); } - - /** Callback function when frame transmission is finished. It will call the frame owner's callback function to tell it the result. @@ -992,23 +984,23 @@ Ip4OnArpResolved ( VOID EFIAPI Ip4OnFrameSentDpc ( - IN VOID *Context + IN VOID *Context ) { - IP4_LINK_TX_TOKEN *Token; + IP4_LINK_TX_TOKEN *Token; - Token = (IP4_LINK_TX_TOKEN *) Context; + Token = (IP4_LINK_TX_TOKEN *)Context; NET_CHECK_SIGNATURE (Token, IP4_FRAME_TX_SIGNATURE); RemoveEntryList (&Token->Link); Token->CallBack ( - Token->IpInstance, - Token->Packet, - Token->MnpToken.Status, - 0, - Token->Context - ); + Token->IpInstance, + Token->Packet, + Token->MnpToken.Status, + 0, + Token->Context + ); Ip4FreeLinkTxToken (Token); } @@ -1023,8 +1015,8 @@ Ip4OnFrameSentDpc ( VOID EFIAPI Ip4OnFrameSent ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { // @@ -1033,8 +1025,6 @@ Ip4OnFrameSent ( QueueDpc (TPL_CALLBACK, Ip4OnFrameSentDpc, Context); } - - /** Send a frame from the interface. If the next hop is broadcast or multicast address, it is transmitted immediately. If the next hop @@ -1060,20 +1050,20 @@ Ip4OnFrameSent ( **/ EFI_STATUS Ip4SendFrame ( - IN IP4_INTERFACE *Interface, - IN IP4_PROTOCOL *IpInstance OPTIONAL, - IN NET_BUF *Packet, - IN IP4_ADDR NextHop, - IN IP4_FRAME_CALLBACK CallBack, - IN VOID *Context, - IN IP4_SERVICE *IpSb + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance OPTIONAL, + IN NET_BUF *Packet, + IN IP4_ADDR NextHop, + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context, + IN IP4_SERVICE *IpSb ) { - IP4_LINK_TX_TOKEN *Token; - LIST_ENTRY *Entry; - IP4_ARP_QUE *ArpQue; - EFI_ARP_PROTOCOL *Arp; - EFI_STATUS Status; + IP4_LINK_TX_TOKEN *Token; + LIST_ENTRY *Entry; + IP4_ARP_QUE *ArpQue; + EFI_ARP_PROTOCOL *Arp; + EFI_STATUS Status; ASSERT (Interface->Configured); @@ -1092,9 +1082,7 @@ Ip4SendFrame ( if (NextHop == IP4_ALLONE_ADDRESS) { CopyMem (&Token->DstMac, &Interface->BroadcastMac, sizeof (Token->DstMac)); goto SEND_NOW; - } else if (IP4_IS_MULTICAST (NextHop)) { - Status = Ip4GetMulticastMac (Interface->Mnp, NextHop, &Token->DstMac); if (EFI_ERROR (Status)) { @@ -1120,7 +1108,6 @@ Ip4SendFrame ( if (Status == EFI_SUCCESS) { goto SEND_NOW; - } else if (Status != EFI_NOT_READY) { goto ON_ERROR; } @@ -1187,7 +1174,6 @@ ON_ERROR: return Status; } - /** Call back function when the received packet is freed. Check Ip4OnFrameReceived for information. @@ -1198,19 +1184,18 @@ ON_ERROR: VOID EFIAPI Ip4RecycleFrame ( - IN VOID *Context + IN VOID *Context ) { - IP4_LINK_RX_TOKEN *Frame; + IP4_LINK_RX_TOKEN *Frame; - Frame = (IP4_LINK_RX_TOKEN *) Context; + Frame = (IP4_LINK_RX_TOKEN *)Context; NET_CHECK_SIGNATURE (Frame, IP4_FRAME_RX_SIGNATURE); gBS->SignalEvent (Frame->MnpToken.Packet.RxData->RecycleEvent); Ip4FreeFrameRxToken (Frame); } - /** Received a frame from MNP, wrap it in net buffer then deliver it to IP's input function. The ownship of the packet also @@ -1225,7 +1210,7 @@ Ip4RecycleFrame ( VOID EFIAPI Ip4OnFrameReceivedDpc ( - IN VOID *Context + IN VOID *Context ) { EFI_MANAGED_NETWORK_COMPLETION_TOKEN *MnpToken; @@ -1235,7 +1220,7 @@ Ip4OnFrameReceivedDpc ( NET_BUF *Packet; UINT32 Flag; - Token = (IP4_LINK_RX_TOKEN *) Context; + Token = (IP4_LINK_RX_TOKEN *)Context; NET_CHECK_SIGNATURE (Token, IP4_FRAME_RX_SIGNATURE); // @@ -1251,7 +1236,7 @@ Ip4OnFrameReceivedDpc ( Token->CallBack (Token->IpInstance, NULL, MnpToken->Status, 0, Token->Context); Ip4FreeFrameRxToken (Token); - return ; + return; } // @@ -1269,7 +1254,7 @@ Ip4OnFrameReceivedDpc ( Token->CallBack (Token->IpInstance, NULL, EFI_OUT_OF_RESOURCES, 0, Token->Context); Ip4FreeFrameRxToken (Token); - return ; + return; } Flag = (MnpRxData->BroadcastFlag ? IP4_LINK_BROADCAST : 0); @@ -1289,8 +1274,8 @@ Ip4OnFrameReceivedDpc ( VOID EFIAPI Ip4OnFrameReceived ( - IN EFI_EVENT Event, - IN VOID *Context + IN EFI_EVENT Event, + IN VOID *Context ) { // @@ -1299,7 +1284,6 @@ Ip4OnFrameReceived ( QueueDpc (TPL_CALLBACK, Ip4OnFrameReceivedDpc, Context); } - /** Request to receive the packet from the interface. @@ -1317,14 +1301,14 @@ Ip4OnFrameReceived ( **/ EFI_STATUS Ip4ReceiveFrame ( - IN IP4_INTERFACE *Interface, - IN IP4_PROTOCOL *IpInstance OPTIONAL, - IN IP4_FRAME_CALLBACK CallBack, - IN VOID *Context + IN IP4_INTERFACE *Interface, + IN IP4_PROTOCOL *IpInstance OPTIONAL, + IN IP4_FRAME_CALLBACK CallBack, + IN VOID *Context ) { - IP4_LINK_RX_TOKEN *Token; - EFI_STATUS Status; + IP4_LINK_RX_TOKEN *Token; + EFI_STATUS Status; NET_CHECK_SIGNATURE (Interface, IP4_INTERFACE_SIGNATURE); @@ -1339,11 +1323,12 @@ Ip4ReceiveFrame ( } Interface->RecvRequest = Token; - Status = Interface->Mnp->Receive (Interface->Mnp, &Token->MnpToken); + Status = Interface->Mnp->Receive (Interface->Mnp, &Token->MnpToken); if (EFI_ERROR (Status)) { Interface->RecvRequest = NULL; Ip4FreeFrameRxToken (Token); return Status; } + return EFI_SUCCESS; }