TianoCore EDK2 master
|
Go to the source code of this file.
Data Structures | |
struct | IP6_DESTROY_CHILD_BY_ADDR_CALLBACK_CONTEXT |
Macros | |
#define | IP6_LINK_EQUAL(Mac1, Mac2) (CompareMem ((Mac1), (Mac2), sizeof (EFI_MAC_ADDRESS)) == 0) |
#define | IP6_US_TO_SEC(Us) (((Us) + 999999) / 1000000) |
#define | IP6_ETHER_PROTO 0x86DD |
#define | IP6_MAC_LEN 6 |
#define | IP6_IF_ID_LEN 8 |
#define | IP6_INTERFACE_LOCAL_SCOPE 1 |
#define | IP6_LINK_LOCAL_SCOPE 2 |
#define | IP6_SITE_LOCAL_SCOPE 5 |
#define | IP6_INFINIT_LIFETIME 0xFFFFFFFF |
#define | IP6_HOP_LIMIT 255 |
#define | IP6_LINK_LOCAL_PREFIX_LENGTH 64 |
#define | IP6_TIMER_INTERVAL_IN_MS 100 |
#define | IP6_ONE_SECOND_IN_MS 1000 |
#define | IP6_LINK_BROADCAST 0x00000001 |
#define | IP6_LINK_MULTICAST 0x00000002 |
#define | IP6_LINK_PROMISC 0x00000004 |
#define | IP6_U_BIT 0x02 |
Typedefs | |
typedef struct _IP6_INTERFACE | IP6_INTERFACE |
typedef struct _IP6_PROTOCOL | IP6_PROTOCOL |
typedef struct _IP6_SERVICE | IP6_SERVICE |
typedef struct _IP6_ADDRESS_INFO | IP6_ADDRESS_INFO |
Enumerations | |
enum | IP6_ADDRESS_TYPE { Ip6Promiscuous = 1 , Ip6Unicast , Ip6Multicast , Ip6AnyCast } |
Common definition and functions for IP6 driver.
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
Definition in file Ip6Common.h.
#define IP6_ETHER_PROTO 0x86DD |
Definition at line 21 of file Ip6Common.h.
#define IP6_HOP_LIMIT 255 |
Definition at line 32 of file Ip6Common.h.
#define IP6_IF_ID_LEN 8 |
Definition at line 24 of file Ip6Common.h.
#define IP6_INFINIT_LIFETIME 0xFFFFFFFF |
Definition at line 30 of file Ip6Common.h.
#define IP6_INTERFACE_LOCAL_SCOPE 1 |
Definition at line 26 of file Ip6Common.h.
#define IP6_LINK_BROADCAST 0x00000001 |
Definition at line 44 of file Ip6Common.h.
#define IP6_LINK_EQUAL | ( | Mac1, | |
Mac2 | |||
) | (CompareMem ((Mac1), (Mac2), sizeof (EFI_MAC_ADDRESS)) == 0) |
Definition at line 13 of file Ip6Common.h.
#define IP6_LINK_LOCAL_PREFIX_LENGTH 64 |
Definition at line 36 of file Ip6Common.h.
#define IP6_LINK_LOCAL_SCOPE 2 |
Definition at line 27 of file Ip6Common.h.
#define IP6_LINK_MULTICAST 0x00000002 |
Definition at line 45 of file Ip6Common.h.
#define IP6_LINK_PROMISC 0x00000004 |
Definition at line 46 of file Ip6Common.h.
#define IP6_MAC_LEN 6 |
Definition at line 23 of file Ip6Common.h.
#define IP6_ONE_SECOND_IN_MS 1000 |
Definition at line 39 of file Ip6Common.h.
#define IP6_SITE_LOCAL_SCOPE 5 |
Definition at line 28 of file Ip6Common.h.
#define IP6_TIMER_INTERVAL_IN_MS 100 |
Definition at line 38 of file Ip6Common.h.
#define IP6_U_BIT 0x02 |
Definition at line 48 of file Ip6Common.h.
#define IP6_US_TO_SEC | ( | Us | ) | (((Us) + 999999) / 1000000) |
Definition at line 19 of file Ip6Common.h.
typedef struct _IP6_ADDRESS_INFO IP6_ADDRESS_INFO |
Definition at line 65 of file Ip6Common.h.
typedef struct _IP6_INTERFACE IP6_INTERFACE |
Definition at line 62 of file Ip6Common.h.
typedef struct _IP6_PROTOCOL IP6_PROTOCOL |
Definition at line 63 of file Ip6Common.h.
typedef struct _IP6_SERVICE IP6_SERVICE |
Definition at line 64 of file Ip6Common.h.
enum IP6_ADDRESS_TYPE |
Definition at line 50 of file Ip6Common.h.
VOID Ip6AddAddr | ( | IN OUT IP6_INTERFACE * | IpIf, |
IN IP6_ADDRESS_INFO * | AddrInfo | ||
) |
Insert a node IP6_ADDRESS_INFO to an IP6 interface.
[in,out] | IpIf | Points to an IP6 interface. |
[in] | AddrInfo | Points to an IP6_ADDRESS_INFO. |
Insert a node IP6_ADDRESS_INFO to an IP6 interface.
[in,out] | IpIf | Points to an IP6 interface. |
[in] | AddrInfo | Points to IP6_ADDRESS_INFO |
Definition at line 316 of file Ip6Common.c.
EFI_STATUS Ip6BuildEfiAddressList | ( | IN IP6_SERVICE * | IpSb, |
OUT UINT32 * | AddressCount, | ||
OUT EFI_IP6_ADDRESS_INFO **AddressList | OPTIONAL | ||
) |
Build a array of EFI_IP6_ADDRESS_INFO to be returned to the caller. The number of EFI_IP6_ADDRESS_INFO is also returned. If AddressList is NULL, only the address count is returned.
[in] | IpSb | The IP6 service binding instance. |
[out] | AddressCount | The number of returned addresses. |
[out] | AddressList | The pointer to the array of EFI_IP6_ADDRESS_INFO. This is an optional parameter. |
EFI_SUCCESS | The address array is successfully build |
EFI_OUT_OF_RESOURCES | Failed to allocate the memory for the address info. |
EFI_INVALID_PARAMETER | Any input parameter is invalid. |
Build a array of EFI_IP6_ADDRESS_INFO to be returned to the caller. The number of EFI_IP6_ADDRESS_INFO is also returned. If AddressList is NULL, only the address count is returned.
[in] | IpSb | The IP6 service binding instance. |
[out] | AddressCount | The number of returned addresses. |
[out] | AddressList | The pointer to the array of EFI_IP6_ADDRESS_INFO. This is an optional parameter. |
EFI_SUCCESS | The address array successfully built. |
EFI_OUT_OF_RESOURCES | Failed to allocate the memory for the address info. |
EFI_INVALID_PARAMETER | Any input parameter is invalid. |
Definition at line 29 of file Ip6Common.c.
VOID Ip6CopyAddressByPrefix | ( | OUT EFI_IPv6_ADDRESS * | Dest, |
IN EFI_IPv6_ADDRESS * | Src, | ||
IN UINT8 | PrefixLength | ||
) |
Copy the PrefixLength bits from Src to Dest.
[out] | Dest | A pointer to the buffer to copy to. |
[in] | Src | A pointer to the buffer to copy from. |
[in] | PrefixLength | The number of bits to copy. |
Definition at line 593 of file Ip6Common.c.
UINT8 * Ip6CreateInterfaceID | ( | IN OUT IP6_SERVICE * | IpSb | ) |
This function converts MAC address to 64 bits interface ID according to RFC4291 and returns the interface ID. Currently only 48-bit MAC address is supported by this function.
[in,out] | IpSb | The IP6 service binding instance. |
NULL | The operation fails. |
Definition at line 142 of file Ip6Common.c.
EFI_IPv6_ADDRESS * Ip6CreateLinkLocalAddr | ( | IN OUT IP6_SERVICE * | IpSb | ) |
This function creates link-local address from interface identifier. The interface identifier is normally created from MAC address. It might be manually configured by administrator if the link-local address created from MAC address is a duplicate address.
[in,out] | IpSb | The IP6 service binding instance. |
NULL | If the operation fails. |
Definition at line 200 of file Ip6Common.c.
VOID Ip6CreateSNMulticastAddr | ( | IN EFI_IPv6_ADDRESS * | Ip6Addr, |
OUT EFI_IPv6_ADDRESS * | MulticastAddr | ||
) |
Compute the solicited-node multicast address for an unicast or anycast address, by taking the low-order 24 bits of this address, and appending those bits to the prefix FF02:0:0:0:0:1:FF00::/104.
Ip6Addr | The unicast or anycast address, in network order. |
MulticastAddr | The generated solicited-node multicast address, in network order. |
Compute the solicited-node multicast address for an unicast or anycast address, by taking the low-order 24 bits of this address, and appending those bits to the prefix FF02:0:0:0:0:1:FF00::/104.
[in] | Ip6Addr | The unicast or anycast address, in network order. |
[out] | MulticastAddr | The generated solicited-node multicast address, in network order. |
Definition at line 291 of file Ip6Common.c.
EFI_STATUS Ip6GetMulticastMac | ( | IN EFI_MANAGED_NETWORK_PROTOCOL * | Mnp, |
IN EFI_IPv6_ADDRESS * | Multicast, | ||
OUT EFI_MAC_ADDRESS * | Mac | ||
) |
Get the MAC address for a multicast IP address. Call Mnp's McastIpToMac to find the MAC address instead of hard-coding the NIC to be Ethernet.
[in] | Mnp | The Mnp instance to get the MAC address. |
[in] | Multicast | The multicast IP address to translate. |
[out] | Mac | The buffer to hold the translated address. |
EFI_SUCCESS | The multicast IP is successfully translated to a multicast MAC address. |
Other | The address is not converted because an error occurred. |
Get the MAC address for a multicast IP address. Call Mnp's McastIpToMac to find the MAC address instead of hard-coding the NIC to be Ethernet.
[in] | Mnp | The Mnp instance to get the MAC address. |
[in] | Multicast | The multicast IP address to translate. |
[out] | Mac | The buffer to hold the translated address. |
EFI_SUCCESS | The multicast IP successfully translated to a multicast MAC address. |
Other | The address is not converted because an error occurred. |
Definition at line 635 of file Ip6Common.c.
BOOLEAN Ip6IsOneOfSetAddress | ( | IN IP6_SERVICE * | IpSb, |
IN EFI_IPv6_ADDRESS * | Address, | ||
OUT IP6_INTERFACE **Interface | OPTIONAL, | ||
OUT IP6_ADDRESS_INFO **AddressInfo | OPTIONAL | ||
) |
Check whether the incoming IPv6 address is one of the maintained address in the IP6 service binding instance.
[in] | IpSb | Points to a IP6 service binding instance |
[in] | Address | The IP6 address to be checked. |
[out] | Interface | If not NULL, output the IP6 interface which maintains the Address. |
[out] | AddressInfo | If not NULL, output the IP6 address information of the Address. |
TRUE | Yes, it is one of the maintained addresses. |
FALSE | No, it is not one of the maintained addresses. |
Check whether the incoming IPv6 address is one of the maintained addresses in the IP6 service binding instance.
[in] | IpSb | Points to a IP6 service binding instance. |
[in] | Address | The IP6 address to be checked. |
[out] | Interface | If not NULL, output the IP6 interface which maintains the Address. |
[out] | AddressInfo | If not NULL, output the IP6 address information of the Address. |
TRUE | Yes, it is one of the maintained address. |
FALSE | No, it is not one of the maintained address. |
Definition at line 504 of file Ip6Common.c.
BOOLEAN Ip6IsSNMulticastAddr | ( | IN EFI_IPv6_ADDRESS * | Ip6 | ) |
Check whether the incoming Ipv6 address is a solicited-node multicast address.
[in] | Ip6 | Ip6 address, in network order. |
TRUE | Yes, solicited-node multicast address |
FALSE | No |
Definition at line 471 of file Ip6Common.c.
BOOLEAN Ip6IsValidLinkAddress | ( | IN IP6_SERVICE * | IpSb, |
IN EFI_MAC_ADDRESS * | LinkAddress | ||
) |
Check whether the incoming MAC address is valid.
[in] | IpSb | Points to a IP6 service binding instance. |
[in] | LinkAddress | The MAC address. |
TRUE | Yes, it is valid. |
FALSE | No, it is not valid. |
Definition at line 565 of file Ip6Common.c.
EFI_IP6_HEADER * Ip6NtohHead | ( | IN OUT EFI_IP6_HEADER * | Head | ) |
Convert the multibyte field in IP header's byter order. In spite of its name, it can also be used to convert from host to network byte order.
[in,out] | Head | The IP head to convert. |
Definition at line 659 of file Ip6Common.c.
EFI_STATUS Ip6RemoveAddr | ( | IN IP6_SERVICE *IpSb | OPTIONAL, |
IN OUT LIST_ENTRY * | AddressList, | ||
IN OUT UINT32 * | AddressCount, | ||
IN EFI_IPv6_ADDRESS *Prefix | OPTIONAL, | ||
IN UINT8 | PrefixLength | ||
) |
Remove the IPv6 address from the address list node points to IP6_ADDRESS_INFO.
This function removes the matching IPv6 addresses from the address list and adjusts the address count of the address list. If IpSb is not NULL, this function calls Ip6LeaveGroup to see whether it should call Mnp->Groups() to remove the its solicited-node multicast MAC address from the filter list and sends out a Multicast Listener Done. If Prefix is NULL, all address in the address list will be removed. If Prefix is not NULL, the address that matching the Prefix with PrefixLength in the address list will be removed.
[in] | IpSb | NULL or points to IP6 service binding instance. |
[in,out] | AddressList | address list array |
[in,out] | AddressCount | the count of addresses in address list array |
[in] | Prefix | NULL or an IPv6 address prefix |
[in] | PrefixLength | the length of Prefix |
EFI_SUCCESS | The operation completed successfully. |
EFI_NOT_FOUND | The address matching the Prefix with PrefixLength cannot be found in address list. |
EFI_INVALID_PARAMETER | Any input parameter is invalid. |
Remove the IPv6 address from the address list node points to IP6_ADDRESS_INFO.
This function removes the matching IPv6 addresses from the address list and adjusts the address count of the address list. If IpSb is not NULL, this function calls Ip6LeaveGroup to see whether it should call Mnp->Groups() to remove the its solicited-node multicast MAC address from the filter list and sends out a Multicast Listener Done. If Prefix is NULL, all address in the address list will be removed. If Prefix is not NULL, the address that matching the Prefix with PrefixLength in the address list will be removed.
[in] | IpSb | NULL or points to IP6 service binding instance. |
[in,out] | AddressList | Address list array. |
[in,out] | AddressCount | The count of addresses in address list array. |
[in] | Prefix | NULL or an IPv6 address prefix. |
[in] | PrefixLength | The length of Prefix. |
EFI_SUCCESS | The operation completed successfully. |
EFI_NOT_FOUND | The address matching the Prefix with PrefixLength cannot be found in the address list. |
EFI_INVALID_PARAMETER | Any input parameter is invalid. |
Definition at line 411 of file Ip6Common.c.
EFI_STATUS Ip6SetToAllNodeMulticast | ( | IN BOOLEAN | Router, |
IN UINT8 | Scope, | ||
OUT EFI_IPv6_ADDRESS * | Ip6Addr | ||
) |
Generate the multicast addresses identify the group of all IPv6 nodes or IPv6 routers defined in RFC4291.
All Nodes Addresses: FF01::1, FF02::1. All Router Addresses: FF01::2, FF02::2, FF05::2.
[in] | Router | If TRUE, generate all routers addresses, else generate all node addresses. |
[in] | Scope | interface-local(1), link-local(2), or site-local(5) |
[out] | Ip6Addr | The generated multicast address. |
EFI_INVALID_PARAMETER | Any input parameter is invalid. |
EFI_SUCCESS | The address is generated. |
Definition at line 103 of file Ip6Common.c.