ip.h

来自「EFI BIOS是Intel提出的下一代的BIOS标准。这里上传的Edk源代码是」· C头文件 代码 · 共 736 行 · 第 1/2 页

H
736
字号
  UINT8 Kind;                           // one of the following:
  UINT8 Length;                         // total option length including Kind and Lth
  UINT8 Data[1];                        // length = Lth - 2
} TCPV4_OPTION;

#define TCP_OP_END                0     // only used to pad to end of TCP header
#define TCP_NOP                   1     // optional - may be used to pad between options to get alignment
#define TCP_MAX_SEG               2     // maximum receive segment size - only send at initial connection request
#define MAX_MEDIA_HDR_SIZE        64
#define MIN_ENET_DATA_SIZE        64
#define MAX_ENET_DATA_SIZE        1500  // temp def - make a network based var
#define MAX_IPV4_PKT_SIZE         65535 // maximum IP packet size
#define MAX_IPV4_DATA_SIZE        (MAX_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))
#define MAX_IPV4_FRAME_DATA_SIZE  (MAX_FRAME_DATA_SIZE - sizeof (IPV4_HEADER))
#define REAS_IPV4_PKT_SIZE        576   // minimum IP packet size all IP host can handle
#define REAS_IPV4_DATA_SIZE       (REAS_IPV4_PKT_SIZE - sizeof (IPV4_HEADER))

//
//
//
typedef union {
  UINT8           Data[MAX_ENET_DATA_SIZE];
  ICMPV4_HEADER   IcmpHeader;
  IGMPV2_MESSAGE  IgmpMessage;
  struct {
    UDPV4_HEADER  UdpHeader;
    UINT8         Data[1];
  } Udp;
  struct {
    TCPV4_HEADER  TcpHeader;
    UINT8         Data[1];
  } Tcp;
} PROTOCOL_UNION;

//
// out buffer structure
//
typedef struct {
  UINT8           MediaHeader[MAX_MEDIA_HDR_SIZE];
  IPV4_HEADER     IpHeader;
  //
  // following union placement only valid if no option IP header
  //
  PROTOCOL_UNION  u;
} IPV4_BUFFER;

typedef struct {
  IPV4_HEADER     IpHeader;
  //
  // following union placement only valid if no option IP header
  //
  PROTOCOL_UNION  u;
} IPV4_STRUCT;

#pragma pack()  // reset to default
  
  ////////////////////////////////////////////////////////////
//
//  BC IP Filter Routine
//
EFI_STATUS
IpFilter (
  PXE_BASECODE_DEVICE            *Private,
  IN EFI_PXE_BASE_CODE_IP_FILTER *Filter
  )
;

//
// //////////////////////////////////////////////////////////////////////
//
//  Udp Write Routine - called by base code - e.g. TFTP - already locked
//
EFI_STATUS
UdpWrite (
  IN PXE_BASECODE_DEVICE                      *Private,
  IN UINT16                                   OpFlags,
  IN EFI_IP_ADDRESS                           *DestIpPtr,
  IN EFI_PXE_BASE_CODE_UDP_PORT               *DestPortptr,
  IN EFI_IP_ADDRESS                           *GatewayIpPtr, OPTIONAL
  IN EFI_IP_ADDRESS                           *SrcIpPtr, OPTIONAL
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT           *SrcPortPtr, OPTIONAL
  IN UINTN                                    *HeaderSizePtr, OPTIONAL
  IN VOID                                     *HeaderPtr, OPTIONAL
  IN UINTN                                    *BufferSizePtr,
  IN VOID                                     *BufferPtr
  )
;

