Appendix A: Creating Modified EUI-64 Format Interface Identifiers
Depending on the characteristics of a specific link or node, there are a number of approaches for creating Modified EUI-64 format interface identifiers. This appendix describes some of these approaches.
For Links or Nodes with IEEE EUI-64 Identifiers
The only change needed to transform an IEEE EUI-64 identifier to an interface identifier is to invert the "u" (universal/local) bit.
Example of globally unique IEEE EUI-64 identifier:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
where:
- c: are the bits of the company_id
- 0: is the value of the universal/local bit to indicate universal scope
- g: is individual/group bit
- m: are the bits of the manufacturer-selected extension identifier
Form of IPv6 interface identifier:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
The only change is inverting the value of the universal/local bit (from 0 to 1).
For Links or Nodes with IEEE 802 48-bit MACs
[EUI64] defines a method to create an IEEE EUI-64 identifier from an IEEE 48-bit MAC identifier. This is to insert two octets, with hexadecimal values of 0xFF and 0xFE, in the middle of the 48-bit MAC (between the company_id and vendor-supplied id) (see note at end of appendix).
Example of 48-bit IEEE MAC with global scope:
|0 1|1 3|3 4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+
where:
- c: are the bits of the assigned company_id
- 0: is the value of the universal/local bit to indicate global scope
- g: is the individual/group bit
- m: are the bits of the manufacturer-selected extension identifier
Form of interface identifier:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+
When IEEE 802 48-bit MAC addresses are available (on an interface or a node), an implementation may use them to create interface identifiers due to their availability and uniqueness properties.
Transformation Steps
- Take the 48-bit MAC address
- Insert
0xFF-FEin the middle (i.e., between the 3rd and 4th octets) - Invert the 7th bit (u bit) of the first octet
Example:
MAC address: 00:1A:2B:3C:4D:5E
Insert 0xFF-FE: 00:1A:2B:FF:FE:3C:4D:5E
Invert u bit: 02:1A:2B:FF:FE:3C:4D:5E
Interface ID: 021A:2BFF:FE3C:4D5E
For Links with Other Types of Identifiers
There are many types of links that have link-layer interface identifiers other than IEEE EUI-64 or IEEE 802 48-bit MACs. Examples include LocalTalk and Arcnet. The method to create a Modified EUI-64 format identifier is to take the link identifier (e.g., the LocalTalk 8-bit node identifier) and zero-fill it to the left.
Example:
A LocalTalk 8-bit node identifier of hexadecimal value 0x4F results in the following interface identifier:
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|0000000000000000|0000000000000000|0000000000000000|0000000001001111|
+----------------+----------------+----------------+----------------+
Represented as: 0000:0000:0000:004F
Note that this results in the universal/local bit set to "0" to indicate local scope.
For Links with No Identifiers
There are a number of links that do not have any type of built-in identifier. The most common of these are serial links and configured tunnels. Interface identifiers must be chosen that are unique within a subnet prefix.
Method 1: Use Universal Interface Identifier
When there is no built-in identifier available on a link, the preferred approach is to use a universal interface identifier from another interface or an identifier assigned to the node itself. When using this approach, no other interface attaching the same node to the same subnet prefix may use the same identifier.
Method 2: Create Local Scope Interface Identifier
If no universal interface identifier is available for use on the link, then an implementation needs to create a local scope interface identifier. The only requirement is that it be unique within the subnet prefix. There are many possible approaches to select a subnet-prefix-unique interface identifier. These include:
- Manual Configuration
- Node Serial Number
- Other Node-Specific Token
A subnet-prefix-unique interface identifier should be generated in such a way that it does not change after a node reboot or when interfaces are added or removed from the node.
The choice of the appropriate algorithm is dependent on the link and the implementation. The details of forming interface identifiers are defined in the appropriate "IPv6 over <link>" specification. It is strongly recommended that a collision detection algorithm be included as part of any automatic algorithm.
Important Notes
Regarding the use of 0xFF-FE:
[EUI-64] actually defined 0xFF and 0xFF as the bits to insert to create an IEEE EUI-64 identifier from an IEEE MAC-48 identifier. The 0xFF and 0xFE values were used when starting from an IEEE EUI-48 identifier. The value 0xFF and 0xFE was used in earlier versions of the specification due to a misunderstanding about the difference between IEEE MAC-48 and EUI-48 identifiers.
This document intentionally continues to use 0xFF and 0xFE because:
- It meets the requirements of IPv6 interface identifiers (i.e., they must be unique on the link)
- IEEE EUI-48 and MAC-48 identifiers are syntactically equivalent
- It does not cause any problems in practice
Interface Identifier Generation Summary
| Link Type | Method | U/L Bit |
|---|---|---|
| IEEE EUI-64 | Invert u bit | 1 (universal) |
| IEEE 802 48-bit MAC | Insert FF-FE, invert u bit | 1 (universal) |
| Other identifiers (like LocalTalk) | Zero-fill left | 0 (local) |
| No identifiers | Manual/automatic generation | Depends on method |
Key Principle: Interface identifiers must be unique within their subnet prefix.