Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions modules/ip6/control/address.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,8 @@ static void ip6_iface_event_handler(uint32_t event, const void *obj) {
switch (event) {
case GR_EVENT_IFACE_POST_ADD:
if (iface_get_eth_addr(iface->id, &mac) == 0) {
// Modify the mac address to match a Modified EUI-64
mac.addr_bytes[0] ^= 0x02;
Comment on lines +406 to +407
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should fix this in DPDK?

Copy link
Member

@david-marchand david-marchand Nov 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DPDK states compliance against RFC 2464.

/*                                                                                                  
 * Generate a link-local IPv6 address from an Ethernet address as specified in                      
 * RFC 2464, section 5.                                                                             
 *                                                                                                  
 * @param[out] ip                                                                                   
 *   The link-local IPv6 address to generate.                                                       
 * @param[in] mac                                                                                   
 *   An Ethernet address.                                                                           
 */                                                                                                 
static inline void                                                                                  
rte_ipv6_llocal_from_ethernet(struct rte_ipv6_addr *ip, const struct rte_ether_addr *mac)       

Section 5 points at section 4 of this RFC and reads like:

   The Interface Identifier is then formed from the EUI-64 by
   complementing the "Universal/Local" (U/L) bit, which is the next-to-
   lowest order bit of the first octet of the EUI-64.  Complementing
   this bit will generally change a 0 value to a 1, since an interface's
   built-in address is expected to be from a universally administered
   address space and hence have a globally unique value.  A universally
   administered IEEE 802 address or an EUI-64 is signified by a 0 in the
   U/L bit position, while a globally unique IPv6 Interface Identifier
   is signified by a 1 in the corresponding position.  For further
   discussion on this point, see [[AARCH](https://datatracker.ietf.org/doc/html/rfc2464#ref-AARCH)].

The reference AARCH is a link to the discussion on IPv6 address architecture, which is current RFC 4291.

So it indeed seems like DPDK should be fixed.

rte_ipv6_llocal_from_ethernet(&link_local, &mac);
if (iface6_addr_add(iface, &link_local, 64) < 0)
errno_log(errno, "iface_addr_add");
Expand Down