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:
vanjeff
2008-06-30 07:20:33 +00:00
parent 4611e327f4
commit 7bce0c5a0e
19 changed files with 843 additions and 157 deletions

View File

@@ -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

View File

@@ -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 (

View File

@@ -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 (

View File

@@ -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

View File

@@ -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 ;
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,