32/64-bit UNDI Specification
Version 1.02 12/12/00 457
G.4.17.1 Issuing the Command
To issue a Fill Header command, create a CDB and fill it in as shows in the table below:
CDB Field How to initialize the CDB structure for a Fill Header command
OpCode PXE_OPCODE_FILL_HEADER
OpFlags Set as needed.
CPBsize PXE_CPB_FILL_HEADER
DBsize PXE_DBSIZE_NOT_USED
CPBaddr Address of a PXE_CPB_FILL_HEADER structure.
DBaddr PXE_DBADDR_NOT_USED
StatCode PXE_STATCODE_INITIALIZE
StatFlags PXE_STATFLAGS_INITIALIZE
IFnum A valid interface number from zero to !PXE.IFcnt.
Control Set as needed.
OpFlags
Select one of the OpFlags below so the UNDI knows what type of CPB is being used.
PXE_OPFLAGS_FILL_HEADER_WHOLE
PXE_OPFLAGS_FILL_HEADER_FRAGMENTED
Preparing the CPB
If multiple frames per command are supported (see !PXE.Implementation flags), multiple
CPBs can be packed together. The CDB.CPBsize field lets the UNDI know how many CPBs are
packed together.

Non-Fragmented Frame

#pragma pack(1)
typedef struct s_pxe_cpb_fill_header {
// Source and destination MAC addresses. These will be copied
// into the media header without doing byte swapping.
PXE_MAC_ADDR SrcAddr;
PXE_MAC_ADDR DestAddr;
// Address of first byte of media header. The first byte of
// packet data follows the last byte of the media header.
PXE_UINT64 MediaHeader;