1:"$Sreact.fragment"
2:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"DocsPage"]
3:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"DocsTitle"]
4:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"DocsDescription"]
5:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"MarkdownCopyButton"]
6:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"ViewOptionsPopover"]
7:I[298330,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"DocsBody"]
8:I[258541,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"default"]
9:I[144324,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"CodeBlock"]
a:I[144324,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js","/_next/static/chunks/0fl1j-qx8cd9s.js","/_next/static/chunks/07a5iiukbd5wg.js","/_next/static/chunks/0xqeqy.-z2ky..js","/_next/static/chunks/02dr12yxoyi0q.js"],"Pre"]
28:I[897367,["/_next/static/chunks/140pj2uproo20.js","/_next/static/chunks/15c2h3n~s5_f2.js","/_next/static/chunks/0i.l9589uvx0j.js","/_next/static/chunks/0elhb0qb6lzk9.js","/_next/static/chunks/05cfw__vu73sg.js","/_next/static/chunks/0zx~ewmzjgdd8.js"],"OutletBoundary"]
29:"$Sreact.suspense"
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"toc":[{"depth":2,"url":"#linux-bridge","title":"Linux Bridge"},{"depth":2,"url":"#open-vswitch-ovs","title":"Open vSwitch (OVS)"},{"depth":2,"url":"#software-defined-networking-sdn","title":"Software-Defined Networking (SDN)"},{"depth":2,"url":"#how-they-relate","title":"How They Relate"}],"children":[["$","$L3",null,{"children":"Network Concepts — Bridges, OVS, and SDN"}],["$","$L4",null,{"className":"mb-0","children":"Key principles behind Linux bridges, Open vSwitch, and Software-Defined Networking in Proxmox."}],["$","div",null,{"className":"flex flex-row gap-2 items-center border-b pb-6","children":[["$","$L5",null,{"markdownUrl":"/llms.mdx/docs/network/network-concepts/content.md"}],["$","$L6",null,{"markdownUrl":"/llms.mdx/docs/network/network-concepts/content.md","githubUrl":"https://github.com/TheGthr/devstributed/blob/main/content/docs/network/network-concepts.mdx"}]]}],["$","$L7",null,{"children":[["$","blockquote",null,{"children":["\n",["$","p",null,{"children":"Quick-reference for the three virtual networking layers used throughout this guide.\nEach builds on the previous one — read them in order."}],"\n"]}],"\n",["$","hr",null,{}],"\n",["$","h2",null,{"className":"flex scroll-m-28 flex-row items-center gap-2","id":"linux-bridge","children":[["$","a",null,{"data-card":"","href":"#linux-bridge","className":"peer","children":"Linux Bridge"}],["$","$L8",null,{"iconNode":[["path",{"d":"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71","key":"1cjeqo"}],["path",{"d":"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71","key":"19qd67"}]],"className":"lucide-link size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity peer-hover:opacity-100","aria-hidden":true}]]}],"\n",["$","p",null,{"children":["A ",["$","strong",null,{"children":"bridge"}]," is a virtual L2 switch implemented in the Linux kernel. It connects multiple network interfaces (physical NICs, VM tap devices, veth pairs) so that frames can flow between them as if they were plugged into the same physical switch."]}],"\n",["$","p",null,{"children":["$","strong",null,{"children":"How it works:"}]}],"\n",["$","ol",null,{"children":["\n",["$","li",null,{"children":["Each interface attached to a bridge becomes a ",["$","strong",null,{"children":"bridge port"}],"."]}],"\n",["$","li",null,{"children":["The bridge maintains a ",["$","strong",null,{"children":"MAC address table"}]," (FDB — Forwarding Database). When a frame arrives on a port, the bridge learns the source MAC and records which port it came from."]}],"\n",["$","li",null,{"children":["For a destination MAC it already knows, the bridge forwards only to that port. For unknown MACs, it ",["$","strong",null,{"children":"floods"}]," to all ports (same as a dumb switch)."]}],"\n",["$","li",null,{"children":"No routing (L3) — it only forwards L2 Ethernet frames."}],"\n"]}],"\n",["$","p",null,{"children":[["$","strong",null,{"children":"In Proxmox:"}]," ",["$","code",null,{"children":"vmbr0"}]," is a Linux bridge. Every VM you create gets a ",["$","code",null,{"children":"tapXXiY"}]," interface that is automatically attached to the bridge. The bridge acts as the virtual switch connecting all your VMs and the physical NIC."]}],"\n",["$","$L9",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"","children":["$","$La",null,{"children":"$Lb"}]}],"\n","$Lc","\n","$Ld","\n","$Le","\n","$Lf","\n","$L10","\n","$L11","\n","$L12","\n","$L13","\n","$L14","\n","$L15","\n","$L16","\n","$L17","\n","$L18","\n","$L19","\n","$L1a","\n","$L1b","\n","$L1c","\n","$L1d","\n","$L1e","\n","$L1f","\n","$L20","\n","$L21","\n","$L22","\n","$L23","\n","$L24"]}]]}],["$L25","$L26"],"$L27"]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"L_SX5VZLxMT502WwzWmyq"}
b:["$","code",null,{"children":[["$","span",null,{"className":"line","children":["$","span",null,{"children":" [ enp1s0 (physical NIC) ]"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" |"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" [ vmbr0 ] ← Linux bridge"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" / | \\"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" tap100 tap101 tap102 ← VM virtual NICs"}]}]]}]
c:["$","p",null,{"children":[["$","strong",null,{"children":"When to use:"}]," Default for most setups. Zero overhead, kernel-native, simple to configure in ",["$","code",null,{"children":"/etc/network/interfaces"}],"."]}]
d:["$","hr",null,{}]
e:["$","h2",null,{"className":"flex scroll-m-28 flex-row items-center gap-2","id":"open-vswitch-ovs","children":[["$","a",null,{"data-card":"","href":"#open-vswitch-ovs","className":"peer","children":"Open vSwitch (OVS)"}],["$","$L8",null,{"iconNode":"$0:rsc:props:children:0:props:children:3:props:children:4:props:children:1:props:iconNode","className":"lucide-link size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity peer-hover:opacity-100","aria-hidden":true}]]}]
f:["$","p",null,{"children":["OVS is a ",["$","strong",null,{"children":"programmable"}]," virtual switch. Where Linux Bridge has a fixed forwarding model, OVS exposes a ",["$","strong",null,{"children":"flow table"}]," you can populate with OpenFlow rules — giving you full control over how packets are forwarded, rewritten, or dropped."]}]
10:["$","p",null,{"children":["$","strong",null,{"children":"Key concepts:"}]}]
11:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Bridge"}]," (",["$","code",null,{"children":"ovs-vsctl add-br"}],"): same role as a Linux bridge, but backed by OVS."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Port"}],": an interface attached to the OVS bridge. Can be a physical NIC, a VM tap, or a ",["$","strong",null,{"children":"internal port"}]," (a virtual interface local to the host, no physical NIC needed)."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Flow table"}],": ordered list of match+action rules. A packet is matched top-to-bottom; the first matching rule wins. Default rule: ",["$","code",null,{"children":"normal"}]," (behaves like a Linux bridge)."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"OpenFlow controller"}],": an external process that programs the flow table. OVS ships without one — the default ",["$","code",null,{"children":"normal"}]," action handles forwarding just like Linux Bridge until you add custom rules."]}],"\n"]}]
12:["$","p",null,{"children":["$","strong",null,{"children":"What it adds over Linux Bridge:"}]}]
13:["$","div",null,{"className":"relative overflow-auto prose-no-margin my-6","children":["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Feature"}],["$","th",null,{"children":"Linux Bridge"}],["$","th",null,{"children":"OVS"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":"Programmable flows"}],["$","td",null,{"children":"No"}],["$","td",null,{"children":"Yes (OpenFlow)"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Port mirroring"}],["$","td",null,{"children":"Limited"}],["$","td",null,{"children":"Built-in"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"VXLAN tunnels"}],["$","td",null,{"children":"No"}],["$","td",null,{"children":"Yes (native)"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"QoS / rate limiting"}],["$","td",null,{"children":"No"}],["$","td",null,{"children":"Yes"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Used by OpenStack"}],["$","td",null,{"children":"No"}],["$","td",null,{"children":"Yes (Neutron/OVN)"}]]}]]}]]}]}]
14:["$","p",null,{"children":[["$","strong",null,{"children":"Internal port"}]," (useful when you have no spare NIC):"]}]
15:["$","p",null,{"children":"An internal port is a virtual interface created by OVS on the bridge. Assign it an IP — VMs attached to that OVS bridge can reach the host through it. No physical hardware required."}]
16:["$","$L9",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"","children":["$","$La",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"ovs-vsctl"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" add-port"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" ovsbr0"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" ovs-int"}],["$","span",null,{"style":{"--shiki-light":"#005CC5","--shiki-dark":"#79B8FF"},"children":" --"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" set"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" Interface"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" ovs-int"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" type=internal"}]]}],"\n",["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"ip"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" addr"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" add"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" 10.20.0.1/24"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" dev"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" ovs-int"}]]}],"\n",["$","span",null,{"className":"line","children":[["$","span",null,{"style":{"--shiki-light":"#6F42C1","--shiki-dark":"#B392F0"},"children":"ip"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" link"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" set"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" ovs-int"}],["$","span",null,{"style":{"--shiki-light":"#032F62","--shiki-dark":"#9ECBFF"},"children":" up"}]]}]]}]}]}]
17:["$","p",null,{"children":[["$","strong",null,{"children":"When to use:"}]," When you need VXLAN tunnels between hosts, per-flow traffic control, or want to learn how OpenStack/OVN works under the hood."]}]
18:["$","hr",null,{}]
19:["$","h2",null,{"className":"flex scroll-m-28 flex-row items-center gap-2","id":"software-defined-networking-sdn","children":[["$","a",null,{"data-card":"","href":"#software-defined-networking-sdn","className":"peer","children":"Software-Defined Networking (SDN)"}],["$","$L8",null,{"iconNode":"$0:rsc:props:children:0:props:children:3:props:children:4:props:children:1:props:iconNode","className":"lucide-link size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity peer-hover:opacity-100","aria-hidden":true}]]}]
1a:["$","p",null,{"children":["SDN is an ",["$","strong",null,{"children":"architectural pattern"}],", not a specific technology. The core idea: separate the ",["$","strong",null,{"children":"control plane"}]," (deciding where traffic goes) from the ",["$","strong",null,{"children":"data plane"}]," (actually forwarding packets). A centralized controller programs many switches at once, instead of each switch making independent decisions."]}]
1b:["$","p",null,{"children":["$","strong",null,{"children":"In the context of Proxmox SDN:"}]}]
1c:["$","p",null,{"children":["Proxmox SDN is a cluster-wide ",["$","strong",null,{"children":"management layer"}]," built on top of Linux bridges or OVS. It introduces:"]}]
1d:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","strong",null,{"children":"Zones"}],": define what kind of network a group of VNets uses (Simple, VLAN, VXLAN, EVPN). A zone maps to a forwarding technology."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"VNets"}],": named virtual networks within a zone. Proxmox generates a Linux bridge named after the VNet on every cluster node."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"Subnets"}],": IP ranges and DHCP/DNS config attached to a VNet."]}],"\n",["$","li",null,{"children":[["$","strong",null,{"children":"EVPN / BGP integration"}],": for multi-node L3 routing, Proxmox SDN delegates to FRR (the same daemon used in Exercise 4)."]}],"\n"]}]
1e:["$","$L9",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"","children":["$","$La",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":["$","span",null,{"children":" Proxmox SDN (management)"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" |"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" Zone: VXLAN ──→ creates VXLAN tunnels between nodes"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" Zone: Simple ──→ creates plain Linux bridges"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" Zone: EVPN ──→ creates OVS + FRR for L3 routing"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" |"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" VNet: \"lab\" ──→ generates bridge \"lab\" on each node"}]}]]}]}]}]
1f:["$","p",null,{"children":[["$","strong",null,{"children":"Broader SDN (outside Proxmox):"}]," In Kubernetes, the CNI plugin ",["$","em",null,{"children":"is"}]," your SDN. Cilium's control plane programs eBPF maps (data plane) for pod routing — the same separation of control and data plane that OpenFlow introduced for physical switches."]}]
20:["$","p",null,{"children":[["$","strong",null,{"children":"When to use Proxmox SDN:"}]," When managing multiple Proxmox nodes and you want consistent, declarative network definitions across the cluster without editing ",["$","code",null,{"children":"/etc/network/interfaces"}]," on each node by hand."]}]
21:["$","hr",null,{}]
22:["$","h2",null,{"className":"flex scroll-m-28 flex-row items-center gap-2","id":"how-they-relate","children":[["$","a",null,{"data-card":"","href":"#how-they-relate","className":"peer","children":"How They Relate"}],["$","$L8",null,{"iconNode":"$0:rsc:props:children:0:props:children:3:props:children:4:props:children:1:props:iconNode","className":"lucide-link size-3.5 shrink-0 text-fd-muted-foreground opacity-0 transition-opacity peer-hover:opacity-100","aria-hidden":true}]]}]
23:["$","$L9",null,{"className":"shiki shiki-themes github-light github-dark","style":{"--shiki-light":"#24292e","--shiki-dark":"#e1e4e8","--shiki-light-bg":"#fff","--shiki-dark-bg":"#24292e"},"tabIndex":"0","icon":"","children":["$","$La",null,{"children":["$","code",null,{"children":[["$","span",null,{"className":"line","children":["$","span",null,{"children":"Linux Bridge ── simple, kernel-native, single-host L2"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" ↓ adds programmability"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":"Open vSwitch ── flow tables, VXLAN tunnels, port mirroring"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" ↓ adds lifecycle management"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":"Proxmox SDN ── declarative zones/VNets, cluster-wide, FRR for L3"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":" ↓ adds workload identity"}]}],"\n",["$","span",null,{"className":"line","children":["$","span",null,{"children":"Kubernetes CNI ── Cilium/Calico: pod-level policy, BGP, eBPF"}]}]]}]}]}]
24:["$","p",null,{"children":"Each layer is a superset of the one above it in complexity. Start with Linux Bridge; reach for OVS when you need programmability or VXLAN; use Proxmox SDN when managing a cluster; and understand all three before reasoning about CNI plugins."}]
25:["$","script","script-0",{"src":"/_next/static/chunks/0xqeqy.-z2ky..js","async":true}]
26:["$","script","script-1",{"src":"/_next/static/chunks/02dr12yxoyi0q.js","async":true}]
27:["$","$L28",null,{"children":["$","$29",null,{"name":"Next.MetadataOutlet","children":"$@2a"}]}]
2a:null