Skip to content

DOCS-2997: Write the guide for preparing an existing bridge - #2946

Open
ctauchen wants to merge 2 commits into
tigera:mainfrom
ctauchen:DOCS-2997-4-byo-bridge
Open

DOCS-2997: Write the guide for preparing an existing bridge#2946
ctauchen wants to merge 2 commits into
tigera:mainfrom
ctauchen:DOCS-2997-4-byo-bridge

Conversation

@ctauchen

@ctauchen ctauchen commented Aug 21, 2026

Copy link
Copy Markdown
Collaborator

Fills in the guide for preparing an existing bridge. Fourth in the DOCS-2997 sequence. It comes before the main setup guide because its output feeds it.

This is the page for nodes whose only uplink also carries the node's own IP address, where Calico cannot create the bridge itself.

The guide is written around configuring the host so it brings the bridge up correctly at boot. Moving a running IP address onto a bridge reaches the same end state by a much more dangerous route, so the page does not teach it.

What the page covers:

  • The three properties Calico checks, and the ordering warning that enabling VLAN filtering takes a host address dark unless VLAN membership already exists.
  • What Calico deliberately does not require, which keeps the required list credible.
  • Why the bridge MAC address must be set explicitly and must not be the trunk's.
  • The VLAN membership the bridge device needs in its own right, which is the step most likely to be missed and the one most likely to take a node off the network.
  • Two hazards that are not settings: a bridge named with the prefix Calico treats as its own, and the workload startup cost of spanning tree.
  • Verification in two rounds, because the failure modes that matter most only appear when the first workload attaches.

This is the page in the set that most needs an engineering read, for two reasons.

The annotated NetworkManager example is constructed from the documented requirements rather than copied from a working node. It carries a caution telling readers to validate it in a lab first. Alex has a working configuration from the EP2 hash release, and if we can get it, it should either replace this example or be added alongside it. I would rather not ship an invented host network configuration without someone confirming it.

The failure behaviour described in the last section, and the three requirements, come from the code audit rather than from testing. Worth a confirmation that they still hold.

One known interim issue: the link to the concept page uses a section anchor that does not exist in main until the concept page PR merges. The file exists, so the link resolves, but the anchor will not jump until then.

Changed page: https://deploy-preview-2946--calico-docs-preview-next.netlify.app/calico-enterprise/next/networking/l2-bridge/byo-bridge

@ctauchen
ctauchen requested a review from a team as a code owner August 21, 2026 10:49
Copilot AI lite review requested due to automatic review settings August 21, 2026 10:49
@netlify

netlify Bot commented Aug 21, 2026

Copy link
Copy Markdown

Deploy Preview succeeded!

Built without sensitive environment variables

Name Link
🔨 Latest commit d21b9b5
🔍 Latest deploy log https://app.netlify.com/projects/tigera/deploys/6a88577aec65b60008642408
😎 Deploy Preview https://deploy-preview-2946--tigera.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 58 (🔴 down 16 from production)
Accessibility: 98 (no change from production)
Best Practices: 92 (no change from production)
SEO: 100 (no change from production)
PWA: -
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Aug 21, 2026

Copy link
Copy Markdown

Deploy Preview for calico-docs-preview-next ready!

Name Link
🔨 Latest commit d21b9b5
🔍 Latest deploy log https://app.netlify.com/projects/calico-docs-preview-next/deploys/6a88577a76fe0f0008692923
😎 Deploy Preview https://deploy-preview-2946--calico-docs-preview-next.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fills in the Calico Enterprise “Prepare an existing bridge” guide for L2 bridge networking in the shared-uplink (“bring your own bridge”) scenario, focusing on making the host bring the bridge up correctly at boot and verifying behavior before/after the first workload attaches.

Changes:

  • Expands the page with explicit prerequisites, required bridge properties, and ordering/caution guidance (VLAN filtering, MAC pinning, VLAN protocol).
  • Adds detailed host configuration steps, including a NetworkManager keyfile example and bridge/VLAN verification workflow.
  • Adds guidance for setting Felix bpfDataIfacePattern and for referencing an existing bridge from a Network.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +103 to +104
- **Enslaving the trunk.** $[prodname] adds the trunk interface to the bridge itself. The
interface only has to exist and be named in the `Network`.
Copilot AI review requested due to automatic review settings August 21, 2026 11:08
@ctauchen
ctauchen force-pushed the DOCS-2997-4-byo-bridge branch from 1a7868c to 61fbd1f Compare August 21, 2026 11:08
Fill in the guide for nodes whose only uplink also carries the node's own IP
address, where Calico cannot create the bridge itself.

The guide is written around configuring the host to bring the bridge up
correctly at boot. Moving a running IP address onto a bridge is the dangerous
way to reach the same end state, so the page does not teach it.

The page states the three properties Calico checks, and what it deliberately
does not require. It covers why the bridge MAC address must be set explicitly
and must not be the trunk's, the VLAN membership the bridge device needs in its
own right, and two hazards that are not settings: a bridge named with the
prefix Calico treats as its own, and the startup cost of spanning tree.

Verification runs in two rounds, because the failures that matter most only
appear when the first workload attaches.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@ctauchen
ctauchen force-pushed the DOCS-2997-4-byo-bridge branch from 61fbd1f to 0607df2 Compare August 21, 2026 11:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (3)

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:246

  • The step to “find the current value” of bpfDataIfacePattern links to the FelixConfiguration reference, but that page doesn’t reflect your cluster’s live default resource. This is likely to mislead readers into looking in docs rather than querying their cluster config.
