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.

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