397 lines
13 KiB
Bash
397 lines
13 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
set -uo pipefail
|
||
|
|
||
|
# GLOBAL VARS
|
||
|
imsi_now=""
|
||
|
ki_now=""
|
||
|
opc_now=""
|
||
|
|
||
|
function imsi_parser(){
|
||
|
# echo "IMSI -> KI -> OPC"
|
||
|
while IFS=, read -r count imsi ki opc
|
||
|
do
|
||
|
# echo "[$count]" $imsi "->" $ki "->" "$opc"
|
||
|
if [ "$1" = "$count" ]; then
|
||
|
imsi_now="$imsi"
|
||
|
ki_now="$ki"
|
||
|
opc_now="$opc"
|
||
|
return
|
||
|
fi
|
||
|
done < input/imsi_data.csv
|
||
|
}
|
||
|
|
||
|
function create_from_path() {
|
||
|
cd $1
|
||
|
if echo "$1" | grep -iqF deploy; then
|
||
|
echo "Deployment Mode"
|
||
|
cu_confs=`ls -d ./*cu*`
|
||
|
for x in `ls -d $cu_confs`; do oc create -f $x -n infidel-test; done
|
||
|
echo "[CU Deployment] Delay, let the script breathe..."
|
||
|
sleep 5
|
||
|
ue_confs=`ls -d ./*ue*`
|
||
|
for x in `ls -d $ue_confs`; do oc create -f $x -n infidel-test; done
|
||
|
echo "[UE Deployment] Delay, let the script breathe..."
|
||
|
sleep 2
|
||
|
du_confs=`ls -d ./*du*`
|
||
|
for x in `ls -d $du_confs`; do oc create -f $x -n infidel-test; done
|
||
|
echo "[DU Deployment] Delay, let the script breathe..."
|
||
|
else
|
||
|
echo "Custom Mode"
|
||
|
for x in `ls -d .`; do oc create -f $x -n infidel-test; done
|
||
|
fi
|
||
|
cd -
|
||
|
}
|
||
|
|
||
|
function clean_deployments(){
|
||
|
|
||
|
for x in $(oc get dc -n infidel-test -o jsonpath="{range .items[*]}{.metadata.name}{'\n'}{end}"); do oc delete dc $x -n infidel-test; done
|
||
|
for x in $(oc get deployments -n infidel-test -o jsonpath="{range .items[*]}{.metadata.name}{'\n'}{end}" | grep "0[0-9]"); do oc delete deployment $x -n infidel-test; done
|
||
|
for x in $(oc get network-attachment-definition -n infidel-test -o jsonpath="{range .items[*]}{.metadata.name}{'\n'}{end}" | grep "0[0-9]") ; do oc delete network-attachment-definition $x -n infidel-test; done
|
||
|
|
||
|
}
|
||
|
|
||
|
function deployment_gen(){
|
||
|
|
||
|
SOURCE_FILE="deployments/src/template_deployment.yaml"
|
||
|
echo "--------------------------[*]"
|
||
|
echo "${role} -> ${ip}"
|
||
|
export trainee=$role
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="deployments/trainee/gnb-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
}
|
||
|
|
||
|
function net_core_gen(){
|
||
|
clear
|
||
|
rm net/core/*
|
||
|
echo "***************************"
|
||
|
echo "Core NET Generation"
|
||
|
echo "***************************"
|
||
|
while IFS=, read -r role ip
|
||
|
do
|
||
|
SOURCE_FILE="net/src/template_net.yaml"
|
||
|
echo $role "->" $ip
|
||
|
trainee=$role
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="net/core/${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
done < input/core_net_ipv4.csv
|
||
|
echo "***************************"
|
||
|
}
|
||
|
|
||
|
|
||
|
function net_gen(){
|
||
|
while IFS=, read -r role ip_cu_amf ip_cu_du ip_du_cu ip_ue_du
|
||
|
do
|
||
|
echo "IMSI DATA *************************"
|
||
|
imsi_parser $role
|
||
|
echo "IMSI" $imsi_now
|
||
|
echo "KI" $ki_now
|
||
|
echo "OPC" $opc_now
|
||
|
|
||
|
echo "--------------------------[*]"
|
||
|
# GNB CU_AMF NET
|
||
|
SOURCE_FILE="net/src/template_net.yaml"
|
||
|
export trainee="cu-amf-$role"
|
||
|
export ip="$ip_cu_amf/24"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="net/gnb/cu-amf-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB CU_DU NET
|
||
|
SOURCE_FILE="net/src/template_net.yaml"
|
||
|
export trainee="cu-du-$role"
|
||
|
export ip="$ip_cu_du/24"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="net/gnb/cu-du-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB DU_CU NET
|
||
|
SOURCE_FILE="net/src/template_net.yaml"
|
||
|
export trainee="du-cu-$role"
|
||
|
export ip="$ip_du_cu/24"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="net/gnb/du-cu-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB UE_DU NET
|
||
|
SOURCE_FILE="net/src/template_net.yaml"
|
||
|
export trainee="ue-du-$role"
|
||
|
export ip="$ip_ue_du/24"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="net/gnb/ue-du-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB CU Deplpoyment
|
||
|
SOURCE_FILE="deployments/src/template_deployment.yaml"
|
||
|
echo "--------------------------[*]"
|
||
|
export trainee="cu-$role"
|
||
|
export net="oai-cu-amf-$role-net,oai-cu-du-$role-net"
|
||
|
export ip=$ip_du_cu
|
||
|
export mode="cu"
|
||
|
export mode_cap="CU"
|
||
|
export part_of="oai-amf"
|
||
|
export part_type="Deployment"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
echo $v "->" $NEW_VAR
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="deployments/trainee/gnb-cu-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB DU Deplpoyment
|
||
|
SOURCE_FILE="deployments/src/template_deployment.yaml"
|
||
|
echo "--------------------------[*]"
|
||
|
export trainee="du-$role"
|
||
|
export net="oai-du-cu-$role-net"
|
||
|
export ip=$ip_du_cu
|
||
|
export mode="du"
|
||
|
export mode_cap="TDD_DU"
|
||
|
export part_of="oai-cu-$role"
|
||
|
export part_type="DeploymentConfig"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="deployments/trainee/gnb-du-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB UE_DU Deplpoyment
|
||
|
SOURCE_FILE="deployments/src/template_ue_deployment.yaml"
|
||
|
echo "--------------------------[*]"
|
||
|
export trainee="ue-$role"
|
||
|
export net="oai-ue-du-$role-net"
|
||
|
export ip=$ip_ue_du
|
||
|
export mode="ue"
|
||
|
export mode_cap="TDD_DU"
|
||
|
export part_of="oai-du-$role"
|
||
|
export part_type="DeploymentConfig"
|
||
|
|
||
|
VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
EXPRESSIONS=""
|
||
|
for v in ${VARS}; do
|
||
|
NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
"Config file '$(basename $c)' requires all of $VARS."
|
||
|
exit 1
|
||
|
fi
|
||
|
echo $v "->" $NEW_VAR
|
||
|
EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
done
|
||
|
|
||
|
TARGET_FILE="deployments/trainee/gnb-ue-${role}.yaml"
|
||
|
EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
echo "${TARGET_FILE}"
|
||
|
echo ""
|
||
|
|
||
|
# GNB DEMO_CU Deplpoyment
|
||
|
# SOURCE_FILE="deployments/src/gnb_access_deployment.yaml"
|
||
|
# echo "--------------------------[*]"
|
||
|
# export trainee="ue-demo-$role"
|
||
|
# export net="oai-ue-du-$role-net"
|
||
|
# export ip=$ip_ue_du
|
||
|
# export mode="ue"
|
||
|
# export mode_cap="TDD_DU"
|
||
|
# export part_of="oai-du-$role"
|
||
|
# export part_type="DeploymentConfig"
|
||
|
|
||
|
# VARS=$(grep -oP '@[a-zA-Z0-9_]+@' ${SOURCE_FILE} | sort | uniq | xargs)
|
||
|
# EXPRESSIONS=""
|
||
|
# for v in ${VARS}; do
|
||
|
# NEW_VAR=`echo $v | sed -e "s#@##g"`
|
||
|
# if [[ "${!NEW_VAR}x" == "x" ]]; then
|
||
|
# echo "Error: Environment variable '${NEW_VAR}' is not set." \
|
||
|
# "Config file '$(basename $c)' requires all of $VARS."
|
||
|
# exit 1
|
||
|
# fi
|
||
|
# echo $v "->" $NEW_VAR
|
||
|
# EXPRESSIONS="${EXPRESSIONS};s|${v}|${!NEW_VAR}|g"
|
||
|
# done
|
||
|
#
|
||
|
# TARGET_FILE="deployments/trainee/gnb-demo-ue-${role}.yaml"
|
||
|
# EXPRESSIONS="${EXPRESSIONS#';'}"
|
||
|
# sed "${EXPRESSIONS}" ${SOURCE_FILE} > ${TARGET_FILE}
|
||
|
# echo "${TARGET_FILE}"
|
||
|
# echo ""
|
||
|
done < input/main_data.csv
|
||
|
}
|
||
|
|
||
|
PS3="[!] Select operation : "
|
||
|
select mode in trainee_gnb_and_net clean_deployments create_from_path "Core Net Generation" "Imsi Parser" "Dirty Reload" "Deploy Access Demo";
|
||
|
do
|
||
|
case $mode in
|
||
|
trainee_gnb_and_net)
|
||
|
rm deployments/trainee/*.yaml
|
||
|
rm net/gnb/*.yaml
|
||
|
net_gen
|
||
|
;;
|
||
|
create_from_path)
|
||
|
echo "Where is the Path: "
|
||
|
echo "[!]-<$(pwd)>"
|
||
|
read -e -p '[!]-: ' path
|
||
|
create_from_path $path
|
||
|
;;
|
||
|
clean_deployments)
|
||
|
PS3="[*] Clean Mode : "
|
||
|
select clear_mode in deployments nets exit;
|
||
|
do
|
||
|
case $clear_mode in
|
||
|
deployments)
|
||
|
clean_deployments 1
|
||
|
;;
|
||
|
nets)
|
||
|
clean_deployments 2
|
||
|
;;
|
||
|
exit)
|
||
|
break
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
;;
|
||
|
"Core Net Generation")
|
||
|
net_core_gen
|
||
|
;;
|
||
|
"Imsi Parser")
|
||
|
imsi_parser
|
||
|
;;
|
||
|
"Dirty Reload")
|
||
|
echo "Dirty Reload..."
|
||
|
clean_deployments 1
|
||
|
create_from_path net/gnb
|
||
|
create_from_path deployments/trainee
|
||
|
;;
|
||
|
"Deploy Access Demo")
|
||
|
echo "Editable Deployment"
|
||
|
;;
|
||
|
*)
|
||
|
echo "Invalid option $REPLAY"
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
|