17

This inversion is bijective, so I can't figure out what is it's use.

1
  • Did any answer help you? If so, you should accept the answer so that the question doesn't keep popping up forever, looking for an answer. Alternatively, you can post and accept your own answer.
    – Ron Maupin
    Jan 3, 2021 at 2:17

5 Answers 5

20

RFC 4291 provides instructions on how to create the EUI64 address:

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 (see the Note at the end of
appendix), in the middle of the 48-bit MAC (between the company_id
and vendor-supplied id).  An example is the 48-bit IEEE MAC with
Global scope:

|0              1|1              3|3              4|
|0              5|6              1|2              7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+

where "c" is the bits of the assigned company_id, "0" is the value of
the universal/local bit to indicate Global scope, "g" is
individual/group bit, and "m" is the bits of the manufacturer-
selected extension identifier.  The interface identifier would be of
the form:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

And RFC 2373 provides the 'why' behind flipping the 7th bit:

The motivation for inverting the "u" bit when forming the interface
identifier is to make it easy for system administrators to hand
configure local scope identifiers when hardware tokens are not
available.  This is expected to be case for serial links, tunnel end-
points, etc.  The alternative would have been for these to be of the
form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler ::1,
::2, etc.

But that is a bit of a mouthful. So in simpler terms... In MAC address architecture, the 7th bit signifies whether the MAC address was universally or locally assigned. A value of 0 indicates the address is universally administered. For instance, the when IANA assigns an Organizationally Unique Identifier (OUI) to a NIC card vendor, the 7th bit will be 0, indicating the OUI was universally assigned. Should a user manually change their MAC address, this 7th bit would be set to 1, indicating the Ethernet address was locally administered.

There is also some more information about this at PacketLife.

3
  • I still don't get it. If an admin doesn't want 0200, then he/she can just manually configure the /128 ipv6 address as they see fit, regardless of what they do with their mac address configuration. The only possible benefit I see here is in a situation where the link local address can't be manually changed, which would be the only scenario where an admin would see a benefit. In other words, as an admin if I have a problem with my eui-64 ipv6 address showing 0200, then I'll just manually change that address, assuming I can manually change my link-local address
    – lobi
    Dec 13, 2018 at 23:41
  • and this link indicates that manually configuring a link-local address is possible community.cisco.com/t5/ipv6/…
    – lobi
    Dec 13, 2018 at 23:43
  • "A value of 0 indicates the address is universally administered". Isn't it the opposite?
    – Nakrule
    Jun 19, 2019 at 5:59
8

It is done to classify hand-assigned addresses such as prefix::1, prefix::2 etc. as local.

Suppose that you're setting up a network in prefix 2001:db8:dead:beef::/64. You'll probably use MAC-based IPs for most of your nodes. For some nodes, however, such as the DNS server, the directory server, etc., you'll want to use addresses that are easier to type and easier to memorise than the MAC-based addresses. For the DNS server, you'll probably want to use

2001:db8:dead:beef::53

Note that the U/L bit is set to 0 — which, due to the bit's inversion, classifies the host-id as local.

1
  • 1
    The U/L bit inversion only applies to EUI64 addresses. A manually configured address has no such meaning. The inversion is so interfaces without a MAC can generate one (i.e. all zeros) without the local bit making a mess of it. (if you use a locally generated MAC as-is, there will always be a bit set making "::#" impossible.)
    – Ricky
    Jun 19, 2020 at 9:56
1

In short, because in the ethernet MAC, seventh bit is defined to mean local/#global, while in IPv6 seventh bit in the 64-bit interface ID is defined to mean global/#local.

1

EUI 64 means only an MAC Address (48Bit) which has

..:FF:FE:.. 

in the middle of it to fill up all the 64bits. Hence the name EUI-64. To be exactly you mean modified EUI-64 which means the EUI-64 combined with a bitflip of the 7th bit.

The Seventh bit is changed because in the MAC Addresses this 7th bit indicated the difference between a local one (0) and global (1). Local in this sense is, for example, a Serial interface.

Since all this is to automatically create a public address which all will be on an interface which is global (in MAC terms) this would result in a 1 at the 7th position. They changed that bit, so you don't have to write down the hole address and you can you the Shorthand notation of "::"

Example (from the RFC 2373):

...
The alternative would have been for these to be of the
form 0200:0:0:1, 0200:0:0:2, etc., instead of the much simpler ::1,
::2, etc.

