all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Hannes Laimer <h.laimer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH pve-docs v3 45/45] sdn: add microsegmentation section
Date: Tue, 27 Oct 2026 09:55:27 +0100	[thread overview]
Message-ID: <20261027085527.702738-46-h.laimer@proxmox.com> (raw)
In-Reply-To: <20261027085527.702738-1-h.laimer@proxmox.com>

Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
---
 pvesdn.adoc | 403 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 391 insertions(+), 12 deletions(-)

diff --git a/pvesdn.adoc b/pvesdn.adoc
index 7a674597d470..84f44ab73592 100644
--- a/pvesdn.adoc
+++ b/pvesdn.adoc
@@ -147,6 +147,9 @@ following sections:
 * xref:pvesdn_config_vnet[VNets]: Create virtual network bridges and
   manage subnets
 
+* xref:pvesdn_config_microseg[Microsegmentation]: Segment traffic between
+  guests with group-based policies
+
 The Options category allows adding and managing additional services to be used
 in your SDN setup.
 
@@ -189,6 +192,83 @@ files located in '/etc/pve/sdn'.
 
 // TODO: extend implementation and technology details.
 
+[[pvesdn_microseg_background]]
+Microsegmentation Enforcement
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The node enforces the xref:pvesdn_config_microseg[microsegmentation] policy in
+the kernel, at the network interface of the receiving guest. It checks each
+packet on its own, without connection tracking, and drops a denied packet
+without an answer. Nothing runs in the guest, so a guest cannot turn it off or
+get around it.
+
+Each set of groups that an assignment lists gets a 16-bit number, its group
+identity, and sets that every rule treats alike share one. The node marks every
+packet an assigned interface sends with the identity of that interface. When a
+packet reaches an assigned interface, the node checks the identity of the
+sender against the identity of the receiver. Addresses play no part in this.
+
+A guest cannot forge its identity, since the node sets it. The network between
+the nodes is trusted to carry the identity unchanged, as it is trusted with
+VLAN tags.
+
+On the node, the identity lives in the low 16 bits of the packet mark and stays
+there when the node routes a packet. Other uses of the mark, such as policy
+routing by fwmark or firewall mark rules, must leave these bits alone. A rule
+that matches on the mark masks them out, for example
+`fwmark 0x10000/0xffff0000`. A packet the node itself sends with a value in
+these bits counts as that identity.
+
+Between nodes, only VXLAN and EVPN zones with the *VXLAN-GBP* option carry the
+identity, in the VXLAN header (see xref:pvesdn_zone_plugin_vxlan[VXLAN Zones]
+and xref:pvesdn_zone_plugin_evpn[EVPN Zones]). On every other zone, traffic
+from another node arrives without an identity and counts as untagged. The
+policy is bound to the guest interface, not to the zone. An interface on a
+bridge outside the SDN, such as `vmbr0`, is enforced like one on a VNet.
+
+For each pair of a sending and a receiving identity that a rule allows, the
+node keeps a verdict and the checks of the narrowed rules. A narrowed rule
+needs one check per protocol and per combination of a source and a destination
+port range, so a destination port list of `80,443` needs two checks. There is
+room for 65535 identities, 1048576 pairs and 512 checks per pair. A pair with
+more than 7 checks keeps the rest in a list shared with the pairs that have the
+same ones, and there is room for 16384 such lists.
+
+An SDN apply refuses a policy over one of these limits and names the limit, so
+such a policy never reaches a node. An identity that is no longer needed stays
+reserved for an hour, and the overview counts it as retired.
+
+A guest starts on a node only if all of its assigned interfaces can be enforced
+there, and a migration fails on the target node where a start would fail. If a
+node cannot read the applied SDN configuration, no guest with a network
+interface starts on it, since the node cannot tell which interfaces are
+assigned.
+
+If a node cannot apply the policy during an SDN apply, its network reload task
+fails and the node keeps its previous enforcement. On a node without loaded
+programs, for example after a failed apply at boot, no guest with an assigned
+interface starts until a reload succeeds. If the node cannot load a new
+package's programs, the previous package's programs stay in place.
+
+NOTE: Nodes with and without microsegmentation support can run in the same
+cluster during an upgrade, but the SDN apply should only be run on the nodes
+that support it. An apply from a node without support leaves the assigned
+guests that start after it unenforced.
+
+The guest firewall still applies, a packet has to pass both. A packet that
+microsegmentation drops gets no answer, even if the firewall is set to reject.
+
+With the guest firewall enabled, an interface usually sits behind its own
+firewall bridge, only the nftables firewall on a Linux bridge needs none. Behind
+a firewall bridge, the node cannot tell its own ARP and neighbor discovery
+replies from those of other senders. Such an interface therefore accepts both
+from every sender without an identity. Other interfaces accept them without an
+identity only from the node itself, or where a rule allows untagged traffic.
+
+WARNING: Behind a firewall bridge, an unassigned guest on the same VNet can
+answer ARP and neighbor discovery for addresses that are not its own. Only that
+guest's own firewall, filtering its IP and MAC addresses, prevents it.
+
 [[pvesdn_config_zone]]
 Zones
 -----
