edgecomllc / eupf

5G User Plane Function (UPF) based on eBPF
Apache License 2.0
99 stars 18 forks source link

Add simple slicing scenario support for free5gc #319

Closed pirog-spb closed 1 year ago

pirog-spb commented 1 year ago

WHO: MNO & Buisness customer WHAT: MNO deploys separete slice for specific customer in order to provide independent network connectivity to customer's local resources. WHY: APN routing is limited and complicated for MNO and requires equipment reconfiguration. Slicing looks more convenient and easy to deploy.

Configure deployment of slicing scenario with additional eUPF in separate slice. Choose slice based on specific STT/SD.

DoD:

PapaySail commented 1 year ago

ℹ Referenced article Select UPF based on S-NSSAI: Open5GS (SMF1 + UPF1) & (SMF2 + UPF2)

Orange-OpenSource/towards5gs-helm for free5gc current configs slice parameters:

AMF configmap:

data:
  amfcfg.yaml: |
          snssaiList:
            - sst: 1
              sd: 010203
            - sst: 1
              sd: 112233
      supportDnnList:
        - internet
      locality: area1 # Name of the location where a set of AMF, SMF, PCF and UPFs are located

SMF:

data:
  smfcfg.yaml: |
      snssaiInfos:
        - sNssai:
            sst: 1
            sd: 010203
          dnnInfos: # DNN information list
            - dnn: internet # Data Network Name
              dns: # the IP address of DNS
                ipv4: 8.8.8.8
                ipv6: 2001:4860:4860::8888
        - sNssai:
            sst: 1
            sd: 112233
          dnnInfos: # DNN information list
            - dnn: internet # Data Network Name
              dns: # the IP address of DNS
                ipv4: 8.8.8.8
                ipv6: 2001:4860:4860::8888
        - sNssai:
            sst: 2
            sd: 112234
          dnnInfos:
            - dnn: internet
              dns:
                ipv4: 8.8.8.8
                ipv6: 2001:4860:4860::8888
      plmnList: # the list of PLMN IDs that this SMF belongs to (optional, remove this key when unnecessary)
        - mcc: 208 # Mobile Country Code (3 digits string, digit: 0~9)
          mnc: 93 # Mobile Network Code (2 or 3 digits string, digit: 0~9)
      userplaneInformation: # list of userplane information
        upNodes: # information of userplane node (AN or UPF)
          gNB1: # the name of the node
            type: AN # the type of the node (AN or UPF)
          UPF:  # the name of the node
            type: UPF # the type of the node (AN or UPF)
            nodeID: 10.100.50.241 # the IP/FQDN of N4 interface on this UPF (PFCP)
            addr: 10.100.50.241 # the IP/FQDN of N4 interface on this UPF (PFCP)
            sNssaiUpfInfos: # S-NSSAI information list for this UPF
                  - sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
                      sst: 1 # Slice/Service Type (uinteger, range: 0~255)
                      sd: 010203 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
                    dnnUpfInfoList: # DNN information list for this S-NSSAI
                      - dnn: internet
                        pools:
                          - cidr: 10.1.0.0/17
                          - cidr: 2001:db8:cafe::/48
                        staticPools:
                          - cidr: 10.1.64.0/24
                  - sNssai: # S-NSSAI (Single Network Slice Selection Assistance Information)
                      sst: 1 # Slice/Service Type (uinteger, range: 0~255)
                      sd: 112233 # Slice Differentiator (3 bytes hex string, range: 000000~FFFFFF)
                    dnnUpfInfoList: # DNN information list for this S-NSSAI
                      - dnn: internet
                        pools:
                          - cidr: 10.1.128.0/17
                        staticPools:
                          - cidr: 10.1.192.0/24
            interfaces: # Interface list for this UPF
                  - interfaceType: N3 # the type of the interface (N3 or N9)
                    endpoints: # the IP address of this N3/N9 interface on this UPF
                      - 10.100.50.233
                    networkInstances:
                      - internet # Data Network Name (DNN)
        links: # the topology graph of userplane, A and B represent the two nodes of each link
          - A: gNB1
            B: UPF
      locality: area1 # Name of the location where a set of AMF, SMF and UPFs are located

NSSF: https://github.com/Orange-OpenSource/towards5gs-helm/blob/4d32360d5777d48d39d47c8cdfbfccce63d2f628/charts/free5gc/charts/free5gc-nssf/values.yaml#L106-L110

      supportedPlmnList:
        - mcc: 208
          mnc: 93
      supportedNssaiInPlmnList:
        - plmnId:
            mcc: 208
            mnc: 93
          supportedSnssaiList:
            - sst: 1
              sd: 010203
            - sst: 1
              sd: 112233

