git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3781 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			249 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
Copyright (c) 2005 - 2007, 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
 | 
						|
http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
Module Name:
 | 
						|
 | 
						|
  IpIo.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _IP_IO_H_
 | 
						|
#define _IP_IO_H_
 | 
						|
 | 
						|
#include <PiDxe.h>
 | 
						|
#include <Protocol/Ip4.h>
 | 
						|
#include <Library/IpIoLib.h>
 | 
						|
#include <Library/NetLib.h>
 | 
						|
 | 
						|
//
 | 
						|
// type and code define for ICMP protocol error got
 | 
						|
// from IP
 | 
						|
//
 | 
						|
#define ICMP_TYPE_UNREACH              3
 | 
						|
#define ICMP_TYPE_TIMXCEED            11
 | 
						|
#define ICMP_TYPE_PARAMPROB            12
 | 
						|
#define ICMP_TYPE_SOURCEQUENCH         4
 | 
						|
 | 
						|
#define ICMP_CODE_UNREACH_NET          0
 | 
						|
#define ICMP_CODE_UNREACH_HOST         1
 | 
						|
#define ICMP_CODE_UNREACH_PROTOCOL     2
 | 
						|
#define ICMP_CODE_UNREACH_PORT         3
 | 
						|
#define ICMP_CODE_UNREACH_NEEDFRAG     4
 | 
						|
#define ICMP_CODE_UNREACH_SRCFAIL      5
 | 
						|
#define ICMP_CODE_UNREACH_NET_UNKNOWN  6
 | 
						|
#define ICMP_CODE_UNREACH_HOST_UNKNOWN 7
 | 
						|
#define ICMP_CODE_UNREACH_ISOLATED     8
 | 
						|
#define ICMP_CODE_UNREACH_NET_PROHIB   9
 | 
						|
#define ICMP_CODE_UNREACH_HOST_PROHIB  10
 | 
						|
#define ICMP_CODE_UNREACH_TOSNET       11
 | 
						|
#define ICMP_CODE_UNREACH_TOSHOST      12
 | 
						|
 | 
						|
//
 | 
						|
// this error will be delivered to the
 | 
						|
// listening transportation layer protocol
 | 
						|
// consuming IpIO
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  ICMP_ERR_UNREACH_NET      = 0,
 | 
						|
  ICMP_ERR_UNREACH_HOST,
 | 
						|
  ICMP_ERR_UNREACH_PROTOCOL,
 | 
						|
  ICMP_ERR_UNREACH_PORT,
 | 
						|
  ICMP_ERR_MSGSIZE,
 | 
						|
  ICMP_ERR_UNREACH_SRCFAIL,
 | 
						|
  ICMP_ERR_TIMXCEED_INTRANS,
 | 
						|
  ICMP_ERR_TIMXCEED_REASS,
 | 
						|
  ICMP_ERR_QUENCH,
 | 
						|
  ICMP_ERR_PARAMPROB
 | 
						|
} ICMP_ERROR;
 | 
						|
 | 
						|
typedef struct _ICMP_ERROR_INFO {
 | 
						|
  BOOLEAN     IsHard;
 | 
						|
  BOOLEAN     Notify;
 | 
						|
} ICMP_ERROR_INFO;
 | 
						|
 | 
						|
#define EFI_IP4_HEADER_LEN(HdrPtr) ((HdrPtr)->HeaderLength << 2)
 | 
						|
 | 
						|
extern EFI_IP4_CONFIG_DATA  mIpIoDefaultIpConfigData;
 | 
						|
 | 
						|
typedef struct _EFI_NET_SESSION_DATA {
 | 
						|
  IP4_ADDR        Source;
 | 
						|
  IP4_ADDR        Dest;
 | 
						|
  EFI_IP4_HEADER  *IpHdr;
 | 
						|
} EFI_NET_SESSION_DATA;
 | 
						|
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(*PKT_RCVD_NOTIFY) (
 | 
						|
  IN EFI_STATUS           Status,  // rcvd pkt result
 | 
						|
  IN ICMP_ERROR           IcmpErr, // if Status == EFI_ICMP_ERROR, this
 | 
						|
                                  // field is valid for user
 | 
						|
  IN EFI_NET_SESSION_DATA *NetSession, // the communication point
 | 
						|
  IN NET_BUF              *Pkt,    // packet received
 | 
						|
  IN VOID                 *Context // the Context provided by user for recive data
 | 
						|
  );
 | 
						|
 | 
						|
typedef
 | 
						|
VOID
 | 
						|
(*PKT_SENT_NOTIFY) (
 | 
						|
  IN EFI_STATUS  Status,      // sent pkt result
 | 
						|
  IN VOID        *Context,    // the context provided by user for sending data
 | 
						|
  IN VOID        *Sender,     // the sender to be notified
 | 
						|
  IN VOID        *NotifyData  // sent pkt related data to notify
 | 
						|
  );
 | 
						|
 | 
						|
