AETHER-45 Add support of latest features in BESS based SPGWU

This patchset resolves the issues below.
Also enable PFCP by default.
- AETHER-370 Add support of UP4 pipeline
- AETHER-371 Add support of PFCP iface
- AETHER-373 Make upf.json fully configurable

Change-Id: I665168156968c090f3c297228b7b35f3dc0d8ace
diff --git a/omec/omec-control-plane/values.yaml b/omec/omec-control-plane/values.yaml
index 92838bc..0bd8c67 100644
--- a/omec/omec-control-plane/values.yaml
+++ b/omec/omec-control-plane/values.yaml
@@ -9,9 +9,9 @@
     init: docker.io/omecproject/pod-init:1.0.0
     hssdb: docker.io/omecproject/c3po-hssdb:master-latest
     hss: docker.io/omecproject/c3po-hss:master-latest
-    mme: docker.io/omecproject/openmme:master-latest
+    mme: docker.io/omecproject/nucleus:master-latest
     mmeExporter: docker.io/omecproject/mme-exporter:paging-latest
-    spgwc: docker.io/omecproject/ngic-cp:central-cp-multi-upfs-latest
+    spgwc: docker.io/omecproject/spgwc:master-latest
     depCheck: quay.io/stackanetes/kubernetes-entrypoint:v0.3.1
   pullPolicy: IfNotPresent
 
@@ -235,7 +235,7 @@
           phoneType: "iPhone11-Pro"
   spgwc:
     deploy: true
-    pfcp: false
+    pfcp: true
     apn: internet
     # ueStaticPool is used only when multiUpfs is not enabled.
     # In case of multiUpfs, use app_config.cfg to provide static pool per DP.
diff --git a/omec/omec-user-plane/Chart.yaml b/omec/omec-user-plane/Chart.yaml
index b3e54c4..590b524 100644
--- a/omec/omec-user-plane/Chart.yaml
+++ b/omec/omec-user-plane/Chart.yaml
@@ -7,4 +7,4 @@
 name: omec-user-plane
 icon: https://guide.opencord.org/logos/cord.svg
 
-version: 0.1.5
+version: 0.2.1
diff --git a/omec/omec-user-plane/templates/bin/_bessd-poststart.sh.tpl b/omec/omec-user-plane/templates/bin/_bessd-poststart.sh.tpl
index d073f81..b9e20fd 100644
--- a/omec/omec-user-plane/templates/bin/_bessd-poststart.sh.tpl
+++ b/omec/omec-user-plane/templates/bin/_bessd-poststart.sh.tpl
@@ -6,6 +6,6 @@
 
 set -ex
 
-until bessctl run /opt/bess/bessctl/conf/spgwu; do
+until bessctl run /opt/bess/bessctl/conf/up4; do
     sleep 2;
 done;
diff --git a/omec/omec-user-plane/templates/config/_spgwu.json.tpl b/omec/omec-user-plane/templates/config/_spgwu.json.tpl
deleted file mode 100644
index e667a86..0000000
--- a/omec/omec-user-plane/templates/config/_spgwu.json.tpl
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "mode": {{ .Values.config.spgwu.mode | quote }},
-  "ue_cidr": {{ .Values.config.spgwu.ue.subnet | quote }},
-  "enb_cidr": {{ .Values.config.spgwu.enb.subnet | quote }},
-  "s1u": {
-    "ifname": {{ .Values.config.spgwu.s1u.device | quote }}
-  },
-  "sgi": {
-    "ifname": {{ .Values.config.spgwu.sgi.device | quote }}
-  },
-  "workers": {{ .Values.config.spgwu.workers }},
-  "max_sessions": {{ .Values.config.spgwu.maxSessions }}
-}
diff --git a/omec/omec-user-plane/templates/config/_spgwu.json.tpl.license b/omec/omec-user-plane/templates/config/_spgwu.json.tpl.license
deleted file mode 100644
index 889687c..0000000
--- a/omec/omec-user-plane/templates/config/_spgwu.json.tpl.license
+++ /dev/null
@@ -1,3 +0,0 @@
-SPDX-FileCopyrightText: 2020-present Open Networking Foundation <info@opennetworking.org>
-
-SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
diff --git a/omec/omec-user-plane/templates/configmap-spgwu.yaml b/omec/omec-user-plane/templates/configmap-spgwu.yaml
index 583f283..5829656 100644
--- a/omec/omec-user-plane/templates/configmap-spgwu.yaml
+++ b/omec/omec-user-plane/templates/configmap-spgwu.yaml
@@ -12,7 +12,8 @@
   labels:
 {{ tuple "spgwu" . | include "omec-user-plane.metadata_labels" | indent 4 }}
 data:
