Skip to main content

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.


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).


[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

  1. Take the 48-bit MAC address
  2. Insert 0xFF-FE in the middle (i.e., between the 3rd and 4th octets)
  3. 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

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.


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:

  1. It meets the requirements of IPv6 interface identifiers (i.e., they must be unique on the link)
  2. IEEE EUI-48 and MAC-48 identifiers are syntactically equivalent
  3. It does not cause any problems in practice

Interface Identifier Generation Summary

Link TypeMethodU/L Bit
IEEE EUI-64Invert u bit1 (universal)
IEEE 802 48-bit MACInsert FF-FE, invert u bit1 (universal)
Other identifiers (like LocalTalk)Zero-fill left0 (local)
No identifiersManual/automatic generationDepends on method

Key Principle: Interface identifiers must be unique within their subnet prefix.