]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h
Sync the latest version from R8.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Common.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2005 - 2006, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12\r
13Module Name:\r
14\r
15 Ip4Common.h\r
16\r
17Abstract:\r
18\r
19 Common definition for IP4.\r
20\r
21\r
22**/\r
23\r
24#ifndef __EFI_IP4_COMMON_H__\r
25#define __EFI_IP4_COMMON_H__\r
26\r
27typedef struct _IP4_INTERFACE IP4_INTERFACE;\r
28typedef struct _IP4_PROTOCOL IP4_PROTOCOL;\r
29typedef struct _IP4_SERVICE IP4_SERVICE;\r
30\r
31\r
32enum {\r
33 IP4_ETHER_PROTO = 0x0800,\r
34\r
35 IP4_PROTO_ICMP = 0x01,\r
36 IP4_PROTO_IGMP = 0x02,\r
37\r
38 //\r
39 // The packet is received as link level broadcast/multicast/promiscuous.\r
40 //\r
41 IP4_LINK_BROADCAST = 0x00000001,\r
42 IP4_LINK_MULTICAST = 0x00000002,\r
43 IP4_LINK_PROMISC = 0x00000004,\r
44\r
45 //\r
46 // IP4 address cast type classfication. Keep it true that any\r
47 // type bigger than or equal to LOCAL_BROADCAST is broadcast.\r
48 //\r
49 IP4_PROMISCUOUS = 1,\r
50 IP4_LOCAL_HOST,\r
51 IP4_MULTICAST,\r
52 IP4_LOCAL_BROADCAST, // Destination is 255.255.255.255\r
53 IP4_SUBNET_BROADCAST,\r
54 IP4_NET_BROADCAST,\r
55\r
56 //\r
57 // IP4 header flags\r
58 //\r
59 IP4_HEAD_DF_MASK = 0x4000,\r
60 IP4_HEAD_MF_MASK = 0x2000,\r
61 IP4_HEAD_OFFSET_MASK = 0x1fff\r
62};\r
63\r
64#define IP4_ALLZERO_ADDRESS 0x00000000u\r
65#define IP4_ALLONE_ADDRESS 0xFFFFFFFFu\r
66#define IP4_ALLSYSTEM_ADDRESS 0xE0000001u\r
67#define IP4_ALLROUTER_ADDRESS 0xE0000002u\r
68\r
69//\r
70// Compose the fragment field to be used in the IP4 header.\r
71//\r
72#define IP4_HEAD_FRAGMENT_FIELD(Df, Mf, Offset) \\r
73 ((UINT16)(((Df) ? 0x4000 : 0) | ((Mf) ? 0x2000 : 0) | (((Offset) >> 3) & 0x1fff)))\r
74\r
75#define IP4_LAST_FRAGMENT(FragmentField) \\r
76 (((FragmentField) & IP4_HEAD_MF_MASK) == 0)\r
77\r
78#define IP4_FIRST_FRAGMENT(FragmentField) \\r
79 ((BOOLEAN)(((FragmentField) & IP4_HEAD_OFFSET_MASK) == 0))\r
80\r
81#define IP4_IS_BROADCAST(CastType) ((CastType) >= IP4_LOCAL_BROADCAST)\r
82\r
83//\r
84// Conver the Microsecond to second. IP transmit/receive time is\r
85// in the unit of microsecond. IP ticks once per second.\r
86//\r
87#define IP4_US_TO_SEC(Us) (((Us) + 999999) / 1000000)\r
88\r
89INTN\r
90Ip4GetNetCast (\r
91 IN IP4_ADDR IpAddr,\r
92 IN IP4_INTERFACE *IpIf\r
93 );\r
94\r
95INTN\r
96Ip4GetHostCast (\r
97 IN IP4_SERVICE *IpSb,\r
98 IN IP4_ADDR Dst,\r
99 IN IP4_ADDR Src\r
100 );\r
101\r
102IP4_INTERFACE *\r
103Ip4FindInterface (\r
104 IN IP4_SERVICE *IpService,\r
105 IN IP4_ADDR Addr\r
106 );\r
107\r
108IP4_INTERFACE *\r
109Ip4FindNet (\r
110 IN IP4_SERVICE *IpService,\r
111 IN IP4_ADDR Addr\r
112 );\r
113\r
114IP4_INTERFACE *\r
115Ip4FindStationAddress (\r
116 IN IP4_SERVICE *IpSb,\r
117 IN IP4_ADDR Ip,\r
118 IN IP4_ADDR Netmask\r
119 );\r
120\r
121EFI_STATUS\r
122Ip4GetMulticastMac (\r
123 IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,\r
124 IN IP4_ADDR Multicast,\r
125 OUT EFI_MAC_ADDRESS *Mac\r
126 );\r
127\r
128IP4_HEAD *\r
129Ip4NtohHead (\r
130 IN IP4_HEAD *Head\r
131 );\r
132\r
133EFI_STATUS\r
134Ip4SetVariableData (\r
135 IN IP4_SERVICE *IpSb\r
136 );\r
137\r
138VOID\r
139Ip4ClearVariableData (\r
140 IN IP4_SERVICE *IpSb\r
141 );\r
142\r
143#endif\r