Short Answer Even though every MAC Adress would end up in an IPv6 Address which would have a HEX Number higher than 0 at some position in the IPv6 Address. This makes it possible to have Zeros there so you could use the shorthand notation.

0

EUI-64 Process EUI also known as EUI-64 process defined by IEEE, EUI is the abbreviation of Extended Unique Identifier. The process uses a client’s 48-bit Ethernet MAC address and inserts an extra 16 bits in the middle of the 48-bit MAC address to create a 64-bit Interface ID. Ethernet MAC addresses are represented in hexadecimal containing two parts:

Organizationally Unique Identifier (OUI)– This is the first part of MAC address called OUI. An OUI is a 24-bit number which uniquely identifies a vendor or manufacturer of the device. The organizations purchased an OUI from the IEEE. The first three octets of a MAC address are Organizationally Unique Identifier (OUI). Device Identifier– The last three octets of the MAC address uniquely identify the device. It is also a 24-bit (6 hexadecimal digits) value within a common OUI. The device identifier bits assigned by the organization to their device.

A EUI-64 Interface ID has three parts represented in binary:

24-bits Organizationally Unique Identifier (OUI) from the client MAC address with a reversed 7th bit. For example, if the 7th bit of the OUI is 1, it becomes a 0, and vice versa in the EUI interface ID.

24-bits Device Identifier from the client MAC address Hexa decimal value FFFE (16 bits) between Organizationally Unique Identifier (OUI) and Device Identifier.

EUI-64 process using the MAC address of BC:78:ba:b1:f8:55.

Get the mac address of the host or device for example in this case BC:78:ba:b1:f8:55

Insert ff:fe in the middle: bc:78:ba:ff:fe:b1:f8:55 Reorder the above hexadecimal digits in IPv6 notation. bc78:baff:feb1:f855

You can see that now it’s 4 hextet, convert the first octet from hexadecimal to binary: BC-> 10111100

Flip the 7th bit: 10111100 ->10111110

convert changed octet back to hexadecimal:01000111 ->BE

Now change the first octet with new value one: bc78:baff:feb1:f855

Insert the link-local prefix at the beginning : fe80:: bc78:baff:feb1:f855

There are some more information about eui 64 on my Blog

5
  • 1
    "if the 7th bit of the OUI is 1, it becomes a 0, and vice versa in the EUI interface ID." That is a misunderstanding. The U/L bit must be set for a modified EUI-64 interface ID. You do not clear it. That is a misconception that seems to be prevalent Setting the bit means that you are locally creating the address, which is why you set it, not clear it. Setting it is specified in RFC 4291, IP Version 6 Addressing Architecture in Appendix A
    – Ron Maupin
    Jun 19, 2020 at 9:50
  • 1
    This explain how to build the EUI-64 address from the Mac address but doesn't answer the question, nor does the link provided. Please carefully read the question and genuinely try to answer it.
    – JFL
    Jun 19, 2020 at 9:51
  • @RonMaupin you should really expand that into a full, proper answer. The misconception about flipping the bit comes from the EUI-64 example which shows how to convert an EUI-64 identifier to a modified EUI-64 identifier. If the EUI-64 identifier is derived from an IEEE-assigned OUI/OUI-36, then U/L will always be 0 and flipping the bit will net the desired, but that is not generally the case. For instance, made-up MAC addresses should feature U/L=1, in which case the bit must not be flipped.
    – Ionic
    Apr 29, 2021 at 6:09
  • Then again, flipping might be always appropriate and I have to stand corrected. It seems that a generated interface identifier needs not be created in a way that the address is marked as global or local, c.f. RFC 4291, 2.5.1. The Linux stack, for instance, doesn't differentiate suffix purposes. The interface identifier as used by SLAAC is the same for both global unicast and link-local addresses.
    – Ionic
    Apr 29, 2021 at 7:06
  • @Ionic, read Eddie's answer and the RFC. Remember that there are protocols that use 64-bit MAC addresses, and you would not set the U/L bit because such an address is assigned. Creating a modified EUI-64 from a 48-bit MAC address means that it is not universally assigned, so the bit needs to bet set to 1, not flipped to 0. In any case, this is really no longer used as modern OSes use Privacy Extensions with Random Addressing.
    – Ron Maupin
    Apr 29, 2021 at 11:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.