]> git.proxmox.com Git - mirror_edk2.git/blame - 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
CommitLineData
772db4bb 1/** @file
2
3Copyright (c) 2005 - 2006, Intel Corporation
4All rights reserved. This program and the accompanying materials
5are licensed and made available under the terms and conditions of the BSD License
6which accompanies this distribution. The full text of the license may be found at
7http://opensource.org/licenses/bsd-license.php
8
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12
13Module Name:
14
15 Ip4Common.h
16
17Abstract:
18
19 Common definition for IP4.
20
21
22**/
23
24#ifndef __EFI_IP4_COMMON_H__
25#define __EFI_IP4_COMMON_H__
26
27typedef struct _IP4_INTERFACE IP4_INTERFACE;
28typedef struct _IP4_PROTOCOL IP4_PROTOCOL;
29typedef struct _IP4_SERVICE IP4_SERVICE;
30
31
32enum {
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,
687a2e5f 61 IP4_HEAD_OFFSET_MASK = 0x1fff
772db4bb 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
89INTN
90Ip4GetNetCast (
91 IN IP4_ADDR IpAddr,
92 IN IP4_INTERFACE *IpIf
93 );
94
95INTN
96Ip4GetHostCast (
97 IN IP4_SERVICE *IpSb,
98 IN IP4_ADDR Dst,
99 IN IP4_ADDR Src
100 );
101
102IP4_INTERFACE *
103Ip4FindInterface (
104 IN IP4_SERVICE *IpService,
105 IN IP4_ADDR Addr
106 );
107
108IP4_INTERFACE *
109Ip4FindNet (
110 IN IP4_SERVICE *IpService,
111 IN IP4_ADDR Addr
112 );
113
114IP4_INTERFACE *
115Ip4FindStationAddress (
116 IN IP4_SERVICE *IpSb,
117 IN IP4_ADDR Ip,
118 IN IP4_ADDR Netmask
119 );
120
121EFI_STATUS
122Ip4GetMulticastMac (
123 IN EFI_MANAGED_NETWORK_PROTOCOL *Mnp,
124 IN IP4_ADDR Multicast,
125 OUT EFI_MAC_ADDRESS *Mac
126 );
127
128IP4_HEAD *
129Ip4NtohHead (
130 IN IP4_HEAD *Head
131 );
132
133EFI_STATUS
134Ip4SetVariableData (
135 IN IP4_SERVICE *IpSb
136 );
137
138VOID
139Ip4ClearVariableData (
140 IN IP4_SERVICE *IpSb
141 );
142
143#endif