Clean codes per ECC.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5384 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -36,30 +36,22 @@ EFI_SERVICE_BINDING_PROTOCOL mDhcp4ServiceBindingTemplete = {
|
||||
Dhcp4ServiceBindingDestroyChild
|
||||
};
|
||||
|
||||
/**
|
||||
Entry point of the DHCP driver to install various protocols.
|
||||
|
||||
@param ImageHandle The image handle of the driver.
|
||||
@param SystemTable The system table.
|
||||
|
||||
@retval EFI_SUCCES if the driver binding and component name protocols are successfully
|
||||
@retval Others Failed to install the protocols.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4DriverEntryPoint (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Entry point of the DHCP driver to install various protocols.
|
||||
|
||||
Arguments:
|
||||
|
||||
ImageHandle - The driver's image handle
|
||||
SystemTable - The system table
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - All the related protocols are installed.
|
||||
Others - Failed to install the protocols.
|
||||
|
||||
--*/
|
||||
{
|
||||
return EfiLibInstallDriverBindingComponentName2 (
|
||||
ImageHandle,
|
||||
@@ -432,7 +424,7 @@ Dhcp4DriverBindingStop (
|
||||
|
||||
|
||||
/**
|
||||
Initialize a new DHCP child
|
||||
Initialize a new DHCP child.
|
||||
|
||||
@param DhcpSb The dhcp service instance
|
||||
@param Instance The dhcp instance to initialize
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -26,6 +26,19 @@ Abstract:
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gDhcp4ComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gDhcp4ComponentName2;
|
||||
|
||||
/**
|
||||
Test to see if this driver supports ControllerHandle.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to test.
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCES This driver supports this device
|
||||
@retval EFI_ALREADY_STARTED This driver is already running on this device.
|
||||
@retval other This driver does not support this device.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4DriverBindingSupported (
|
||||
@@ -34,6 +47,19 @@ Dhcp4DriverBindingSupported (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Start this driver on ControllerHandle.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to bind driver to
|
||||
@param RemainingDevicePath Optional parameter use to pick a specific child
|
||||
device to start.
|
||||
|
||||
@retval EFI_SUCCES This driver is added to ControllerHandle
|
||||
@retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle
|
||||
@retval other This driver does not support this device
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4DriverBindingStart (
|
||||
@@ -42,6 +68,19 @@ Dhcp4DriverBindingStart (
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Stop this driver on ControllerHandle.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ControllerHandle Handle of device to stop driver on
|
||||
@param NumberOfChildren Number of Handles in ChildHandleBuffer. If number
|
||||
of children is zero stop the entire bus driver.
|
||||
@param ChildHandleBuffer List of Child Handles to Stop.
|
||||
|
||||
@retval EFI_SUCCES This driver is removed ControllerHandle
|
||||
@retval other This driver was not removed from this device
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4DriverBindingStop (
|
||||
@@ -51,6 +90,22 @@ Dhcp4DriverBindingStop (
|
||||
IN EFI_HANDLE *ChildHandleBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
Creates a child handle with a set of I/O services.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ChildHandle Pointer to the handle of the child to create. If
|
||||
it is NULL, then a new handle is created. If it is
|
||||
not NULL, then the I/O services are added to the
|
||||
existing child handle.
|
||||
|
||||
@retval EFI_SUCCES The child handle was created with the I/O
|
||||
services.
|
||||
@retval EFI_OUT_OF_RESOURCES There are not enough resources availabe to create
|
||||
the child.
|
||||
@retval other The child handle was not created.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4ServiceBindingCreateChild (
|
||||
@@ -58,6 +113,22 @@ Dhcp4ServiceBindingCreateChild (
|
||||
IN EFI_HANDLE *ChildHandle
|
||||
);
|
||||
|
||||
/**
|
||||
Destroys a child handle with a set of I/O services.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param ChildHandle Handle of the child to destroy.
|
||||
|
||||
@retval EFI_SUCCES The I/O services were removed from the child
|
||||
handle.
|
||||
@retval EFI_UNSUPPORTED The child handle does not support the I/O services
|
||||
that are being removed.
|
||||
@retval EFI_INVALID_PARAMETER Child handle is not a valid EFI Handle.
|
||||
@retval EFI_ACCESS_DENIED The child handle could not be destroyed because
|
||||
its I/O services are being used.
|
||||
@retval other The child handle was not destroyed.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
Dhcp4ServiceBindingDestroyChild (
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006 - 2007, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -35,7 +35,6 @@ Abstract:
|
||||
operation parameter.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4GetModeData (
|
||||
@@ -286,7 +285,6 @@ DhcpYieldControl (
|
||||
@retval EFI_SUCCESS The child is configured.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Configure (
|
||||
@@ -407,7 +405,6 @@ ON_EXIT:
|
||||
@retval EFI_SUCCESS The DHCP process is started.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Start (
|
||||
@@ -497,7 +494,6 @@ ON_ERROR:
|
||||
@retval EFI_SUCCESS The DHCP is renewed/rebound.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4RenewRebind (
|
||||
@@ -597,7 +593,6 @@ ON_ERROR:
|
||||
@retval EFI_SUCCESS The lease is released.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Release (
|
||||
@@ -664,7 +659,6 @@ ON_EXIT:
|
||||
@retval EFI_SUCCESS The DHCP process is stopped.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Stop (
|
||||
@@ -719,7 +713,6 @@ EfiDhcp4Stop (
|
||||
@retval EFI_SUCCESS The packet is build.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Build (
|
||||
@@ -762,7 +755,6 @@ EfiDhcp4Build (
|
||||
);
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
Dhcp4InstanceConfigUdpIo (
|
||||
IN UDP_IO_PORT *UdpIo,
|
||||
@@ -801,7 +793,6 @@ Dhcp4InstanceConfigUdpIo (
|
||||
return UdpIo->Udp->Configure (UdpIo->Udp, &UdpConfigData);
|
||||
}
|
||||
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
Dhcp4InstanceCreateUdpIo (
|
||||
IN DHCP_PROTOCOL *Instance
|
||||
@@ -820,7 +811,6 @@ Dhcp4InstanceCreateUdpIo (
|
||||
}
|
||||
}
|
||||
|
||||
STATIC
|
||||
VOID
|
||||
DhcpDummyExtFree (
|
||||
IN VOID *Arg
|
||||
@@ -998,7 +988,6 @@ SIGNAL_USER:
|
||||
@retval Others Some other unexpected error occurred.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4TransmitReceive (
|
||||
@@ -1165,7 +1154,6 @@ ON_ERROR:
|
||||
@retval EFI_SUCCESS It always returns EFI_SUCCESS
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
Dhcp4ParseCheckOption (
|
||||
IN UINT8 Tag,
|
||||
@@ -1207,7 +1195,6 @@ Dhcp4ParseCheckOption (
|
||||
@retval EFI_SUCCESS The options are parsed.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EfiDhcp4Parse (
|
||||
|
@@ -48,10 +48,10 @@ typedef struct _DHCP_PROTOCOL DHCP_PROTOCOL;
|
||||
#include "Dhcp4Option.h"
|
||||
#include "Dhcp4Io.h"
|
||||
|
||||
enum {
|
||||
DHCP_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('D', 'H', 'C', 'P'),
|
||||
DHCP_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('d', 'h', 'c', 'p'),
|
||||
#define DHCP_SERVICE_SIGNATURE EFI_SIGNATURE_32 ('D', 'H', 'C', 'P')
|
||||
#define DHCP_PROTOCOL_SIGNATURE EFI_SIGNATURE_32 ('d', 'h', 'c', 'p')
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// The state of the DHCP service. It starts as UNCONFIGED. If
|
||||
// and active child configures the service successfully, it
|
||||
@@ -62,7 +62,7 @@ enum {
|
||||
DHCP_UNCONFIGED = 0,
|
||||
DHCP_CONFIGED,
|
||||
DHCP_DESTORY
|
||||
};
|
||||
} DHCP_STATE;
|
||||
|
||||
struct _DHCP_PROTOCOL {
|
||||
UINT32 Signature;
|
||||
@@ -153,6 +153,16 @@ typedef struct {
|
||||
|
||||
extern EFI_DHCP4_PROTOCOL mDhcp4ProtocolTemplate;
|
||||
|
||||
/**
|
||||
Give up the control of the DHCP service to let other child
|
||||
resume. Don't change the service's DHCP state and the Client
|
||||
address and option list configure as required by RFC2131.
|
||||
|
||||
@param DhcpSb The DHCP service instance.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
DhcpYieldControl (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
|
@@ -82,7 +82,6 @@ DhcpInitRequest (
|
||||
@retval EFI_ABORTED The user function ask it to abort.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpCallUser (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -250,7 +249,6 @@ DhcpSetState (
|
||||
@return None
|
||||
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
DhcpSetTransmitTimer (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
@@ -287,7 +285,6 @@ DhcpSetTransmitTimer (
|
||||
@return None
|
||||
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
DhcpComputeLease (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -396,7 +393,6 @@ DhcpConfigLeaseIoPort (
|
||||
@retval EFI_SUCCESS The lease is recorded.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpLeaseAcquired (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
@@ -509,7 +505,6 @@ DhcpCleanLease (
|
||||
@retval EFI_SUCCESS One of the offer is selected.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpChooseOffer (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
@@ -591,7 +586,6 @@ DhcpChooseOffer (
|
||||
@return None
|
||||
|
||||
**/
|
||||
STATIC
|
||||
VOID
|
||||
DhcpEndSession (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -623,7 +617,6 @@ DhcpEndSession (
|
||||
@retval Others Some error occured.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpHandleSelect (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -698,7 +691,6 @@ ON_EXIT:
|
||||
@retval Others Some error occured.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpHandleRequest (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -791,7 +783,6 @@ ON_EXIT:
|
||||
@retval Others Some error occured.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpHandleRenewRebind (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -850,7 +841,7 @@ DhcpHandleRenewRebind (
|
||||
DhcpSb->LeaseLife = 0;
|
||||
DhcpSetState (DhcpSb, Dhcp4Bound, TRUE);
|
||||
|
||||
if (DhcpSb->ExtraRefresh) {
|
||||
if (DhcpSb->ExtraRefresh != 0) {
|
||||
DhcpSb->ExtraRefresh = FALSE;
|
||||
|
||||
DhcpSb->IoStatus = EFI_SUCCESS;
|
||||
@@ -875,7 +866,6 @@ ON_EXIT:
|
||||
@retval Others Some error occured.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpHandleReboot (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -1528,7 +1518,7 @@ DhcpOnTimerTick (
|
||||
// user, adjust the current state according to the lease life.
|
||||
// Otherwise do nothing to wait the lease to timeout
|
||||
//
|
||||
if (DhcpSb->ExtraRefresh) {
|
||||
if (DhcpSb->ExtraRefresh != 0) {
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
if (DhcpSb->LeaseLife < DhcpSb->T1) {
|
||||
@@ -1564,7 +1554,7 @@ DhcpOnTimerTick (
|
||||
// Don't timeout the lease, only count the life if user is
|
||||
// requesting extra renew/rebind. Adjust the state after that.
|
||||
//
|
||||
if (DhcpSb->ExtraRefresh) {
|
||||
if (DhcpSb->ExtraRefresh != 0) {
|
||||
return ;
|
||||
}
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -34,18 +34,21 @@ Abstract:
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
|
||||
|
||||
enum {
|
||||
DHCP_WAIT_OFFER = 3, // Time to wait the offers
|
||||
DHCP_DEFAULT_LEASE = 7 *24 *60 *60, // Seven days as default.
|
||||
DHCP_SERVER_PORT = 67,
|
||||
DHCP_CLIENT_PORT = 68,
|
||||
|
||||
#define DHCP_WAIT_OFFER 3 // Time to wait the offers
|
||||
#define DHCP_DEFAULT_LEASE 7 *24 *60 *60 // Seven days as default.
|
||||
#define DHCP_SERVER_PORT 67
|
||||
#define DHCP_CLIENT_PORT 68
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// BOOTP header "op" field
|
||||
//
|
||||
BOOTP_REQUEST = 1,
|
||||
BOOTP_REPLY = 2,
|
||||
BOOTP_REPLY = 2
|
||||
} DHCP_OP_TYPE;
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// DHCP message types
|
||||
//
|
||||
@@ -56,21 +59,38 @@ enum {
|
||||
DHCP_MSG_ACK = 5,
|
||||
DHCP_MSG_NAK = 6,
|
||||
DHCP_MSG_RELEASE = 7,
|
||||
DHCP_MSG_INFORM = 8,
|
||||
DHCP_MSG_INFORM = 8
|
||||
} DHCP_MSG_TYPE;
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// DHCP notify user type
|
||||
//
|
||||
DHCP_NOTIFY_COMPLETION = 1,
|
||||
DHCP_NOTIFY_RENEWREBIND,
|
||||
DHCP_NOTIFY_ALL
|
||||
};
|
||||
} DHCP_NOTIFY_TYPE;
|
||||
|
||||
#define DHCP_IS_BOOTP(Parameter) (((Parameter) == NULL) || ((Parameter)->DhcpType == 0))
|
||||
|
||||
#define DHCP_CONNECTED(State) \
|
||||
(((State) == Dhcp4Bound) || ((State) == (Dhcp4Renewing)) || ((State) == Dhcp4Rebinding))
|
||||
|
||||
/**
|
||||
Set the DHCP state. If CallUser is true, it will try to notify
|
||||
the user before change the state by DhcpNotifyUser. It returns
|
||||
EFI_ABORTED if the user return EFI_ABORTED, otherwise, it returns
|
||||
EFI_SUCCESS. If CallUser is FALSE, it isn't necessary to test
|
||||
the return value of this function.
|
||||
|
||||
@param DhcpSb The DHCP service instance
|
||||
@param State The new DHCP state to change to
|
||||
@param CallUser Whether we need to call user
|
||||
|
||||
@retval EFI_SUCCESS The state is changed
|
||||
@retval EFI_ABORTED The user asks to abort the DHCP process.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpSetState (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -78,6 +98,24 @@ DhcpSetState (
|
||||
IN BOOLEAN CallUser
|
||||
);
|
||||
|
||||
/**
|
||||
Build and transmit a DHCP message according to the current states.
|
||||
This function implement the Table 5. of RFC 2131. Always transits
|
||||
the state (as defined in Figure 5. of the same RFC) before sending
|
||||
a DHCP message. The table is adjusted accordingly.
|
||||
|
||||
@param DhcpSb The DHCP service instance
|
||||
@param Seed The seed packet which the new packet is based on
|
||||
@param Para The DHCP parameter of the Seed packet
|
||||
@param Type The message type to send
|
||||
@param Msg The human readable message to include in the packet
|
||||
sent.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate resources for the packet
|
||||
@retval EFI_ACCESS_DENIED Failed to transmit the packet through UDP
|
||||
@retval EFI_SUCCESS The message is sent
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpSendMessage (
|
||||
IN DHCP_SERVICE *DhcpSb,
|
||||
@@ -87,6 +125,19 @@ DhcpSendMessage (
|
||||
IN UINT8 *Msg
|
||||
);
|
||||
|
||||
/**
|
||||
Each DHCP service has three timer. Two of them are count down timer.
|
||||
One for the packet retransmission. The other is to collect the offers.
|
||||
The third timer increaments the lease life which is compared to T1, T2,
|
||||
and lease to determine the time to renew and rebind the lease.
|
||||
DhcpOnTimerTick will be called once every second.
|
||||
|
||||
@param Event The timer event
|
||||
@param Context The context, which is the DHCP service instance.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
DhcpOnTimerTick (
|
||||
@@ -94,6 +145,18 @@ DhcpOnTimerTick (
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Handle the received DHCP packets. This function drivers the DHCP
|
||||
state machine.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
DhcpInput (
|
||||
NET_BUF *UdpPacket,
|
||||
@@ -102,16 +165,44 @@ DhcpInput (
|
||||
VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Send an initial DISCOVER or REQUEST message according to the
|
||||
DHCP service's current state.
|
||||
|
||||
@param DhcpSb The DHCP service instance
|
||||
|
||||
@retval EFI_SUCCESS The request has been sent
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpInitRequest (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
);
|
||||
|
||||
/**
|
||||
Clean up the DHCP related states, IoStatus isn't reset.
|
||||
|
||||
@param DhcpSb The DHCP instance service.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
DhcpCleanLease (
|
||||
IN DHCP_SERVICE *DhcpSb
|
||||
);
|
||||
|
||||
/**
|
||||
Release the net buffer when packet is sent.
|
||||
|
||||
@param UdpPacket The UDP packets received.
|
||||
@param Points The local/remote UDP access points
|
||||
@param IoStatus The status of the UDP receive
|
||||
@param Context The opaque parameter to the function.
|
||||
|
||||
@return None
|
||||
|
||||
**/
|
||||
VOID
|
||||
DhcpOnPacketSent (
|
||||
NET_BUF *Packet,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2006, Intel Corporation
|
||||
Copyright (c) 2006 - 2008, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -27,9 +27,7 @@ Abstract:
|
||||
// to validate a dhcp message. Refere the comments of the
|
||||
// DHCP_OPTION_FORMAT structure.
|
||||
//
|
||||
STATIC
|
||||
DHCP_OPTION_FORMAT
|
||||
DhcpOptionFormats [] = {
|
||||
STATIC DHCP_OPTION_FORMAT DhcpOptionFormats[] = {
|
||||
{DHCP_TAG_NETMASK, DHCP_OPTION_IP, 1, 1 , TRUE},
|
||||
{DHCP_TAG_TIME_OFFSET, DHCP_OPTION_INT32, 1, 1 , FALSE},
|
||||
{DHCP_TAG_ROUTER, DHCP_OPTION_IP, 1, -1 , TRUE},
|
||||
@@ -127,7 +125,6 @@ DhcpOptionFormats [] = {
|
||||
@return The point to the option's format, NULL if not found.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
DHCP_OPTION_FORMAT *
|
||||
DhcpFindOptionFormat (
|
||||
IN UINT8 Tag
|
||||
@@ -168,7 +165,6 @@ DhcpFindOptionFormat (
|
||||
@return TRUE is the option is valid, otherwise FALSE.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
BOOLEAN
|
||||
DhcpOptionIsValid (
|
||||
IN DHCP_OPTION_FORMAT *Format,
|
||||
@@ -249,7 +245,6 @@ DhcpOptionIsValid (
|
||||
@retval EFI_INVALID_PARAMETER The DHCP option is mal-formated
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpGetParameter (
|
||||
IN UINT8 Tag,
|
||||
@@ -323,7 +318,6 @@ DhcpGetParameter (
|
||||
@retval EFI_INVALID_PARAMETER The options are mal-formated.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpIterateBufferOptions (
|
||||
IN UINT8 *Buffer,
|
||||
@@ -468,7 +462,6 @@ DhcpIterateOptions (
|
||||
@retval EFI_SUCCESS It always returns EFI_SUCCESS.
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpGetOptionLen (
|
||||
IN UINT8 Tag,
|
||||
@@ -499,7 +492,6 @@ DhcpGetOptionLen (
|
||||
@retval EFI_SUCCESS It always returns EFI_SUCCESS
|
||||
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
DhcpFillOption (
|
||||
IN UINT8 Tag,
|
||||
|
@@ -27,7 +27,7 @@ Abstract:
|
||||
//
|
||||
// DHCP option tags (types)
|
||||
//
|
||||
enum {
|
||||
typedef enum {
|
||||
//
|
||||
// RFC1497 vendor extensions
|
||||
//
|
||||
@@ -132,12 +132,12 @@ enum {
|
||||
DHCP_TAG_T2 = 59, // Rebinding (T2) Time Value
|
||||
DHCP_TAG_VENDOR_CLASS = 60, // Vendor class identifier
|
||||
DHCP_TAG_CLIENT_ID = 61 // Client-identifier
|
||||
};
|
||||
} DHCP_TAGS;
|
||||
|
||||
enum {
|
||||
DHCP_OPTION_MAGIC = 0x63538263, // Network byte order
|
||||
DHCP_MAX_OPTIONS = 256,
|
||||
#define DHCP_OPTION_MAGIC 0x63538263 // Network byte order
|
||||
#define DHCP_MAX_OPTIONS 256
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// DHCP option types, this is used to validate the DHCP options.
|
||||
//
|
||||
@@ -146,15 +146,17 @@ enum {
|
||||
DHCP_OPTION_INT16,
|
||||
DHCP_OPTION_INT32,
|
||||
DHCP_OPTION_IP,
|
||||
DHCP_OPTION_IPPAIR,
|
||||
DHCP_OPTION_IPPAIR
|
||||
} DHCP_OPTION_TYPE;
|
||||
|
||||
typedef enum {
|
||||
//
|
||||
// Value of DHCP overload option
|
||||
//
|
||||
DHCP_OVERLOAD_FILENAME = 1,
|
||||
DHCP_OVERLOAD_SVRNAME = 2,
|
||||
DHCP_OVERLOAD_BOTH = 3
|
||||
};
|
||||
} DHCP_OVERLOAD_TYPE;
|
||||
|
||||
//
|
||||
// The DHCP option structure. This structure extends the EFI_DHCP_OPTION
|
||||
@@ -225,6 +227,21 @@ EFI_STATUS
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Iterate through a DHCP message to visit each option. First inspect
|
||||
all the options in the OPTION field. Then if overloaded, inspect
|
||||
the options in FILENAME and SERVERNAME fields. One option may be
|
||||
encoded in several places. See RFC 3396 Encoding Long Options in DHCP
|
||||
|
||||
@param Packet The DHCP packet to check the options for
|
||||
@param Check The callback function to be called for each option
|
||||
found
|
||||
@param Context The opaque parameter for Check
|
||||
|
||||
@retval EFI_SUCCESS The DHCP packet's options are well formated
|
||||
@retval Others The DHCP packet's options are not well formated
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpIterateOptions (
|
||||
IN EFI_DHCP4_PACKET *Packet,
|
||||
@@ -232,12 +249,51 @@ DhcpIterateOptions (
|
||||
IN VOID *Context
|
||||
);
|
||||
|
||||
/**
|
||||
Validate the packet's options. If necessary, allocate
|
||||
and fill in the interested parameters.
|
||||
|
||||
@param Packet The packet to validate the options
|
||||
@param Para The variable to save the DHCP parameters.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory to validate the packet.
|
||||
@retval EFI_INVALID_PARAMETER The options are mal-formated
|
||||
@retval EFI_SUCCESS The options are parsed into OptionPoint
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpValidateOptions (
|
||||
IN EFI_DHCP4_PACKET *Packet,
|
||||
OUT DHCP_PARAMETER **Para OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Parse the options of a DHCP packet. It supports RFC 3396: Encoding
|
||||
Long Options in DHCP. That is, it will combine all the option value
|
||||
of all the occurances of each option.
|
||||
A little bit of implemenation:
|
||||
It adopts the "Key indexed counting" algorithm. First, it allocates
|
||||
an array of 256 DHCP_OPTION_COUNTs because DHCP option tag is encoded
|
||||
as a UINT8. It then iterates the DHCP packet to get data length of
|
||||
each option by calling DhcpIterOptions with DhcpGetOptionLen. Now, it
|
||||
knows the number of present options and their length. It allocates a
|
||||
array of DHCP_OPTION and a continous buffer after the array to put
|
||||
all the options' data. Each option's data is pointed to by the Data
|
||||
field in DHCP_OPTION structure. At last, it call DhcpIterateOptions
|
||||
with DhcpFillOption to fill each option's data to its position in the
|
||||
buffer.
|
||||
|
||||
@param Packet The DHCP packet to parse the options
|
||||
@param Count The number of valid dhcp options present in the
|
||||
packet
|
||||
@param OptionPoint The array that contains the DHCP options. Caller
|
||||
should free it.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory to parse the packet.
|
||||
@retval EFI_INVALID_PARAMETER The options are mal-formated
|
||||
@retval EFI_SUCCESS The options are parsed into OptionPoint
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpParseOption (
|
||||
IN EFI_DHCP4_PACKET *Packet,
|
||||
@@ -245,6 +301,18 @@ DhcpParseOption (
|
||||
OUT DHCP_OPTION **OptionPoint
|
||||
);
|
||||
|
||||
/**
|
||||
Append an option to the memory, if the option is longer than
|
||||
255 bytes, splits it into several options.
|
||||
|
||||
@param Buf The buffer to append the option to
|
||||
@param Tag The option's tag
|
||||
@param DataLen The length of the option's data
|
||||
@param Data The option's data
|
||||
|
||||
@return The position to append the next option
|
||||
|
||||
**/
|
||||
UINT8 *
|
||||
DhcpAppendOption (
|
||||
IN UINT8 *Buf,
|
||||
@@ -253,6 +321,22 @@ DhcpAppendOption (
|
||||
IN UINT8 *Data
|
||||
);
|
||||
|
||||
/**
|
||||
Build a new DHCP packet from a seed packet. Options may be deleted or
|
||||
appended. The caller should free the NewPacket when finished using it.
|
||||
|
||||
@param SeedPacket The seed packet to start with
|
||||
@param DeleteCount The number of options to delete
|
||||
@param DeleteList The options to delete from the packet
|
||||
@param AppendCount The number of options to append
|
||||
@param AppendList The options to append to the packet
|
||||
@param NewPacket The new packet, allocated and built by this
|
||||
function.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory
|
||||
@retval EFI_SUCCESS The packet is build.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DhcpBuild (
|
||||
IN EFI_DHCP4_PACKET *SeedPacket,
|
||||
|
Reference in New Issue
Block a user