58fb83f5243773b6c38be29d45eceff07ca7cc52
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Common.h
1 /** @file\r
2 \r
3 Copyright (c) 2005 - 2006, Intel Corporation\r
4 All rights reserved. This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution.  The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8 \r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11 \r
12 \r
13 Module Name:\r
14 \r
15   Ip4Common.h\r
16 \r
17 Abstract:\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
27 typedef struct _IP4_INTERFACE  IP4_INTERFACE;\r
28 typedef struct _IP4_PROTOCOL   IP4_PROTOCOL;\r
29 typedef struct _IP4_SERVICE    IP4_SERVICE;\r
30 \r
31 \r
32 typedef enum {\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 } IP_ENUM_TYPES;\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
89 INTN\r
90 Ip4GetNetCast (\r
91   IN  IP4_ADDR            IpAddr,\r
92   IN  IP4_INTERFACE       *IpIf\r
93   );\r
94 \r
95 INTN\r
96 Ip4GetHostCast (\r
97   IN  IP4_SERVICE         *IpSb,\r
98   IN  IP4_ADDR            Dst,\r
99   IN  IP4_ADDR            Src\r
100   );\r
101 \r
102 IP4_INTERFACE *\r
103 Ip4FindInterface (\r
104   IN IP4_SERVICE          *IpService,\r
105   IN IP4_ADDR             Addr\r
106   );\r
107 \r
108 IP4_INTERFACE *\r
109 Ip4FindNet (\r
110   IN IP4_SERVICE          *IpService,\r
111   IN IP4_ADDR             Addr\r
112   );\r
113 \r
114 IP4_INTERFACE *\r
115 Ip4FindStationAddress (\r
116   IN IP4_SERVICE          *IpSb,\r
117   IN IP4_ADDR             Ip,\r
118   IN IP4_ADDR             Netmask\r
119   );\r
120 \r
121 EFI_STATUS\r
122 Ip4GetMulticastMac (\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
128 IP4_HEAD *\r
129 Ip4NtohHead (\r
130   IN IP4_HEAD               *Head\r
131   );\r
132 \r
133 EFI_STATUS\r
134 Ip4SetVariableData (\r
135   IN IP4_SERVICE            *IpSb\r
136   );\r
137 \r
138 VOID\r
139 Ip4ClearVariableData (\r
140   IN IP4_SERVICE            *IpSb\r
141   );\r
142 \r
143 #endif\r