You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Direct Routed networks: IPv4 is optional, enabling IPv6-only networks
Nothing on an L3 network depends on IPv4: there is no DHCP, no password
or metadata service, ConfigDrive carries whatever families exist, the
IPv6 address derives from the subnet and NIC MAC with EUI-64, and the
allocation chain was already family-conditional. Make that a supported
configuration: at network creation each address family is optional, a
given family must be complete - IPv4 is gateway, netmask and startip
(v4 addresses are drawn from a pool), IPv6 is ip6gateway and ip6cidr
alone (no range needed) - and at least one family must be present.
Enforced by NetworkServiceImpl.validateL3AddressFamilies(), which also
replaces the Shared-network start/end-IP check for L3, since an L3
network defined by ip6cidr alone is valid. The create form validates
the same groups client-side.
Sweep the paths that quietly assumed an IPv4 address exists:
- security_group.py: add_to_ipset() skips empty and '0' placeholder
addresses, and vm_ip is normalised to '' - an IPv6-only Instance's
default rules now program cleanly (its v4 ipset stays empty, the v6
ipset is populated as before). The classic golden test stays
byte-identical.
- LibvirtComputingResource.addNetworkRules() only passes --vmip when
there is one, as the other call sites already did.
UI, Instances overview: the address column now shows the active
families - IPv4 as before, IPv6 compressed and, when long, elided in
the middle with the last four characters always visible; hovering shows
the full address and clicking copies it to the clipboard.
Tests: unit tests for the family validation, golden-harness tests for
the IPv6-only rule programming, and three integration tests in
test_l3_networks.py (IPv6-only create, IPv6-only deploy asserting a
/128 with fe80::1 and no IPv4, and rejection of incomplete families).
Claude-Session: https://claude.ai/code/session_01LkswKyuC2a58YCHFTEPnay
Copy file name to clipboardExpand all lines: ui/public/locales/en.json
+4-1Lines changed: 4 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -3692,6 +3692,9 @@
3692
3692
"message.error.required.input": "Please enter input",
3693
3693
"message.error.reset.config": "Unable to reset config to default value",
3694
3694
"message.error.retrieve.kubeconfig": "Unable to retrieve Kubernetes Cluster config",
3695
+
"message.error.l3.ipv4.incomplete": "IPv4 is optional for L3 networks, but when any IPv4 detail is given, the IPv4 gateway, netmask and start IP are all required",
3696
+
"message.error.l3.ipv6.incomplete": "IPv6 is optional for L3 networks, but when any IPv6 detail is given, the IPv6 gateway and IPv6 CIDR are both required",
3697
+
"message.error.l3.no.address.family": "Provide at least one address family: IPv4 (gateway, netmask, start IP) or IPv6 (IPv6 gateway, IPv6 CIDR)",
3695
3698
"message.error.routedid": "Please enter the Routed ID for this network; the selected network offering requires the operator to choose it",
3696
3699
"message.error.routing.policy.term": "Community need to have the following format number:number",
3697
3700
"message.error.s3nfs.path": "Please enter S3 NFS Path",
@@ -3913,7 +3916,7 @@
3913
3916
"message.note.about.keypair.permissions.title": "Note about API key pair rule permissions",
3914
3917
"message.note.about.keypair.permissions.body": "During the creation of API key pairs, it is possible to define a corresponding set of rule permissions. If a rule set is defined, the API key pair will only have access to APIs for which access has been explicitly granted (i.e., APIs whose corresponding rules are marked as allowed). On the other hand, if no rule set is specified, the API key pair permissions will follow and adapt to the permission set of the user's account role.",
3915
3918
"message.offering.internet.protocol.warning": "WARNING: IPv6 supported Networks use static routing and will require upstream routes to be configured manually.",
3916
-
"message.create.l3.network": "The hypervisor routes a public IPv4/IPv6 address directly to each Instance on this network: no Virtual Router, no NAT and no DHCP. The subnet is an allocation pool routed to the hypervisors; its gateway is required but never used, since Instances always use the shared link-local gateway. Instances receive their configuration via ConfigDrive.",
3919
+
"message.create.l3.network": "The hypervisor routes a public IPv4/IPv6 address directly to each Instance on this network: no Virtual Router, no NAT and no DHCP. IPv4 and IPv6 are each optional - provide at least one family; IPv6-only networks are supported. The subnet is an allocation pool routed to the hypervisors; its gateway is required but never used, since Instances always use the shared link-local gateway. Instances receive their configuration via ConfigDrive.",
3917
3920
"message.success.create.l3.network": "Successfully created L3 (Direct Routed) network",
3918
3921
"message.offering.l3": "The hypervisor routes a public IPv4/IPv6 address directly to each Instance: no Virtual Router, no NAT and no DHCP. UserData via ConfigDrive is always enabled, since it is the only channel that carries the Instance's network configuration. DNS is strongly recommended; Security Groups are optional.",
3919
3922
"message.offering.ipv6.warning": "Please refer documentation for creating IPv6 enabled Network/VPC offering <a href='http://docs.cloudstack.apache.org/en/latest/plugins/ipv6.html#isolated-network-and-vpc-tier'>IPv6 support in CloudStack - Isolated Networks and VPC Network Tiers</a>",
0 commit comments