TianoCore EDK2 master
Loading...
Searching...
No Matches
Udp6Main.c
Go to the documentation of this file.
1
10#include "Udp6Impl.h"
11
12EFI_UDP6_PROTOCOL mUdp6Protocol = {
20};
21
48EFIAPI
51 OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL,
52 OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL,
53 OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL,
54 OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL
55 )
56{
57 UDP6_INSTANCE_DATA *Instance;
59 EFI_TPL OldTpl;
60 EFI_STATUS Status;
61
62 if (This == NULL) {
63 return EFI_INVALID_PARAMETER;
64 }
65
66 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
67
68 if (!Instance->Configured && (Udp6ConfigData != NULL)) {
69 return EFI_NOT_STARTED;
70 }
71
72 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
73
74 if (Udp6ConfigData != NULL) {
75 //
76 // Set the Udp6ConfigData.
77 //
78 CopyMem (Udp6ConfigData, &Instance->ConfigData, sizeof (EFI_UDP6_CONFIG_DATA));
79 }
80
81 Ip = Instance->IpInfo->Ip.Ip6;
82
83 //
84 // Get the underlying Ip6ModeData, MnpConfigData and SnpModeData.
85 //
86 Status = Ip->GetModeData (Ip, Ip6ModeData, MnpConfigData, SnpModeData);
87
88 gBS->RestoreTPL (OldTpl);
89
90 return Status;
91}
92
130EFIAPI
132 IN EFI_UDP6_PROTOCOL *This,
133 IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL
134 )
135{
136 EFI_STATUS Status;
137 UDP6_INSTANCE_DATA *Instance;
138 UDP6_SERVICE_DATA *Udp6Service;
139 EFI_TPL OldTpl;
140 EFI_IPv6_ADDRESS StationAddress;
141 EFI_IPv6_ADDRESS RemoteAddress;
142 EFI_IP6_CONFIG_DATA Ip6ConfigData;
143 EFI_IPv6_ADDRESS LocalAddr;
144 EFI_IPv6_ADDRESS RemoteAddr;
145
146 if (This == NULL) {
147 return EFI_INVALID_PARAMETER;
148 }
149
150 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
151
152 if (!Instance->Configured && (UdpConfigData == NULL)) {
153 return EFI_SUCCESS;
154 }
155
156 Udp6Service = Instance->Udp6Service;
157 Status = EFI_SUCCESS;
158 ASSERT (Udp6Service != NULL);
159
160 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
161
162 if (UdpConfigData != NULL) {
163 IP6_COPY_ADDRESS (&StationAddress, &UdpConfigData->StationAddress);
164 IP6_COPY_ADDRESS (&RemoteAddress, &UdpConfigData->RemoteAddress);
165
166 if ((!NetIp6IsUnspecifiedAddr (&StationAddress) && !NetIp6IsValidUnicast (&StationAddress)) ||
167 (!NetIp6IsUnspecifiedAddr (&RemoteAddress) && !NetIp6IsValidUnicast (&RemoteAddress))
168 )
169 {
170 //
171 // If not use default address, and StationAddress is not a valid unicast
172 // if it is not IPv6 address or RemoteAddress is not a valid unicast IPv6
173 // address if it is not 0.
174 //
175 Status = EFI_INVALID_PARAMETER;
176 goto ON_EXIT;
177 }
178
179 if (Instance->Configured) {
180 //
181 // The instance is already configured, try to do the re-configuration.
182 //
183 if (!Udp6IsReconfigurable (&Instance->ConfigData, UdpConfigData)) {
184 //
185 // If the new configuration data wants to change some unreconfigurable
186 // settings, return EFI_ALREADY_STARTED.
187 //
188 Status = EFI_ALREADY_STARTED;
189 goto ON_EXIT;
190 }
191
192 //
193 // Save the reconfigurable parameters.
194 //
195 Instance->ConfigData.TrafficClass = UdpConfigData->TrafficClass;
196 Instance->ConfigData.HopLimit = UdpConfigData->HopLimit;
197 Instance->ConfigData.ReceiveTimeout = UdpConfigData->ReceiveTimeout;
198 Instance->ConfigData.TransmitTimeout = UdpConfigData->TransmitTimeout;
199 } else {
200 //
201 // Construct the Ip configuration data from the UdpConfigData.
202 //
203 Udp6BuildIp6ConfigData (UdpConfigData, &Ip6ConfigData);
204
205 //
206 // Configure the Ip instance wrapped in the IpInfo.
207 //
208 Status = IpIoConfigIp (Instance->IpInfo, &Ip6ConfigData);
209 if (EFI_ERROR (Status)) {
210 if (Status == EFI_NO_MAPPING) {
211 Instance->IsNoMapping = TRUE;
212 }
213
214 goto ON_EXIT;
215 }
216
217 Instance->IsNoMapping = FALSE;
218
219 //
220 // Save the configuration data.
221 //
222 CopyMem (
223 &Instance->ConfigData,
224 UdpConfigData,
225 sizeof (EFI_UDP6_CONFIG_DATA)
226 );
227 IP6_COPY_ADDRESS (&Instance->ConfigData.StationAddress, &Ip6ConfigData.StationAddress);
228 //
229 // Try to allocate the required port resource.
230 //
231 Status = Udp6Bind (&Udp6Service->ChildrenList, &Instance->ConfigData);
232 if (EFI_ERROR (Status)) {
233 //
234 // Reset the ip instance if bind fails.
235 //
236 IpIoConfigIp (Instance->IpInfo, NULL);
237 goto ON_EXIT;
238 }
239
240 //
241 // Pre calculate the checksum for the pseudo head, ignore the UDP length first.
242 //
243 IP6_COPY_ADDRESS (&LocalAddr, &Instance->ConfigData.StationAddress);
244 IP6_COPY_ADDRESS (&RemoteAddr, &Instance->ConfigData.RemoteAddress);
245
246 Instance->HeadSum = NetIp6PseudoHeadChecksum (
247 &LocalAddr,
248 &RemoteAddr,
249 EFI_IP_PROTO_UDP,
250 0
251 );
252
253 Instance->Configured = TRUE;
254 }
255 } else {
256 //
257 // UdpConfigData is NULL, reset the instance.
258 //
259 Instance->Configured = FALSE;
260 Instance->IsNoMapping = FALSE;
261
262 //
263 // Reset the Ip instance wrapped in the IpInfo.
264 //
265 IpIoConfigIp (Instance->IpInfo, NULL);
266
267 //
268 // Cancel all the user tokens.
269 //
270 Instance->Udp6Proto.Cancel (&Instance->Udp6Proto, NULL);
271
272 //
273 // Remove the buffered RxData for this instance.
274 //
275 Udp6FlushRcvdDgram (Instance);
276
277 ASSERT (IsListEmpty (&Instance->DeliveredDgramQue));
278 }
279
280ON_EXIT:
281
282 gBS->RestoreTPL (OldTpl);
283
284 return Status;
285}
286
313EFIAPI
315 IN EFI_UDP6_PROTOCOL *This,
316 IN BOOLEAN JoinFlag,
317 IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL
318 )
319{
320 EFI_STATUS Status;
321 UDP6_INSTANCE_DATA *Instance;
323 EFI_TPL OldTpl;
324 EFI_IPv6_ADDRESS *McastIp;
325
326 if ((This == NULL) || (JoinFlag && (MulticastAddress == NULL))) {
327 return EFI_INVALID_PARAMETER;
328 }
329
330 McastIp = NULL;
331
332 if (JoinFlag) {
333 if (!IP6_IS_MULTICAST (MulticastAddress)) {
334 return EFI_INVALID_PARAMETER;
335 }
336
337 McastIp = AllocateCopyPool (sizeof (EFI_IPv6_ADDRESS), MulticastAddress);
338 if (McastIp == NULL) {
339 return EFI_OUT_OF_RESOURCES;
340 }
341 }
342
343 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
344 if (!Instance->Configured) {
345 if (McastIp != NULL) {
346 FreePool (McastIp);
347 }
348
349 return EFI_NOT_STARTED;
350 }
351
352 Ip = Instance->IpInfo->Ip.Ip6;
353
354 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
355
356 //
357 // Invoke the Ip instance the Udp6 instance consumes to do the group operation.
358 //
359 Status = Ip->Groups (Ip, JoinFlag, MulticastAddress);
360
361 if (EFI_ERROR (Status)) {
362 goto ON_EXIT;
363 }
364
365 //
366 // Keep a local copy of the configured multicast IPs because IpIo receives
367 // datagrams from the 0 station address IP instance and then UDP delivers to
368 // the matched instance. This copy of multicast IPs is used to avoid receive
369 // the multicast datagrams destinated to multicast IPs the other instances configured.
370 //
371 if (JoinFlag) {
372 Status = NetMapInsertTail (&Instance->McastIps, (VOID *)McastIp, NULL);
373 } else {
374 Status = NetMapIterate (&Instance->McastIps, Udp6LeaveGroup, MulticastAddress);
375 if ((MulticastAddress != NULL) && (Status == EFI_ABORTED)) {
376 Status = EFI_SUCCESS;
377 }
378 }
379
380ON_EXIT:
381
382 gBS->RestoreTPL (OldTpl);
383
384 if (EFI_ERROR (Status)) {
385 if (McastIp != NULL) {
386 FreePool (McastIp);
387 }
388 }
389
390 return Status;
391}
392
444EFIAPI
446 IN EFI_UDP6_PROTOCOL *This,
448 )
449{
450 EFI_STATUS Status;
451 UDP6_INSTANCE_DATA *Instance;
452 EFI_TPL OldTpl;
453 NET_BUF *Packet;
454 EFI_UDP_HEADER *Udp6Header;
455 EFI_UDP6_CONFIG_DATA *ConfigData;
456 EFI_IPv6_ADDRESS Source;
457 EFI_IPv6_ADDRESS Destination;
459 EFI_UDP6_SESSION_DATA *UdpSessionData;
460 UDP6_SERVICE_DATA *Udp6Service;
461 IP_IO_OVERRIDE Override;
462 UINT16 HeadSum;
463 EFI_IP_ADDRESS IpDestAddr;
464
465 if ((This == NULL) || (Token == NULL)) {
466 return EFI_INVALID_PARAMETER;
467 }
468
469 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
470
471 if (!Instance->Configured) {
472 return EFI_NOT_STARTED;
473 }
474
475 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
476
477 //
478 // Validate the Token, if the token is invalid return the error code.
479 //
480 Status = Udp6ValidateTxToken (Instance, Token);
481 if (EFI_ERROR (Status)) {
482 goto ON_EXIT;
483 }
484
485 if (EFI_ERROR (NetMapIterate (&Instance->TxTokens, Udp6TokenExist, Token)) ||
486 EFI_ERROR (NetMapIterate (&Instance->RxTokens, Udp6TokenExist, Token))
487 )
488 {
489 //
490 // Try to find a duplicate token in the two token maps, if found, return
491 // EFI_ACCESS_DENIED.
492 //
493 Status = EFI_ACCESS_DENIED;
494 goto ON_EXIT;
495 }
496
497 TxData = Token->Packet.TxData;
498
499 //
500 // Create a net buffer to hold the user buffer and the udp header.
501 //
502 Packet = NetbufFromExt (
503 (NET_FRAGMENT *)TxData->FragmentTable,
504 TxData->FragmentCount,
505 UDP6_HEADER_SIZE,
506 0,
508 NULL
509 );
510 if (Packet == NULL) {
511 Status = EFI_OUT_OF_RESOURCES;
512 goto ON_EXIT;
513 }
514
515 //
516 // Store the IpIo in ProtoData.
517 //
518 Udp6Service = Instance->Udp6Service;
519 *((UINTN *)&Packet->ProtoData[0]) = (UINTN)(Udp6Service->IpIo);
520
521 Udp6Header = (EFI_UDP_HEADER *)NetbufAllocSpace (Packet, UDP6_HEADER_SIZE, TRUE);
522 ASSERT (Udp6Header != NULL);
523 if (Udp6Header == NULL) {
524 Status = EFI_OUT_OF_RESOURCES;
525 goto ON_EXIT;
526 }
527
528 ConfigData = &Instance->ConfigData;
529
530 //
531 // Fill the udp header.
532 //
533 Udp6Header->SrcPort = HTONS (ConfigData->StationPort);
534 Udp6Header->DstPort = HTONS (ConfigData->RemotePort);
535 Udp6Header->Length = HTONS ((UINT16)Packet->TotalSize);
536 Udp6Header->Checksum = 0;
537 //
538 // Set the UDP Header in NET_BUF, this UDP header is for IP6 can fast get the
539 // Udp header for pseudoHeadCheckSum.
540 //
541 Packet->Udp = Udp6Header;
542 UdpSessionData = TxData->UdpSessionData;
543
544 if (UdpSessionData != NULL) {
545 //
546 // Set the Destination according to the specified
547 // UdpSessionData.
548 //
549
550 if (UdpSessionData->DestinationPort != 0) {
551 Udp6Header->DstPort = HTONS (UdpSessionData->DestinationPort);
552 }
553
554 IP6_COPY_ADDRESS (&Source, &ConfigData->StationAddress);
555 if (!NetIp6IsUnspecifiedAddr (&UdpSessionData->DestinationAddress)) {
556 IP6_COPY_ADDRESS (&Destination, &UdpSessionData->DestinationAddress);
557 } else {
558 IP6_COPY_ADDRESS (&Destination, &ConfigData->RemoteAddress);
559 }
560
561 //
562 // Calculate the pseudo head checksum using the overridden parameters.
563 //
564 if (!NetIp6IsUnspecifiedAddr (&ConfigData->StationAddress)) {
565 HeadSum = NetIp6PseudoHeadChecksum (
566 &Source,
567 &Destination,
568 EFI_IP_PROTO_UDP,
569 0
570 );
571
572 //
573 // calculate the checksum.
574 //
575 Udp6Header->Checksum = Udp6Checksum (Packet, HeadSum);
576 if (Udp6Header->Checksum == 0) {
577 //
578 // If the calculated checksum is 0, fill the Checksum field with all ones.
579 //
580 Udp6Header->Checksum = 0xffff;
581 }
582 } else {
583 //
584 // Set the checksum is zero if the ConfigData->StationAddress is unspecified
585 // and the Ipv6 will fill the correct value of this checksum.
586 //
587 Udp6Header->Checksum = 0;
588 }
589 } else {
590 //
591 // UdpSessionData is NULL, use the address and port information previously configured.
592 //
593 IP6_COPY_ADDRESS (&Destination, &ConfigData->RemoteAddress);
594
595 HeadSum = Instance->HeadSum;
596 //
597 // calculate the checksum.
598 //
599 Udp6Header->Checksum = Udp6Checksum (Packet, HeadSum);
600 if (Udp6Header->Checksum == 0) {
601 //
602 // If the calculated checksum is 0, fill the Checksum field with all ones.
603 //
604 Udp6Header->Checksum = 0xffff;
605 }
606 }
607
608 //
609 // Fill the IpIo Override data.
610 //
611 Override.Ip6OverrideData.Protocol = EFI_IP_PROTO_UDP;
612 Override.Ip6OverrideData.HopLimit = ConfigData->HopLimit;
613 Override.Ip6OverrideData.FlowLabel = 0;
614
615 //
616 // Save the token into the TxToken map.
617 //
618 Status = NetMapInsertTail (&Instance->TxTokens, Token, Packet);
619 if (EFI_ERROR (Status)) {
620 goto FREE_PACKET;
621 }
622
623 //
624 // Send out this datagram through IpIo.
625 //
626 if (UdpSessionData != NULL) {
627 IP6_COPY_ADDRESS (&(IpDestAddr.v6), &Destination);
628 } else {
629 ZeroMem (&IpDestAddr.v6, sizeof (EFI_IPv6_ADDRESS));
630 }
631
632 Status = IpIoSend (
633 Udp6Service->IpIo,
634 Packet,
635 Instance->IpInfo,
636 Instance,
637 Token,
638 &IpDestAddr,
639 &Override
640 );
641 if (EFI_ERROR (Status)) {
642 //
643 // Remove this token from the TxTokens.
644 //
645 Udp6RemoveToken (&Instance->TxTokens, Token);
646 }
647
648FREE_PACKET:
649
650 NetbufFree (Packet);
651
652ON_EXIT:
653
654 gBS->RestoreTPL (OldTpl);
655
656 return Status;
657}
658
687EFIAPI
689 IN EFI_UDP6_PROTOCOL *This,
691 )
692{
693 EFI_STATUS Status;
694 UDP6_INSTANCE_DATA *Instance;
695 EFI_TPL OldTpl;
696
697 if ((This == NULL) || (Token == NULL) || (Token->Event == NULL)) {
698 return EFI_INVALID_PARAMETER;
699 }
700
701 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
702
703 if (!Instance->Configured) {
704 return EFI_NOT_STARTED;
705 }
706
707 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
708
709 if (EFI_ERROR (NetMapIterate (&Instance->RxTokens, Udp6TokenExist, Token)) ||
710 EFI_ERROR (NetMapIterate (&Instance->TxTokens, Udp6TokenExist, Token))
711 )
712 {
713 //
714 // Return EFI_ACCESS_DENIED if the specified token is already in the TxTokens or
715 // RxTokens map.
716 //
717 Status = EFI_ACCESS_DENIED;
718 goto ON_EXIT;
719 }
720
721 Token->Packet.RxData = NULL;
722
723 //
724 // Save the token into the RxTokens map.
725 //
726 Status = NetMapInsertTail (&Instance->RxTokens, Token, NULL);
727 if (EFI_ERROR (Status)) {
728 Status = EFI_NOT_READY;
729 goto ON_EXIT;
730 }
731
732 //
733 // If there is an icmp error, report it.
734 //
735 Udp6ReportIcmpError (Instance);
736
737 //
738 // Try to delivered the received datagrams.
739 //
740 Udp6InstanceDeliverDgram (Instance);
741
742 //
743 // Dispatch the DPC queued by the NotifyFunction of Token->Event.
744 //
745 DispatchDpc ();
746
747ON_EXIT:
748
749 gBS->RestoreTPL (OldTpl);
750
751 return Status;
752}
753
778EFIAPI
780 IN EFI_UDP6_PROTOCOL *This,
781 IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL
782 )
783{
784 EFI_STATUS Status;
785 UDP6_INSTANCE_DATA *Instance;
786 EFI_TPL OldTpl;
787
788 if (This == NULL) {
789 return EFI_INVALID_PARAMETER;
790 }
791
792 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
793
794 if (!Instance->Configured) {
795 return EFI_NOT_STARTED;
796 }
797
798 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
799
800 //
801 // Cancel the tokens specified by Token for this instance.
802 //
803 Status = Udp6InstanceCancelToken (Instance, Token);
804
805 //
806 // Dispatch the DPC queued by the NotifyFunction of the canceled token's events.
807 //
808 DispatchDpc ();
809
810 gBS->RestoreTPL (OldTpl);
811
812 return Status;
813}
814
829EFIAPI
832 )
833{
834 UDP6_INSTANCE_DATA *Instance;
836
837 if (This == NULL) {
838 return EFI_INVALID_PARAMETER;
839 }
840
841 Instance = UDP6_INSTANCE_DATA_FROM_THIS (This);
842 Ip = Instance->IpInfo->Ip.Ip6;
843
844 //
845 // Invode the Ip instance consumed by the udp instance to do the poll operation.
846 //
847 return Ip->Poll (Ip);
848}
UINT64 UINTN
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
Definition: LinkedList.c:403
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_STATUS EFIAPI DispatchDpc(VOID)
Definition: DpcLib.c:86
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID *EFIAPI AllocateCopyPool(IN UINTN AllocationSize, IN CONST VOID *Buffer)
EFI_STATUS EFIAPI IpIoSend(IN OUT IP_IO *IpIo, IN OUT NET_BUF *Pkt, IN IP_IO_IP_INFO *Sender OPTIONAL, IN VOID *Context OPTIONAL, IN VOID *NotifyData OPTIONAL, IN EFI_IP_ADDRESS *Dest OPTIONAL, IN IP_IO_OVERRIDE *OverrideData OPTIONAL)
Definition: DxeIpIoLib.c:1578
EFI_STATUS EFIAPI IpIoConfigIp(IN OUT IP_IO_IP_INFO *IpInfo, IN OUT VOID *IpConfigData OPTIONAL)
Definition: DxeIpIoLib.c:1806
#define NULL
Definition: Base.h:319
#define TRUE
Definition: Base.h:301
#define FALSE
Definition: Base.h:307
#define IN
Definition: Base.h:279
#define OUT
Definition: Base.h:284
VOID EFIAPI NetbufFree(IN NET_BUF *Nbuf)
Definition: NetBuffer.c:195
UINT16 EFIAPI NetIp6PseudoHeadChecksum(IN EFI_IPv6_ADDRESS *Src, IN EFI_IPv6_ADDRESS *Dst, IN UINT8 NextHeader, IN UINT32 Len)
Definition: NetBuffer.c:1777
BOOLEAN EFIAPI NetIp6IsValidUnicast(IN EFI_IPv6_ADDRESS *Ip6)
Definition: DxeNetLib.c:725
NET_BUF *EFIAPI NetbufFromExt(IN NET_FRAGMENT *ExtFragment, IN UINT32 ExtNum, IN UINT32 HeadSpace, IN UINT32 HeadLen, IN NET_VECTOR_EXT_FREE ExtFree, IN VOID *Arg OPTIONAL)
Definition: NetBuffer.c:693
BOOLEAN EFIAPI NetIp6IsUnspecifiedAddr(IN EFI_IPv6_ADDRESS *Ip6)
Definition: DxeNetLib.c:766
UINT8 *EFIAPI NetbufAllocSpace(IN OUT NET_BUF *Nbuf, IN UINT32 Len, IN BOOLEAN FromHead)
Definition: NetBuffer.c:1015
EFI_STATUS EFIAPI NetMapInsertTail(IN OUT NET_MAP *Map, IN VOID *Key, IN VOID *Value OPTIONAL)
Definition: DxeNetLib.c:1556
EFI_STATUS EFIAPI NetMapIterate(IN NET_MAP *Map, IN NET_MAP_CALLBACK CallBack, IN VOID *Arg OPTIONAL)
Definition: DxeNetLib.c:1800
EFI_STATUS EFIAPI Udp6LeaveGroup(IN NET_MAP *Map, IN NET_MAP_ITEM *Item, IN VOID *Arg OPTIONAL)
Definition: Udp6Impl.c:1074
EFI_STATUS Udp6RemoveToken(IN NET_MAP *TokenMap, IN EFI_UDP6_COMPLETION_TOKEN *Token)
Definition: Udp6Impl.c:942
VOID Udp6InstanceDeliverDgram(IN UDP6_INSTANCE_DATA *Instance)
Definition: Udp6Impl.c:1487
UINT16 Udp6Checksum(IN NET_BUF *Packet, IN UINT16 HeadSum)
Definition: Udp6Impl.c:916
VOID Udp6FlushRcvdDgram(IN UDP6_INSTANCE_DATA *Instance)
Definition: Udp6Impl.c:1180
EFI_STATUS Udp6InstanceCancelToken(IN UDP6_INSTANCE_DATA *Instance, IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL)
Definition: Udp6Impl.c:1212
EFI_STATUS Udp6ValidateTxToken(IN UDP6_INSTANCE_DATA *Instance, IN EFI_UDP6_COMPLETION_TOKEN *TxToken)
Definition: Udp6Impl.c:776
EFI_STATUS Udp6Bind(IN LIST_ENTRY *InstanceList, IN EFI_UDP6_CONFIG_DATA *ConfigData)
Definition: Udp6Impl.c:587
VOID EFIAPI Udp6NetVectorExtFree(IN VOID *Context)
Definition: Udp6Impl.c:1949
VOID Udp6ReportIcmpError(IN UDP6_INSTANCE_DATA *Instance)
Definition: Udp6Impl.c:1906
BOOLEAN Udp6IsReconfigurable(IN EFI_UDP6_CONFIG_DATA *OldConfigData, IN EFI_UDP6_CONFIG_DATA *NewConfigData)
Definition: Udp6Impl.c:662
VOID Udp6BuildIp6ConfigData(IN EFI_UDP6_CONFIG_DATA *Udp6ConfigData, IN OUT EFI_IP6_CONFIG_DATA *Ip6ConfigData)
Definition: Udp6Impl.c:726
EFI_STATUS EFIAPI Udp6TokenExist(IN NET_MAP *Map, IN NET_MAP_ITEM *Item, IN VOID *Context)
Definition: Udp6Impl.c:881
EFI_STATUS EFIAPI Udp6Receive(IN EFI_UDP6_PROTOCOL *This, IN EFI_UDP6_COMPLETION_TOKEN *Token)
Definition: Udp6Main.c:688
EFI_STATUS EFIAPI Udp6Configure(IN EFI_UDP6_PROTOCOL *This, IN EFI_UDP6_CONFIG_DATA *UdpConfigData OPTIONAL)
Definition: Udp6Main.c:131
EFI_STATUS EFIAPI Udp6Cancel(IN EFI_UDP6_PROTOCOL *This, IN EFI_UDP6_COMPLETION_TOKEN *Token OPTIONAL)
Definition: Udp6Main.c:779
EFI_STATUS EFIAPI Udp6Poll(IN EFI_UDP6_PROTOCOL *This)
Definition: Udp6Main.c:830
EFI_STATUS EFIAPI Udp6GetModeData(IN EFI_UDP6_PROTOCOL *This, OUT EFI_UDP6_CONFIG_DATA *Udp6ConfigData OPTIONAL, OUT EFI_IP6_MODE_DATA *Ip6ModeData OPTIONAL, OUT EFI_MANAGED_NETWORK_CONFIG_DATA *MnpConfigData OPTIONAL, OUT EFI_SIMPLE_NETWORK_MODE *SnpModeData OPTIONAL)
Definition: Udp6Main.c:49
EFI_STATUS EFIAPI Udp6Groups(IN EFI_UDP6_PROTOCOL *This, IN BOOLEAN JoinFlag, IN EFI_IPv6_ADDRESS *MulticastAddress OPTIONAL)
Definition: Udp6Main.c:314
EFI_STATUS EFIAPI Udp6Transmit(IN EFI_UDP6_PROTOCOL *This, IN EFI_UDP6_COMPLETION_TOKEN *Token)
Definition: Udp6Main.c:445
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
UINTN EFI_TPL
Definition: UefiBaseType.h:41
#define EFI_SUCCESS
Definition: UefiBaseType.h:112
EFI_BOOT_SERVICES * gBS
UINT8 HopLimit
Hop-Limit override.
Definition: Ip6.h:466
UINT32 FlowLabel
Flow-Label override.
Definition: Ip6.h:467
UINT8 Protocol
Protocol type override.
Definition: Ip6.h:465
EFI_IPv6_ADDRESS StationAddress
Definition: Ip6.h:188
UINT16 StationPort
Definition: Udp6.h:168
UINT16 RemotePort
Definition: Udp6.h:182
EFI_IPv6_ADDRESS RemoteAddress
Definition: Udp6.h:175
UINT32 ReceiveTimeout
Definition: Udp6.h:144
UINT32 TransmitTimeout
Definition: Udp6.h:149
UINT8 TrafficClass
Definition: Udp6.h:135
EFI_IPv6_ADDRESS StationAddress
Definition: Udp6.h:161
EFI_IPv6_ADDRESS DestinationAddress
Definition: Udp6.h:110
UINT16 DestinationPort
Definition: Udp6.h:115
EFI_UDP6_FRAGMENT_DATA FragmentTable[1]
Definition: Udp6.h:207
UINT32 FragmentCount
Definition: Udp6.h:203
EFI_UDP6_SESSION_DATA * UdpSessionData
Definition: Udp6.h:195