Skip to content

cni: enable IPv6 on L2 pod interfaces with v6 address#874

Open
aritrbas wants to merge 1 commit intomasterfrom
abasu-fix-ip6-sas
Open

cni: enable IPv6 on L2 pod interfaces with v6 address#874
aritrbas wants to merge 1 commit intomasterfrom
abasu-fix-ip6-sas

Conversation

@aritrbas
Copy link
Collaborator

@aritrbas aritrbas commented Feb 5, 2026

Summary

Enable IPv6 on L2 pod interfaces when a pod has IPv6, ensuring a link‑local address exists for neighbor discovery.

RCA

VPP change ip-neighbor: do not use sas to determine NS source address makes NS always use the interface’s link‑local address. Calico VPP pod interfaces are unnumbered and never had IPv6 explicitly enabled, so no link‑local address existed on the pod interface. This breaks IPv6 neighbor resolution and traffic.

The old fib_sas6_get() in VPP worked because it used adj_glean_get_src() which finds source addresses from connected prefixes. ip6_get_link_local_address() in VPP now requires ip6_link_is_enabled() to return true. For that, the interface must have had ip6_link_enable() called, which sets up a link-local address. CalicoVPP pod interfaces did not have this, so NS failed with IP6_NEIGHBOR_ERROR_NO_SOURCE_ADDRESS.

Fix

When a pod has IPv6, call EnableInterfaceIP6 on the pod interface after admin‑up. This creates the link‑local address on the pod interface, so NS has a valid source address.

We need to do this for only L2 pod interfaces (where ND works). L3 pod interfaces do not have an Ethernet link to resolve. Enabling IPv6 on L3 pod interfaces triggers VPP to program multicast MACs on a non‑Ethernet interface via ip6_mfib_interface_enable_disable → vnet_hw_interface_add_del_mac_address, which fails because secondary MACs are not supported for those interface types.

Enable IPv6 on pod interfaces when a pod is IPv6 enabled.
This ensures a link‑local address exists for NS.

VPP change "ip-neighbor: do not use sas to determine NS source
address" makes NS always use the interface’s link‑local address.
Calico VPP pod interfaces are unnumbered and never had IPv6
explicitly enabled, so no link‑local address existed on the pod
interface. This breaks IPv6 neighbor resolution and traffic.

Signed-off-by: Aritra Basu <aritrbas@cisco.com>
@aritrbas aritrbas self-assigned this Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant