edgecomllc / eupf

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

feat: setting the FTUP flag and allocation of TEID #476

Closed arxxm closed 10 months ago

s5uishida commented 10 months ago

Hi,

When I applied this Pull Request and tried to work with free5GC, the following error occurred on free5GC. Also, N3 and N4 are different addresses. I don't think free5GC supports FTUP, so first I tried to confirm the current behavior that is not FTUP.

2023-11-09T10:52:50.787596981+09:00 [INFO][SMF][PduSess] Sending PFCP Session Establishment Request
2023-11-09T10:52:50.788031257+09:00 [INFO][AMF][Gmm][amf_ue_ngap_id:RU:1,AU:1(3GPP)][supi:SUPI:imsi-001010000000000] create smContext[pduSessionID: 1] Success
2023-11-09T10:52:50.800565396+09:00 [WARN][SMF][PFCP] Read PFCP error: None of V4 and V6 flags is set
2023-11-09T10:52:53.793694112+09:00 [WARN][SMF][PFCP] Read PFCP error: None of V4 and V6 flags is set
2023-11-09T10:52:56.806546313+09:00 [WARN][SMF][PFCP] Read PFCP error: None of V4 and V6 flags is set
2023-11-09T10:52:59.791144414+09:00 [WARN][SMF][PduSess] Sending PFCP Session Establishment Request error: Request Transaction [5]: retry-out

FYI.

s5uishida commented 10 months ago

Hi,

I confirmed that FTUP works with Open5GS on 120-upf-ftup-fteid branch.

The config.yml in that case is as follows. N3 and N4 addresses are different.

interface_name: [enp0s9, enp0s16]
xdp_attach_mode: generic
api_address: :8080
pfcp_address: 192.168.14.151:8805
pfcp_node_id: 192.168.14.151
metrics_address: :9090
n3_address: 192.168.13.151
qer_map_size: 1024
far_map_size: 1024
pdr_map_size: 1024
resize_ebpf_maps: false
heartbeat_retries: 3
heartbeat_interval: 5
heartbeat_timeout: 5
logging_level: info
feature_ueip: true
feature_ftup: true
ip_pool: 10.45.0.0/16
teid_pool: 65536

At that time, I modified the following and built eupf.

eupf/cmd/core/pdr.go