UERANSIM :: GnB https://github.com/Orange-OpenSource/towards5gs-helm/blob/4d32360d5777d48d39d47c8cdfbfccce63d2f628/charts/ueransim/values.yaml#L96-L98

  configuration: |-
    mcc: '208' # Mobile Country Code value
    mnc: '93'  # Mobile Network Code value (2 or 3 digits)
    nci: '0x000000010'  # NR Cell Identity (36-bit)
    idLength: 32        # NR gNB ID length in bits [22...32]
    tac: 1     # Tracking Area Code
    # List of supported S-NSSAIs by this gNB
    slices:
      - sst: 0x1
        sd: 0x010203

UERANSIM :: UE config https://github.com/Orange-OpenSource/towards5gs-helm/blob/4d32360d5777d48d39d47c8cdfbfccce63d2f628/charts/ueransim/values.yaml#L156-L169

    sessions:
      - type: "IPv4"
        apn: "internet"
        slice:
          sst: 0x01
          sd: 0x010203
    # Configured NSSAI for this UE by HPLMN
    configured-nssai:
      - sst: 0x01
        sd: 0x010203
    # Default Configured NSSAI for this UE
    default-nssai:
      - sst: 1
        sd: 1
PapaySail commented 1 year ago

Created new values file eupf2-rout-static.yml for eUPF2:

SMF: - slice sd: 112233

ewdss commented 1 year ago

Slicing scenario 1 (!= 0) questions, attempt 1: https://miro.com/app/board/uXjVPlO58Jc=/?moveToWidget=3458764558559325846&cot=14

PapaySail commented 1 year ago

✔ OK eUPF2 start command:

helm upgrade --install `
    eupf2 .deploy/helm/universal-chart `
    --values docs/examples/free5gc/eupf2-rout-static.yaml `
    -n free5gc116 `
    --wait --timeout 100s --create-namespace

UPF2 log:

UE addr 10.2.0.2

```prolog 2023/07/05 14:25:54 EBPF: Put PDR Uplink: teid=5, pdrInfo={OuterHeaderRemoval:0 FarId:1 QerId:2} 2023/07/05 14:25:54 EBPF: Put PDR Downlink: ipv4=10.2.0.2, pdrInfo={OuterHeaderRemoval:0 FarId:2 QerId:2} 2023/07/05 14:25:54 Received 146 bytes from 10.100.50.245:8805 2023/07/05 14:25:54 Handling PFCP message from 10.100.50.245:8805 2023/07/05 14:25:54 Got Session Modification Request from: 10.100.50.245:8805. 2023/07/05 14:25:54 Finding association for 10.100.50.245:8805 2023/07/05 14:25:54 Finding session 4 2023/07/05 14:25:54 Session Modification Request: UpdatePDR ID: 6 FAR ID: 6 Source Interface: 1 UE IPv4 Address: 10.2.0.2 UpdateFAR ID: 6 Apply Action: [2] Update forwarding Parameters: Network Instance: internet Outer Header Creation: &{OuterHeaderCreationDescription:256 TEID:2 IPv4Address:10.100.50.235 IPv6Address: PortNumber:0 CTag:0 STag:0} 2023/07/05 14:25:54 Updating FAR info: 6, {FarInfo:{Action:2 OuterHeaderCreation:1 Teid:2 RemoteIP:3945948170 LocalIP:3929170954 TransportLevelMarking:0} GlobalId:2} 2023/07/05 14:25:54 EBPF: Update FAR: internalId=2, farInfo={Action:2 OuterHeaderCreation:1 Teid:2 RemoteIP:3945948170 LocalIP:3929170954 TransportLevelMarking:0} 2023/07/05 14:25:54 EBPF: Put PDR Downlink: ipv4=10.2.0.2, pdrInfo={OuterHeaderRemoval:0 FarId:2 QerId:2} ```

📝 Deployed with UERANSIM images from Openverso helm -n free5gc install open-ueransim-gnb openverso/ueransim-gnb --values docs/examples/free5gc/openverso-gnb-ues-values.yaml

The target schema is like this: image

PapaySail commented 1 year ago

📝Open5GS ver 2.6.2 needed, openverso-charts ver 2.0.12 Further changes is in #356