]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h
Import ArpDxe, Dhcp4Dxe, Ip4Dxe, Mtftp4Dxe, PxeBcDxe and PxeDhcp4Dxe.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / Ip4Dxe / Ip4Common.h
diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Common.h
new file mode 100644 (file)
index 0000000..59e5c11
--- /dev/null
@@ -0,0 +1,143 @@
+/** @file
+
+Copyright (c) 2005 - 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution.  The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+
+Module Name:
+
+  Ip4Common.h
+
+Abstract:
+
+  Common definition for IP4.
+
+
+**/
+
+#ifndef __EFI_IP4_COMMON_H__
+#define __EFI_IP4_COMMON_H__
+
+typedef struct _IP4_INTERFACE  IP4_INTERFACE;
+typedef struct _IP4_PROTOCOL   IP4_PROTOCOL;
+typedef struct _IP4_SERVICE    IP4_SERVICE;
+
+
+enum {
+  IP4_ETHER_PROTO      = 0x0800,
+
+  IP4_PROTO_ICMP       = 0x01,
+  IP4_PROTO_IGMP       = 0x02,
+
+  //
+  // The packet is received as link level broadcast/multicast/promiscuous.
+  //
+  IP4_LINK_BROADCAST   = 0x00000001,
+  IP4_LINK_MULTICAST   = 0x00000002,
+  IP4_LINK_PROMISC     = 0x00000004,
+
+  //
+  // IP4 address cast type classfication. Keep it true that any
+  // type bigger than or equal to LOCAL_BROADCAST is broadcast.
+  //
+  IP4_PROMISCUOUS      = 1,
+  IP4_LOCAL_HOST,
+  IP4_MULTICAST,
+  IP4_LOCAL_BROADCAST,  // Destination is 255.255.255.255
+  IP4_SUBNET_BROADCAST,
+  IP4_NET_BROADCAST,
+
+  //
+  // IP4 header flags
+  //
+  IP4_HEAD_DF_MASK     = 0x4000,
+  IP4_HEAD_MF_MASK     = 0x2000,
+  IP4_HEAD_OFFSET_MASK = 0x1fff,
+};
+
+#define IP4_ALLZERO_ADDRESS   0x00000000u
+#define IP4_ALLONE_ADDRESS    0xFFFFFFFFu
+#define IP4_ALLSYSTEM_ADDRESS 0xE0000001u
+#define IP4_ALLROUTER_ADDRESS 0xE0000002u
+
+//
+// Compose the fragment field to be used in the IP4 header.
+//
+#define IP4_HEAD_FRAGMENT_FIELD(Df, Mf, Offset) \
+    ((UINT16)(((Df) ? 0x4000 : 0) | ((Mf) ? 0x2000 : 0) | (((Offset) >> 3) & 0x1fff)))
+
+#define IP4_LAST_FRAGMENT(FragmentField)  \
+          (((FragmentField) & IP4_HEAD_MF_MASK) == 0)
+
+#define IP4_FIRST_FRAGMENT(FragmentField) \
+          ((BOOLEAN)(((FragmentField) & IP4_HEAD_OFFSET_MASK) == 0))
+
+#define IP4_IS_BROADCAST(CastType) ((CastType) >= IP4_LOCAL_BROADCAST)
+
+//
+// Conver the Microsecond to second. IP transmit/receive time is
+// in the unit of microsecond. IP ticks once per second.
+//
+#define IP4_US_TO_SEC(Us) (((Us) + 999999) / 1000000)
+
+INTN
+Ip4GetNetCast (
+  IN  IP4_ADDR            IpAddr,
+  IN  IP4_INTERFACE       *IpIf
+  );
+
+INTN
+Ip4GetHostCast (
+  IN  IP4_SERVICE         *IpSb,
+  IN  IP4_ADDR            Dst,
+  IN  IP4_ADDR            Src
+  );
+
+IP4_INTERFACE *
+Ip4FindInterface (
+  IN IP4_SERVICE          *IpService,
+  IN IP4_ADDR             Addr
+  );
+
+IP4_INTERFACE *
+Ip4FindNet (
+  IN IP4_SERVICE          *IpService,
+  IN IP4_ADDR             Addr
+  );
+
+IP4_INTERFACE *
+Ip4FindStationAddress (
+  IN IP4_SERVICE          *IpSb,
+  IN IP4_ADDR             Ip,
+  IN IP4_ADDR             Netmask
+  );
+
+EFI_STATUS
+Ip4GetMulticastMac (
+  IN  EFI_MANAGED_NETWORK_PROTOCOL *Mnp,
+  IN  IP4_ADDR                     Multicast,
+  OUT EFI_MAC_ADDRESS              *Mac
+  );
+
+IP4_HEAD *
+Ip4NtohHead (
+  IN IP4_HEAD               *Head
+  );
+
+EFI_STATUS
+Ip4SetVariableData (
+  IN IP4_SERVICE            *IpSb
+  );
+
+VOID
+Ip4ClearVariableData (
+  IN IP4_SERVICE            *IpSb
+  );
+
+#endif