Commit 8bf6d5d7 authored by Robert Schmidt's avatar Robert Schmidt
Browse files

Merge branch 'integration_2025_w27' into 'develop'

Integration: `2025.w27`

Closes #958

See merge request !3506

* !3349 Speed up docker deployment in CI
* !3360 NR UE: fix reestablishment for NTN
* !3488 Refactor F1 UE context messages, add unit tests
* !3502 bugfix for UL TBSLBRM
* !3475 Use of common functions to prepare FAPI PDUs at gNB MAC
* !3499 NR UE: enable CSI report for SISO case
* !3497 Update/refine gNB MAC stats, update L1
* remove unit test `--output-on-failure` option to avoid hitting timeout
* !3508 gNB: fix NTN UL retransmissions
* !3494 bugfix: read msg_type only after deciphering
* set `tx_amp_backoff_dB = 30;` for RFsim 2x2 to make it pass
* !3432 NR RRC Reject UE
* !3500 Various fixes for UE handling, HO doc updates
* !3398 continuously update SIB19 information for rfsim NTN LEO scenarios
parents a3b9db20 d76f062d
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -65,9 +65,9 @@ oc-cn5g:
  Host: avra
  NetworkScript: echo "inet 172.21.6.102"
  RunIperf3Server: False
  Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran"
  Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran"
  LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jan oaicicd-core-for-ci-ran %%log_dir%%"
  Deploy: "! scripts/oc-cn5g-deploy.sh /opt/oai-cn5g-fed-develop-2025-jun oaicicd-core-for-ci-ran"
  Undeploy: "! scripts/oc-cn5g-undeploy.sh /opt/oai-cn5g-fed-develop-2025-jun oaicicd-core-for-ci-ran"
  LogCollect: "! scripts/oc-cn5g-logcollect.sh /opt/oai-cn5g-fed-develop-2025-jun oaicicd-core-for-ci-ran %%log_dir%%"

oc-cn5g-20897:
  Host: cacofonix
@@ -89,8 +89,8 @@ matix-cn5g:
  Host: matix
  NetworkScript: docker exec prod-trf-gen ip a show dev eth0
  RunIperf3Server: False
  Deploy: "cd /opt/oai-cn5g-fed-v2/docker-compose && python3 ./core-network.py --type start-basic"
  Undeploy: "cd /opt/oai-cn5g-fed-v2/docker-compose && python3 ./core-network.py --type stop-basic"
  Deploy: "cd /opt/oai-cn5g-fed-v2-jun-2025/docker-compose && python3 ./core-network.py --type start-basic"
  Undeploy: "cd /opt/oai-cn5g-fed-v2-jun-2025/docker-compose && python3 ./core-network.py --type stop-basic"
  LogCollect:
    - "docker logs oai-smf > %%log_dir%%/oai-smf.log"
    - "docker logs oai-amf > %%log_dir%%/oai-amf.log"
+11 −43
Original line number Diff line number Diff line
@@ -152,19 +152,6 @@ def GetImageName(ssh, svcName, file):
	else:
		return ret.stdout.strip()

def GetServiceHealth(ssh, svcName, file):
	if svcName is None:
		return False, f"Service {svcName} not found in {file}"
	image = GetImageName(ssh, svcName, file)
	if 'db_init' in svcName or 'db-init' in svcName: # exits with 0, there cannot be healthy
		return True, f"Service {svcName} healthy, image {image}"
	for _ in range(8):
		result = ssh.run(f"docker compose -f {file} ps --format json {svcName}  | jq -r 'if type==\"array\" then .[0].Health else .Health end'", silent=True)
		if result.stdout == 'healthy':
			return True, f"Service {svcName} healthy, image {image}"
		time.sleep(5)
	return False, f"Failed to deploy: service {svcName}"

def ExistEnvFilePrint(ssh, wd, prompt='env vars in existing'):
	ret = ssh.run(f'cat {wd}/.env', silent=True, reportNonZero=False)
	if ret.returncode != 0:
@@ -311,7 +298,6 @@ class Containerize():
		self.yamlPath = ['', '', '']
		self.services = ['', '', '']
		self.deploymentTag = ''
		self.eNB_logFile = ['', '', '']

		self.testCase_id = ''

@@ -320,17 +306,6 @@ class Containerize():
		self.dockerfileprefix = ''
		self.host = ''

		self.deployedContainers = []
		self.tsharkStarted = False
		self.pingContName = ''
		self.pingOptions = ''
		self.pingLossThreshold = ''
		self.svrContName = ''
		self.svrOptions = ''
		self.cliContName = ''
		self.cliOptions = ''

		self.imageToCopy = ''
		#checkers from xml
		self.ran_checkers={}
		self.num_attempts = 1
@@ -712,7 +687,7 @@ class Containerize():
		HTML.CreateHtmlTestRowQueue("Build unit tests", 'OK', [dockerfile])

		# it worked, build and execute tests, and close connection
		ret = cmd.run(f'docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --rm ran-unittests:{baseTag} ctest --output-on-failure --no-label-summary -j$(nproc)')
		ret = cmd.run(f'docker run -a STDOUT --workdir /oai-ran/build/ --env LD_LIBRARY_PATH=/oai-ran/build/ --rm ran-unittests:{baseTag} ctest --no-label-summary -j$(nproc)')
		cmd.run(f'docker rmi ran-unittests:{baseTag}')
		build_log_name = f'build_log_{self.testCase_id}'
		CopyLogsToExecutor(cmd, lSourcePath, build_log_name)
@@ -872,31 +847,24 @@ class Containerize():
			if num_attempts <= 0:
				raise ValueError(f'Invalid value for num_attempts: {num_attempts}, must be greater than 0')
			for attempt in range(num_attempts):
				imagesInfo = []
				healthInfo = []
				logging.info(f'will start services {services}')
				status = ssh.run(f'docker compose -f {wd_yaml} up -d -- {services}')
				if status.returncode != 0:
				status = ssh.run(f'docker compose -f {wd_yaml} up -d --wait --wait-timeout 60 -- {services}')
				info = ssh.run(f"docker compose -f {wd_yaml} ps --all --format=\'table {{{{.Service}}}} [{{{{.Image}}}}] {{{{.Status}}}}\' -- {services} | column -t")
				deployed = status.returncode == 0
				if not deployed:
					msg = f'cannot deploy services {services}: {status.stdout}'
					logging.error(msg)
					HTML.CreateHtmlTestRowQueue('N/A', 'NOK', [msg])
					return False
				for svc in services.split():
					health, msg = GetServiceHealth(ssh, svc, f'{wd_yaml}')
					logging.info(msg)
					imagesInfo.append(msg)
					healthInfo.append(health)
				deployed = all(healthInfo)
				if deployed:
				else:
					break
				elif (attempt < num_attempts - 1):
					warning_msg = f'Restart services {services}'
				if (attempt < num_attempts - 1):
					warning_msg = (f'Failed to deploy on attempt {attempt}, restart services {services}')
					logging.warning(warning_msg)
					imagesInfo.append(warning_msg)
					HTML.CreateHtmlTestRowQueue('N/A', 'NOK', ['\n'.join(imagesInfo)])
					HTML.CreateHtmlTestRowQueue('N/A', 'NOK', [warning_msg])
					for svc in services.split():
						CopyinServiceLog(ssh, lSourcePath, yaml_dir, svc, wd_yaml, f'{svc}-{HTML.testCase_id}-attempt{attempt}.log')
					ssh.run(f'docker compose -f {wd_yaml} down -- {services}')
		imagesInfo = info.stdout.splitlines()[1:]
		logging.debug(f'{info.stdout.splitlines()[1:]}')
		if deployed:
			HTML.CreateHtmlTestRowQueue('N/A', 'OK', ['\n'.join(imagesInfo)])
		else:
+9 −0
Original line number Diff line number Diff line
@@ -195,6 +195,15 @@ gNBs =
  }
);

rlc = {
  srb = {
    t_poll_retransmit = "ms2000"
  }
  drb_am = {
    t_poll_retransmit = "ms2000"
  }
}

MACRLCs = (
{
  num_cc                      = 1;
+2 −2
Original line number Diff line number Diff line
@@ -213,7 +213,7 @@ security = {
  # preferred ciphering algorithms
  # the first one of the list that an UE supports in chosen
  # valid values: nea0, nea1, nea2, nea3
  ciphering_algorithms = ( "nea0" );
  ciphering_algorithms = ( "nea2", "nea0" );

  # preferred integrity algorithms
  # the first one of the list that an UE supports in chosen
@@ -223,7 +223,7 @@ security = {
  # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
  # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
  drb_ciphering = "yes";
  drb_integrity = "no";
  drb_integrity = "yes";
};

log_config :
+2 −2
Original line number Diff line number Diff line
@@ -212,7 +212,7 @@ security = {
  # preferred ciphering algorithms
  # the first one of the list that an UE supports in chosen
  # valid values: nea0, nea1, nea2, nea3
  ciphering_algorithms = ( "nea0" );
  ciphering_algorithms = ( "nea2", "nea0" );

  # preferred integrity algorithms
  # the first one of the list that an UE supports in chosen
@@ -222,7 +222,7 @@ security = {
  # setting 'drb_ciphering' to "no" disables ciphering for DRBs, no matter
  # what 'ciphering_algorithms' configures; same thing for 'drb_integrity'
  drb_ciphering = "yes";
  drb_integrity = "no";
  drb_integrity = "yes";
};

log_config :
Loading