Skip to content

Commit 5067f6c

Browse files
committed
ipv6
1 parent 29b561f commit 5067f6c

File tree

2 files changed

+381
-0
lines changed

2 files changed

+381
-0
lines changed
Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,256 @@
1+
# dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml
2+
3+
## Overview
4+
5+
This reproducer is the **IPv6 variant** of `dt-nfv-ovs-dpdk-sriov-2nodesets.yml`. It configures an NFV deployment with OVS-DPDK and SR-IOV support using **IPv6 as the primary IP version** across all OpenStack networks, while maintaining dual-stack configuration on hypervisor bridges for compatibility.
6+
7+
## Key Features
8+
9+
- **IPv6 Primary**: All OpenStack networks use IPv6 addressing
10+
- **Dual-Stack ctlplane**: Both IPv4 and IPv6 IPAM for ctlplane network
11+
- **2 NodeSets**: Supports deployments with two different EDPM nodesets (different hardware)
12+
- **OVS-DPDK**: High-performance DPDK-accelerated networking
13+
- **SR-IOV**: Direct hardware access for VMs
14+
- **OpenShift IPv6**: OCP configured with IPv6 networking
15+
16+
## Network Configuration
17+
18+
### IPv6 Network Ranges
19+
20+
| Network | IPv6 Range | VLAN | Purpose |
21+
|--------------|-------------------------|------|---------|
22+
| ctlplane | 2620:cf:cf:aaaa::/64 | - | Control plane (dual-stack) |
23+
| internalapi | 2620:cf:cf:bbbb::/64 | 20 | Internal API |
24+
| storage | 2620:cf:cf:cccc::/64 | 21 | Storage network |
25+
| tenant | 2620:cf:cf:eeee::/64 | 22 | Tenant/overlay network |
26+
| storagemgmt | 2620:cf:cf:dddd::/64 | 23 | Storage management |
27+
| external | 2620:cf:cf:cf02::/64 | - | External network |
28+
29+
### OpenShift IPv6 Networks
30+
31+
| Network | IPv6 Range | Purpose |
32+
|------------------|--------------------------|---------|
33+
| provisioning | fd00:1101::/64 | Provisioning network |
34+
| external_subnet | 2620:cf:cf:cf02::/64 | External access |
35+
| service_subnet | 2620:cf:cf:cf03::/112 | OCP services |
36+
| cluster_subnet | fd01::/48 | OCP pod network |
37+
38+
## Key Differences from IPv4 Version
39+
40+
### Added Configuration
41+
42+
1. **Primary IP Version**
43+
```yaml
44+
cifmw_ci_gen_kustomize_values_primary_ip_version: 6
45+
```
46+
47+
2. **IPv6 Networking Definition**
48+
- All networks configured with IPv6 ranges
49+
- VLANs preserved from original (20-23)
50+
- MTU settings maintained
51+
52+
3. **OpenShift IPv6 Configuration**
53+
```yaml
54+
cifmw_devscripts_config_overrides:
55+
ip_stack: "v6"
56+
provisioning_network: "fd00:1101::/64"
57+
external_subnet_v6: "2620:cf:cf:cf02::/64"
58+
service_subnet_v6: "2620:cf:cf:cf03::/112"
59+
cluster_subnet_v6: "fd01::/48"
60+
```
61+
62+
4. **Dual-Stack ctlplane IPAM**
63+
```yaml
64+
ipam:
65+
type: whereabouts
66+
ipRanges:
67+
- range: "192.168.122.0/24" # IPv4 (compatibility)
68+
- range: "2620:cf:cf:aaaa::/64" # IPv6 (primary)
69+
```
70+
71+
### Unchanged Configuration
72+
73+
- VM definitions (controller, OCP nodes)
74+
- Libvirt network topology
75+
- BMH configuration
76+
- LVMS setup
77+
- EDPM image configuration
78+
79+
## Usage
80+
81+
### In Zuul Jobs
82+
83+
This reproducer is used by the IPv6 variant of NFV jobs:
84+
85+
```yaml
86+
- job:
87+
name: uni08theta-rhel9-rhoso18.0-nfv-ovs-dpdk-sriov-ipv6-trunk-patches-2nodesets
88+
vars:
89+
variable_files:
90+
- "{{ ci_framework_src }}/scenarios/reproducers/dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml"
91+
- ... (other variable files)
92+
```
93+
94+
### Manual Deployment
95+
96+
```bash
97+
# Set up your environment
98+
cd ~/ci-framework
99+
100+
# Create your custom variables file
101+
cat > my-ipv6-vars.yml <<EOF
102+
cifmw_devscripts_ci_token: <your-token>
103+
cifmw_devscripts_pull_secret: <your-pull-secret>
104+
hypervisor: <your-hypervisor-fqdn>
105+
EOF
106+
107+
# Deploy using this reproducer
108+
ansible-playbook deploy-edpm.yml \
109+
-e @scenarios/reproducers/dt-nfv-ovs-dpdk-sriov-2nodesets-ipv6.yml \
110+
-e @my-ipv6-vars.yml
111+
```
112+
113+
## Infrastructure Requirements
114+
115+
### Switch Configuration
116+
117+
The physical switch must support IPv6 on all VLANs:
118+
119+
```
120+
# Enable IPv6 globally
121+
ipv6 unicast-routing
122+
123+
# Configure VLAN IPv6 gateways
124+
interface Vlan20 # internalapi
125+
ipv6 address 2620:cf:cf:bbbb::1/64
126+
ipv6 nd managed-config-flag
127+
ipv6 nd prefix 2620:cf:cf:bbbb::/64
128+
129+
interface Vlan21 # storage
130+
ipv6 address 2620:cf:cf:cccc::1/64
131+
ipv6 nd managed-config-flag
132+
ipv6 nd prefix 2620:cf:cf:cccc::/64
133+
134+
interface Vlan22 # tenant
135+
ipv6 address 2620:cf:cf:eeee::1/64
136+
ipv6 nd managed-config-flag
137+
ipv6 nd prefix 2620:cf:cf:eeee::/64
138+
139+
interface Vlan23 # storagemgmt
140+
ipv6 address 2620:cf:cf:dddd::1/64
141+
ipv6 nd managed-config-flag
142+
ipv6 nd prefix 2620:cf:cf:dddd::/64
143+
144+
# Enable MLD snooping (IPv6 multicast)
145+
ipv6 mld snooping
146+
```
147+
148+
### Hypervisor Requirements
149+
150+
- **IPv6 enabled**: `sysctl net.ipv6.conf.all.disable_ipv6=0`
151+
- **IPv6 forwarding**: `sysctl net.ipv6.conf.all.forwarding=1`
152+
- **Bridges with IPv6**: All bridges (ocpbm, ocppr, osp_external, osp_trunk) must have IPv6 addresses
153+
- **Router Advertisements**: Enable RA if using SLAAC
154+
155+
### DNS Requirements
156+
157+
- DNS server with IPv6 support (AAAA records)
158+
- Reverse DNS for IPv6 (ip6.arpa zones)
159+
- DNS reachable at 2620:cf:cf:aaaa::1
160+
161+
## Topology
162+
163+
```
164+
┌─────────────────┐
165+
│ Hypervisor │
166+
│ (dual-stack) │
167+
└────────┬────────┘
168+
169+
┌────────────────────┼────────────────────┐
170+
│ │ │
171+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
172+
│ OCP │ │ OCP │ │ OCP │
173+
│ Master │ │ Master │ │ Master │
174+
│ #1 │ │ #2 │ │ #3 │
175+
└─────────┘ └─────────┘ └─────────┘
176+
│ │ │
177+
└────────────────────┼────────────────────┘
178+
179+
┌────────▼────────┐
180+
│ controller-0 │
181+
│ (IPv6: aaaa::9) │
182+
└────────┬────────┘
183+
184+
┌────────────────────┼────────────────────┐
185+
│ │ │
186+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
187+
│ Compute │ │ Compute │ │ Compute │
188+
│ Node │ │ Node │ │ Node │
189+
│ (Set 1) │ │ (Set 2) │ │ (Set 2) │
190+
└─────────┘ └─────────┘ └─────────┘
191+
OVS-DPDK OVS-DPDK OVS-DPDK
192+
SR-IOV SR-IOV SR-IOV
193+
```
194+
195+
## Verification
196+
197+
After deployment, verify IPv6 configuration:
198+
199+
```bash
200+
# On hypervisor - check IPv6 addresses
201+
ip -6 addr show osp_trunk
202+
# Should show: 2620:cf:cf:aaaa::1/64 (if configured by nmstate)
203+
204+
# Test connectivity to controller-0
205+
ping6 2620:cf:cf:aaaa::9
206+
207+
# On compute nodes - check IPv6 configuration
208+
ssh heat-admin@<compute-node>
209+
ip -6 addr show
210+
# Should show IPv6 addresses on bond interfaces
211+
212+
# Verify OpenStack endpoints use IPv6
213+
openstack endpoint list
214+
# Should show IPv6 addresses like [2620:cf:cf:aaaa::X]
215+
```
216+
217+
## Troubleshooting
218+
219+
### Common Issues
220+
221+
**Issue**: Computes can't reach control plane
222+
- **Check**: DHCPv6 or SLAAC working on ctlplane
223+
- **Verify**: `tcpdump -i osp_trunk -n icmp6`
224+
225+
**Issue**: Services not listening on IPv6
226+
- **Check**: `cifmw_ci_gen_kustomize_values_primary_ip_version: 6` is set
227+
- **Verify**: `ss -tlnp6` on controller
228+
229+
**Issue**: DNS resolution fails
230+
- **Check**: AAAA records exist for all services
231+
- **Verify**: `dig AAAA keystone.openstack.svc`
232+
233+
**Issue**: VLANs not working
234+
- **Check**: Switch has IPv6 enabled on VLANs 20-23
235+
- **Verify**: MLD snooping enabled
236+
237+
## Related Files
238+
239+
- **Original IPv4 reproducer**: `dt-nfv-ovs-dpdk-sriov-2nodesets.yml`
240+
- **Job definition**: `zuul.d/ci-framework-rhoso-18-rhel9-trunk-nfv-jobs.yaml`
241+
- **IPv6 UNI scenario example**: `scenarios/uni/uni04delta-ipv6/`
242+
243+
## References
244+
245+
- [IPv6 Networking in OpenStack](https://docs.openstack.org/neutron/latest/admin/config-ipv6.html)
246+
- [OVS-DPDK Documentation](https://docs.openvswitch.org/en/latest/topics/dpdk/)
247+
- [SR-IOV Configuration](https://docs.openstack.org/neutron/latest/admin/config-sriov.html)
248+
- CI Framework IPv6 examples
249+
250+
## Author
251+
252+
Generated for NFV IPv6 testing scenarios.
253+
254+
## Version History
255+
256+
- **1.0** (2025-01-06): Initial IPv6 variant created based on dt-nfv-ovs-dpdk-sriov-2nodesets.yml
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
# IPv6 variant of dt-nfv-ovs-dpdk-sriov-2nodesets
3+
# This reproducer configures NFV OVS-DPDK SR-IOV with 2 different nodesets using IPv6 as primary IP
4+
5+
cifmw_architecture_scenario: "ovs-dpdk-sriov-2nodesets-ipv6"
6+
7+
# Automation section. Most of those parameters will be passed to the
8+
# controller-0 as-is and be consumed by the `deploy-va.sh` script.
9+
# Please note, all paths are on the controller-0, meaning managed by the
10+
# Framework. Please do not edit them!
11+
_arch_repo: "{{ cifmw_architecture_repo }}"
12+
13+
# Enable IPv6 as primary IP version
14+
cifmw_ci_gen_kustomize_values_primary_ip_version: 6
15+
16+
# HERE if you want to override kustomization, you can uncomment this parameter
17+
# and push the data structure you want to apply.
18+
# cifmw_architecture_user_kustomize:
19+
# stage_0:
20+
# 'network-values':
21+
# data:
22+
# starwars: Obiwan
23+
24+
# HERE, if you want to stop the deployment loop at any stage, you can uncomment
25+
# the following parameter and update the value to match the stage you want to
26+
# reach. Known stages are:
27+
# pre_kustomize_stage_INDEX
28+
# pre_apply_stage_INDEX
29+
# post_apply_stage_INDEX
30+
#
31+
# cifmw_deploy_architecture_stopper:
32+
33+
# Libvirt network configuration - maintain compatibility
34+
cifmw_libvirt_manager_net_prefix_add: false
35+
cifmw_libvirt_manager_fixed_networks:
36+
- ocpbm
37+
- ocppr
38+
- osp_external
39+
- osp_trunk
40+
41+
cifmw_libvirt_manager_configuration:
42+
networks:
43+
ocpbm: |
44+
<network>
45+
<name>ocpbm</name>
46+
<forward mode='bridge' />
47+
<bridge name='ocpbm' />
48+
</network>
49+
ocppr: |
50+
<network>
51+
<name>ocppr</name>
52+
<forward mode='bridge' />
53+
<bridge name='ocppr' />
54+
</network>
55+
osp_external: |
56+
<network>
57+
<name>osp_external</name>
58+
<forward mode='bridge' />
59+
<bridge name='osp_external' />
60+
</network>
61+
osp_trunk: |
62+
<network>
63+
<name>osp_trunk</name>
64+
<forward mode='bridge' />
65+
<bridge name='osp_trunk' />
66+
</network>
67+
vms:
68+
controller:
69+
uefi: "{{ cifmw_use_uefi }}"
70+
root_part_id: "{{ cifmw_root_partition_id }}"
71+
image_url: "{{ cifmw_discovered_image_url }}"
72+
sha256_image_name: "{{ cifmw_discovered_hash }}"
73+
image_local_dir: "{{ cifmw_basedir }}/images/"
74+
disk_file_name: "base-os.qcow2"
75+
disksize: 50
76+
memory: 8
77+
cpus: 4
78+
nets:
79+
- ocpbm
80+
- osp_trunk
81+
ocp:
82+
amount: 3
83+
uefi: true
84+
root_part_id: 4
85+
admin_user: core
86+
image_local_dir: "{{ cifmw_basedir }}/images/"
87+
disk_file_name: "ocp_master"
88+
disksize: "100"
89+
extra_disks_num: 3
90+
extra_disks_size: "50G"
91+
cpus: 10
92+
memory: 32
93+
nets:
94+
- ocppr
95+
- ocpbm
96+
- osp_trunk
97+
- osp_external
98+
99+
# Note: with that extra_network_names "osp_trunk", we instruct
100+
# devscripts role to create a new network, and associate it to
101+
# the OCP nodes. This one is a "private network", and will hold
102+
# the VLANs used for network isolation.
103+
104+
# Please create a custom env file to provide:
105+
# cifmw_devscripts_ci_token:
106+
# cifmw_devscripts_pull_secret:
107+
108+
# Baremetal host configuration
109+
cifmw_config_bmh: true
110+
111+
# BMH are deployed in a different NS than the secret OSP BMO
112+
# references in each BMH. Metal3 requires the referenced
113+
# secrets to be in the same NS or be allowed to access them
114+
cifmw_devscripts_config_overrides_patch_bmo_watch_all_namespaces:
115+
bmo_watch_all_namespaces: true
116+
117+
# Use EDPM image for computes
118+
cifmw_update_containers_edpm_image_url: "{{ cifmw_update_containers_registry }}/{{ cifmw_update_containers_org }}/edpm-hardened-uefi:{{ cifmw_update_containers_tag }}"
119+
120+
# Set Logical Volume Manager Storage by default for local storage
121+
cifmw_use_lvms: true
122+
cifmw_lvms_disk_list:
123+
- /dev/vda
124+
- /dev/vdb
125+
- /dev/vdc

0 commit comments

Comments
 (0)