This is an automated email from the ASF dual-hosted git repository.
weizhouapache pushed a commit to branch network-namespace
in repository https://gitbox.apache.org/repos/asf/cloudstack-extensions.git
The following commit(s) were added to refs/heads/network-namespace by this push:
new a31cb32 Network namespace: minor updates on README.md
a31cb32 is described below
commit a31cb32276dbaac4eec7d6ae373da35b5ae61cd0
Author: Wei Zhou <[email protected]>
AuthorDate: Thu Jun 4 15:23:08 2026 +0200
Network namespace: minor updates on README.md
---
Network-Namespace/README.md | 51 ++++++++++++++++++++++----
Network-Namespace/network-namespace-wrapper.sh | 4 ++
Network-Namespace/network-namespace.sh | 2 +-
3 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/Network-Namespace/README.md b/Network-Namespace/README.md
index 190b563..c15e147 100644
--- a/Network-Namespace/README.md
+++ b/Network-Namespace/README.md
@@ -1478,13 +1478,50 @@ name bridges as `br<eth>-<vlan>` and veth pairs as
`vh-<vlan>-<id>` /
### Common keys inside `payload` (standard commands)
-| `payload` key | Commands | Description |
-|--------------|----------|-------------|
-| `vpc_id` | many | Present when the network belongs to a VPC; namespace
becomes `cs-vpc-<vpcId>` |
-| `public_vlan` | `assign-ip`, `release-ip` | Public IP VLAN tag (for example
`101`) |
-| `network_id` | most | Network ID — CHOSEN_ID for veth names is `<vpc_id>`
when VPC, else `<network_id>` |
-| `extension_ip` | `implement-network`, `config-dhcp-subnet`,
`config-dns-subnet`, `restore-network` | Dedicated IP for DHCP/DNS/metadata
service when it differs from the gateway |
-| `current_details` | `ensure-network-device` | Previous selected-device JSON,
used to preserve host affinity |
+#### Network-level fields
+
+| `payload` key | Description |
+|--------------|-------------|
+| `network_id` | Network ID — `CHOSEN_ID` for veth names is `<vpc_id>` when
VPC, else `<network_id>` |
+| `vlan` | Guest VLAN tag |
+| `zone_id` | CloudStack zone ID |
+| `guest_type` | Guest network type: `"isolated"`, `"shared"`, or `"l2"`. The
wrapper uses this to skip iptables / NAT / public-veth operations for `shared`
networks. |
+| `gateway` | Guest network gateway |
+| `cidr` | Guest network CIDR |
+| `vpc_id` | Present when the network belongs to a VPC; namespace becomes
`cs-vpc-<vpcId>` |
+| `network_ip6_gateway` | Guest IPv6 gateway, when configured |
+| `network_ip6_cidr` | Guest IPv6 CIDR, when configured |
+| `extension_ip` | IP for DHCP/DNS/metadata service — equals gateway when
SourceNat/Gateway is active, otherwise a dedicated placeholder IP |
+| `dns` | Comma-separated DNS server list |
+| `domain` | Network domain suffix |
+| `current_details` | `ensure-network-device` only — previous selected-device
JSON, used to preserve host affinity |
+
+#### NIC-level fields
+
+| `payload` key | Description |
+|--------------|-------------|
+| `nic_id` | CloudStack numeric NIC ID |
+| `nic_uuid` | NIC UUID — matches `external_ids:iface-id` written by the KVM
agent |
+| `mac` | VM NIC MAC address |
+| `ip` | VM NIC IPv4 address |
+| `gateway` | VM NIC IPv4 gateway |
+| `netmask` | VM NIC IPv4 netmask |
+| `default_nic` | `"false"` for secondary NICs (gateway DHCP option
suppressed) |
+| `device_id` | NIC device slot index |
+| `nic_ip6_address` | VM NIC IPv6 address, when configured |
+| `nic_ip6_gateway` | VM NIC IPv6 gateway, when available |
+| `nic_ip6_cidr` | VM NIC IPv6 CIDR, when available |
+
+#### Public-IP fields
+
+| `payload` key | Description |
+|--------------|-------------|
+| `public_ip` | Public IP address |
+| `public_vlan` | Public IP VLAN tag |
+| `public_gateway` | Gateway of the public IP segment |
+| `public_cidr` | CIDR of the public IP |
+| `source_nat` | `"true"` when this IP is the source-NAT IP |
+| `private_ip` | VM private IP (NAT target) |
### Action parameters (custom-action only)
diff --git a/Network-Namespace/network-namespace-wrapper.sh
b/Network-Namespace/network-namespace-wrapper.sh
index 4b653fc..0780600 100755
--- a/Network-Namespace/network-namespace-wrapper.sh
+++ b/Network-Namespace/network-namespace-wrapper.sh
@@ -467,6 +467,7 @@ parse_args() {
NETWORK_ID=$(_payload_json_get "${payload_file}" "payload.network_id")
GUEST_TYPE=$(_payload_json_get "${payload_file}" "payload.guest_type")
+ ZONE_ID=$(_payload_json_get "${payload_file}" "payload.zone_id")
VPC_ID=$(_payload_json_get "${payload_file}" "payload.vpc_id")
VLAN=$(_payload_json_get "${payload_file}" "payload.vlan")
GATEWAY=$(_payload_json_get "${payload_file}" "payload.gateway")
@@ -484,6 +485,9 @@ parse_args() {
HOSTNAME=$(_payload_json_get "${payload_file}" "payload.hostname")
DNS_SERVER=$(_payload_json_get "${payload_file}" "payload.dns")
NIC_ID=$(_payload_json_get "${payload_file}" "payload.nic_id")
+ NIC_UUID=$(_payload_json_get "${payload_file}" "payload.nic_uuid")
+ NETMASK=$(_payload_json_get "${payload_file}" "payload.netmask")
+ DEVICE_ID=$(_payload_json_get "${payload_file}" "payload.device_id")
VM_IP=$(_payload_json_get "${payload_file}" "payload.ip")
USERDATA=$(_payload_json_get "${payload_file}" "payload.userdata")
PASSWORD=$(_payload_json_get "${payload_file}" "payload.password")
diff --git a/Network-Namespace/network-namespace.sh
b/Network-Namespace/network-namespace.sh
index 137f5ee..9e11e6b 100755
--- a/Network-Namespace/network-namespace.sh
+++ b/Network-Namespace/network-namespace.sh
@@ -340,7 +340,7 @@ if [ "${COMMAND}" = "ensure-network-device" ]; then
# Namespace names must match those used by the wrapper on the KVM host.
# VPC networks share one namespace per VPC (cs-vpc-<vpcId>);
- # standalone isolated networks get their own namespace
(cs-net-<networkId>).
+ # standalone networks (Isolated and Shared) each get their own namespace
(cs-net-<networkId>).
if [ -n "${VPC_ID}" ]; then
NAMESPACE="cs-vpc-${VPC_ID}"
else