--- pdr.go.orig 2023-11-21 21:41:31.517477982 +0900
+++ pdr.go      2023-11-21 21:53:37.750671526 +0900
@@ -12,7 +12,7 @@

 func deletePDR(spdrInfo SPDRInfo, mapOperations ebpf.ForwardingPlaneController, resourceManager *service.ResourceManager, seID uint64) error {
        if spdrInfo.Ipv4 != nil {
-               if err := mapOperations.DeletePdrDownLink(spdrInfo.Ipv4); err != nil {
+               if err := mapOperations.DeletePdrDownlink(spdrInfo.Ipv4); err != nil {
                        return fmt.Errorf("Can't delete IPv4 PDR: %s", err.Error())
                }
        } else if spdrInfo.Ipv6 != nil {
@@ -20,7 +20,7 @@
                        return fmt.Errorf("Can't delete IPv6 PDR: %s", err.Error())
                }
        } else {
-               if err := mapOperations.DeletePdrUpLink(spdrInfo.Teid); err != nil {
+               if err := mapOperations.DeletePdrUplink(spdrInfo.Teid); err != nil {
                        return fmt.Errorf("Can't delete GTP PDR: %s", err.Error())
                }
        }
@@ -108,7 +108,7 @@

 func applyPDR(spdrInfo SPDRInfo, mapOperations ebpf.ForwardingPlaneController) {
        if spdrInfo.Ipv4 != nil {
-               if err := mapOperations.PutPdrDownLink(spdrInfo.Ipv4, spdrInfo.PdrInfo); err != nil {
+               if err := mapOperations.PutPdrDownlink(spdrInfo.Ipv4, spdrInfo.PdrInfo); err != nil {
                        log.Info().Msgf("Can't apply IPv4 PDR: %s", err.Error())
                }
        } else if spdrInfo.Ipv6 != nil {
@@ -116,7 +116,7 @@
                        log.Info().Msgf("Can't apply IPv6 PDR: %s", err.Error())
                }
        } else {
-               if err := mapOperations.PutPdrUpLink(spdrInfo.Teid, spdrInfo.PdrInfo); err != nil {
+               if err := mapOperations.PutPdrUplink(spdrInfo.Teid, spdrInfo.PdrInfo); err != nil {
                        log.Info().Msgf("Can't apply GTP PDR: %s", err.Error())
                }
        }

Thank you very much!

s5uishida commented 10 months ago

Hi,

When I tried with free5GC on 120-upf-ftup-fteid branch, a parsing error occurred regarding the SDF Filter shown by the arrow.

free5GC version used commit:e48e933dde6bad3a83f6cd327003eeba6992abfa (2023.11.03)

Just a quick report.

2023/11/25 20:40:26 INF Got Session Establishment Request from: 192.168.14.141.
2023/11/25 20:40:26 INF 
Session Establishment Request:
  CreatePDR ID: 1 
    Outer Header Removal: 0 
    FAR ID: 1 
    QER ID: 2 
    QER ID: 1 
    URR ID: 1 
    Source Interface: 0 
    TEID: 1 
    Ipv4: 192.168.13.151 
    Ipv6: <nil> 
    UE IPv4 Address: 10.60.0.1 
  CreatePDR ID: 2 
    FAR ID: 2 
    QER ID: 2 
    QER ID: 1 
    URR ID: 1 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
  CreatePDR ID: 3 
    Outer Header Removal: 0 
    FAR ID: 3 
    QER ID: 1 
    QER ID: 3 
    URR ID: 1 
    Source Interface: 0 
    TEID: 1 
    Ipv4: 192.168.13.151 
    Ipv6: <nil> 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from 10.60.0.0/16 to any <--
  CreatePDR ID: 4 
    FAR ID: 4 
    QER ID: 1 
    QER ID: 3 
    URR ID: 1 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from any to 10.60.0.0/16 
  CreateFAR ID: 1 
    Apply Action: [2] 
    Forwarding Parameters:
      Network Instance:internet 
  CreateFAR ID: 2 
    Apply Action: [2] 
    Forwarding Parameters:
  CreateFAR ID: 3 
    Apply Action: [2] 
    Forwarding Parameters:
      Network Instance:internet 
  CreateFAR ID: 4 
    Apply Action: [2] 
    Forwarding Parameters:
  CreateQER ID: 3 
    Gate Status DL: 0 
    Gate Status UL: 0 
    QFI: 2 
  CreateQER ID: 2 
    Gate Status DL: 0 
    Gate Status UL: 0 
    QFI: 1 
  CreateQER ID: 1 
    Gate Status DL: 0 
    Gate Status UL: 0 
    Max Bitrate DL: 1000000 
    Max Bitrate UL: 1000000 
    QFI: 0 
  CreateURR ID: 1 
    Measurement Method: 2 
    Volume Threshold: &{Flags:6 TotalVolume:0 UplinkVolume:1000 DownlinkVolume:1000} 
  CreateURR ID: 2 
    Measurement Method: 2 
    Volume Threshold: &{Flags:6 TotalVolume:0 UplinkVolume:1000 DownlinkVolume:1000} 

2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 1, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 2, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 3, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 4, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF Saving QER info to session: 3, {GateStatusUL:0 GateStatusDL:0 Qfi:2 MaxBitrateUL:0 MaxBitrateDL:0 StartUL:0 StartDL:0}
2023/11/25 20:40:26 INF Saving QER info to session: 2, {GateStatusUL:0 GateStatusDL:0 Qfi:1 MaxBitrateUL:0 MaxBitrateDL:0 StartUL:0 StartDL:0}
2023/11/25 20:40:26 INF Saving QER info to session: 1, {GateStatusUL:0 GateStatusDL:0 Qfi:0 MaxBitrateUL:1000000000 MaxBitrateDL:1000000000 StartUL:0 StartDL:0}
2023/11/25 20:40:26 Matched groups: []
2023/11/25 20:40:26 ERR SDFFilter err: SDF Filter: bad formatting. Should be compatible with regexp: ^permit out (icmp|ip|tcp|udp|\d+) from (any|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))? to (assigned|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))?$
2023/11/25 20:40:26 ERR error extracting PDR info: SDF Filter: bad formatting. Should be compatible with regexp: ^permit out (icmp|ip|tcp|udp|\d+) from (any|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))? to (assigned|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))?$
2023/11/25 20:40:26 Matched groups: [permit out ip from any to 10.60.0.0/16 ip any   10.60.0.0 16 ]
2023/11/25 20:40:26 INF Session Establishment Request from 192.168.14.141 accepted.
2023/11/25 20:40:26 INF Got Session Modification Request from: 192.168.14.141. 