-  spgwu.json: |
-{{ tuple "config/_spgwu.json.tpl" . | include "omec-user-plane.template" | indent 4 }}
+{{- range $key, $value := .Values.config.spgwu.cfgFiles }}
+  {{ $key }}: {{ toJson $value | quote }}
+{{- end }}
   bessd-poststart.sh: |
 {{ tuple "bin/_bessd-poststart.sh.tpl" . | include "omec-user-plane.template" | indent 4 }}
diff --git a/omec/omec-user-plane/templates/service-spgwu.yaml b/omec/omec-user-plane/templates/service-spgwu.yaml
index ddb2967..d310b29 100644
--- a/omec/omec-user-plane/templates/service-spgwu.yaml
+++ b/omec/omec-user-plane/templates/service-spgwu.yaml
@@ -15,10 +15,6 @@
   clusterIP: None
   selector:
 {{ tuple "spgwu" . | include "omec-user-plane.metadata_labels" | indent 4 }}
-  ports:
-  - name: zmq
-    protocol: TCP
-    port: {{ .Values.config.spgwu.zmq.recvPort }}
 ---
 apiVersion: v1
 kind: Service
diff --git a/omec/omec-user-plane/templates/statefulset-spgwu.yaml b/omec/omec-user-plane/templates/statefulset-spgwu.yaml
index 963f27a..1379d8f 100644
--- a/omec/omec-user-plane/templates/statefulset-spgwu.yaml
+++ b/omec/omec-user-plane/templates/statefulset-spgwu.yaml
@@ -4,16 +4,19 @@
 # SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
 */}}
 
+{{- $upfConfig := index .Values.config.spgwu.cfgFiles "upf.json" }}
+{{- $s1uConfig := index $upfConfig "s1u" }}
+{{- $sgiConfig := index $upfConfig "sgi" }}
 ---
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: spgwu
-  serviceName: spgwu-headless
   labels:
 {{ tuple "spgwu" . | include "omec-user-plane.metadata_labels" | indent 4 }}
 spec:
   replicas: 1
+  serviceName: spgwu-headless
   selector:
     matchLabels:
 {{ tuple "spgwu" . | include "omec-user-plane.metadata_labels" | indent 6 }}
@@ -25,12 +28,12 @@
         k8s.v1.cni.cncf.io/networks: '[
           {
             "name": "s1u-net",
-            "interface": {{ .Values.config.spgwu.s1u.device | quote }},
+            "interface": {{ index $s1uConfig "ifname" | quote }},
             "ips": {{ .Values.config.spgwu.s1u.ip | quote }}
           },
           {
             "name": "sgi-net",
-            "interface": {{ .Values.config.spgwu.sgi.device | quote }},
+            "interface": {{ index $sgiConfig "ifname" | quote }},
             "ips": {{ .Values.config.spgwu.sgi.ip | quote }}
           }
         ]'
@@ -64,7 +67,6 @@
           capabilities:
             add:
             - IPC_LOCK
-            - NET_ADMIN
         stdin: true
         tty: true
         command: ["/bin/bash", "-xc"]
@@ -108,7 +110,7 @@
           {{- end }}
         env:
           - name: CONF_FILE
-            value: /etc/bess/conf/spgwu.json
+            value: /etc/bess/conf/upf.json
         volumeMounts:
         {{- if .Values.config.spgwu.hugepage.enabled }}
           - name: hugepages
@@ -129,8 +131,8 @@
         command: ["/opt/bess/bessctl/conf/route_control.py"]
         args:
           - -i
-          - {{ .Values.config.spgwu.s1u.device }}
-          - {{ .Values.config.spgwu.sgi.device }}
+          - {{ index $s1uConfig "ifname" }}
+          - {{ index $sgiConfig "ifname" }}
       {{- if .Values.resources.enabled }}
         resources:
 {{ toYaml .Values.resources.routectl | indent 10 }}
@@ -144,33 +146,31 @@
 {{ toYaml .Values.resources.web | indent 10 }}
       {{- end }}
       - name: cpiface