@@ -311,12 +391,13 @@ MTU:: Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes
   lower than the outgoing physical interface.
 
 VXLAN-GBP:: Enable VXLAN Group Based Policy (GBP) on the zone's VXLAN
-  interfaces. GBP carries a 16-bit group ID in the VXLAN header, taken from
-  the packet mark on the sending node and restored on the receiving one.
-  Every VTEP in the zone must have it enabled, since one without it drops
-  GBP-tagged traffic. All zones that use the same VXLAN port must agree on
-  this option, an SDN apply refuses a configuration where they do not.
-  Optional.
+  interfaces. xref:pvesdn_config_microseg[Microsegmentation] uses it to carry
+  an interface's group identity between nodes. GBP carries a 16-bit group ID
+  in the VXLAN header, taken from the packet mark on the sending node and
+  restored on the receiving one. Every VTEP in the zone must have it enabled,
+  since one without it drops GBP-tagged traffic. All zones that use the same
+  VXLAN port must agree on this option, an SDN apply refuses a configuration
+  where they do not.  Optional.
 
 NOTE: The kernel sets GBP only when it creates a VXLAN interface. Changing the
 option on an existing zone therefore recreates the zone's VXLAN interfaces on
@@ -384,12 +465,13 @@ MTU:: Because VXLAN encapsulation uses 50 bytes, the MTU needs to be 50 bytes
   defaults to 1450.
 
 VXLAN-GBP:: Enable VXLAN Group Based Policy (GBP) on the zone's VXLAN
-  interfaces. GBP carries a 16-bit group ID in the VXLAN header, taken from
-  the packet mark on the sending node and restored on the receiving one.
-  Every VTEP in the zone must have it enabled, since one without it drops
-  GBP-tagged traffic. All zones that use the same VXLAN port must agree on
-  this option, an SDN apply refuses a configuration where they do not.
-  Optional.
+  interfaces. xref:pvesdn_config_microseg[Microsegmentation] uses it to carry
+  an interface's group identity between nodes. GBP carries a 16-bit group ID
+  in the VXLAN header, taken from the packet mark on the sending node and
+  restored on the receiving one. Every VTEP in the zone must have it enabled,
+  since one without it drops GBP-tagged traffic. All zones that use the same
+  VXLAN port must agree on this option, an SDN apply refuses a configuration
+  where they do not.  Optional.
 
 NOTE: The kernel sets GBP only when it creates a VXLAN interface. Changing the
 option on an existing zone therefore recreates the zone's VXLAN interfaces on
@@ -467,6 +549,303 @@ DNS Zone Prefix:: Add a prefix to the domain registration, like
   <hostname>.prefix.<domain>  Optional.
 
 