Validate this in a lab before you apply it to a cluster you care about.
Host network configuration varies with distribution and with whatever manages it, and the failure mode is a node you cannot reach.

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:303

  • The “Network resource” link currently points to the VRF-focused Network CRD reference (it states only vrf is supported) and does not document the L2 bridge host config fields shown above (for example, bridge.existingBridge). This reference is likely incorrect/misleading in the context of L2 bridge networking.
If the bridge does not meet all three requirements, nothing is programmed and workloads on that `Network` stay administratively down rather than attaching to a bridge that cannot isolate them.

The only signal is the Felix log in `calico-node`, which names the bridge, the `Network`, and the command that fixes it, and repeats every few seconds until you do.

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:175

  • Inside the NetworkManager example, the inline comment says “Calico programs 802.1Q…”, which is ambiguous in Calico Enterprise docs (it can be read as Calico OSS). Consider naming the specific product here for consistency/clarity.

This issue also appears in the following locations of the same file:

  • line 245
  • line 301
```ini
# /etc/NetworkManager/system-connections/br-l2.nmconnection

Copilot AI review requested due to automatic review settings August 21, 2026 11:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (2)

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:257

  • bpfDataIfacePattern is documented as a regular expression (not a glob). The suggested pattern br-l2.* treats . as “any character”, so it can also match unintended interfaces (e.g., br-l20, br-l2x). Consider using an anchored regex and escaping the dot so it matches only br-l2 and its VLAN subinterfaces.
1. Find the current value of `bpfDataIfacePattern` in the default [FelixConfiguration](../../reference/resources/felixconfig.mdx).
2. Add a pattern that matches the device holding the node's address.
   For a node whose address is on `br-l2.100`, `br-l2.*` matches it.

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:313

  • The linked Network resource page currently documents only VRF networks (it states “Currently only vrf is supported”), and does not cover the L2 bridge Network fields described in this guide. Including it here is likely to confuse readers looking for the bridge.existingBridge schema.
- [L2 bridge support and limitations](../../reference/l2-bridge-support.mdx)
- [Network resource](../../reference/resources/network.mdx)

Add a comment at the top of the page naming the user story it exists to serve.

The page ends by handing the reader to the setup guide, so the two pages
complete one path between them. That relationship is recorded as subsidiary, to
make clear that the host-side work is a distinct goal rather than a section that
belongs in the other guide.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 21, 2026 13:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Suppressed comments (3)

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:104

  • The page gives conflicting guidance on whether the host must enslave the trunk interface: this section says $[prodname] adds the trunk, but later the host configuration steps require adding the trunk as a bridge port. Please clarify the distinction (host boot-time reachability vs what $[prodname] does when programming the L2 network) so readers don't skip a necessary host config step or do redundant/unsafe changes.
- **Enslaving the trunk.**
  $[prodname] adds the trunk interface to the bridge itself.
  The interface only has to exist and be named in the `Network`.

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:195

  • In the NetworkManager example, the inline comment says "Calico" but the rest of the page uses $[prodname]. Keeping the product name consistent avoids confusion when this doc is reused across products/editions.
vlan-filtering=true
# Required. Calico programs 802.1Q membership and sub-devices.
vlan-protocol=802.1Q

calico-enterprise/networking/l2-bridge/byo-bridge.mdx:265

  • Step 1 asks readers to find the "current value" of bpfDataIfacePattern but doesn't provide a way to retrieve it from the cluster; the linked page is a resource reference, not the live configuration. Adding a kubectl/calicoctl command here would make the step actionable.
1. Find the current value of `bpfDataIfacePattern` in the default [FelixConfiguration](../../reference/resources/felixconfig.mdx).


Setting an address explicitly stops the kernel from ever reconsidering it.

Do not use the trunk interface's own MAC address for the bridge.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The issue is a little more subtle than that. @aaaaaaaalex explained that not using the trunk's MAC isn't enough on the affected card, you also have to remove the trunk's fdb entry. Seems a bit messy. We might want to name the specific driver and give an explicit workaround for that card (and then drop the general "don't use the trunk's MAC advice" since the trunk's MAC is a good choice if you don't have a buggy driver!)

### What $[prodname] does not require

Just as useful as the required list, and it keeps the required list credible.
Just as useful as the list above, and it keeps that list credible.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Yep, good to tell the reader that we're trying to be credible 😆

Just as useful as the required list, and it keeps the required list credible.
Just as useful as the list above, and it keeps that list credible.

- **Enslaving the trunk.**

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Hmm, this might be a bug on our side, we really want the admin to configure it so the trunk is already attached when Calico starts

- **Bringing the bridge up.**
$[prodname] brings up a bridge that is administratively down.
- **Self VLAN memberships.**
$[prodname] never adds or removes the bridge device's own VLAN memberships, or their PVID and untagged flags.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think we add, but don't remove.

Nothing rejects the name when you create the `Network`, so this is on you to avoid.

**Spanning Tree Protocol is allowed, but it costs workload startup time.**
Every new access port waits out a forwarding delay before it passes traffic, which delays every workload attaching to the bridge.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think it's two forwarding delays by default. The forwarding delay can be set to something lower

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.

3 participants