2023/11/25 20:40:26 INF Finding association for 192.168.14.141
2023/11/25 20:40:26 INF Finding session 2
2023/11/25 20:40:26 INF 
Session Modification Request:
  UpdatePDR ID: 2 
    FAR ID: 2 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
  UpdatePDR ID: 4 
    FAR ID: 4 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from any to 10.60.0.0/16 
  UpdateFAR ID: 2 
    Apply Action: [2] 
    Update forwarding Parameters:
      Network Instance:internet 
      Outer Header Creation: &{OuterHeaderCreationDescription:256 TEID:1 IPv4Address:192.168.13.131 IPv6Address:<nil> PortNumber:0 CTag:0 STag:0} 
  UpdateFAR ID: 4 
    Apply Action: [2] 
    Update forwarding Parameters:
      Network Instance:internet 
      Outer Header Creation: &{OuterHeaderCreationDescription:256 TEID:1 IPv4Address:192.168.13.131 IPv6Address:<nil> PortNumber:0 CTag:0 STag:0} 

2023/11/25 20:40:26 INF Updating FAR info: 2, {FarInfo:{Action:2 OuterHeaderCreation:1 Teid:1 RemoteIP:2198710464 LocalIP:2534254784 TransportLevelMarking:0} GlobalId:1}
2023/11/25 20:40:26 INF Updating FAR info: 4, {FarInfo:{Action:2 OuterHeaderCreation:1 Teid:1 RemoteIP:2198710464 LocalIP:2534254784 TransportLevelMarking:0} GlobalId:3}
2023/11/25 20:40:26 INF Both F-TEID IE and UE IP Address IE are missing
2023/11/25 20:40:26 INF Both F-TEID IE and UE IP Address IE are missing
arxxm commented 10 months ago

Hi,

When I tried with free5GC on 120-upf-ftup-fteid branch, a parsing error occurred regarding the SDF Filter shown by the arrow.

free5GC version used commit:e48e933dde6bad3a83f6cd327003eeba6992abfa (2023.11.03)

Just a quick report.

2023/11/25 20:40:26 INF Got Session Establishment Request from: 192.168.14.141.
2023/11/25 20:40:26 INF 
Session Establishment Request:
  CreatePDR ID: 1 
    Outer Header Removal: 0 
    FAR ID: 1 
    QER ID: 2 
    QER ID: 1 
    URR ID: 1 
    Source Interface: 0 
    TEID: 1 
    Ipv4: 192.168.13.151 
    Ipv6: <nil> 
    UE IPv4 Address: 10.60.0.1 
  CreatePDR ID: 2 
    FAR ID: 2 
    QER ID: 2 
    QER ID: 1 
    URR ID: 1 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
  CreatePDR ID: 3 
    Outer Header Removal: 0 
    FAR ID: 3 
    QER ID: 1 
    QER ID: 3 
    URR ID: 1 
    Source Interface: 0 
    TEID: 1 
    Ipv4: 192.168.13.151 
    Ipv6: <nil> 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from 10.60.0.0/16 to any <--
  CreatePDR ID: 4 
    FAR ID: 4 
    QER ID: 1 
    QER ID: 3 
    URR ID: 1 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from any to 10.60.0.0/16 
  CreateFAR ID: 1 
    Apply Action: [2] 
    Forwarding Parameters:
      Network Instance:internet 
  CreateFAR ID: 2 
    Apply Action: [2] 
    Forwarding Parameters:
  CreateFAR ID: 3 
    Apply Action: [2] 
    Forwarding Parameters:
      Network Instance:internet 
  CreateFAR ID: 4 
    Apply Action: [2] 
    Forwarding Parameters:
  CreateQER ID: 3 
    Gate Status DL: 0 
    Gate Status UL: 0 
    QFI: 2 
  CreateQER ID: 2 
    Gate Status DL: 0 
    Gate Status UL: 0 
    QFI: 1 
  CreateQER ID: 1 
    Gate Status DL: 0 
    Gate Status UL: 0 
    Max Bitrate DL: 1000000 
    Max Bitrate UL: 1000000 
    QFI: 0 
  CreateURR ID: 1 
    Measurement Method: 2 
    Volume Threshold: &{Flags:6 TotalVolume:0 UplinkVolume:1000 DownlinkVolume:1000} 
  CreateURR ID: 2 
    Measurement Method: 2 
    Volume Threshold: &{Flags:6 TotalVolume:0 UplinkVolume:1000 DownlinkVolume:1000} 