+[[pvesdn_config_microseg]]
+Microsegmentation
+-----------------
+
+Microsegmentation allows or denies traffic between groups of guests at their
+network interfaces, independent of their addresses. The node enforces it in the
+kernel, so a guest cannot turn it off, and a guest keeps its rules when it
+moves to another node.
+
+The policy consists of three kinds of objects. *Groups* are labels.
+*Assignments* put guest network interfaces into groups, by guest, by tag or by
+name. *Rules* allow or deny traffic from one set of groups to another. An
+interface that an assignment covers receives only what a rule allows.
+
+Microsegmentation is managed under `Datacenter -> SDN -> Microsegmentation`.
+The *Microsegmentation* tab of a guest shows the groups of its interfaces and
+the rules that apply to them. Changes to the policy take effect with the next
+SDN apply.
+
+Rules are stateless and apply to one direction, so a connection needs a rule
+for each direction, or one rule with *Both Directions* set. Traffic that does
+not come from a guest in a group, such as the replies of a gateway or a DHCP
+server, is untagged. It needs a rule with the built-in `untagged` group as the
+source.
+
+Between nodes, only VXLAN and EVPN zones with the *VXLAN-GBP* option carry the
+groups of a guest. On every other zone, traffic from another node arrives
+untagged. The guest firewall still applies, a packet has to pass both. See
+xref:pvesdn_microseg_background[Microsegmentation Enforcement] for how the
+enforcement works and for its limits.
+
+Viewing the configuration needs `SDN.Audit` on the `/sdn/microseg` ACL path,
+changing it needs `SDN.Allocate` there. The guests an assignment covers are
+shown only where you have `VM.Audit` on the guest, as in the resource tree.
+
+[[pvesdn_microseg_group]]
+Groups
+~~~~~~
+
+A group is a label for guest interfaces. An interface gets its groups from the
+one assignment that covers it (see
+xref:pvesdn_microseg_assignment[Assignments]). Rules match the groups of an
+interface, never the interface itself.
+
+Groups can be nested. An interface in a subgroup is also in every group above
+it. With `database` a subgroup of `production`, an interface assigned
+`database` has both groups. An `any` or `all` match over `production` covers
+it, an `exact` match over `production` does not, and rules on `database` cover
+databases only.
+
+The groups that an `all` or `exact` match lists include the groups above them,
+so an `exact` match over `database` means `production` and `database`. A rule
+with such a match on a subgroup is therefore more specific than the same rule
+on the parent. Specificity decides a tie between rules of the same priority
+(see xref:pvesdn_microseg_rule[Rules]). An `any` match counts no groups.
+
+Group configuration options:
+
+Name:: 2 to 32 letters, digits, `-` and `_`, starting and ending with a letter
+  or digit. The name `untagged` and names shaped like a generated ID, such as
+  `vm100`, are reserved.
+
+Parent:: The group this one is a subgroup of.  Optional.
+
+Comment:: A descriptive comment.  Optional.
+
+NOTE: A group cannot be deleted while a rule names it, an assignment lists it,
+or it has subgroups.
+
+[[pvesdn_microseg_rule]]
+Rules
+~~~~~
+
+A rule allows or denies traffic from a source to a destination. Each side lists
+groups and a match kind, checked against the groups of the sending and of the
+receiving interface. The default is deny, so rules allow traffic, or deny part
+of what a broader rule allows. Traffic within one group needs a rule like any
+other.
+
+A rule applies to one direction. A TCP connection from `web` to `app` needs an
+allow from `web` to `app`, and one from `app` to `web` for the replies. A rule
+with *Both Directions* set is exactly that pair, the rule and its mirror with
+source and destination swapped.
+
+Two guests can only talk once they have resolved each other's addresses. ARP
+and the neighbor solicitations and advertisements of IPv6 therefore pass
+between a sender and a receiver in both directions as soon as a rule allows
+any traffic between them in one direction.
+
+They also pass when the node sends them itself. That is how the ARP replies of
+a gateway on the node and the suppression replies of an EVPN zone reach a
+guest. Nothing else passes without a rule.
+
+A rule can be narrowed to a protocol, ports or an ICMP type, like a firewall
+rule. A narrowed rule decides only the IP traffic it names. Anything that is
+not IP, ARP, LLDP or spanning tree for example, gets the verdict of the rules
+without narrowing.
+
+Narrowed rules are checked from the highest priority down to the priority of
+the highest rule without narrowing. At the same priority the more specific
+rule comes first, and of two equally specific rules the deny. The first
+narrowed rule that matches a packet decides it. Traffic that no narrowed rule
+matches gets the verdict of the rules without narrowing, or is denied if there
+are none.
+
+To allow SSH from `web` to `app`, allow `tcp` with destination port `22` from
+`web` to `app`, and `tcp` with source port `22` from `app` to `web` for the
+replies. One rule with *Both Directions* set and destination port `22` does the
+same, since the mirror swaps the ports. Either way the reply rule allows every
+segment from port `22`, not only replies, so `app` can also open connections to
+`web` from that port.
+
+NOTE: Neighbor discovery is ICMPv6, so a narrowed deny of ICMPv6 blocks it even
+where the reverse direction allows traffic.
+
+IP fragments after the first one carry no transport header. A rule narrowed by
+ports or an ICMP type never matches them, and neither does a rule narrowed to
+just a protocol. If only narrowed allows let traffic pass between a sender and a
+receiver, the later fragments are dropped and fragmented packets never arrive.
+
+An allow with *Fragments Only* set lets them pass. It also passes the later
+fragments of other datagrams, but those cannot be reassembled without their
+first fragment, which the other rules decide.
+
+An IPv6 fragment counts as the protocol its fragment header names. If that is
+an extension header instead of the transport protocol, a rule narrowed to the
+transport protocol does not match it, but a rule without a protocol does.
+
+Where narrowed rules apply to a sender and a receiver, a packet whose transport
+header cannot be read is dropped, since the rules cannot be checked against it.
+Examples are a first fragment that ends before the transport header, an IPv6
+packet with more than 12 extension headers, and a packet with more than two
+VLAN tags. Where no narrowed rule applies, such a packet gets the same verdict
+as any other.
+
+The built-in `untagged` group stands for traffic without a group. It comes from
+an interface that no assignment covers, from a host outside the policy, or from
+another node over a zone without the *VXLAN-GBP* option. To allow such traffic,
+list `untagged` in the source of a rule, on its own or next to other groups
+with the `any` match. This is how the replies of a gateway, of a DHCP server or
+of any other host outside the policy reach a guest.
+
+NOTE: In a source with the `all` or `exact` match, `untagged` must be the only
+listed group, and an `every` source never includes it. A destination never
+matches `untagged`, since every enforced interface has a group. It can list
+`untagged` only next to other groups with the `any` match, where it has no
+effect. Assignments cannot use it.
+
+Rule configuration options:
+
+Source Groups/Dest. Groups:: The groups the sending or the receiving interface
+  is checked against. Not set with the `every` match.
+
+Source Match/Dest. Match:: How the listed groups compare with the groups of an
+  interface. `any` matches an interface that has at least one of them, `all`
+  one that has all of them, and `exact` one that has exactly the listed
+  groups. For `all` and `exact`, the listed groups include the groups above
+  them. `every` lists no groups and matches every assigned interface.
+  Optional, defaults to `any`.
+
+Priority:: A number from 0 to 65535. Among the rules without narrowing that
+  match a sender and a receiver, the highest priority decides, and among those
+  the most specific. The specificity of a rule is the number of groups its
+  `all` and `exact` matches list, the groups above them included, and an `any`
+  or `every` match counts none. Equally specific rules deny if one of them
+  denies.  Optional, defaults to 0.
+
+Action:: Allow or deny.
+
+Protocol/Source port/Dest. port/ICMP type:: Narrow the rule, with the syntax of
+  firewall rules. Ports need a protocol that has ports, and an ICMP type needs
+  an ICMP protocol.  Optional.
+
+Macro:: A firewall macro, for example `HTTPS` or `Ceph`, in place of the
+  protocol, ports and ICMP type. Not combined with them.  Optional.
+
+Fragments Only:: Narrow the rule to the IP fragments after the first one, of
+  the given protocol or of every protocol. Not combined with ports, an ICMP
+  type or a macro.  Optional.
+
+Both Directions:: Also apply the rule with source and destination swapped,
+  ports included. Not with the `untagged` group or an ICMP type, whether set
+  directly or through a macro such as `Ping`.  Optional.
+
+Comment:: A descriptive comment.  Optional.
+
+The source, the destination, the direction and the narrowing identify a rule,
+so they cannot be changed on an existing rule. Delete the rule and create it
+again instead. The priority, the action and the comment can be changed.
+
+[[pvesdn_microseg_assignment]]
+Assignments
+~~~~~~~~~~~
+
+An assignment puts guest network interfaces into a set of groups. Its matcher
+selects one guest, the guests with certain tags, or the guests whose name
+matches a regular expression. You choose the matcher when you add the
+assignment, with *Guest Assignment*, *Tag Assignment* or *Regex Assignment* in
+the *Add* menu.
+
+Assignments are an ordered list, checked from first to last. An interface gets
+exactly the groups of the first assignment that covers it, and later ones have
+no effect on it. A new assignment goes to the top unless you give it a
+position, and you can move an existing one. Place an assignment for a single
+guest above the tag or regex assignments that also cover that guest.
+
+An interface that no assignment covers is not enforced. All traffic reaches
+it, and its own traffic reaches enforced guests as untagged.
+
+A combination of groups needs one assignment that lists all of them, since an
+interface gets the groups of a single assignment. For guests tagged both `prod`
+and `web`, add a tag assignment with the `all` match over both tags that lists
+both groups. Place it above the assignments that match only one of the tags.
+
+Tag and regex matchers use the current tags and name of a guest. They are
+matched each time an interface of the guest comes up, so a new guest or a
+hot-plugged interface is enforced from the start. A change of a running guest's
+tags or name made with `qm set` or `pct set`, through the API or the web
+interface, takes effect immediately.
+
+Changes to the assignments themselves, their order included, are pending until
+the next SDN apply.
+
+NOTE: Moving an assignment usually changes only its own place, so only that
+assignment shows up as a pending change. After many moves to the same spot, all
+assignments are renumbered once and show up together.
+
+A tag or a name can put a guest into a group. Setting one that an assignment
+matches, at creation or later, therefore needs `SDN.Use` on `/sdn/microseg`
+besides the right to change the option. This applies to a tag that a tag
+assignment matches, and to a rename into or out of the names a regex
+assignment matches.
+
+Assignment configuration options:
+
+Guest:: (guest matcher) The VM or container.
+
+Tags:: (tag matcher) The guest tags to match. They are normalized like guest
+  tags, so their case matters only with a case-sensitive datacenter tag style.
+
+Tag Match:: (tag matcher) `any` matches a guest with at least one of the
+  listed tags, `all` one with all of them, and `exact` one with exactly these
+  tags.  Optional, defaults to `any`.
+
+Name Regex:: (regex matcher) A regular expression in Rust syntax, ASCII only,
+  without backreferences or lookaround. It is matched anywhere in the VM name
+  or the container hostname, so anchor it with `^` and `$` for the whole name.
+  A VM without a name is never matched, not even by `.*`, since the `VM 100`
+  shown for it is not its name. A container created without a hostname gets
+  one like `CT100`, which is matched like any other name.
+
+Network Interface:: The number of a guest interface, from 0 to 31, `0` for
+  `net0`. Left empty, the assignment covers all interfaces of the guest.
+  Optional.
+
+Groups:: The groups that the covered interfaces get.
+
+Position:: The place in the list, 0 being the first. A position past the end
+  puts the assignment last. Left empty on an existing assignment, it keeps its
+  place.  Optional, defaults to 0 for a new assignment.
+
+Comment:: A descriptive comment.  Optional.
+
+The matcher fields and the network interface identify an assignment, so they
+cannot be changed on an existing one. Delete the assignment and create it
+again instead. The groups, the position and the comment can be changed.
+
+[[pvesdn_microseg_example]]
+Example
+~~~~~~~
+
+Web, application and database guests share one VNet and are tagged `web`,
+`app` and `db`. The web guests should reach the application guests, and those
+the databases, and nothing else.
+
+. Create the groups `web`, `app` and `db`.
+. For each tag, add a tag assignment that puts the guests with that tag into
+  the group of the same name.
+. Add a rule that allows `web` to `app` with *Both Directions* set, and one
+  that allows `app` to `db` the same way.
+. Add a rule that allows `untagged` to `web`, `app` and `db`, for the replies
+  of the gateway and the DHCP server.
+. Apply the SDN configuration.
+
+Web guests now reach the application guests, and those reach the databases.
+Traffic from web to database and traffic within a tier is dropped.
+
+NOTE: The rule for `untagged` also admits every guest on the VNet that no
+assignment covers. Either assign every guest, or narrow that rule to the
+protocols the outside traffic needs.
+
+To keep a staging environment apart from production, tag each guest with its
+environment as well and add the groups `prod` and `staging`. Then add one tag
+assignment per combination, such as `all` over `prod` and `web`, that lists
+both groups. In the rules, use the `all` match over the tier and the
+environment, for example `all` over `web` and `prod`.
+
 [[pvesdn_config_controllers]]
 Controllers
 -----------