//
// /////////////////////////////////////////////////////////////////////
//
//  Udp Read Routine - called by base code - e.g. TFTP - already locked
//
EFI_STATUS
UdpRead (
  IN PXE_BASECODE_DEVICE            *Private,
  IN UINT16                         OpFlags,
  IN OUT EFI_IP_ADDRESS             *DestIpPtr, OPTIONAL
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPorPtrt, OPTIONAL
  IN OUT EFI_IP_ADDRESS             *SrcIpPtr, OPTIONAL
  IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPortPtr, OPTIONAL
  IN UINTN                          *HeaderSizePtr, OPTIONAL
  IN VOID                           *HeaderPtr, OPTIONAL
  IN OUT UINTN                      *BufferSizePtr,
  IN VOID                           *BufferPtr,
  IN EFI_EVENT                      TimeoutEvent
  )
;

VOID
IgmpLeaveGroup (
  PXE_BASECODE_DEVICE *Private,
  EFI_IP_ADDRESS      *
  )
;

VOID
IgmpJoinGroup (
  PXE_BASECODE_DEVICE *Private,
  EFI_IP_ADDRESS      *
  )
;

//
// convert number to zero filled ascii value of length lth
//
VOID
CvtNum (
  UINTN Number,
  UINT8 *BufferPtr,
  INTN  BufferLen
  )
;

//
// convert number to ascii string at ptr
//
VOID
UtoA10 (
  UINTN Number,
  UINT8 *BufferPtr
  )
;

//
// convert ascii numeric string to UINTN
//
UINTN
AtoU (
  UINT8 *BufferPtr
  )
;

UINT64
AtoU64 (
  UINT8 *BufferPtr
  )
;

//
// calculate the internet checksum (RFC 1071)
// return 16 bit ones complement of ones complement sum of 16 bit words
//
UINT16
IpChecksum (
  UINT16 *MessagePtr,
  UINTN  ByteLength
  )
;

//
// do checksum on non contiguous header and data
//
UINT16
IpChecksum2 (
  UINT16 *Header,
  UINTN  HeaderLength,
  UINT16 *Message,
  UINTN  MessageLength
  )
;

//
// update checksum when only a single word changes
//
UINT16
UpdateChecksum (
  UINT16 OldChecksum,
  UINT16 OldWord,
  UINT16 NewWord
  )
;

VOID
SeedRandom (
  IN PXE_BASECODE_DEVICE  *Private,
  IN UINT16               InitialSeed
  )
;

UINT16
Random (
  IN PXE_BASECODE_DEVICE  *Private
  )
;

EFI_STATUS
SendPacket (
  PXE_BASECODE_DEVICE           *Private,
  VOID                          *HeaderPtr,
  VOID                          *PacketPtr,
  INTN                          PacketLength,
  VOID                          *HardwareAddress,
  UINT16                        MediaProtocol,
  IN EFI_PXE_BASE_CODE_FUNCTION Function
  )
;

VOID
HandleArpReceive (
  PXE_BASECODE_DEVICE *Private,
  ARP_PACKET          *ArpPacketPtr,
  VOID                *HeaderPtr
  )
;

VOID
HandleIgmp (
  PXE_BASECODE_DEVICE *Private,
  IGMPV2_MESSAGE      *IgmpMessageptr,
  UINTN               IgmpMessageLen
  )
;

VOID
IgmpCheckTimers (
  PXE_BASECODE_DEVICE *Private
  )
;  // poll when doing a receive
// return hw add of IP and TRUE if available, otherwise FALSE
//
BOOLEAN
GetHwAddr (
  IN PXE_BASECODE_DEVICE  *Private,
  EFI_IP_ADDRESS          *ProtocolAddressPtr,
  EFI_MAC_ADDRESS         *HardwareAddressPtr
  )
;

EFI_STATUS
DoArp (
  IN PXE_BASECODE_DEVICE  *Private,
  IN EFI_IP_ADDRESS       *ProtocolAddressPtr,
  OUT EFI_MAC_ADDRESS     *HardwareAddressptr
  )
;

