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