-- 
2.47.3





      parent reply	other threads:[~2026-10-27  9:03 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-27  8:54 [PATCH access-control/cluster/container/docs/manager/network/proxmox{-ebpf,-ve-rs,-perl-rs}/qemu-server v3 00/45] sdn: add microsegmentation support Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ebpf v3 01/45] build: keep the build directory out of the BPF objects Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ebpf v3 02/45] policy: add the enforcement subsystem for guest interfaces Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ebpf v3 03/45] policy: add a check for non-first fragments Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 04/45] ve-config: firewall: add a constructor for sctp matches Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 05/45] ve-config: sdn: microseg: add identity allocation for group sets Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 06/45] ve-config: sdn: microseg: add config types Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 07/45] ve-config: sdn: microseg: add tag matcher Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 08/45] ve-config: sdn: microseg: add name regex matcher Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 09/45] ve-config: sdn: microseg: narrow rules by protocol and ports Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 10/45] ve-config: sdn: microseg: add group hierarchy Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 11/45] ve-config: firewall: expose protocol, icmp type and code numbers Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 12/45] ve-config: sdn: microseg: add the desired state Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 13/45] microseg: add a crate that applies the policy to a node's guest NICs Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-ve-rs v3 14/45] microseg: add a rule option that matches non-first fragments Hannes Laimer
2026-10-27  8:54 ` [PATCH pve-cluster v3 15/45] cfs: add 'sdn/microseg.cfg' to observed files Hannes Laimer
2026-10-27  8:54 ` [PATCH pve-access-control v3 16/45] permissions: add ACL path for SDN microsegmentation Hannes Laimer
2026-10-27  8:54 ` [PATCH proxmox-perl-rs v3 17/45] pve-rs: sdn: add microseg config binding Hannes Laimer
2026-10-27  8:55 ` [PATCH proxmox-perl-rs v3 18/45] pve-rs: sdn: microseg: bind the data plane Hannes Laimer
2026-10-27  8:55 ` [PATCH proxmox-perl-rs v3 19/45] pve-rs: sdn: microseg: check the data plane limits on render Hannes Laimer
2026-10-27  8:55 ` [PATCH proxmox-perl-rs v3 20/45] pve-rs: debian: fire the pve-microseg-update trigger on upgrade Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 21/45] sdn: zones: add vxlan-gbp option to vxlan and evpn zones Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 22/45] sdn: microseg: add config, API and guest inventory Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 23/45] sdn: dry-run: show pending microseg changes Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 24/45] sdn: microseg: enforce the policy on guest NICs Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 25/45] sdn: microseg: add tag matcher Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 26/45] sdn: microseg: add name regex matcher Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 27/45] sdn: microseg: add an update for a running NIC Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 28/45] sdn: microseg: expose protocol, port and macro rule options Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 29/45] sdn: microseg: allow nesting groups under a parent Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-network v3 30/45] sdn: microseg: expose the fragments rule option Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 31/45] network: apply the microseg policy on reload Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 32/45] pve-sdn-commit: apply the microseg policy at boot Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 33/45] ui: sdn: zones: add vxlan-gbp checkbox to vxlan and evpn Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 34/45] ui: sdn: add microsegmentation panel Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 35/45] ui: sdn: dry-run: show pending microseg diff Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 36/45] ui: sdn: microseg: add tag matcher Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 37/45] ui: sdn: microseg: add name regex matcher Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 38/45] ui: sdn: microseg: add narrowing to the rule form Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 39/45] ui: sdn: microseg: show and edit the group hierarchy Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 40/45] ui: sdn: microseg: add fragments option to the rule form Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-manager v3 41/45] ui: sdn: microseg: add a guest tab with its groups and rules Hannes Laimer
2026-10-27  8:55 ` [PATCH qemu-server v3 42/45] network: update the microseg enforcement on a tag or name change Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-container v3 43/45] lxc: update the microseg enforcement on a tag or hostname change Hannes Laimer
2026-10-27  8:55 ` [PATCH pve-docs v3 44/45] sdn: zones: document the VXLAN-GBP option Hannes Laimer
2026-10-27  8:55 ` Hannes Laimer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261027085527.702738-46-h.laimer@proxmox.com \
    --to=h.laimer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal