TianoCore EDK2 master
Loading...
Searching...
No Matches
Dhcp6Driver.c
Go to the documentation of this file.
1
11#include "Dhcp6Impl.h"
12
13EFI_DRIVER_BINDING_PROTOCOL gDhcp6DriverBinding = {
17 0xa,
18 NULL,
19 NULL
20};
21
22EFI_SERVICE_BINDING_PROTOCOL gDhcp6ServiceBindingTemplate = {
25};
26
39EFIAPI
41 IN UDP_IO *UdpIo,
42 IN VOID *Context
43 )
44{
47
48 Udp6 = UdpIo->Protocol.Udp6;
49 Config = &(UdpIo->Config.Udp6);
50
51 ZeroMem (Config, sizeof (EFI_UDP6_CONFIG_DATA));
52
53 //
54 // Set Udp6 configure data for the Dhcp6 instance.
55 //
56 Config->AcceptPromiscuous = FALSE;
57 Config->AcceptAnyPort = FALSE;
58 Config->AllowDuplicatePort = FALSE;
59 Config->TrafficClass = 0;
60 Config->HopLimit = 128;
61 Config->ReceiveTimeout = 0;
62 Config->TransmitTimeout = 0;
63
64 //
65 // Configure an endpoint of client(0, 546), server(0, 0), the addresses
66 // will be overridden later. Note that we MUST not limit RemotePort.
67 // More details, refer to RFC 3315 section 5.2.
68 //
69 Config->StationPort = DHCP6_PORT_CLIENT;
70 Config->RemotePort = 0;
71
72 return Udp6->Configure (Udp6, Config);
73}
74
83VOID
85 IN OUT DHCP6_SERVICE *Service
86 )
87{
88 //
89 // All children instances should have been already destroyed here.
90 //
91 ASSERT (Service->NumOfChild == 0);
92
93 if (Service->ClientId != NULL) {
94 FreePool (Service->ClientId);
95 }
96
97 if (Service->UdpIo != NULL) {
98 UdpIoFreeIo (Service->UdpIo);
99 }
100
101 FreePool (Service);
102}
103
119 IN EFI_HANDLE Controller,
120 IN EFI_HANDLE ImageHandle,
121 OUT DHCP6_SERVICE **Service
122 )
123{
124 DHCP6_SERVICE *Dhcp6Srv;
125 EFI_STATUS Status;
126 UINT32 Random;
127
128 Status = PseudoRandomU32 (&Random);
129 if (EFI_ERROR (Status)) {
130 DEBUG ((DEBUG_ERROR, "%a failed to generate random number: %r\n", __func__, Status));
131 return Status;
132 }
133
134 *Service = NULL;
135 Dhcp6Srv = AllocateZeroPool (sizeof (DHCP6_SERVICE));
136
137 if (Dhcp6Srv == NULL) {
138 return EFI_OUT_OF_RESOURCES;
139 }
140
141 //
142 // Open the SNP protocol to get mode data later.
143 //
144 Dhcp6Srv->Snp = NULL;
145 NetLibGetSnpHandle (Controller, &Dhcp6Srv->Snp);
146 if (Dhcp6Srv->Snp == NULL) {
147 FreePool (Dhcp6Srv);
148 return EFI_DEVICE_ERROR;
149 }
150
151 //
152 // Initialize the fields of the new Dhcp6 service.
153 //
154 Dhcp6Srv->Signature = DHCP6_SERVICE_SIGNATURE;
155 Dhcp6Srv->Controller = Controller;
156 Dhcp6Srv->Image = ImageHandle;
157 Dhcp6Srv->Xid = (0xffffff & Random);
158
159 CopyMem (
160 &Dhcp6Srv->ServiceBinding,
161 &gDhcp6ServiceBindingTemplate,
163 );
164
165 //
166 // Locate Ip6->Ip6Config and store it for get IP6 Duplicate Address Detection transmits.
167 //
168 Status = gBS->HandleProtocol (
169 Controller,
170 &gEfiIp6ConfigProtocolGuid,
171 (VOID **)&Dhcp6Srv->Ip6Cfg
172 );
173 if (EFI_ERROR (Status)) {
174 FreePool (Dhcp6Srv);
175 return Status;
176 }
177
178 //
179 // Generate client Duid: If SMBIOS system UUID is located, generate DUID in DUID-UUID format.
180 // Otherwise, in DUID-LLT format.
181 //
182 Dhcp6Srv->ClientId = Dhcp6GenerateClientId (Dhcp6Srv->Snp->Mode);
183
184 if (Dhcp6Srv->ClientId == NULL) {
185 FreePool (Dhcp6Srv);
186 return EFI_DEVICE_ERROR;
187 }
188
189 //
190 // Create an Udp6Io for stateful transmit/receive of each Dhcp6 instance.
191 //
192 Dhcp6Srv->UdpIo = UdpIoCreateIo (
193 Controller,
194 ImageHandle,
196 UDP_IO_UDP6_VERSION,
197 NULL
198 );
199
200 if (Dhcp6Srv->UdpIo == NULL) {
201 FreePool (Dhcp6Srv->ClientId);
202 FreePool (Dhcp6Srv);
203 return EFI_DEVICE_ERROR;
204 }
205
206 InitializeListHead (&Dhcp6Srv->Child);
207
208 *Service = Dhcp6Srv;
209
210 return EFI_SUCCESS;
211}
212
219VOID
221 IN OUT DHCP6_INSTANCE *Instance
222 )
223{
224 //
225 // Clean up the retry list first.
226 //
227 Dhcp6CleanupRetry (Instance, DHCP6_PACKET_ALL);
228 gBS->CloseEvent (Instance->Timer);
229
230 //
231 // Clean up the current configure data.
232 //
233 if (Instance->Config != NULL) {
234 Dhcp6CleanupConfigData (Instance->Config);
235 FreePool (Instance->Config);
236 }
237
238 //
239 // Clean up the current Ia.
240 //
241 if (Instance->IaCb.Ia != NULL) {
242 if (Instance->IaCb.Ia->ReplyPacket != NULL) {
243 FreePool (Instance->IaCb.Ia->ReplyPacket);
244 }
245
246 FreePool (Instance->IaCb.Ia);
247 }
248
249 if (Instance->Unicast != NULL) {
250 FreePool (Instance->Unicast);
251 }
252
253 if (Instance->AdSelect != NULL) {
254 FreePool (Instance->AdSelect);
255 }
256
257 FreePool (Instance);
258}
259
272 IN DHCP6_SERVICE *Service,
273 OUT DHCP6_INSTANCE **Instance
274 )
275{
276 EFI_STATUS Status;
277 DHCP6_INSTANCE *Dhcp6Ins;
278
279 *Instance = NULL;
280 Dhcp6Ins = AllocateZeroPool (sizeof (DHCP6_INSTANCE));
281
282 if (Dhcp6Ins == NULL) {
283 return EFI_OUT_OF_RESOURCES;
284 }
285
286 //
287 // Initialize the fields of the new Dhcp6 instance.
288 //
289 Dhcp6Ins->Signature = DHCP6_INSTANCE_SIGNATURE;
290 Dhcp6Ins->UdpSts = EFI_ALREADY_STARTED;
291 Dhcp6Ins->Service = Service;
292 Dhcp6Ins->InDestroy = FALSE;
293 Dhcp6Ins->MediaPresent = TRUE;
294
295 CopyMem (
296 &Dhcp6Ins->Dhcp6,
297 &gDhcp6ProtocolTemplate,
298 sizeof (EFI_DHCP6_PROTOCOL)
299 );
300
301 InitializeListHead (&Dhcp6Ins->TxList);
302 InitializeListHead (&Dhcp6Ins->InfList);
303
304 //
305 // There is a timer for each Dhcp6 instance, which is used to track the
306 // lease time of Ia and the retransmission time of all sent packets.
307 //
308 Status = gBS->CreateEvent (
309 EVT_NOTIFY_SIGNAL | EVT_TIMER,
310 TPL_CALLBACK,
312 Dhcp6Ins,
313 &Dhcp6Ins->Timer
314 );
315
316 if (EFI_ERROR (Status)) {
317 FreePool (Dhcp6Ins);
318 return Status;
319 }
320
321 *Instance = Dhcp6Ins;
322
323 return EFI_SUCCESS;
324}
325
337EFIAPI
339 IN LIST_ENTRY *Entry,
340 IN VOID *Context
341 )
342{
343 DHCP6_INSTANCE *Instance;
344 EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding;
345
346 if ((Entry == NULL) || (Context == NULL)) {
347 return EFI_INVALID_PARAMETER;
348 }
349
350 Instance = NET_LIST_USER_STRUCT_S (Entry, DHCP6_INSTANCE, Link, DHCP6_INSTANCE_SIGNATURE);
351 ServiceBinding = (EFI_SERVICE_BINDING_PROTOCOL *)Context;
352
353 return ServiceBinding->DestroyChild (ServiceBinding, Instance->Handle);
354}
355
367EFIAPI
369 IN EFI_HANDLE ImageHandle,
370 IN EFI_SYSTEM_TABLE *SystemTable
371 )
372{
374 ImageHandle,
375 SystemTable,
376 &gDhcp6DriverBinding,
377 ImageHandle,
378 &gDhcp6ComponentName,
379 &gDhcp6ComponentName2
380 );
381}
382
401EFIAPI
404 IN EFI_HANDLE ControllerHandle,
405 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
406 )
407{
408 return gBS->OpenProtocol (
409 ControllerHandle,
410 &gEfiUdp6ServiceBindingProtocolGuid,
411 NULL,
412 This->DriverBindingHandle,
413 ControllerHandle,
414 EFI_OPEN_PROTOCOL_TEST_PROTOCOL
415 );
416}
417
437EFIAPI
440 IN EFI_HANDLE ControllerHandle,
441 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
442 )
443{
444 EFI_STATUS Status;
445 DHCP6_SERVICE *Service;
446
447 //
448 // Check the Dhcp6 service whether already started.
449 //
450 Status = gBS->OpenProtocol (
451 ControllerHandle,
452 &gEfiDhcp6ServiceBindingProtocolGuid,
453 NULL,
454 This->DriverBindingHandle,
455 ControllerHandle,
456 EFI_OPEN_PROTOCOL_TEST_PROTOCOL
457 );
458
459 if (!EFI_ERROR (Status)) {
460 return EFI_ALREADY_STARTED;
461 }
462
463 //
464 // Create and initialize the Dhcp6 service.
465 //
466 Status = Dhcp6CreateService (
467 ControllerHandle,
468 This->DriverBindingHandle,
469 &Service
470 );
471
472 if (EFI_ERROR (Status)) {
473 return Status;
474 }
475
476 ASSERT (Service != NULL);
477
478 Status = gBS->InstallMultipleProtocolInterfaces (
479 &ControllerHandle,
480 &gEfiDhcp6ServiceBindingProtocolGuid,
481 &Service->ServiceBinding,
482 NULL
483 );
484
485 if (EFI_ERROR (Status)) {
486 Dhcp6DestroyService (Service);
487 return Status;
488 }
489
490 return EFI_SUCCESS;
491}
492
513EFIAPI
516 IN EFI_HANDLE ControllerHandle,
517 IN UINTN NumberOfChildren,
518 IN EFI_HANDLE *ChildHandleBuffer OPTIONAL
519 )
520{
521 EFI_STATUS Status;
522 EFI_HANDLE NicHandle;
523 EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding;
524 DHCP6_SERVICE *Service;
525 LIST_ENTRY *List;
526 UINTN ListLength;
527
528 //
529 // Find and check the Nic handle by the controller handle.
530 //
531 NicHandle = NetLibGetNicHandle (ControllerHandle, &gEfiUdp6ProtocolGuid);
532
533 if (NicHandle == NULL) {
534 return EFI_SUCCESS;
535 }
536
537 Status = gBS->OpenProtocol (
538 NicHandle,
539 &gEfiDhcp6ServiceBindingProtocolGuid,
540 (VOID **)&ServiceBinding,
541 This->DriverBindingHandle,
542 NicHandle,
543 EFI_OPEN_PROTOCOL_GET_PROTOCOL
544 );
545
546 if (EFI_ERROR (Status)) {
547 return Status;
548 }
549
550 Service = DHCP6_SERVICE_FROM_THIS (ServiceBinding);
551 if (!IsListEmpty (&Service->Child)) {
552 //
553 // Destroy all the children instances before destroy the service.
554 //
555 List = &Service->Child;
556 Status = NetDestroyLinkList (
557 List,
559 ServiceBinding,
560 &ListLength
561 );
562 if (EFI_ERROR (Status) || (ListLength != 0)) {
563 Status = EFI_DEVICE_ERROR;
564 }
565 }
566
567 if ((NumberOfChildren == 0) && !IsListEmpty (&Service->Child)) {
568 Status = EFI_DEVICE_ERROR;
569 }
570
571 if ((NumberOfChildren == 0) && IsListEmpty (&Service->Child)) {
572 //
573 // Destroy the service itself if no child instance left.
574 //
575 Status = gBS->UninstallProtocolInterface (
576 NicHandle,
577 &gEfiDhcp6ServiceBindingProtocolGuid,
578 ServiceBinding
579 );
580 if (EFI_ERROR (Status)) {
581 goto ON_EXIT;
582 }
583
584 Dhcp6DestroyService (Service);
585 Status = EFI_SUCCESS;
586 }
587
588ON_EXIT:
589 return Status;
590}
591
610EFIAPI
613 IN OUT EFI_HANDLE *ChildHandle
614 )
615{
616 EFI_STATUS Status;
617 EFI_TPL OldTpl;
618 DHCP6_SERVICE *Service;
619 DHCP6_INSTANCE *Instance;
620 VOID *Udp6;
621
622 if ((This == NULL) || (ChildHandle == NULL)) {
623 return EFI_INVALID_PARAMETER;
624 }
625
626 Service = DHCP6_SERVICE_FROM_THIS (This);
627
628 Status = Dhcp6CreateInstance (Service, &Instance);
629
630 if (EFI_ERROR (Status)) {
631 return Status;
632 }
633
634 ASSERT (Instance != NULL);
635
636 //
637 // Start the timer when the instance is ready to use.
638 //
639 Status = gBS->SetTimer (
640 Instance->Timer,
642 TICKS_PER_SECOND
643 );
644
645 if (EFI_ERROR (Status)) {
646 goto ON_ERROR;
647 }
648
649 //
650 // Install the DHCP6 protocol onto ChildHandle.
651 //
652 Status = gBS->InstallMultipleProtocolInterfaces (
653 ChildHandle,
654 &gEfiDhcp6ProtocolGuid,
655 &Instance->Dhcp6,
656 NULL
657 );
658
659 if (EFI_ERROR (Status)) {
660 goto ON_ERROR;
661 }
662
663 Instance->Handle = *ChildHandle;
664
665 //
666 // Open the UDP6 protocol BY_CHILD.
667 //
668 Status = gBS->OpenProtocol (
669 Service->UdpIo->UdpHandle,
670 &gEfiUdp6ProtocolGuid,
671 (VOID **)&Udp6,
672 gDhcp6DriverBinding.DriverBindingHandle,
673 Instance->Handle,
674 EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER
675 );
676
677 if (EFI_ERROR (Status)) {
678 gBS->UninstallMultipleProtocolInterfaces (
679 Instance->Handle,
680 &gEfiDhcp6ProtocolGuid,
681 &Instance->Dhcp6,
682 NULL
683 );
684 goto ON_ERROR;
685 }
686
687 //
688 // Add into the children list of its parent service.
689 //
690 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
691
692 InsertTailList (&Service->Child, &Instance->Link);
693 Service->NumOfChild++;
694
695 gBS->RestoreTPL (OldTpl);
696 return EFI_SUCCESS;
697
698ON_ERROR:
699
700 Dhcp6DestroyInstance (Instance);
701 return Status;
702}
703
723EFIAPI
726 IN EFI_HANDLE ChildHandle
727 )
728{
729 EFI_STATUS Status;
730 EFI_TPL OldTpl;
731 EFI_DHCP6_PROTOCOL *Dhcp6;
732 DHCP6_SERVICE *Service;
733 DHCP6_INSTANCE *Instance;
734
735 if ((This == NULL) || (ChildHandle == NULL)) {
736 return EFI_INVALID_PARAMETER;
737 }
738
739 //
740 // Retrieve the private context data structures
741 //
742 Status = gBS->OpenProtocol (
743 ChildHandle,
744 &gEfiDhcp6ProtocolGuid,
745 (VOID **)&Dhcp6,
746 gDhcp6DriverBinding.DriverBindingHandle,
747 ChildHandle,
748 EFI_OPEN_PROTOCOL_GET_PROTOCOL
749 );
750
751 if (EFI_ERROR (Status)) {
752 return EFI_UNSUPPORTED;
753 }
754
755 Instance = DHCP6_INSTANCE_FROM_THIS (Dhcp6);
756 Service = DHCP6_SERVICE_FROM_THIS (This);
757
758 if (Instance->Service != Service) {
759 return EFI_INVALID_PARAMETER;
760 }
761
762 if (Instance->InDestroy) {
763 return EFI_SUCCESS;
764 }
765
766 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
767
768 Instance->InDestroy = TRUE;
769
770 Status = gBS->CloseProtocol (
771 Service->UdpIo->UdpHandle,
772 &gEfiUdp6ProtocolGuid,
773 gDhcp6DriverBinding.DriverBindingHandle,
774 ChildHandle
775 );
776
777 if (EFI_ERROR (Status)) {
778 Instance->InDestroy = FALSE;
779 gBS->RestoreTPL (OldTpl);
780 return Status;
781 }
782
783 //
784 // Uninstall the MTFTP6 protocol first to enable a top down destruction.
785 //
786 gBS->RestoreTPL (OldTpl);
787 Status = gBS->UninstallProtocolInterface (
788 ChildHandle,
789 &gEfiDhcp6ProtocolGuid,
790 Dhcp6
791 );
792 OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
793 if (EFI_ERROR (Status)) {
794 Instance->InDestroy = FALSE;
795 gBS->RestoreTPL (OldTpl);
796 return Status;
797 }
798
799 //
800 // Remove it from the children list of its parent service.
801 //
802 RemoveEntryList (&Instance->Link);
803 Service->NumOfChild--;
804
805 gBS->RestoreTPL (OldTpl);
806
807 Dhcp6DestroyInstance (Instance);
808 return EFI_SUCCESS;
809}
UINT64 UINTN
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
Definition: LinkedList.c:403
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
Definition: LinkedList.c:590
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
Definition: LinkedList.c:182
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
Definition: LinkedList.c:259
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
VOID Dhcp6DestroyService(IN OUT DHCP6_SERVICE *Service)
Definition: Dhcp6Driver.c:84
EFI_STATUS EFIAPI Dhcp6ServiceBindingCreateChild(IN EFI_SERVICE_BINDING_PROTOCOL *This, IN OUT EFI_HANDLE *ChildHandle)
Definition: Dhcp6Driver.c:611
EFI_STATUS EFIAPI Dhcp6DestroyChildEntry(IN LIST_ENTRY *Entry, IN VOID *Context)
Definition: Dhcp6Driver.c:338
EFI_STATUS Dhcp6CreateService(IN EFI_HANDLE Controller, IN EFI_HANDLE ImageHandle, OUT DHCP6_SERVICE **Service)
Definition: Dhcp6Driver.c:118
EFI_STATUS EFIAPI Dhcp6DriverBindingStop(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL)
Definition: Dhcp6Driver.c:514
EFI_STATUS EFIAPI Dhcp6DriverEntryPoint(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
Definition: Dhcp6Driver.c:368
VOID Dhcp6DestroyInstance(IN OUT DHCP6_INSTANCE *Instance)
Definition: Dhcp6Driver.c:220
EFI_STATUS EFIAPI Dhcp6ServiceBindingDestroyChild(IN EFI_SERVICE_BINDING_PROTOCOL *This, IN EFI_HANDLE ChildHandle)
Definition: Dhcp6Driver.c:724
EFI_STATUS EFIAPI Dhcp6DriverBindingSupported(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
Definition: Dhcp6Driver.c:402
EFI_STATUS EFIAPI Dhcp6DriverBindingStart(IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL)
Definition: Dhcp6Driver.c:438
EFI_STATUS EFIAPI Dhcp6ConfigureUdpIo(IN UDP_IO *UdpIo, IN VOID *Context)
Definition: Dhcp6Driver.c:40
EFI_STATUS Dhcp6CreateInstance(IN DHCP6_SERVICE *Service, OUT DHCP6_INSTANCE **Instance)
Definition: Dhcp6Driver.c:271
VOID Dhcp6CleanupRetry(IN DHCP6_INSTANCE *Instance, IN UINT32 Scope)
Definition: Dhcp6Io.c:292
VOID EFIAPI Dhcp6OnTimerTick(IN EFI_EVENT Event, IN VOID *Context)
Definition: Dhcp6Io.c:3194
EFI_DHCP6_DUID * Dhcp6GenerateClientId(IN EFI_SIMPLE_NETWORK_MODE *Mode)
Definition: Dhcp6Utility.c:33
VOID Dhcp6CleanupConfigData(IN OUT EFI_DHCP6_CONFIG_DATA *CfgData)
Definition: Dhcp6Utility.c:251
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
VOID EFIAPI FreePool(IN VOID *Buffer)
#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
#define DEBUG(Expression)
Definition: DebugLib.h:434
EFI_HANDLE EFIAPI NetLibGetSnpHandle(IN EFI_HANDLE ServiceHandle, OUT EFI_SIMPLE_NETWORK_PROTOCOL **Snp OPTIONAL)
Definition: DxeNetLib.c:2073
EFI_STATUS EFIAPI PseudoRandomU32(OUT UINT32 *Output)
Definition: DxeNetLib.c:1011
EFI_HANDLE EFIAPI NetLibGetNicHandle(IN EFI_HANDLE Controller, IN EFI_GUID *ProtocolGuid)
Definition: DxeNetLib.c:3019
EFI_STATUS EFIAPI NetDestroyLinkList(IN LIST_ENTRY *List, IN NET_DESTROY_LINK_LIST_CALLBACK CallBack, IN VOID *Context OPTIONAL, OUT UINTN *ListLength OPTIONAL)
Definition: DxeNetLib.c:1236
EFI_STATUS EFIAPI UdpIoFreeIo(IN UDP_IO *UdpIo)
Definition: DxeUdpIoLib.c:809
UDP_IO *EFIAPI UdpIoCreateIo(IN EFI_HANDLE Controller, IN EFI_HANDLE ImageHandle, IN UDP_IO_CONFIG Configure, IN UINT8 UdpVersion, IN VOID *Context)
Definition: DxeUdpIoLib.c:602
RETURN_STATUS EFI_STATUS
Definition: UefiBaseType.h:29
UINTN EFI_TPL
Definition: UefiBaseType.h:41
VOID * EFI_HANDLE
Definition: UefiBaseType.h:33
#define EFI_SUCCESS
Definition: UefiBaseType.h:112
EFI_BOOT_SERVICES * gBS
EFI_STATUS EFIAPI EfiLibInstallDriverBindingComponentName2(IN CONST EFI_HANDLE ImageHandle, IN CONST EFI_SYSTEM_TABLE *SystemTable, IN EFI_DRIVER_BINDING_PROTOCOL *DriverBinding, IN EFI_HANDLE DriverBindingHandle, IN CONST EFI_COMPONENT_NAME_PROTOCOL *ComponentName OPTIONAL, IN CONST EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2 OPTIONAL)
@ TimerPeriodic
Definition: UefiSpec.h:535
EFI_SIMPLE_NETWORK_MODE * Mode
UINT16 StationPort
Definition: Udp6.h:168
BOOLEAN AcceptAnyPort
Definition: Udp6.h:126
UINT16 RemotePort
Definition: Udp6.h:182
BOOLEAN AcceptPromiscuous
Definition: Udp6.h:122
BOOLEAN AllowDuplicatePort
Definition: Udp6.h:131
UINT32 ReceiveTimeout
Definition: Udp6.h:144
UINT32 TransmitTimeout
Definition: Udp6.h:149
UINT8 TrafficClass
Definition: Udp6.h:135