-        image: {{ .Values.images.tags.cpiface | quote }}
+      {{- if eq .Values.config.spgwu.cpiface.mode "zmq" }}
+        image: {{ .Values.images.tags.zmqiface | quote }}
         imagePullPolicy: {{ .Values.images.pullPolicy | quote }}
         env:
-          - name: ZMQD_IP
-            valueFrom:
-              fieldRef:
-                fieldPath: status.podIP
           - name: GLOG_v
             value: "1"
         command: ["zmq-cpiface"]
         args:
-          - --hostname
-          - {{ .Values.config.spgwu.name | quote }}
-          - --zmqd_nb_ip
-          - {{ .Values.config.spgwu.zmq.spgwc.addr | quote }}
-          - --zmqd_nb_port
-          - {{ .Values.config.spgwu.zmq.spgwc.port | quote }}
-          - --zmqd_recv_port
-          - {{ .Values.config.spgwu.zmq.recvPort | quote }}
-          - --zmqd_ip
-          - $(ZMQD_IP)
-          - --s1u_sgw_ip
-          - {{ (split "/" .Values.config.spgwu.s1u.ip)._0 | quote }}
+          - --json_config
+          - /tmp/conf/upf.json
+      {{- else }}
+        image: {{ .Values.images.tags.pfcpiface | quote }}
+        imagePullPolicy: {{ .Values.images.pullPolicy | quote }}
+        command: ["pfcpiface"]
+        args:
+          - -config
+          - /tmp/conf/upf.json
+      {{- end }}
       {{- if .Values.resources.enabled }}
         resources:
 {{ toYaml .Values.resources.cpiface | indent 10 }}
       {{- end }}
+        volumeMounts:
+          - name: configs
+            mountPath: /tmp/conf
       volumes:
       - name: configs
         configMap:
diff --git a/omec/omec-user-plane/values.yaml b/omec/omec-user-plane/values.yaml
index 5877ed7..648dca7 100644
--- a/omec/omec-user-plane/values.yaml
+++ b/omec/omec-user-plane/values.yaml
@@ -6,7 +6,8 @@
   tags:
     init: docker.io/omecproject/pod-init:1.0.0
     bess: docker.io/omecproject/upf-epc-bess:master-latest
-    cpiface: docker.io/omecproject/upf-epc-cpiface:master-latest
+    pfcpiface: docker.io/omecproject/upf-epc-pfcpiface:master-latest
+    zmqiface: docker.io/omecproject/upf-epc-cpiface:master-latest
   pullPolicy: Always
 
 nodeSelectors:
@@ -55,39 +56,33 @@
       enabled: true
     sriov:
       enabled: true
-    # Provide UPF interface driver.
-    # Available options are dpdk, af_xdp, af_packet.
-    mode: "dpdk"
-    name: "dp-name"
-    workers: 1
-    maxSessions: 50000
-    # Provide the S1U and SGI networks facing device name and IP address
+    # Dynamic IP allocation is not supported yet
+    ipam: static
+    cniPlugin: vfioveth
+    enb:
+      subnet: 192.168.251.0/24
     s1u:
-      device: s1u
-      subnet: 192.168.252.0/24
       gateway: 192.168.252.1
       ip: 192.168.252.3/24
     sgi:
-      device: sgi
-      subnet: 192.168.250.0/24
       gateway: 192.168.250.1
       ip: 192.168.250.3/24
-    enb:
-      subnet: 192.168.251.0/24
-    ue:
-      subnet: 10.250.0.0/16
-    zmq:
-      recvPort: 20
-      spgwc:
-        addr: spgwc-headless
-        port: 21
+    cfgFiles:
+      upf.json:
+        mode: dpdk
+        workers: 1
+        max_sessions: 50000
+        cpiface:
+          nb_dst_ip: spgwc-headless
+          hostname: upf-bess
+        s1u:
+          ifname: s1u
+        sgi:
+          ifname: sgi
+        measure: true
     bess:
       web:
         nodePort: 36000
-    # Dynamic IP allocation is not supported for the user plane interfaces
-    ipam: static
-    cniPlugin: vfioveth
-    hugepage:
-      enabled: true
-    sriov:
-      enabled: true
+    cpiface:
+      # pfcp or zmq
+      mode: pfcp