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
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.
19 Common definition for IP4.
24 #ifndef __EFI_IP4_COMMON_H__
25 #define __EFI_IP4_COMMON_H__
27 typedef struct _IP4_INTERFACE IP4_INTERFACE
;
28 typedef struct _IP4_PROTOCOL IP4_PROTOCOL
;
29 typedef struct _IP4_SERVICE IP4_SERVICE
;
33 IP4_ETHER_PROTO
= 0x0800,
35 IP4_PROTO_ICMP
= 0x01,
36 IP4_PROTO_IGMP
= 0x02,
39 // The packet is received as link level broadcast/multicast/promiscuous.
41 IP4_LINK_BROADCAST
= 0x00000001,
42 IP4_LINK_MULTICAST
= 0x00000002,
43 IP4_LINK_PROMISC
= 0x00000004,
46 // IP4 address cast type classfication. Keep it true that any
47 // type bigger than or equal to LOCAL_BROADCAST is broadcast.
52 IP4_LOCAL_BROADCAST
, // Destination is 255.255.255.255
59 IP4_HEAD_DF_MASK
= 0x4000,
60 IP4_HEAD_MF_MASK
= 0x2000,
61 IP4_HEAD_OFFSET_MASK
= 0x1fff
64 #define IP4_ALLZERO_ADDRESS 0x00000000u
65 #define IP4_ALLONE_ADDRESS 0xFFFFFFFFu
66 #define IP4_ALLSYSTEM_ADDRESS 0xE0000001u
67 #define IP4_ALLROUTER_ADDRESS 0xE0000002u
70 // Compose the fragment field to be used in the IP4 header.
72 #define IP4_HEAD_FRAGMENT_FIELD(Df, Mf, Offset) \
73 ((UINT16)(((Df) ? 0x4000 : 0) | ((Mf) ? 0x2000 : 0) | (((Offset) >> 3) & 0x1fff)))
75 #define IP4_LAST_FRAGMENT(FragmentField) \
76 (((FragmentField) & IP4_HEAD_MF_MASK) == 0)
78 #define IP4_FIRST_FRAGMENT(FragmentField) \
79 ((BOOLEAN)(((FragmentField) & IP4_HEAD_OFFSET_MASK) == 0))
81 #define IP4_IS_BROADCAST(CastType) ((CastType) >= IP4_LOCAL_BROADCAST)
84 // Conver the Microsecond to second. IP transmit/receive time is
85 // in the unit of microsecond. IP ticks once per second.
87 #define IP4_US_TO_SEC(Us) (((Us) + 999999) / 1000000)
92 IN IP4_INTERFACE
*IpIf
104 IN IP4_SERVICE
*IpService
,
110 IN IP4_SERVICE
*IpService
,
115 Ip4FindStationAddress (
116 IN IP4_SERVICE
*IpSb
,
123 IN EFI_MANAGED_NETWORK_PROTOCOL
*Mnp
,
124 IN IP4_ADDR Multicast
,
125 OUT EFI_MAC_ADDRESS
*Mac
139 Ip4ClearVariableData (