typedef struct _IP_IO {
 | 
						|
 | 
						|
  //
 | 
						|
  // the node used to link this IpIo to the active IpIo list.
 | 
						|
  //
 | 
						|
  NET_LIST_ENTRY                Entry;
 | 
						|
 | 
						|
  // the list used to maintain the IP instance for different sending purpose.
 | 
						|
  //
 | 
						|
  NET_LIST_ENTRY                IpList;
 | 
						|
 | 
						|
  //
 | 
						|
  // the ip instance consumed by this IP IO
 | 
						|
  //
 | 
						|
  EFI_HANDLE                    Controller;
 | 
						|
  EFI_HANDLE                    Image;
 | 
						|
  EFI_HANDLE                    ChildHandle;
 | 
						|
  EFI_IP4_PROTOCOL              *Ip;
 | 
						|
  BOOLEAN                       IsConfigured;
 | 
						|
 | 
						|
  //
 | 
						|
  // some ip config data can be changed
 | 
						|
  //
 | 
						|
  UINT8                         Protocol;
 | 
						|
 | 
						|
  //
 | 
						|
  // token and event used to get data from IP
 | 
						|
  //
 | 
						|
  EFI_IP4_COMPLETION_TOKEN      RcvToken;
 | 
						|
 | 
						|
  //
 | 
						|
  // list entry used to link the token passed to IP_IO
 | 
						|
  //
 | 
						|
  NET_LIST_ENTRY                PendingSndList;
 | 
						|
 | 
						|
  //
 | 
						|
  // User interface used to get notify from IP_IO
 | 
						|
  //
 | 
						|
  VOID                          *RcvdContext;
 | 
						|
  VOID                          *SndContext;
 | 
						|
  PKT_RCVD_NOTIFY               PktRcvdNotify;
 | 
						|
  PKT_SENT_NOTIFY               PktSentNotify;
 | 
						|
} IP_IO;
 | 
						|
 | 
						|
typedef struct _IP_IO_OPEN_DATA {
 | 
						|
  EFI_IP4_CONFIG_DATA IpConfigData;
 | 
						|
  VOID                *RcvdContext;
 | 
						|
  VOID                *SndContext;
 | 
						|
  PKT_RCVD_NOTIFY     PktRcvdNotify;
 | 
						|
  PKT_SENT_NOTIFY     PktSentNotify;
 | 
						|
} IP_IO_OPEN_DATA;
 | 
						|
 | 
						|
typedef struct _IP_IO_SEND_ENTRY {
 | 
						|
  NET_LIST_ENTRY            Entry;
 | 
						|
  IP_IO                     *IpIo;
 | 
						|
  VOID                      *Context;
 | 
						|
  VOID                      *NotifyData;
 | 
						|
  EFI_IP4_PROTOCOL          *Ip;
 | 
						|
  NET_BUF                   *Pkt;
 | 
						|
  EFI_IP4_COMPLETION_TOKEN  *SndToken;
 | 
						|
} IP_IO_SEND_ENTRY;
 | 
						|
 | 
						|
typedef EFI_IP4_OVERRIDE_DATA IP_IO_OVERRIDE;
 | 
						|
 | 
						|
typedef struct _IP_IO_IP_INFO {
 | 
						|
  IP4_ADDR                  Addr;
 | 
						|
  IP4_ADDR                  SubnetMask;
 | 
						|
  NET_LIST_ENTRY            Entry;
 | 
						|
  EFI_HANDLE                ChildHandle;
 | 
						|
  EFI_IP4_PROTOCOL          *Ip;
 | 
						|
  EFI_IP4_COMPLETION_TOKEN  DummyRcvToken;
 | 
						|
  INTN                      RefCnt;
 | 
						|
} IP_IO_IP_INFO;
 | 
						|
 | 
						|
IP_IO *
 | 
						|
IpIoCreate (
 | 
						|
  IN EFI_HANDLE Image,
 | 
						|
  IN EFI_HANDLE Controller
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoDestroy (
 | 
						|
  IN IP_IO *IpIo
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoStop (
 | 
						|
  IN IP_IO *IpIo
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoOpen (
 | 
						|
  IN IP_IO           *IpIo,
 | 
						|
  IN IP_IO_OPEN_DATA *OpenData
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoSend (
 | 
						|
  IN IP_IO           *IpIo,
 | 
						|
  IN NET_BUF         *Pkt,
 | 
						|
  IN IP_IO_IP_INFO   *Sender,
 | 
						|
  IN VOID            *Context    OPTIONAL,
 | 
						|
  IN VOID            *NotifyData OPTIONAL,
 | 
						|
  IN IP4_ADDR        Dest,
 | 
						|
  IN IP_IO_OVERRIDE  *OverrideData
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
IpIoCancelTxToken (
 | 
						|
  IN IP_IO  *IpIo,
 | 
						|
  IN VOID   *Packet
 | 
						|
  );
 | 
						|
 | 
						|
IP_IO_IP_INFO *
 | 
						|
IpIoAddIp (
 | 
						|
  IN IP_IO  *IpIo
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoConfigIp (
 | 
						|
  IN     IP_IO_IP_INFO        *IpInfo,
 | 
						|
  IN OUT EFI_IP4_CONFIG_DATA  *Ip4ConfigData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
VOID
 | 
						|
IpIoRemoveIp (
 | 
						|
  IN IP_IO            *IpIo,
 | 
						|
  IN IP_IO_IP_INFO    *IpInfo
 | 
						|
  );
 | 
						|
 | 
						|
IP_IO_IP_INFO *
 | 
						|
IpIoFindSender (
 | 
						|
  IN OUT IP_IO     **IpIo,
 | 
						|
  IN     IP4_ADDR  Src
 | 
						|
  );
 | 
						|
 | 
						|
EFI_STATUS
 | 
						|
IpIoGetIcmpErrStatus (
 | 
						|
  IN  ICMP_ERROR  IcmpError,
 | 
						|
  OUT BOOLEAN     *IsHard, OPTIONAL
 | 
						|
  OUT BOOLEAN     *Notify OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |