diff --git a/Makefile b/Makefile index 6d7a0d9..a6ad21e 100644 --- a/Makefile +++ b/Makefile @@ -66,6 +66,13 @@ set/dataplane/%: $(BCONFIG) @echo Set dataplane to $(@F) @./scripts/config_edit.py $(BCONFIG) --dataplane=$(@F) +.PHONY: set/controlplane +set/controlplane/%: $(BCONFIG) + @echo Set controlplane to $(@F) + @./scripts/config_edit.py $(BCONFIG) --controlplane=$(@F) + @# not yet implemented for free5gc/nextmn-upf => we set dataplane to nextmn-srv6 + @$(MAKE) set/dataplane/nextmn-srv6 + .PHONY: set/nb-edges set/nb-edges/%: $(BCONFIG) @echo Set number of edges to $(@F) diff --git a/default-config.yaml b/default-config.yaml index 4c76462..0ef3146 100644 --- a/default-config.yaml +++ b/default-config.yaml @@ -13,6 +13,7 @@ config: handover: false dataplane: # ( nextmn-srv6 | free5gc | nextmn-upf) - "nextmn-srv6" + controlplane: "free5gc" # ( free5gc | nextmn-lite ) log_level: "info" full_debug: false @@ -24,6 +25,15 @@ subnets: gnb2: ipv4_address: 10.1.0.130 ipv6_address: fd00:0:0:0:1:8000:0:3 + uel1: + ipv4_address: 10.1.0.131 + ipv6_address: fd00:0:0:0:1:8000:0:4 + gnbl1: + ipv4_address: 10.1.0.132 + ipv6_address: fd00:0:0:0:1:8000:0:5 + gnbl2: + ipv4_address: 10.1.0.133 + ipv6_address: fd00:0:0:0:1:8000:0:6 sbi: amf: ipv4_address: 10.1.1.129 @@ -76,6 +86,18 @@ subnets: ipv4_address: 10.1.3.139 upfa2-nmn: ipv4_address: 10.1.3.140 + gnbl1: + ipv4_address: 10.1.3.141 + ipv6_address: fd00:0:0:0:2:8000:0:7 + gnbl2: + ipv4_address: 10.1.3.142 + ipv6_address: fd00:0:0:0:2:8000:0:8 + uel1: + ipv4_address: 10.1.3.143 + ipv6_address: fd00:0:0:0:2:8000:0:9 + cp-lite: + ipv4_address: 10.1.3.144 + ipv6_address: fd00:0:0:0:2:8000:0:10 dataplane: gnb1: ipv4_address: 10.1.4.129 @@ -100,6 +122,10 @@ subnets: ipv4_address: 10.1.4.136 upfa2-nmn: ipv4_address: 10.1.4.137 + gnbl1: + ipv4_address: 10.1.4.138 + gnbl2: + ipv4_address: 10.1.4.139 edge: r0: ipv4_address: 10.1.5.129 diff --git a/doc/addressing.md b/doc/addressing.md index fdc3ed4..3079885 100644 --- a/doc/addressing.md +++ b/doc/addressing.md @@ -35,79 +35,89 @@ > [!IMPORTANT] > IPv4 addresses ending with `.254` and IPv6 addresses ending with `:8000:0:1` are used by Docker internally (gateway). -| Name | Image | Network | IPv4 address | IPv6 address | Comment | -|------------|-------------------------------------|-----------|-----------------|-------------------------|---------------------------------------------------------------------| -| ue1 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue1 | `louisroyer/ueransim-ue` | slice0 | auto | disabled | Only Slice 0 (SR4MEC) is available on this UE. Uses gNB1. | -| ue2 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue2 | `louisroyer/ueransim-ue` | slice0 | auto | disabled | Only Slice 0 (SR4MEC) is available on this UE. Uses gNB2. | -| ue3 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue3 | `louisroyer/ueransim-ue` | slice1 | auto | disabled | Only Slice 1 (ULCL Free5GC) is available on this UE. Uses gNB1. | -| ue4 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue4 | `louisroyer/ueransim-ue` | slice1 | auto | disabled | Only Slice 1 (ULCL Free5GC) is available on this UE. Uses gNB2. | -| ue5 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue5 | `louisroyer/ueransim-ue` | slice2 | auto | disabled | Only Slice 2 (ULCL NextMN) is available on this UE. Uses gNB1. | -| ue6 | `louisroyer/ueransim-ue` | ran | auto | auto | | -| ue6 | `louisroyer/ueransim-ue` | slice2 | auto | disabled | Only Slice 2 (ULCL NextMN) is available on this UE. Uses gNB2. | -| gnb1 | `louisroyer/ueransim-gnb` | ran | `10.1.0.129` | `fd00:0:0:0:1:8000:0:2` | | -| gnb1 | `louisroyer/ueransim-gnb` | control | `10.1.3.129` | auto | | -| gnb1 | `louisroyer/ueransim-gnb` | dataplane | `10.1.4.129` | auto (not used) | Route to srgw0 | -| gnb2 | `louisroyer/ueransim-gnb` | ran | `10.1.0.130` | `fd00:0:0:0:1:8000:0:3` | | -| gnb2 | `louisroyer/ueransim-gnb` | control | `10.1.3.130` | auto | | -| gnb2 | `louisroyer/ueransim-gnb` | dataplane | `10.1.4.130` | auto (not used) | Route to srgw0 | -| srgw0 | `louisroyer/dev-nextmn-srv6` | control | `10.1.3.131` | `fd00:0:0:0:2:8000:0:2` | | -| srgw0 | `louisroyer/dev-nextmn-srv6` | dataplane | `10.1.4.131` | `fd00:0:0:0:3:8000:0:2` | IPv6 routes to SR domain (r0, r1) | -| srgw0 | `louisroyer/dev-nextmn-srv6` | srgw0 | `10.3.0.1` | disabled | H.M.GTP4.D | -| srgw0 | `louisroyer/dev-nextmn-srv6` | srgw0 | disabled | `fc00:1:1::/48` | End.M.GTP4.E | -| srgw0 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | -| r0 | `louisroyer/dev-nextmn-srv6` | control | auto | `fd00:0:0:0:2:8000:0:4` | | -| r0 | `louisroyer/dev-nextmn-srv6` | dataplane | auto (not used) | `fd00:0:0:0:3:8000:0:3` | IPv6 routes to SR domain (srgw0) | -| r0 | `louisroyer/dev-nextmn-srv6` | r0 | disabled | `fc00:2:1::/48` | End.DX4 | -| r0 | `louisroyer/dev-nextmn-srv6` | edge | `10.1.5.129` | disabled | H.Encaps + Route to instance in edge0 (s0) | -| r0 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | -| r1 | `louisroyer/dev-nextmn-srv6` | control | auto | `fd00:0:0:0:2:8000:0:5` | | -| r1 | `louisroyer/dev-nextmn-srv6` | dataplane | auto (not used) | `fd00:0:0:0:3:8000:0:4` | IPv6 routes to SR domain (srgw0) | -| r1 | `louisroyer/dev-nextmn-srv6` | r1 | disabled | `fc00:3:1::/48` | End.DX4 | -| r1 | `louisroyer/dev-nextmn-srv6` | edge | `10.1.5.130` | disabled | H.Encaps + Route to instances in edge1 (s1) | -| r1 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | -| s0 | `nginx` | edge | `10.1.5.131` | disabled | Route to slice0 via r0, slice1 via upfa1-f5gc, slice2 via upfa1-nmn | -| s0 | `ngnix` | service | `10.4.0.1` | disabled | | -| s1 | `nginx` | edge | `10.1.5.132` | disabled | Route to slice0 via r1, slice1 via upfa2-f5gc, slice2 via upfa2-nmn | -| s1 | `ngnix` | service | `10.4.0.1` | disabled | | -| srv6-ctrl | `louisroyer/dev-nextmn-srv6-ctrl` | control | `10.1.3.132` | `fd00:0:0:0:2:8000:0:2` | | -| amf | `louisroyer/dev-free5gc-amf` | control | `10.1.3.133` | auto | | -| amf | `louisroyer/dev-free5gc-amf` | sbi | `10.1.1.129` | disabled | | -| smf | `louisroyer/dev-free5gc-smf` | control | `10.1.3.134` | auto | | -| smf | `louisroyer/dev-free5gc-smf` | sbi | `10.1.1.130` | disabled | | -| nrf | `louisroyer/dev-free5gc-nrf` | sbi | `10.1.1.131` | disabled | | -| nrf | `louisroyer/dev-free5gc-nrf` | db | auto | disabled | | -| ausf | `louisroyer/dev-free5gc-ausf` | sbi | `10.1.1.132` | disabled | | -| nssf | `louisroyer/dev-free5gc-nssf` | sbi | `10.1.1.133` | disabled | | -| pcf | `louisroyer/dev-free5gc-pcf` | sbi | `10.1.1.134` | disabled | | -| pcf | `louisroyer/dev-free5gc-pcf` | db | auto | disabled | | -| udm | `louisroyer/dev-free5gc-udm` | sbi | `10.1.1.135` | disabled | | -| udr | `louisroyer/dev-free5gc-udr` | sbi | `10.1.1.136` | disabled | | -| udr | `louisroyer/dev-free5gc-udr` | db | auto | disabled | | -| chf | `louisroyer/dev/free5gc-chf` | sbi | `10.1.1.137` | disabled | | -| chf | `louisroyer/dev/free5gc-chf` | db | auto | disabled | | -| webconsole | `louisroyer/dev/free5gc-webconsole` | sbi | `10.1.1.138` | disabled | | -| webconsole | `louisroyer/dev/free5gc-webconsole` | db | auto | disabled | | -| upfi-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.135` | auto | | -| upfi-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.132` | auto (not used) | | -| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.136` | auto | | -| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.133` | auto (not used) | | -| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | edge | `10.1.5.133` | auto (not used) | | -| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.137` | auto | | -| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.134` | auto (not used) | | -| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | edge | `10.1.5.134` | auto (not used) | | -| upfi-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.138` | auto | | -| upfi-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.135` | auto (not used) | | -| upfa1-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.139` | auto | | -| upfa1-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.136` | auto (not used) | | -| upfa1-nmn | `louisroyer/dev-nextmn-upf` | edge | `10.1.5.135` | auto (not used) | | -| upfa2-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.140` | auto | | -| upfa2-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.137` | auto (not used) | | -| upfa2-nmn | `louisroyer/dev-nextmn-upf` | edge | `10.1.5.136` | auto (not used) | | -| populate | `louisroyer/free5gc-populate` | db | auto | disabled | | -| mongodb | `mongodb` | db | auto | disabled | | -| nextmndb | `postgres` | nextmndb | auto | auto | | +| Name | Image | Network | IPv4 address | IPv6 address | Comment | +|------------|-------------------------------------|-----------|-----------------|--------------------------|---------------------------------------------------------------------| +| ue1 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue1 | `louisroyer/ueransim-ue` | slice0 | auto | disabled | Only Slice 0 (SR4MEC) is available on this UE. Uses gNB1. | +| ue2 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue2 | `louisroyer/ueransim-ue` | slice0 | auto | disabled | Only Slice 0 (SR4MEC) is available on this UE. Uses gNB2. | +| ue3 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue3 | `louisroyer/ueransim-ue` | slice1 | auto | disabled | Only Slice 1 (ULCL Free5GC) is available on this UE. Uses gNB1. | +| ue4 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue4 | `louisroyer/ueransim-ue` | slice1 | auto | disabled | Only Slice 1 (ULCL Free5GC) is available on this UE. Uses gNB2. | +| ue5 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue5 | `louisroyer/ueransim-ue` | slice2 | auto | disabled | Only Slice 2 (ULCL NextMN) is available on this UE. Uses gNB1. | +| ue6 | `louisroyer/ueransim-ue` | ran | auto | auto | | +| ue6 | `louisroyer/ueransim-ue` | slice2 | auto | disabled | Only Slice 2 (ULCL NextMN) is available on this UE. Uses gNB2. | +| uel1 | `louisroyer/dev-nextmn-ue-lite` | ran | `10.1.0.131` | `fd00:0:0:0:1:8000:0:4` | | +| uel1 | `louisroyer/dev-nextmn-ue-lite` | control | `10.1.3.143` | `fd00:0:0:0:2:8000:0:9` | | +| uel1 | `louisroyer/dev-nextmn-ue-lite` | slice0 | auto | disabled | Only Slice 0 (SR4MEC) is available on this UE. Uses gNBl1. | +| gnb1 | `louisroyer/ueransim-gnb` | ran | `10.1.0.129` | `fd00:0:0:0:1:8000:0:2` | | +| gnb1 | `louisroyer/ueransim-gnb` | control | `10.1.3.129` | auto | | +| gnb1 | `louisroyer/ueransim-gnb` | dataplane | `10.1.4.129` | auto (not used) | Route to srgw0 | +| gnb2 | `louisroyer/ueransim-gnb` | ran | `10.1.0.130` | `fd00:0:0:0:1:8000:0:3` | | +| gnb2 | `louisroyer/ueransim-gnb` | control | `10.1.3.130` | auto | | +| gnb2 | `louisroyer/ueransim-gnb` | dataplane | `10.1.4.130` | auto (not used) | Route to srgw0 | +| gnbl1 | `louisroyer/dev-nextmn-gnb-lite` | ran | `10.1.0.132` | `fd00:0:0:0:1:8000:0:5` | | +| gnbl1 | `louisroyer/dev-nextmn-gnb-lite` | control | `10.1.3.141` | `fd00:0:0:0:2:8000:0:7` | | +| gnbl1 | `louisroyer/dev-nextmn-gnb-lite` | dataplane | `10.1.4.138` | auto (not used) | Route to srgw0 | +| gnbl2 | `louisroyer/dev-nextmn-gnb-lite` | ran | `10.1.0.133` | `fd00:0:0:0:1:8000:0:6` | | +| gnbl2 | `louisroyer/dev-nextmn-gnb-lite` | control | `10.1.3.142` | `fd00:0:0:0:2:8000:0:8` | | +| gnbl2 | `louisroyer/dev-nextmn-gnb-lite` | dataplane | `10.1.4.139` | auto (not used) | Route to srgw0 | +| cp-lite | `louisroyer/dev-nextmn-cp-lite` | control | `10.1.3.144` | `fd00:0:0:0:2:8000:0:10` | | +| srgw0 | `louisroyer/dev-nextmn-srv6` | control | `10.1.3.131` | `fd00:0:0:0:2:8000:0:2` | | +| srgw0 | `louisroyer/dev-nextmn-srv6` | dataplane | `10.1.4.131` | `fd00:0:0:0:3:8000:0:2` | IPv6 routes to SR domain (r0, r1) | +| srgw0 | `louisroyer/dev-nextmn-srv6` | srgw0 | `10.3.0.1` | disabled | H.M.GTP4.D | +| srgw0 | `louisroyer/dev-nextmn-srv6` | srgw0 | disabled | `fc00:1:1::/48` | End.M.GTP4.E | +| srgw0 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | +| r0 | `louisroyer/dev-nextmn-srv6` | control | auto | `fd00:0:0:0:2:8000:0:4` | | +| r0 | `louisroyer/dev-nextmn-srv6` | dataplane | auto (not used) | `fd00:0:0:0:3:8000:0:3` | IPv6 routes to SR domain (srgw0) | +| r0 | `louisroyer/dev-nextmn-srv6` | r0 | disabled | `fc00:2:1::/48` | End.DX4 | +| r0 | `louisroyer/dev-nextmn-srv6` | edge | `10.1.5.129` | disabled | H.Encaps + Route to instance in edge0 (s0) | +| r0 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | +| r1 | `louisroyer/dev-nextmn-srv6` | control | auto | `fd00:0:0:0:2:8000:0:5` | | +| r1 | `louisroyer/dev-nextmn-srv6` | dataplane | auto (not used) | `fd00:0:0:0:3:8000:0:4` | IPv6 routes to SR domain (srgw0) | +| r1 | `louisroyer/dev-nextmn-srv6` | r1 | disabled | `fc00:3:1::/48` | End.DX4 | +| r1 | `louisroyer/dev-nextmn-srv6` | edge | `10.1.5.130` | disabled | H.Encaps + Route to instances in edge1 (s1) | +| r1 | `louisroyer/dev-nextmn-srv6` | nextmndb | auto | auto | | +| s0 | `nginx` | edge | `10.1.5.131` | disabled | Route to slice0 via r0, slice1 via upfa1-f5gc, slice2 via upfa1-nmn | +| s0 | `ngnix` | service | `10.4.0.1` | disabled | | +| s1 | `nginx` | edge | `10.1.5.132` | disabled | Route to slice0 via r1, slice1 via upfa2-f5gc, slice2 via upfa2-nmn | +| s1 | `ngnix` | service | `10.4.0.1` | disabled | | +| srv6-ctrl | `louisroyer/dev-nextmn-srv6-ctrl` | control | `10.1.3.132` | `fd00:0:0:0:2:8000:0:2` | | +| amf | `louisroyer/dev-free5gc-amf` | control | `10.1.3.133` | auto | | +| amf | `louisroyer/dev-free5gc-amf` | sbi | `10.1.1.129` | disabled | | +| smf | `louisroyer/dev-free5gc-smf` | control | `10.1.3.134` | auto | | +| smf | `louisroyer/dev-free5gc-smf` | sbi | `10.1.1.130` | disabled | | +| nrf | `louisroyer/dev-free5gc-nrf` | sbi | `10.1.1.131` | disabled | | +| nrf | `louisroyer/dev-free5gc-nrf` | db | auto | disabled | | +| ausf | `louisroyer/dev-free5gc-ausf` | sbi | `10.1.1.132` | disabled | | +| nssf | `louisroyer/dev-free5gc-nssf` | sbi | `10.1.1.133` | disabled | | +| pcf | `louisroyer/dev-free5gc-pcf` | sbi | `10.1.1.134` | disabled | | +| pcf | `louisroyer/dev-free5gc-pcf` | db | auto | disabled | | +| udm | `louisroyer/dev-free5gc-udm` | sbi | `10.1.1.135` | disabled | | +| udr | `louisroyer/dev-free5gc-udr` | sbi | `10.1.1.136` | disabled | | +| udr | `louisroyer/dev-free5gc-udr` | db | auto | disabled | | +| chf | `louisroyer/dev/free5gc-chf` | sbi | `10.1.1.137` | disabled | | +| chf | `louisroyer/dev/free5gc-chf` | db | auto | disabled | | +| webconsole | `louisroyer/dev/free5gc-webconsole` | sbi | `10.1.1.138` | disabled | | +| webconsole | `louisroyer/dev/free5gc-webconsole` | db | auto | disabled | | +| upfi-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.135` | auto | | +| upfi-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.132` | auto (not used) | | +| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.136` | auto | | +| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.133` | auto (not used) | | +| upfa1-f5gc | `louisroyer/dev-free5gc-upf` | edge | `10.1.5.133` | auto (not used) | | +| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | control | `10.1.3.137` | auto | | +| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | dataplane | `10.1.4.134` | auto (not used) | | +| upfa2-f5gc | `louisroyer/dev-free5gc-upf` | edge | `10.1.5.134` | auto (not used) | | +| upfi-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.138` | auto | | +| upfi-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.135` | auto (not used) | | +| upfa1-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.139` | auto | | +| upfa1-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.136` | auto (not used) | | +| upfa1-nmn | `louisroyer/dev-nextmn-upf` | edge | `10.1.5.135` | auto (not used) | | +| upfa2-nmn | `louisroyer/dev-nextmn-upf` | control | `10.1.3.140` | auto | | +| upfa2-nmn | `louisroyer/dev-nextmn-upf` | dataplane | `10.1.4.137` | auto (not used) | | +| upfa2-nmn | `louisroyer/dev-nextmn-upf` | edge | `10.1.5.136` | auto (not used) | | +| populate | `louisroyer/free5gc-populate` | db | auto | disabled | | +| mongodb | `mongodb` | db | auto | disabled | | +| nextmndb | `postgres` | nextmndb | auto | auto | | diff --git a/scripts/config_edit.py b/scripts/config_edit.py index 43c0257..997f6a4 100755 --- a/scripts/config_edit.py +++ b/scripts/config_edit.py @@ -23,6 +23,7 @@ def increase_indent(self, flow=False, indentless=False): ) parser.add_argument('buildconfig') parser.add_argument('--dataplane') + parser.add_argument('--controlplane') parser.add_argument('--nb-ue') parser.add_argument('--nb-edges') parser.add_argument('--log-level') @@ -31,6 +32,7 @@ def increase_indent(self, flow=False, indentless=False): parser.add_argument('--handover') args = parser.parse_args() ran = ('stable', 'dev') + controlplane = ('free5gc', 'nextmn-lite') dataplane = ('free5gc', 'nextmn-upf', 'nextmn-srv6') log_levels = ('trace', 'debug', 'info', 'warning', 'error', 'fatal', 'panic') try: @@ -52,6 +54,8 @@ def increase_indent(self, flow=False, indentless=False): raise ConfigException('Invalid value for handover: must be a boolean') if args.ran and (args.ran not in ran): raise ConfigException(f'Invalid ran config: use one from {ran}') + if args.controlplane and (args.controlplane not in controlplane): + raise ConfigException(f'Invalid controlplane config: use one from {controlplane}') except ConfigException as e: print(f'Error: {e}', file=sys.stderr) sys.exit(1) @@ -61,6 +65,8 @@ def increase_indent(self, flow=False, indentless=False): if args.dataplane: dp = args.dataplane.split('+') c['config']['topology']['dataplane'] = dp + if args.controlplane: + c['config']['topology']['controlplane'] = args.controlplane if args.nb_ue: c['config']['topology']['nb_ue'] = int(args.nb_ue) if args.nb_edges: diff --git a/scripts/show_ctrl.py b/scripts/show_ctrl.py index c8ecc08..be36d84 100755 --- a/scripts/show_ctrl.py +++ b/scripts/show_ctrl.py @@ -19,12 +19,10 @@ with open(args.config, 'r', encoding='utf-8') as f: c = yaml.safe_load(f) controller = f'http://[{c["subnets"]["control"]["srv6-ctrl"]["ipv6_address"]}]:8080' - rr = f'http://[{c["subnets"]["control"]["rr"]["ipv6_address"]}]:8080' r0 = f'http://[{c["subnets"]["control"]["r0"]["ipv6_address"]}]:8080' r1 = f'http://[{c["subnets"]["control"]["r1"]["ipv6_address"]}]:8080' srgw = f'http://[{c["subnets"]["control"]["srgw0"]["ipv6_address"]}]:8080' webbrowser.get('firefox').open_new_tab(f'{controller}/routers#controller') - webbrowser.get('firefox').open_new_tab(f'{rr}/rules#rr') webbrowser.get('firefox').open_new_tab(f'{r0}/rules#r0') webbrowser.get('firefox').open_new_tab(f'{r1}/rules#r1') webbrowser.get('firefox').open_new_tab(f'{srgw}/rules#srgw') diff --git a/templates/compose.yaml.j2 b/templates/compose.yaml.j2 index 5331ae9..08554b1 100644 --- a/templates/compose.yaml.j2 +++ b/templates/compose.yaml.j2 @@ -5,7 +5,7 @@ name: "nextmn-testbed" services: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] +#~ if ("nextmn-srv6" in config["topology"]["dataplane"]) and (config["topology"]["controlplane"] == "free5gc") {{ container_s(name='ue1', image='docker.io/louisroyer/ueransim-ue', enable_ipv6=True, debug='always', debug_volume=True, iface_tun=True, cap_net_admin=True, init=True) }} depends_on: amf: @@ -68,7 +68,7 @@ services: #~ endif #~ endif -#~ if "free5gc" in config["topology"]["dataplane"] +#~ if ("free5gc" in config["topology"]["dataplane"]) and (config["topology"]["controlplane"] == "free5gc") {{ container_s(name='ue3', image='docker.io/louisroyer/ueransim-ue', enable_ipv6=True, debug='always', debug_volume=True, iface_tun=True, cap_net_admin=True, init=True) }} depends_on: amf: @@ -131,7 +131,7 @@ services: #~ endif #~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] +#~ if ("nextmn-upf" in config["topology"]["dataplane"]) and (config["topology"]["controlplane"] == "free5gc") {{ container_s(name='ue5', image='docker.io/louisroyer/ueransim-ue', enable_ipv6=True, debug='always', debug_volume=True, iface_tun=True, cap_net_admin=True, init=True) }} depends_on: amf: @@ -194,31 +194,32 @@ services: #~ endif #~ endif +#~ if config["topology"]["controlplane"] == "free5gc" {{ container_s(name='gnb1', image='docker.io/louisroyer/ueransim-gnb', enable_ipv6=True, restart='always', iface_tun=True, cap_net_admin=True, debug='allow') }} depends_on: amf: condition: service_started -#~ if config["topology"]["ran"]["version"] == "dev" + #~ if config["topology"]["ran"]["version"] == "dev" volumes: - ../{{ config.topology.ran.dev_build_path }}/nr-gnb:/usr/bin/nr-gnb:ro - ../{{ config.topology.ran.dev_build_path }}/nr-cli:/usr/bin/nr-cli:ro -#~ endif + #~ endif environment: NCI: "0x000000010" RLS_IP: "{{ ipv6('gnb1', 'ran') }}" N2_IP: "{{ ipv4('gnb1', 'control') }}" N3_IP: "{{ ipv4('gnb1', 'dataplane') }}" SUPPORTED_NSSAIS: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ elif "free5gc" in config["topology"]["dataplane"] + #~ elif "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ elif "nextmn-upf" in config["topology"]["dataplane"] + #~ elif "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif MCC: "001" MNC: "01" ID_LEN: 32 @@ -226,10 +227,10 @@ services: AMF_CONFIGS: |- - address: "{{ ipv4('amf', 'control') }}" port: 38412 -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] ROUTES_INIT: |- - add {{ ipv4('srgw0', 'srgw0') }} via {{ ipv4('srgw0', 'dataplane') }} -#~ endif + #~ endif networks: ran: ipv4_address: "{{ ipv4('gnb1', 'ran') }}" @@ -239,32 +240,32 @@ services: dataplane: ipv4_address: "{{ ipv4('gnb1', 'dataplane') }}" -#~ if (config["topology"]["nb_ue"] > 1) or (config["topology"]["ran"]["handover"]) + #~ if (config["topology"]["nb_ue"] > 1) or (config["topology"]["ran"]["handover"]) {{ container_s(name='gnb2', image='docker.io/louisroyer/ueransim-gnb', enable_ipv6=True, restart='always', iface_tun=True, cap_net_admin=True, debug='allow') }} depends_on: amf: condition: service_started - #~ if config["topology"]["ran"]["version"] == "dev" + #~ if config["topology"]["ran"]["version"] == "dev" volumes: - ../{{ config.topology.ran.dev_build_path }}/nr-gnb:/usr/bin/nr-gnb:ro - ../{{ config.topology.ran.dev_build_path }}/nr-cli:/usr/bin/nr-cli:ro - #~ endif + #~ endif environment: NCI: "0x000000020" RLS_IP: "{{ ipv6('gnb2', 'ran') }}" N2_IP: "{{ ipv4('gnb2', 'control') }}" N3_IP: "{{ ipv4('gnb2', 'dataplane') }}" SUPPORTED_NSSAIS: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ elif "free5gc" in config["topology"]["dataplane"] + #~ elif "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ elif "nextmn-upf" in config["topology"]["dataplane"] + #~ elif "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif MCC: "001" MNC: "01" ID_LEN: 32 @@ -272,10 +273,10 @@ services: AMF_CONFIGS: |- - address: "{{ ipv4('amf', 'control') }}" port: 38412 -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] ROUTES_INIT: |- - add {{ ipv4('srgw0', 'srgw0') }} via {{ ipv4('srgw0', 'dataplane') }} -#~ endif + #~ endif networks: ran: ipv4_address: "{{ ipv4('gnb2', 'ran') }}" @@ -284,8 +285,10 @@ services: ipv4_address: "{{ ipv4('gnb2', 'control') }}" dataplane: ipv4_address: "{{ ipv4('gnb2', 'dataplane') }}" + #~ endif #~ endif +#~ if config["topology"]["controlplane"] == "free5gc" {{ container_s(name='amf', image='docker.io/louisroyer/dev-free5gc-amf', restart='always') }} depends_on: smf: @@ -306,28 +309,28 @@ services: AMF_PEM: "{{ openssl_secret_pem('amf', 'sbi') }}" AMF_KEY: "{{ openssl_secret_key('amf', 'sbi') }}" SUPPORT_DNN_LIST: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - srv6 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - free5gc -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - nextmn-upf -#~ endif + #~ endif SNSSAI_LIST: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif TAC: "000001" secrets: {{ openssl_secrets_pem_s('nrf', 'sbi') | indent(2) }} @@ -503,14 +506,14 @@ services: depends_on: nrf: # required to being able to deregister propertly condition: service_started -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] r0: condition: service_healthy r1: condition: service_healthy srgw0: condition: service_healthy -#~ endif + #~ endif environment: LOG_LEVEL: "{{ log_level() }}" GIN_MODE: "release" @@ -525,7 +528,7 @@ services: MCC: "001" MNC: "01" SNSSAI_INFOS: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sNssai: sst: 1 sd: 000001 @@ -534,8 +537,8 @@ services: dns: ipv4: 9.9.9.9 # TODO: replace with local dns ipv6: 2620:fe::fe -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sNssai: sst: 1 sd: 000002 @@ -544,8 +547,8 @@ services: dns: ipv4: 9.9.9.9 # TODO: replace with local dns ipv6: 2620:fe::fe -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sNssai: sst: 1 sd: 000003 @@ -554,11 +557,11 @@ services: dns: ipv4: 9.9.9.9 # TODO: replace with local dns ipv6: 2620:fe::fe -#~ endif + #~ endif UP_NODES: |- GNB: type: AN -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] UPF_SRV6: type: UPF nodeID: "{{ ipv4('srv6-ctrl', 'control') }}" @@ -579,8 +582,8 @@ services: - {{ ipv4('srgw0', 'srgw0') }} networkInstances: - srv6 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] UPFI_F5GC: type: UPF nodeID: "{{ ipv4('upfi-f5gc', 'control') }}" @@ -622,7 +625,7 @@ services: - {{ ipv4('upfa1-f5gc', 'dataplane') }} networkInstances: - free5gc - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 UPFA2_F5GC: type: UPF nodeID: "{{ ipv4('upfa2-f5gc', 'control') }}" @@ -643,9 +646,9 @@ services: - {{ ipv4('upfa2-f5gc', 'dataplane') }} networkInstances: - free5gc + #~ endif #~ endif -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ if "nextmn-upf" in config["topology"]["dataplane"] UPFI_NEXTMNUPF: type: UPF nodeID: "{{ ipv4('upfi-nmn', 'control') }}" @@ -687,7 +690,7 @@ services: - {{ ipv4('upfa1-nmn', 'dataplane') }} networkInstances: - nextmn-upf - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 UPFA2_NEXTMNUPF: type: UPF nodeID: "{{ ipv4('upfa2-nmn', 'control') }}" @@ -708,95 +711,95 @@ services: - {{ ipv4('upfa2-nmn', 'dataplane') }} networkInstances: - nextmn-upf + #~ endif #~ endif -#~ endif ULCL: "true" LINKS: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - A: GNB B: UPF_SRV6 -#~endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~endif + #~ if "free5gc" in config["topology"]["dataplane"] - A: GNB B: UPFI_F5GC - A: UPFI_F5GC B: UPFA1_F5GC - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 - A: UPFI_F5GC B: UPFA2_F5GC + #~ endif #~ endif -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ if "nextmn-upf" in config["topology"]["dataplane"] - A: GNB B: UPFI_NEXTMNUPF - A: UPFI_NEXTMNUPF B: UPFA1_NEXTMNUPF - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 - A: UPFI_NEXTMNUPF B: UPFA2_NEXTMNUPF + #~ endif #~ endif -#~ endif UEROUTING_INFO: |- none1: members: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - imsi-001010000000001 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000002 + #~ endif #~ endif -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ if "free5gc" in config["topology"]["dataplane"] - imsi-001010000000003 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000004 + #~ endif #~ endif -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ if "nextmn-upf" in config["topology"]["dataplane"] - imsi-001010000000005 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000006 + #~ endif #~ endif -#~ endif topology: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - A: GNB B: UPF_SRV6 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - A: GNB B: UPFI_F5GC - A: UPFI_F5GC B: UPFA1_F5GC - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 - A: UPFI_F5GC B: UPFA2_F5GC + #~ endif #~ endif -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ if "nextmn-upf" in config["topology"]["dataplane"] - A: GNB B: UPFI_NEXTMNUPF - A: UPFI_NEXTMNUPF B: UPFA1_NEXTMNUPF - #~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 - A: UPFI_NEXTMNUPF B: UPFA2_NEXTMNUPF + #~ endif #~ endif -#~ endif -#~ if config["topology"]["nb_edges"] > 1 + #~ if config["topology"]["nb_edges"] > 1 specificPath: - #~ if "free5gc" in config["topology"]["dataplane"] + #~ if "free5gc" in config["topology"]["dataplane"] - dest: 10.4.0.1/32 path: [UPFI_F5GC, UPFA1_F5GC] - dest: 10.4.0.2/32 path: [UPFI_F5GC, UPFA2_F5GC] - #~ endif - #~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - dest: 10.4.0.1/32 path: [UPFI_NEXTMNUPF, UPFA1_NEXTMNUPF] - dest: 10.4.0.2/32 path: [UPFI_NEXTMNUPF, UPFA2_NEXTMNUPF] + #~ endif #~ endif -#~ endif secrets: {{ openssl_secrets_pem_s('nrf', 'sbi') | indent(2) }} {{ openssl_secrets_s('smf', 'sbi') | indent(2) }} @@ -813,43 +816,43 @@ services: environment: MONGO_HOST: "mongodb.db" SLICES: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 varqi: 9 dnn: srv6 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 varqi: 9 dnn: free5gc -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 varqi: 9 dnn: nextmn-upf -#~ endif + #~ endif IMSI: |- -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - imsi-001010000000001 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000002 + #~ endif #~ endif -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ if "free5gc" in config["topology"]["dataplane"] - imsi-001010000000003 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000004 + #~ endif #~ endif -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ if "nextmn-upf" in config["topology"]["dataplane"] - imsi-001010000000005 - #~ if config["topology"]["nb_ue"] > 1 + #~ if config["topology"]["nb_ue"] > 1 - imsi-001010000000006 + #~ endif #~ endif -#~ endif networks: db: @@ -875,18 +878,18 @@ services: mcc: 001 mnc: 01 supportedSnssaiList: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif NSI_LIST: |- - snssai: sst: 1 @@ -905,18 +908,18 @@ services: mnc: 01 tac: 0000001 supportedSnssaiList: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif AMF_LIST: |- - nfId: 469de254-2fe5-4ca0-8381-af3f500af77c supportedNssaiAvailabilityData: @@ -926,18 +929,18 @@ services: mnc: 01 tac: 000001 supportedSnssaiList: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif TA_LIST: |- - tai: @@ -947,18 +950,18 @@ services: tac: 000001 accessType: 3GPP_ACCESS supportedSnssaiList: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - sst: 1 sd: 000001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - sst: 1 sd: 000002 -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - sst: 1 sd: 000003 -#~ endif + #~ endif MAPPING_LIST_FROM_PLMN: |- - operatorName: dummyoperator @@ -966,36 +969,37 @@ services: mcc: 001 mnc: 02 mappingOfSnssai: -#~ if "nextmn-srv6" in config["topology"]["dataplane"] + #~ if "nextmn-srv6" in config["topology"]["dataplane"] - servingSnssai: sst: 1 sd: 00001 homeSnssai: sst: 1 sd: 00001 -#~ endif -#~ if "free5gc" in config["topology"]["dataplane"] + #~ endif + #~ if "free5gc" in config["topology"]["dataplane"] - servingSnssai: sst: 1 sd: 00002 homeSnssai: sst: 1 sd: 00002 -#~ endif -#~ if "nextmn-upf" in config["topology"]["dataplane"] + #~ endif + #~ if "nextmn-upf" in config["topology"]["dataplane"] - servingSnssai: sst: 1 sd: 00003 homeSnssai: sst: 1 sd: 00003 -#~ endif + #~ endif secrets: {{ openssl_secrets_pem_s('nrf', 'sbi') | indent(2) }} {{ openssl_secrets_s('nssf', 'sbi') | indent(2) }} networks: sbi: ipv4_address: "{{ ipv4('nssf', 'sbi') }}" +#~ endif #~ if "nextmn-srv6" in config["topology"]["dataplane"] {{ container_s(name='r0', image='docker.io/louisroyer/dev-nextmn-srv6', restart='always', srv6=True, debug='allow') }} @@ -1191,7 +1195,7 @@ services: networks: nextmndb: - {{ container_s(name='srv6-ctrl', image='docker.io/louisroyer/dev-nextmn-srv6-ctrl', restart='always') }} + {{ container_s(name='srv6-ctrl', image='docker.io/louisroyer/dev-nextmn-srv6-ctrl', debug='allow', restart='always') }} environment: N4: "{{ ipv4('srv6-ctrl', 'control') }}" HTTP_ADDRESS: "{{ ipv6('srv6-ctrl', 'control') }}" @@ -1405,7 +1409,117 @@ services: ipv4_address: "{{ ipv4('upfa2-nmn', 'edge') }}" #~ endif #~ endif + +#~ if config["topology"]["controlplane"] == "nextmn-lite" + {{ container_s(name='uel1', image='docker.io/louisroyer/dev-nextmn-ue-lite', enable_ipv6=True, debug='always', debug_volume=False, iface_tun=True, cap_net_admin=True) }} + depends_on: + gnbl1: + condition: service_started + environment: + GIN_MODE: "release" + HTTP_ADDRESS: "{{ ipv6('uel1', 'control') }}" + HTTP_PORT: "8080" + RAN: |- + bind-addr: "[{{ ipv6('uel1', 'ran') }}]:1234" + gnbs: + - "http://[{{ ipv6('gnbl1', 'control') }}]:8080" + pdu-sessions: + - gnb: "http://[{{ ipv6('gnbl1', 'control') }}]:8080" + dnn: "srv6" + LOG_LEVEL: "{{ log_level() }}" + networks: + ran: + ipv4_address: "{{ ipv4('uel1', 'ran') }}" + ipv6_address: "{{ ipv6('uel1', 'ran') }}" + control: + ipv4_address: "{{ ipv4('uel1', 'control') }}" + ipv6_address: "{{ ipv6('uel1', 'control') }}" + + {{ container_s(name='gnbl1', image='docker.io/louisroyer/dev-nextmn-gnb-lite', enable_ipv6=True, debug='always', debug_volume=False, cap_net_admin=True) }} + depends_on: + cp-lite: + condition: service_started + environment: + GIN_MODE: "release" + HTTP_ADDRESS: "{{ ipv6('gnbl1', 'control') }}" + HTTP_PORT: "8080" + CP: "http://[{{ ipv6('cp-lite', 'control') }}]:8080" + N3: "{{ ipv4('gnbl1', 'dataplane') }}" + RAN: |- + bind-addr: "[{{ ipv6('gnbl1', 'ran') }}]:1234" + LOG_LEVEL: "{{ log_level() }}" + ROUTES_INIT: |- + - add {{ ipv4('srgw0', 'srgw0') }} via {{ ipv4('srgw0', 'dataplane') }} + networks: + ran: + ipv4_address: "{{ ipv4('gnbl1', 'ran') }}" + ipv6_address: "{{ ipv6('gnbl1', 'ran') }}" + control: + ipv4_address: "{{ ipv4('gnbl1', 'control') }}" + ipv6_address: "{{ ipv6('gnbl1', 'control') }}" + dataplane: + ipv4_address: "{{ ipv4('gnbl1', 'dataplane') }}" + + {{ container_s(name='gnbl2', image='docker.io/louisroyer/dev-nextmn-gnb-lite', enable_ipv6=True, debug='always', debug_volume=False, cap_net_admin=True) }} + depends_on: + cp-lite: + condition: service_started + environment: + GIN_MODE: "release" + HTTP_ADDRESS: "{{ ipv6('gnbl2', 'control') }}" + HTTP_PORT: "8080" + CP: "http://[{{ ipv6('cp-lite', 'control') }}]:8080" + N3: "{{ ipv4('gnbl2', 'dataplane') }}" + RAN: |- + bind-addr: "[{{ ipv6('gnbl2', 'ran') }}]:1234" + LOG_LEVEL: "{{ log_level() }}" + ROUTES_INIT: |- + - add {{ ipv4('srgw0', 'srgw0') }} via {{ ipv4('srgw0', 'dataplane') }} + networks: + ran: + ipv4_address: "{{ ipv4('gnbl2', 'ran') }}" + ipv6_address: "{{ ipv6('gnbl2', 'ran') }}" + control: + ipv4_address: "{{ ipv4('gnbl2', 'control') }}" + ipv6_address: "{{ ipv6('gnbl2', 'control') }}" + dataplane: + ipv4_address: "{{ ipv4('gnbl2', 'dataplane') }}" + + {{ container_s(name='cp-lite', image='docker.io/louisroyer/dev-nextmn-cp-lite', enable_ipv6=True, debug='allow', debug_volume=False, cap_net_admin=True) }} + depends_on: + srv6-ctrl: + condition: service_started + srgw0: + condition: service_started + r0: + condition: service_started + r1: + condition: service_started + environment: + GIN_MODE: "release" + N4: "{{ ipv4('cp-lite', 'control') }}" + HTTP_ADDRESS: "{{ ipv6('cp-lite', 'control') }}" + HTTP_PORT: "8080" + SLICES: |- + srv6: + pool: "{{ ipv4_subnet('slice0') }}" + upfs: + - node-id: "{{ ipv4('srv6-ctrl', 'control') }}" + interfaces: + - type: "N3" + addr: "{{ ipv4('srgw0', 'srgw0') }}" + LOG_LEVEL: "{{ log_level() }}" + networks: + control: + ipv4_address: "{{ ipv4('cp-lite', 'control') }}" + ipv6_address: "{{ ipv6('cp-lite', 'control') }}" + +#~ endif + +#~ if (config["topology"]["controlplane"] == "free5gc") or ("nextmn-srv6" in config["topology"]["dataplane"]) secrets: +#~ endif +#~ if config["topology"]["controlplane"] == "free5gc" {{ openssl_s('amf', 'sbi') }} {{ openssl_s('ausf', 'sbi') }} {{ openssl_s('chf', 'sbi') }} @@ -1415,6 +1529,7 @@ secrets: {{ openssl_s('smf', 'sbi') }} {{ openssl_s('udm', 'sbi') }} {{ openssl_s('udr', 'sbi') }} +#~ endif #~ if "nextmn-srv6" in config["topology"]["dataplane"] r0_db_password: file: "{{ secret('r0_db_password.txt') }}" @@ -1424,10 +1539,12 @@ secrets: file: "{{ secret('srgw0_db_password.txt') }}" #~ endif +#~ if "nextmn-srv6" in config["topology"]["dataplane"] volumes: r0_db_volume: r1_db_volume: srgw0_db_volume: +#~ endif networks: ran: @@ -1446,6 +1563,7 @@ networks: - subnet: fd00:0:0:0:1::/80 ip_range: fd00:0:0:0:1::/81 gateway: fd00::1:8000:0:1 +#~ if config["topology"]["controlplane"] == "free5gc" sbi: name: sbi enable_ipv6: false @@ -1472,6 +1590,7 @@ networks: - subnet: 10.1.2.0/24 ip_range: 10.1.2.0/25 gateway: 10.1.2.254 +#~ endif control: name: control enable_ipv6: true diff --git a/templates/images-list.yaml b/templates/images-list.yaml index 011ed70..cbe841c 100644 --- a/templates/images-list.yaml +++ b/templates/images-list.yaml @@ -1,44 +1,50 @@ name: "nextmn-testbed-pull-images" services: mongo: - image: mongo + image: docker.io/library/mongo postgres: - image: postgres + image: docker.io/library/postgres nginx: - image: nginx + image: docker.io/library/nginx ue: - image: louisroyer/ueransim-ue + image: docker.io/louisroyer/ueransim-ue gnb: - image: louisroyer/ueransim-gnb + image: docker.io/louisroyer/ueransim-gnb debug: - image: louisroyer/network-debug + image: docker.io/louisroyer/network-debug docker-setup: - image: louisroyer/docker-setup + image: docker.io/louisroyer/docker-setup free5gc-upf: - image: louisroyer/dev-free5gc-upf + image: docker.io/louisroyer/dev-free5gc-upf nextmn-upf: - image: louisroyer/dev-nextmn-upf + image: docker.io/louisroyer/dev-nextmn-upf nextmn-srv6: - image: louisroyer/dev-nextmn-srv6 + image: docker.io/louisroyer/dev-nextmn-srv6 nextmn-srv6-ctrl: - image: louisroyer/dev-nextmn-srv6-ctrl + image: docker.io/louisroyer/dev-nextmn-srv6-ctrl + nextmn-ue-lite: + image: docker.io/louisroyer/dev-nextmn-ue-lite + nextmn-gnb-lite: + image: docker.io/louisroyer/dev-nextmn-gnb-lite + nextmn-cp-lite: + image: docker.io/louisroyer/dev-nextmn-cp-lite amf: - image: louisroyer/dev-free5gc-amf + image: docker.io/louisroyer/dev-free5gc-amf ausf: - image: louisroyer/dev-free5gc-ausf + image: docker.io/louisroyer/dev-free5gc-ausf chf: - image: louisroyer/dev-free5gc-chf + image: docker.io/louisroyer/dev-free5gc-chf nrf: - image: louisroyer/dev-free5gc-nrf + image: docker.io/louisroyer/dev-free5gc-nrf nssf: - image: louisroyer/dev-free5gc-nssf + image: docker.io/louisroyer/dev-free5gc-nssf pcf: - image: louisroyer/dev-free5gc-pcf + image: docker.io/louisroyer/dev-free5gc-pcf smf: - image: louisroyer/dev-free5gc-smf + image: docker.io/louisroyer/dev-free5gc-smf udm: - image: louisroyer/dev-free5gc-udm + image: docker.io/louisroyer/dev-free5gc-udm udr: - image: louisroyer/dev-free5gc-udr + image: docker.io/louisroyer/dev-free5gc-udr webconsole: - image: louisroyer/dev-free5gc-webconsole + image: docker.io/louisroyer/dev-free5gc-webconsole