BOOLEAN
OnSameSubnet (
  UINTN           IpAddressLen,
  EFI_IP_ADDRESS  *Ip1,
  EFI_IP_ADDRESS  *Ip2,
  EFI_IP_ADDRESS  *SubnetMask
  )
;

VOID
IpAddRouter (
  PXE_BASECODE_DEVICE *Private,
  EFI_IP_ADDRESS      *RouterIp
  )
;

#define Ip4AddRouter(Private, Ipv4Ptr)  IpAddRouter (Private, (EFI_IP_ADDRESS *) Ipv4Ptr)

//
// routine to send ipv4 packet
// ipv4 + upper protocol header for length TotHdrLth in xmtbuf, ipv4 header length IpHdrLth
// routine fills in ipv4hdr Ver_Hdl, TotLth, and Checksum, moves in Data, and gets dest MAC address
//
EFI_STATUS
Ipv4Xmt (
  PXE_BASECODE_DEVICE         *Private,
  UINT32                      GatewayIP,
  UINTN                       IpHeaderLen,
  UINTN                       TotalHeaderLen,
  VOID                        *Data,
  UINTN                       DataLen,
  EFI_PXE_BASE_CODE_FUNCTION  Function
  )
;

//
// send ipv4 packet with ipv4 option
//
EFI_STATUS
Ipv4SendWOp (
  PXE_BASECODE_DEVICE         *Private,
  UINT32                      GatewayIP,
  UINT8                       *MessagePtr,
  UINTN                       MessageLth,
  UINT8                       Protocol,
  UINT8                       *Option,
  UINTN                       OptionLen,
  UINT32                      DestIp,
  EFI_PXE_BASE_CODE_FUNCTION  Function
  )
;

//
// send MsgLth message at MsgPtr - higher level protocol header already in xmtbuf, length HdrSize
//
EFI_STATUS
Ip4Send (
  IN PXE_BASECODE_DEVICE  *Private,     // pointer to instance data
  IN UINTN                MayFragment,  //
  IN UINT8                Protocol,     // protocol
  IN UINT32               SrcIp,        // Source IP address
  IN UINT32               DestIp,       // Destination IP address
  IN UINT32               GatewayIp,    // used if not NULL and needed
  IN UINTN                HeaderSize,   // protocol header byte length
  IN UINT8                *MsgPtr,      // pointer to data
  IN UINTN                MsgLength
  )
;                                    // data byte length
// receive up to MsgLth message into MsgPtr for protocol Prot
// return message length, src/dest ips if select any, and pointer to protocol header
//
EFI_STATUS
IpReceive (
  IN PXE_BASECODE_DEVICE    *Private,   // pointer to instance data
  UINT16                    OpFlags,    // Flags to determine if filtering on IP addresses
  EFI_IP_ADDRESS            *SrcIpPtr,  // if filtering, O if accept any
  EFI_IP_ADDRESS            *DstIpPtr,  // if filtering, O if accept any
  UINT8                     Protocol,   // protocol
  VOID                      *HeaderPtr, // address of where to put protocol header
  UINTN                     HeaderSize, // protocol header byte length
  UINT8                     *MsgPtr,    // pointer to data buffer
  UINTN                     *MsgLenPtr, // pointer to data buffer length/ O - returned data length
  IN EFI_EVENT              TimeoutEvent
  )
;

#if 0
VOID
WaitForTxComplete (
  IN PXE_BASECODE_DEVICE    *Private
  )
;
#endif
//
// routine to cycle waiting for a receive or timeout
//
EFI_STATUS
WaitForReceive (
  IN PXE_BASECODE_DEVICE        *Private,
  IN EFI_PXE_BASE_CODE_FUNCTION Function,
  IN EFI_EVENT                  TimeoutEvent,
  IN OUT UINTN                  *HeaderSizePtr,
  IN OUT UINTN                  *BufferSizePtr,
  IN OUT UINT16                 *ProtocolPtr
  )
;

#endif /* _IP_H_ */

/* EOF - ip.h */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?