2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 1, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 2, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 3, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF WARN: No OuterHeaderCreation
2023/11/25 20:40:26 INF Saving FAR info to session: 4, {Action:2 OuterHeaderCreation:0 Teid:0 RemoteIP:0 LocalIP:2534254784 TransportLevelMarking:0}
2023/11/25 20:40:26 INF Saving QER info to session: 3, {GateStatusUL:0 GateStatusDL:0 Qfi:2 MaxBitrateUL:0 MaxBitrateDL:0 StartUL:0 StartDL:0}
2023/11/25 20:40:26 INF Saving QER info to session: 2, {GateStatusUL:0 GateStatusDL:0 Qfi:1 MaxBitrateUL:0 MaxBitrateDL:0 StartUL:0 StartDL:0}
2023/11/25 20:40:26 INF Saving QER info to session: 1, {GateStatusUL:0 GateStatusDL:0 Qfi:0 MaxBitrateUL:1000000000 MaxBitrateDL:1000000000 StartUL:0 StartDL:0}
2023/11/25 20:40:26 Matched groups: []
2023/11/25 20:40:26 ERR SDFFilter err: SDF Filter: bad formatting. Should be compatible with regexp: ^permit out (icmp|ip|tcp|udp|\d+) from (any|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))? to (assigned|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))?$
2023/11/25 20:40:26 ERR error extracting PDR info: SDF Filter: bad formatting. Should be compatible with regexp: ^permit out (icmp|ip|tcp|udp|\d+) from (any|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))? to (assigned|[\d.]+|[\da-fA-F:]+)(?:/(\d+))?(?: (\d+|\d+-\d+))?$
2023/11/25 20:40:26 Matched groups: [permit out ip from any to 10.60.0.0/16 ip any   10.60.0.0 16 ]
2023/11/25 20:40:26 INF Session Establishment Request from 192.168.14.141 accepted.
2023/11/25 20:40:26 INF Got Session Modification Request from: 192.168.14.141. 

2023/11/25 20:40:26 INF Finding association for 192.168.14.141
2023/11/25 20:40:26 INF Finding session 2
2023/11/25 20:40:26 INF 
Session Modification Request:
  UpdatePDR ID: 2 
    FAR ID: 2 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
  UpdatePDR ID: 4 
    FAR ID: 4 
    Source Interface: 2 
    UE IPv4 Address: 10.60.0.1 
    SDF Filter: permit out ip from any to 10.60.0.0/16 
  UpdateFAR ID: 2 
    Apply Action: [2] 
    Update forwarding Parameters:
      Network Instance:internet 
      Outer Header Creation: &{OuterHeaderCreationDescription:256 TEID:1 IPv4Address:192.168.13.131 IPv6Address:<nil> PortNumber:0 CTag:0 STag:0} 
  UpdateFAR ID: 4 
    Apply Action: [2] 
    Update forwarding Parameters:
      Network Instance:internet 
      Outer Header Creation: &{OuterHeaderCreationDescription:256 TEID:1 IPv4Address:192.168.13.131 IPv6Address:<nil> PortNumber:0 CTag:0 STag:0} 

2023/11/25 20:40:26 INF Updating FAR info: 2, {FarInfo:{Action:2 OuterHeaderCreation:1 Teid:1 RemoteIP:2198710464 LocalIP:2534254784 TransportLevelMarking:0} GlobalId:1}
2023/11/25 20:40:26 INF Updating FAR info: 4, {FarInfo:{Action:2 OuterHeaderCreation:1 Teid:1 RemoteIP:2198710464 LocalIP:2534254784 TransportLevelMarking:0} GlobalId:3}
2023/11/25 20:40:26 INF Both F-TEID IE and UE IP Address IE are missing
2023/11/25 20:40:26 INF Both F-TEID IE and UE IP Address IE are missing

@s5uishida Thank you for your comment it's fixed

s5uishida commented 10 months ago

Hi @arxxm

I have confirmed that this error no longer occurs.

Thank you very much!