#ifndef _NET_LIB_H_\r
#define _NET_LIB_H_\r
\r
+#include <Protocol/Ip6.h>\r
+\r
typedef UINT32 IP4_ADDR;\r
typedef UINT32 TCP_SEQNO;\r
typedef UINT16 TCP_PORTNO;\r
IP4_MASK_NUM = 33\r
} IP4_CLASS_TYPE;\r
\r
+typedef enum {\r
+ IP6_HOP_BY_HOP = 0,\r
+ IP6_DESTINATION = 60,\r
+ IP6_FRAGMENT = 44,\r
+ IP6_AH = 51,\r
+ IP6_ESP = 50,\r
+ IP6_NO_NEXT_HEADER = 59\r
+} IP6_EXTENSION_HEADER_TYPE;\r
+\r
#pragma pack(1)\r
\r
//\r
UINT16 Seq;\r
} IP4_ICMP_QUERY_HEAD;\r
\r
+typedef struct {\r
+ UINT8 Type;\r
+ UINT8 Code;\r
+ UINT16 Checksum;\r
+} IP6_ICMP_HEAD;\r
+\r
+typedef struct {\r
+ IP6_ICMP_HEAD Head;\r
+ UINT32 Fourth;\r
+ EFI_IP6_HEADER IpHead;\r
+} IP6_ICMP_ERROR_HEAD;\r
+\r
+typedef struct {\r
+ IP6_ICMP_HEAD Head;\r
+ UINT32 Fourth;\r
+} IP6_ICMP_INFORMATION_HEAD;\r
\r
//\r
// UDP header definition\r
UINT16 DstPort;\r
UINT16 Length;\r
UINT16 Checksum;\r
-} EFI_UDP4_HEADER;\r
-\r
+} EFI_UDP_HEADER;\r
\r
//\r
// TCP header definition\r
#define EFI_NTOHL(EfiIp) (NTOHL (EFI_IP4 ((EfiIp))))\r
#define EFI_IP4_EQUAL(Ip1, Ip2) (CompareMem ((Ip1), (Ip2), sizeof (EFI_IPv4_ADDRESS)) == 0)\r
\r
+#define EFI_IP6_EQUAL(Ip1, Ip2) (CompareMem ((Ip1), (Ip2), sizeof (EFI_IPv6_ADDRESS)) == 0)\r
+\r
+\r
/**\r
Return the length of the mask. \r
\r
IN IP4_ADDR NetMask\r
);\r
\r
+/**\r
+ Check whether the incoming IPv6 address is a valid unicast address.\r
+\r
+ If the address is a multicast address has binary 0xFF at the start, it is not\r
+ a valid unicast address. If the address is unspecified ::, it is not a valid\r
+ unicast address to be assigned to any node. If the address is loopback address\r
+ ::1, it is also not a valid unicast address to be assigned to any physical\r
+ interface. \r
+\r
+ @param[in] Ip6 The IPv6 address to check against.\r
+\r
+ @return TRUE if Ip6 is a valid unicast address on the network, otherwise FALSE.\r
+\r
+**/ \r
+BOOLEAN\r
+Ip6IsValidUnicast (\r
+ IN EFI_IPv6_ADDRESS *Ip6\r
+ );\r
+\r
extern IP4_ADDR gIp4AllMasks[IP4_MASK_NUM];\r
\r
\r