Skip to content

MBSF Feature: Packet mode#37

Open
davidjwbbc wants to merge 4 commits into
5G-MAG:developmentfrom
davidjwbbc:feature/packet-mode
Open

MBSF Feature: Packet mode#37
davidjwbbc wants to merge 4 commits into
5G-MAG:developmentfrom
davidjwbbc:feature/packet-mode

Conversation

@davidjwbbc

@davidjwbbc davidjwbbc commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

This accompanies 5G-MAG/rt-mbs-transport-function#64 and is the MBSF changes to support the PACKET distribution method.

This also includes the fix from rt-mbs-transport-function for incorrectly applied Read-Only and Write-Only property attributes in the generated model code for the MbStfIngestAddr type to ensure consistent interpretation of data types between the MBSF and MBSTF.

@davidjwbbc davidjwbbc added this to the v1.1.0 milestone Jun 24, 2026
@davidjwbbc davidjwbbc self-assigned this Jun 24, 2026
@davidjwbbc davidjwbbc added the enhancement New feature or request label Jun 24, 2026
@davidjwbbc davidjwbbc moved this to Ready for review in 5MBS: User Services initial release Jun 24, 2026
@davidjwbbc davidjwbbc force-pushed the feature/packet-mode branch from 9a8a25b to 09760fa Compare June 24, 2026 10:20
@davidjwbbc

davidjwbbc commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator Author

I've tested this using the rt-mbs-transport-function/tests/packet_stream_gen.py script and Insomnia.

For the Insomnia entry I duplicated an Object mode User Data Ingest Session creation entry and changed the body to:

{
  "mbsUserServId": "{{ _.mbs_user_service_id }}",
  "mbsDisSessInfos": {
    "AP_MBS_SESSION_1": {
      "mbsSessionId": {
        "ssm": {
          "sourceIpAddr": {
            "ipv4Addr": "127.0.0.5"
          },
          "destIpAddr": {
            "ipv4Addr": "232.10.0.7"
          }
        }
      },
      "mbsDistSessState": "ACTIVE",
      "maxContBitRate": "10 Mbps",
      "distrMethod": "PACKET",
      "pckDistrInfo": {
        "operatingMode": "PACKET_FORWARD_ONLY",
        "pckIngMethod": "UNICAST",
        "ingEndpointAddrs": {
          "afEgressTunAddr": {
            "ipv4Addr": "127.0.0.1",
            "portNumber": 3000
          }
        }
      }
    }
  },
  "suppFeat": "3"
}

I then ran the packet_stream_gen.py script to generate the stream and caught the packets using wireshark:

~/rt-mbs-transport-function/tests/packet_stream_gen.py 127.0.0.1:3000 127.0.0.1:35371 232.10.0.7:5555 127.0.0.5:6666

Note: Address 127.0.0.1:35371 came from the mbStfIngressTunAddr value in the response to Insomnia from the MBSF.

The packets sent using the script look like:
Packet from (fake) AP to MBSTF

These packet go from the address specified in the afEgressTunAddr property in the original request and go to the address given by the mbStfIngessAddr property from the creation request response. These packets contain encapsulated multicast packets using the source and destination addresses from the MBS session ID SSM in the original creation request and uses source port 6666 and destination port 5555.

This is then forwarded from the MBSTF to the MB-UPF UDP tunnel (as requested by the MBSF when creating the MBS Session with the MB-SMF):
Packet from MBSTF to MB-UPF

This is sent from an ephemeral port on the MBSTF to the MB-UPF UDP tunnel that has been created for the MBS Session. The packet contains the encapsulated packet as sent by the generator script to the MBSTF.

The MB-UPF then passes the encapsulated packet to the gNodeB via the GTP-U protocol for transmission to any subscribed UE's:
MB-UPF to gNodeB

@rjb1000 rjb1000 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @davidjwbbc.

Updates to copyright years are needed in some source files.

Comment thread src/mbsf/AssociatedSessId.cc Outdated
Comment thread src/mbsf/DistributionSessionInfo.cc Outdated
Comment thread src/mbsf/generator-mbsf Outdated
Comment thread src/mbsf/Nmb2Build.cc Outdated
Comment thread src/mbsf/Nmb2Handler.cc Outdated
Comment thread src/mbsf/UniqueMBSSessionId.cc Outdated
Comment thread src/mbsf/UserDataIngSession.cc Outdated
Comment thread src/mbsf/UserDataIngSession.hh Outdated
Comment thread meson.build Outdated
@davidjwbbc davidjwbbc requested a review from rjb1000 June 24, 2026 15:09
@dsilhavy

Copy link
Copy Markdown
Contributor

Thanks @davidjwbbc I fidnt find any issues when reviewing the code. On our end we will try to replicate your setup now.

@dsilhavy

dsilhavy commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

I am doing an installation on a fresh Ubuntu 24 machine. I will use and update this comment to collect my findings. Not necessarily linked to only this PR. I will send another comment in this thread once I am done since there are no notifications for edits.

Build 1

Problem

src/mbsf/meson.build:42:11: ERROR: Dependency "uuid" not found (tried pkg-config and cmake)

Solution

sudo apt install uuid-dev -y

Action Items

We need to add the missing dependency in the Readme.md

Build 2

Problem

Wrong meson version

Solution

sudo python3 -m pip install --break-system-packages --upgrade meson

Action Items

We need to add the missing dependency in the Readme.md

Unit tests 1

Problem

meson test -C build regression

ERROR: *:regression test name does not match any test

Solution

Action Items

MBSF Tutorial 1

Problem

Using the default payload from the tutorial results in a 400 error

Payload:

{
  "extServiceIds": ["https://example.broadcaster.com/services/first-service"],
  "servType": "MULTICAST",
  "servClass": "urn:oma:bcast:oma_bsc:st:1.0",
  "servAnnModes": ["VIA_MBS_5", "VIA_MBS_DISTRIBUTION_SESSION", "PASSED_BACK"],
  "servNameDescs": [
    {
      "servName": "First Service",
      "servDescrip": "The first service, operated by Example Broadcaster, is our general entertainment channel",
      "language": "eng"
    }
  ],
  "mainServLang": "eng"
}

Returned response:

{
	"title": "Bad MBSF User Service",
	"status": 400,
	"detail": "MBSF Cannot handle User Service Announcement.",
	"instance": "/nmbsf-mbs-us/v1/mbs-user-services"
}

Solution

Action Items

Fix the tutorial

@dsilhavy

Copy link
Copy Markdown
Contributor

@jordijoangimenez , @davidjwbbc I tried a clean installation on another machine using the following:

I still get a 400 error when trying to create an MBS User Service:

Payload:

{
  "extServiceIds": ["https://example.broadcaster.com/services/first-service"],
  "servType": "MULTICAST",
  "servClass": "urn:oma:bcast:oma_bsc:st:1.0",
  "servAnnModes": ["VIA_MBS_5", "VIA_MBS_DISTRIBUTION_SESSION", "PASSED_BACK"],
  "servNameDescs": [
    {
      "servName": "First Service",
      "servDescrip": "The first service, operated by Example Broadcaster, is our general entertainment channel",
      "language": "eng"
    }
  ],
  "mainServLang": "eng"
}

Response, you have to remove the after-response script in Insomnia to see the error

{
	"title": "Bad MBSF User Service",
	"status": 400,
	"detail": "MBSF Cannot handle User Service Announcement.",
	"instance": "/nmbsf-mbs-us/v1/mbs-user-services"
}

It might be just an obvious mistake but I got the same behavior on two different machines. Can you please confirm that this works for you?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Ready for review

Development

Successfully merging this pull request may close these issues.

3 participants