Skip to content

Conversation

@davidjwbbc
Copy link
Contributor

This is a basic MBSF tutorial with an example of each of the basic API operations.

@dsilhavy
Copy link
Contributor

dsilhavy commented Dec 19, 2025

General comments/questions

  • Do we need to define an order in which the components (Open5GS, MBSTF, MBSF) are installed? To avoid overwriting the binaries in /usr/local/bin/ when running the respective install commands?

MBS User Service Operations

Creating MBS User Service

Works fine, response:

dsi@dsi-1234:~/5gmag/rt-mbs-function$ curl -v --http2-prior-knowledge -H 'Content-Type: application/json' -X POST --data-binary @mbs-user-service.json http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 127.0.0.68:7777...
* Connected to 127.0.0.68 (127.0.0.68) port 7777
* [HTTP/2] [1] OPENED stream for http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services
* [HTTP/2] [1] [:method: POST]
* [HTTP/2] [1] [:scheme: http]
* [HTTP/2] [1] [:authority: 127.0.0.68:7777]
* [HTTP/2] [1] [:path: /nmbsf-mbs-us/v1/mbs-user-services]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [content-length: 471]
> POST /nmbsf-mbs-us/v1/mbs-user-services HTTP/2
> Host: 127.0.0.68:7777
> User-Agent: curl/8.5.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 471
> 
< HTTP/2 201 
< server: Open5GS v2.6.4-563-g4342250
< date: Fri, 19 Dec 2025 09:53:12 GMT
< content-length: 445
< etag: b2adb87203ec4e63b16fbd2f7e4b7dd8581870ab604af93f873e78994cc6a360
< last-modified: Fri, 19 Dec 2025 09:53:12 UTC
< cache-control: max-age=60
< server: MBSF-localhost/18 (info.title=nmbsf-mbs-us; info.version=1.1.0) rt-mbs-function/0.1.0
< location: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
< content-type: application/json
< 
{
	"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"
* Connection #0 to host 127.0.0.68 left intact

Updating an MBS User Service

Works fine, response:

dsi@dsi-1234:~/5gmag/rt-mbs-function$ curl -v --http2-prior-knowledge -H 'Content-Type: application/json' -X PUT --data-binary @mbs-user-service-altered.json http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/${mbs_user_service_id}
*   Trying 127.0.0.68:7777...
* Connected to 127.0.0.68 (127.0.0.68) port 7777
* [HTTP/2] [1] OPENED stream for http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
* [HTTP/2] [1] [:method: PUT]
* [HTTP/2] [1] [:scheme: http]
* [HTTP/2] [1] [:authority: 127.0.0.68:7777]
* [HTTP/2] [1] [:path: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [content-length: 410]
> PUT /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956 HTTP/2
> Host: 127.0.0.68:7777
> User-Agent: curl/8.5.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 410
> 
< HTTP/2 200 
< server: Open5GS v2.6.4-563-g4342250
< date: Fri, 19 Dec 2025 10:18:50 GMT
< content-length: 384
< etag: b2adb87203ec4e63b16fbd2f7e4b7dd8581870ab604af93f873e78994cc6a360
< last-modified: Fri, 19 Dec 2025 09:53:12 UTC
< cache-control: max-age=60
< server: MBSF-localhost/18 (info.title=nmbsf-mbs-us; info.version=1.1.0) rt-mbs-function/0.1.0
< location: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
< content-type: application/json
< 
{
	"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 description has changed",
			"language":	"eng"
		}],
	"mainServLang":	"eng"
* Connection #0 to host 127.0.0.68 left intact

Retrieving MBS User Service

Works fine, response:

}dsi@dsi-1234:~/5gmag/rt-mbs-function$ curl -v --http2-prior-knowledge -X GET http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/${mbs_user_service_id}
Note: Unnecessary use of -X or --request, GET is already inferred.
*   Trying 127.0.0.68:7777...
* Connected to 127.0.0.68 (127.0.0.68) port 7777
* [HTTP/2] [1] OPENED stream for http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: http]
* [HTTP/2] [1] [:authority: 127.0.0.68:7777]
* [HTTP/2] [1] [:path: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
> GET /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956 HTTP/2
> Host: 127.0.0.68:7777
> User-Agent: curl/8.5.0
> Accept: */*
> 
< HTTP/2 200 
< server: Open5GS v2.6.4-563-g4342250
< date: Fri, 19 Dec 2025 10:20:28 GMT
< content-length: 384
< server: MBSF-localhost/18 (info.title=nmbsf-mbs-us; info.version=1.1.0) rt-mbs-function/0.1.0
< location: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
< content-type: application/json
< etag: b2adb87203ec4e63b16fbd2f7e4b7dd8581870ab604af93f873e78994cc6a360
< last-modified: Fri, 19 Dec 2025 09:53:12 UTC
< cache-control: max-age=60
< 
{
	"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 description has changed",
			"language":	"eng"
		}],
	"mainServLang":	"eng"
* Connection #0 to host 127.0.0.68 left intact

Deleting an MBS User Service

Works fine, response:

}dsi@dsi-1234:~/5gmag/rt-mbs-function$ curl -v --http2-prior-knowledge -X DELETE http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/${mbs_user_service_id}
*   Trying 127.0.0.68:7777...
* Connected to 127.0.0.68 (127.0.0.68) port 7777
* [HTTP/2] [1] OPENED stream for http://127.0.0.68:7777/nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956
* [HTTP/2] [1] [:method: DELETE]
* [HTTP/2] [1] [:scheme: http]
* [HTTP/2] [1] [:authority: 127.0.0.68:7777]
* [HTTP/2] [1] [:path: /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
> DELETE /nmbsf-mbs-us/v1/mbs-user-services/87f53b1c-dcc0-41f0-afeb-21a7bcbed956 HTTP/2
> Host: 127.0.0.68:7777
> User-Agent: curl/8.5.0
> Accept: */*
> 
< HTTP/2 204 
< server: Open5GS v2.6.4-563-g4342250
< date: Fri, 19 Dec 2025 10:21:38 GMT
< server: MBSF-localhost/18 (info.title=nmbsf-mbs-us; info.version=1.1.0) rt-mbs-function/0.1.0
< 
* Connection #0 to host 127.0.0.68 left intact

MBS User Data Ingest Session Operations

Create an MBS User Data Ingest Session

  • Where is the output of "tests/json/change_serv_id.sh "$mbs_user_service_id""? Use the files in tests/json/ afterwards?

Works fine, response:

dsi@dsi-1234:~/5gmag/rt-mbs-function$ cd ~/rt-mbs-function
curl -v -X POST -H 'Content-Type: application/json' --http2-prior-knowledge --data-binary @tests/json/obj_distr_info.updated.json http://127.0.0.68:7777/nmbsf-mbs-ud-ingest/v1/sessions
bash: cd: /home/dsi/rt-mbs-function: No such file or directory
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 127.0.0.68:7777...
* Connected to 127.0.0.68 (127.0.0.68) port 7777
* [HTTP/2] [1] OPENED stream for http://127.0.0.68:7777/nmbsf-mbs-ud-ingest/v1/sessions
* [HTTP/2] [1] [:method: POST]
* [HTTP/2] [1] [:scheme: http]
* [HTTP/2] [1] [:authority: 127.0.0.68:7777]
* [HTTP/2] [1] [:path: /nmbsf-mbs-ud-ingest/v1/sessions]
* [HTTP/2] [1] [user-agent: curl/8.5.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [content-length: 731]
> POST /nmbsf-mbs-ud-ingest/v1/sessions HTTP/2
> Host: 127.0.0.68:7777
> User-Agent: curl/8.5.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 731
> 
< HTTP/2 201 
< server: Open5GS v2.6.4-563-g4342250
< date: Fri, 19 Dec 2025 10:59:54 GMT
< content-length: 780
< etag: 4774f49cfa6bc500d6090c25a00e309e2d0731758f96183085583fdd8c3b767c
< last-modified: Fri, 19 Dec 2025 10:59:54 UTC
< cache-control: max-age=60
< server: MBSF-localhost/18 (info.title=nmbsf-mbs-ud-ingest; info.version=1.1.2) rt-mbs-function/0.1.0
< location: /nmbsf-mbs-ud-ingest/v1/sessions/d9b3ea26-dcc9-41f0-afeb-21a7bcbed956
< content-type: application/json
< 
{
	"mbsUserServId":	"b48d7e86-dcc6-41f0-afeb-21a7bcbed9566",
	"mbsDisSessInfos":	{
		"AP_MBS_SESSION_1":	{
			"mbsDistSessionId":	"da058d98-d3b6-4574-b4a3-12c388bf8dc2",
			"mbsDistSessState":	"INACTIVE",
			"mbsSessionId":	{
				"tmgi":	{
					"mbsServiceId":	"27FF66",
					"plmnId":	{
						"mcc":	"000",
						"mnc":	"000"
					}
				},
				"ssm":	{
					"sourceIpAddr":	{
						"ipv4Addr":	"127.0.0.5"
					},
					"destIpAddr":	{
						"ipv4Addr":	"232.10.0.5"
					}
				}
			},
			"maxContBitRate":	"10 Mbps",
			"distrMethod":	"OBJECT",
			"objDistrInfo":	{
				"operatingMode":	"STREAMING",
				"objAcqMethod":	"PULL",
				"objAcqIds":	["stream.mpd"],
				"objIngUri":	"https://livesim2.dashif.org/livesim2/WAVE/vectors/cfhd_sets/12.5_25_50/t1/2022-10-17/"
			}
		}
	}
* Connection #0 to host 127.0.0.68 left intact

@davidjwbbc
Copy link
Contributor Author

davidjwbbc commented Dec 19, 2025

General comments/questions

  • Do we need to define an order in which the components (Open5GS, MBSTF, MBSF) are installed? To avoid overwriting the binaries in /usr/local/bin/ when running the respective install commands?

No, because the instructions for Open5GS 5MBS branch install to ~/open5gs_mbs/install and run from there, and the binaries for MBSTF and MBSF have different names.

Although there may be a clash with library symlinks between the MBSTF (Open5GS 2.6.4 base) and MBSF (Open5GS 2.7.2 base - 5MBS branch). There shouldn't be a problem with the actual library files as they have the full version in them, but the symlinks for the library major version (libogs*.so.2) would be overwritten and that's what is used in the binary when dynamic linking. Might need to add instructions for building, installing and running the MBSTF from its own install directory to avoid this clash.

@davidjwbbc
Copy link
Contributor Author

davidjwbbc commented Dec 19, 2025

General comments/questions

  • Do we need to define an order in which the components (Open5GS, MBSTF, MBSF) are installed? To avoid overwriting the binaries in /usr/local/bin/ when running the respective install commands?

... the symlinks for the library major version (libogs*.so.2) would be overwritten and that's what is used in the binary when dynamic linking.

I've added a patch file to the MBSF to use the <major>.<minor> suffix instead, so the Open5GS libraries will not get mixed up between Open5GS v2.6 and v2.7. It should be safe to install in any order now.

@dsilhavy
Copy link
Contributor

dsilhavy commented Jan 9, 2026

Two more comments

Recreating an MBS User Data Ingest Session

  1. Create an MBS User Service
  2. Create an MBS User Data Ingest Session
  3. Delete the MBS User Data Ingest Session
  4. Create a new MBS User Data Ingest Session with the same payload as in step 2

The following error occurs:

{
	"title": "Duplicate MBS Session ID",
	"status": 403,
	"detail": "MBS Session ID [sourceIpAddr: 127.0.0.5, destIpAddr: 232.10.0.7] already exists in the MBS System\n",
	"cause": "MBS_DIST_SESSION_ALREADY_CREATED"
}

After re-trying step 4 multiple times the same payload is accepted again:

{
	"mbsUserServId": "21341650-ed5a-41f0-97f6-4549721c9c80",
	"mbsDisSessInfos": {
		"AP_MBS_SESSION_1": {
			"mbsDistSessionId": "22621ec2-9de3-482d-bd09-5188e65bc19a",
			"mbsDistSessState": "INACTIVE",
			"mbsSessionId": {
				"tmgi": {
					"mbsServiceId": "87FC5A",
					"plmnId": {
						"mcc": "000",
						"mnc": "000"
					}
				},
				"ssm": {
					"sourceIpAddr": {
						"ipv4Addr": "127.0.0.5"
					},
					"destIpAddr": {
						"ipv4Addr": "232.10.0.7"
					}
				}
			},
			"maxContBitRate": "10 Mbps",
			"distrMethod": "OBJECT",
			"objDistrInfo": {
				"operatingMode": "STREAMING",
				"objAcqMethod": "PULL",
				"objAcqIds": [
					"stream.mpd"
				],
				"objIngUri": "https://livesim2.dashif.org/livesim2/WAVE/vectors/cfhd_sets/12.5_25_50/t1/2022-10-17/"
			}
		}
	}
}

Creating multiple MBS User Data Ingest Session

  1. Create an MBS User Service
  2. Create multiple MBS User Data Ingest Sessions in short time all using the same payload.

After a short time the response code changes from 201 to 403:

{
	"title": "Duplicate MBS Session ID",
	"status": 403,
	"detail": "MBS Session ID [sourceIpAddr: 127.0.0.5, destIpAddr: 232.10.0.7] already exists in the MBS System\n",
	"cause": "MBS_DIST_SESSION_ALREADY_CREATED"
}
  1. Now delete the MBS User Data Ingest Session. The response code is 204
  2. When trying to retrieve the MBS User Data Ingest Session the MBSF is not responding anymore and seems to be hanging.
Error: Timeout was reached

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants