1"use strict";(self.webpackChunk_5g_mag_portal=self.webpackChunk_5g_mag_portal||[]).push([["2521"],{51729(e,n,i){i.r(n),i.d(n,{metadata:()=>s,default:()=>h,frontMatter:()=>o,contentTitle:()=>c,toc:()=>d,assets:()=>a});var s=JSON.parse('{"id":"reference-tools/5gms/tutorials/application-function/configuration-5GMSAF","title":"Configuration 5GMS AF","description":"Reference for every msaf.yaml setting of the 5GMSd Application Function, covering interfaces, TLS, network assistance and test certificates.","source":"@site/docs/home/reference-tools/5gms/tutorials/application-function/configuration-5GMSAF.md","sourceDirName":"reference-tools/5gms/tutorials/application-function","slug":"/reference-tools/5gms/tutorials/application-function/configuration-5GMSAF","permalink":"/reference-tools/5gms/tutorials/application-function/configuration-5GMSAF","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Configuration 5GMS AF","hide_title":true,"sidebar_position":3,"description":"Reference for every msaf.yaml setting of the 5GMSd Application Function, covering interfaces, TLS, network assistance and test certificates."},"sidebar":"referenceToolsSidebar","previous":{"title":"Installation 5GMS AF as System Service","permalink":"/reference-tools/5gms/tutorials/application-function/installation-system-service-5GMSAF"},"next":{"title":"Testing M1 AF v1.2.x","permalink":"/reference-tools/5gms/tutorials/application-function/testing-m1-v120"}}'),t=i(74848),r=i(28453);let o={title:"Configuration 5GMS AF",hide_title:!0,sidebar_position:3,description:"Reference for every msaf.yaml setting of the 5GMSd Application Function, covering interfaces, TLS, network assistance and test certificates."},c,a={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Reference points at a glance",id:"reference-points-at-a-glance",level:2},{value:"File Locations",id:"file-locations",level:2},{value:"Configuration File Format",id:"configuration-file-format",level:2},{value:"Notation",id:"notation",level:3},{value:"Configuration Structure",id:"configuration-structure",level:3},{value:"Referencing other files",id:"referencing-other-files",level:3},{value:"Configuration Properties",id:"configuration-properties",level:2},{value:"Logging",id:"logging",level:3},{value:"Logging Level",id:"logging-level",level:4},{value:"Logging Domain",id:"logging-domain",level:4},{value:"Suggested Logging Configurations",id:"suggested-logging-configurations",level:4},{value:"SBI interface security",id:"sbi-interface-security",level:3},{value:"Open5GS integration",id:"open5gs-integration",level:3},{value:"SBI and default Interface Listening Address",id:"sbi-and-default-interface-listening-address",level:3},{value:"M1 Interface Listening Address",id:"m1-interface-listening-address",level:3},{value:"M5 Interface Listening Address",id:"m5-interface-listening-address",level:3},{value:"5GMS AF Management Interface Listening Address",id:"5gms-af-management-interface-listening-address",level:3},{value:"Application Servers",id:"application-servers",level:3},{value:"Data Collection (Consumption Reporting)",id:"data-collection-consumption-reporting",level:3},{value:"Network Assistance",id:"network-assistance",level:3},{value:"Dynamic Policies",id:"dynamic-policies",level:3},{value:"ContentHostingConfiguration file",id:"contenthostingconfiguration-file",level:3},{value:"Certificates Index",id:"certificates-index",level:3},{value:"Provisioning Session Id",id:"provisioning-session-id",level:3},{value:"Certificate Manager Program",id:"certificate-manager-program",level:3},{value:"Default caching ages",id:"default-caching-ages",level:3},{value:"Generating Test Certificates",id:"generating-test-certificates",level:2}];function l(e){let n={a:"a",admonition:"admonition",code:"code",div:"div",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",mdxadmonitiontitle:"mdxadmonitiontitle",p:"p",path:"path",pre:"pre",span:"span",strong:"strong",svg:"svg",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.div,{className:"topic-banner",children:["\n",(0,t.jsxs)(n.div,{className:"topic-banner__icon-wrap",children:["\n",(0,t.jsxs)(n.svg,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,t.jsx)(n.path,{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),"\n ",(0,t.jsx)(n.path,{d:"M7 4v16l13 -8l-13 -8"})]}),"\n"]}),"\n",(0,t.jsxs)(n.div,{className:"topic-banner__text",children:["\n",(0,t.jsx)(n.span,{className:"topic-banner__kicker",children:"5G Media Streaming (5GMS)"}),"\n",(0,t.jsx)(n.h1,{children:"Configuration of the 5GMSd Application Function"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The 5G Media Streaming downlink (5GMSd) Application Function (AF) is the control-plane component that provisions media delivery: it configures Application Servers, manages certificates, and answers requests from Application Service Providers and client devices. Its runtime behaviour is controlled by the ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," configuration file. This page describes each setting in that file, its valid values, and the version of the Application Function it applies to. You normally edit ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," after installing the Application Function and before running it for the first time."]}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["A built and installed 5GMSd Application Function (see ",(0,t.jsx)(n.a,{href:"./installation-local-user-5GMSAF",children:"Installing as a Local User"})," or ",(0,t.jsx)(n.a,{href:"./installation-system-service-5GMSAF",children:"Installing as a System Service"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:["A text editor and access to the installed ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," file."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"reference-points-at-a-glance",children:"Reference points at a glance"}),"\n",(0,t.jsxs)(n.p,{children:["The Application Function communicates over several 3GPP 5G Media Streaming reference points (named interfaces between defined functions). The ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," settings below configure the listening addresses and behaviour for these. The following legend explains each interface referenced on this page (see the ",(0,t.jsx)(n.a,{href:"/tech/glossary",children:"Glossary"})," for wider 5GMS terminology)."]}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Interface"}),(0,t.jsx)(n.th,{children:"Connects"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"M1"}),(0,t.jsx)(n.td,{children:"Application Service Provider to Application Function"}),(0,t.jsx)(n.td,{children:"Provisioning of media delivery (provisioning sessions, content hosting configurations, certificates)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"M3"}),(0,t.jsx)(n.td,{children:"Application Function to Application Server"}
1),(0,t.jsx)(n.td,{children:"Internal configuration of the Application Server by the Application Function."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"M4"}),(0,t.jsx)(n.td,{children:"Application Server to media client"}),(0,t.jsx)(n.td,{children:"Media distribution to the client (the delivered stream)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"M5"}),(0,t.jsx)(n.td,{children:"Client on the User Equipment to Application Function"}),(0,t.jsx)(n.td,{children:"Media session handling, including Service Access Information."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"M8"}),(0,t.jsx)(n.td,{children:"Application Function or provider to the 5GMSd-Aware Application"}),(0,t.jsx)(n.td,{children:"Application-level data (for example, media entry points) delivered to the client application."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"maf"}),(0,t.jsx)(n.td,{children:"Local management client to Application Function"}),(0,t.jsxs)(n.td,{children:["Local management of the Application Function. This is implementation-specific and is not defined in ",(0,t.jsx)(n.a,{href:"https://www.3gpp.org/dynareport/26512.htm",children:"TS 26.512"}),"."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"file-locations",children:"File Locations"}),"\n",(0,t.jsxs)(n.p,{children:["The configuration file for the 5GMSd Application Function can be found in ",(0,t.jsx)(n.code,{children:"${prefix}/etc/open5gs/msaf.yaml"}),", where ",(0,t.jsx)(n.code,{children:"${prefix}"})," is\nthe prefix used in the ",(0,t.jsx)(n.code,{children:"meson"})," command (or ",(0,t.jsx)(n.code,{children:"/usr/local"})," by default). By default this means that the configuration file will be\nfound in ",(0,t.jsx)(n.code,{children:"/usr/local/etc/open5gs/msaf.yaml"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["The location of the configuration file can be overridden at run-time by using the ",(0,t.jsx)(n.code,{children:"-c"})," command line parameter with the\n",(0,t.jsx)(n.code,{children:"open5gs-msafd"})," command, for example:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"/usr/local/bin/open5gs-msafd -c local-5gmsaf-config.yaml\n"})}),"\n",(0,t.jsx)(n.h2,{id:"configuration-file-format",children:"Configuration File Format"}),"\n",(0,t.jsxs)(n.p,{children:["The configuration file is written in ",(0,t.jsx)(n.a,{href:"https://yaml.org/",children:"YAML"})," 1.1 file format."]}),"\n",(0,t.jsx)(n.p,{children:"Various settings in the file control things like logging output, listening and connection addresses, details of associated 5GMSd\nApplication Servers and other presets."}),"\n",(0,t.jsx)(n.h3,{id:"notation",children:"Notation"}),"\n",(0,t.jsxs)(n.p,{children:["Throughout this documentation, the location of these configuration properties is referred to using a '",(0,t.jsx)(n.code,{children:"."}),"' separated path. Where a property name contains a ",(0,t.jsx)(n.code,{children:"."})," character it will be quoted using double quotes. For example, take the following snippet of YAML:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"YAML:\n files contain:\n - version 1.1: textual value\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The field holding the value '",(0,t.jsx)(n.code,{children:"textual value"}),"' would be referred to as ",(0,t.jsx)(n.code,{children:'YAML.files contain."version 1.1"'}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"configuration-structure",children:"Configuration Structure"}),"\n",(0,t.jsxs)(n.p,{children:["Several settings were added or removed across releases. The inline ",(0,t.jsx)(n.code,{children:"# Added in ..."})," / ",(0,t.jsx)(n.code,{children:"# Removed in ..."})," comments in the example below record this per line; the table that follows gives the same information at a glance so you can see which settings apply to your version without reading the whole block."]}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Setting"}),(0,t.jsx)(n.th,{children:"Added in"}),(0,t.jsx)(n.th,{children:"Removed in"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.m1"})}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"M1 interface listening address."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.m5"})}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"M5 interface listening address."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.maf"})}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Local management interface listening address (implementation-specific)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.applicationServers[].m3Port"})}),(0,t.jsx)(n.td,{children:"v1.1.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Application Server M3 port."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.applicationServers[].m3Host"})}),(0,t.jsx)(n.td,{children:"v1.4.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsxs)(n.td,{children:["Application Server M3 host (overrides ",(0,t.jsx)(n.code,{children:"canonicalHostname"})," for M3)."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.certificateManager"})}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"-"}
1),(0,t.jsx)(n.td,{children:"Path to the external certificate manager program."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl"})}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Default cache-control ages for interface responses."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.dataCollectionDir"})}),(0,t.jsx)(n.td,{children:"v1.4.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Directory for stored consumption reports."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.offerNetworkAssistance"})}),(0,t.jsx)(n.td,{children:"v1.4.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Enables the Network Assistance feature."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.networkAssistance"})}),(0,t.jsx)(n.td,{children:"v1.4.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Network Assistance (Delivery Boost) parameters."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"bsf.notificationListener"})}),(0,t.jsx)(n.td,{children:"v1.4.0"}),(0,t.jsx)(n.td,{children:"-"}),(0,t.jsx)(n.td,{children:"Address for BSF notifications."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"msaf.certificate"})," / ",(0,t.jsx)(n.code,{children:"msaf.certificates"})]}),(0,t.jsx)(n.td,{children:"up to v1.1"}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"Certificates index file (superseded by the certificate manager)."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.contentHostingConfiguration"})}),(0,t.jsx)(n.td,{children:"up to v1.1"}),(0,t.jsx)(n.td,{children:"v1.2.0"}),(0,t.jsx)(n.td,{children:"External ContentHostingConfiguration file."})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"msaf.provisioningSessionId"})}),(0,t.jsx)(n.td,{children:"up to v1.0"}),(0,t.jsx)(n.td,{children:"v1.1.0"}),(0,t.jsx)(n.td,{children:"Fixed provisioning session id for MVP#2."})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"The following annotated example shows all the properties in the configuration file with typical or default values:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"logging:\n level: info\n domain: msaf\n\nsbi:\n server:\n no_tls: true\n client:\n no_tls: true\n\nmsaf:\n open5gsIntegration: false\n sbi:\n - addr: 0.0.0.0\n port: 7778\n m1: # Added in v1.2.0\n - addr: 0.0.0.0 # Added in v1.2.0\n port: 7778 # Added in v1.2.0\n m5: # Added in v1.2.0\n - addr: 0.0.0.0 # Added in v1.2.0\n port: 7778 # Added in v1.2.0\n maf: # Added in v1.2.0\n - addr: 127.0.0.25 # Added in v1.2.0\n port: 7777 # Added in v1.2.0\n applicationServers:\n - canonicalHostname: localhost\n urlPathPrefixFormat: /m4d/provisioning-session-{provisioningSessionId}/\n m3Host: localhost # Added in v1.4.0\n m3Port: 7777 # Added in v1.1.0\n certificate: examples/CertificatesIndex.json # Removed in v1.2.0\n contentHostingConfiguration: examples/ContentHostingConfiguration.json # Removed in v1.2.0\n provisioningSessionId: 12345678-9abc-def0-123456789abc # Removed in v1.1.0\n certificateManager: /usr/local/libexec/rt-5gms/af/self-signed-certmgr # Added in v1.2.0\n serverResponseCacheControl: # Added in v1.2.0\n - maxAge: 60 # Added in v1.2.0\n m1ProvisioningSessions: 60 # Added in v1.2.0\n m1ContentHostingConfigurations: 60 # Added in v1.2.0\n m1ServerCertificates: 60 # Added in v1.2.0\n m1ContentProtocols: 86400 # Added in v1.2.0\n m5ServiceAccessInformation: 60 # Added in v1.2.0\n dataCollectionDir: /usr/local/var/log/open5gs/reports # Added in v1.4.0\n offerNetworkAssistance: false # Added in v1.4.0\n networkAssistance: # Added in v1.4.0\n deliveryBoost: # Added in v1.4.0\n minDlBitRate: 1 Mbps # Added in v1.4.0\n boostPerio
1d: 30 # Added in v1.4.0\n\nnrf:\n sbi:\n - addr:\n - 127.0.0.10\n - ::1\n port: 7777\n\nbsf:\n notificationListener: # Added in v1.4.0\n - addr:\n - 127.0.0.99\n port: 7779\n\nparameter:\n no_ipv4: false\n no_ipv6: false\n prefer_ipv4: false\n\ntime:\n nf_instance:\n heartbeat: 0\n message:\n duration: 10000\n"})}),"\n",(0,t.jsx)(n.h3,{id:"referencing-other-files",children:"Referencing other files"}),"\n",(0,t.jsx)(n.p,{children:"The configuration file may also reference other files. If such a reference is made then the reference is either an absolute path or a relative path to file. If it is a relative path then it is relative to the location of the configuration file."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsxs)(n.strong,{children:["Warning: Be careful when moving a ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," configuration file to a different directory in the filesystem as any relative\npathed properties will no longer point to the correct location and will either need to be changed or the referenced files will also need to be moved too to maintain their relative paths."]})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["The two properties below only exist up to and including v1.1; both were removed from v1.2.0 onwards. On v1.2.0 and later, certificates are handled by the ",(0,t.jsx)(n.a,{href:"#certificate-manager-program",children:"Certificate Manager Program"})," instead."]})}),"\n",(0,t.jsx)(n.p,{children:"The following properties may optionally contain relative paths:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"msaf.certificates"})," - This is the JSON certificates index, see ",(0,t.jsx)(n.a,{href:"#certificates-index",children:"Certificates Index"})," for more details."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"msaf.contentHostingConfiguration"})," - This is a ContentHostingConfiguration JSON object used to configure the 5GMSd Application\nServer, see ",(0,t.jsx)(n.a,{href:"#contenthostingconfiguration-file",children:"ContentHostingConfiguration file"})," for more details."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration-properties",children:"Configuration Properties"}),"\n",(0,t.jsx)(n.p,{children:"This section lists the properties in the configuration file, their use and valid values."}),"\n",(0,t.jsx)(n.h3,{id:"logging",children:"Logging"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"logging.level"})," and ",(0,t.jsx)(n.code,{children:"logging.domain"})]}),"\n",(0,t.jsx)(n.h4,{id:"logging-level",children:"Logging Level"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"logging.level"})," indicates the minimum level of logging messages that will be output. The default is ",(0,t.jsx)(n.code,{children:"info"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Allowable values are: ",(0,t.jsx)(n.code,{children:"trace"}),", ",(0,t.jsx)(n.code,{children:"debug"}),", ",(0,t.jsx)(n.code,{children:"info"}),", ",(0,t.jsx)(n.code,{children:"warn"}),", ",(0,t.jsx)(n.code,{children:"error"}),", ",(0,t.jsx)(n.code,{children:"fatal"})," and ",(0,t.jsx)(n.code,{children:"none"})]}),"\n",(0,t.jsxs)(n.p,{children:["When ",(0,t.jsx)(n.code,{children:"logging.domain"})," is also set, then this setting only affects the minimum logging level for the listed domains."]}),"\n",(0,t.jsx)(n.h4,{id:"logging-domain",children:"Logging Domain"}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"logging.domain"})," property limits the effect of the ",(0,t.jsx)(n.code,{children:"logging.level"})," property. This contains a comma separated list of domains."]}),"\n",(0,t.jsx)(n.p,{children:"Domains relevant to the 5GMSd Application Function are:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"msaf"})," - 5GMSd Application Function specific logging"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi"})," - Open5GS SBI library functions for Client/Server operations."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"app"})," - Open5GS App library functions for generic Open5GS application routines."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"core"})," - Open5GS Core functions (e.g. low level socket handling, textual parsing and formatting, and memory management routines)."]}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"suggested-logging-configurations",children:"Suggested Logging Configurations"}),"\n",(0,t.jsx)(n.p,{children:"To reduce logging to warnings, errors and fatal messages only:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"logging:\n level: warn\n"})}),"\n",(0,t.jsx)(n.p,{children:"To stop all logging:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"logging:\n level: none\n"})}),"\n",(0,t.jsx)(n.p,{children:"To turn debugging output on for the 5GMSd Application Function:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"logging:\n level: debug\n domain: msaf\n"})}),"\n",(0,t.jsx)(n.h3,{id:"sbi-interface-security",children:"SBI interface security"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"sbi.server.no_tls"}),", ",(0,t.jsx)(n.code,{children:"sbi.server.cacert"}),", ",(0,t.jsx)(n.code,{children:"sbi.server.key"}),", ",(0,t.jsx)(n.code,{children:"sbi.server.cert"}),", ",(0,t.jsx)(n.code,{children:"sbi.client.no_tls"}),", ",(0,t.jsx)(n.code,{children:"sbi.client.cacert"}),", ",(0,t.jsx)(n.code,{children:"sbi.client.key"})," and ",(0,t.jsx)(n.code,{children:"sbi.client.cert"})]}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsxs)(n.mdxadmonitiontitle,{children:["Verify the ",(0,t.jsx)(n.code,{children:"no_tls"})," behaviour"]}),(0,t.jsxs)(n.p,{children:["The property is named ",(0,t.jsx)(n.code,{children:"no_tls"}),", so the plain reading is that ",(0,t.jsx)(n.code,{children:"true"})," disables TLS and ",(0,t.jsx)(n.code,{children:"false"})," enables it. Some descriptive text on this page reads the other way round. The intended behaviour has not been confirmed against the softw
1are here, so verify against the source or a maintainer before relying on it. The table below states the plain-name reading."]})]}),"\n",(0,t.jsx)(n.p,{children:"The following table gives the value-to-behaviour reading based on the property name:"}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Value"}),(0,t.jsx)(n.th,{children:"Behaviour"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"no_tls: true"})}),(0,t.jsxs)(n.td,{children:["TLS is disabled; the ",(0,t.jsx)(n.code,{children:"cacert"}),", ",(0,t.jsx)(n.code,{children:"key"})," and ",(0,t.jsx)(n.code,{children:"cert"})," properties are ignored."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"no_tls: false"})}),(0,t.jsxs)(n.td,{children:["TLS is enabled; the ",(0,t.jsx)(n.code,{children:"cacert"}),", ",(0,t.jsx)(n.code,{children:"key"})," and ",(0,t.jsx)(n.code,{children:"cert"})," properties are used."]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["This applies to both the server (",(0,t.jsx)(n.code,{children:"sbi.server.no_tls"}),") and the client (",(0,t.jsx)(n.code,{children:"sbi.client.no_tls"}),") settings."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"sbi.server.no_tls"})," indicates whether TLS should be configured for SBI server listening sockets. If ",(0,t.jsx)(n.code,{children:"false"})," then no TLS is configured and the ",(0,t.jsx)(n.code,{children:"sbi.server.cacert"}),", ",(0,t.jsx)(n.code,{children:"sbi.server.key"})," and ",(0,t.jsx)(n.code,{children:"sbi.server.cert"})," properties are ignored. If the ",(0,t.jsx)(n.code,{children:"sbi.server.no_tls"})," property is ",(0,t.jsx)(n.code,{children:"true"})," then the server will use:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.server.cacert"})," is the filename of a file containing a CA bundle, in PEM format, to use to authenticate client public certificates."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.server.key"})," is the filename of the private key, in PEM format, which is used for TLS connections for server sockets."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.server.cert"})," is the filename of the public certificate, in PEM format, that will be presented as server authentication for TLS connections for server sockets."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"sbi.client.no_tls"})," indicates whether TLS should be configured for outgoing client requests to other NFs. If ",(0,t.jsx)(n.code,{children:"false"})," then no TLS is configured and the ",(0,t.jsx)(n.code,{children:"sbi.client.cacert"}),", ",(0,t.jsx)(n.code,{children:"sbi.client.key"})," and ",(0,t.jsx)(n.code,{children:"sbi.client.cert"})," properties are ignored. If the ",(0,t.jsx)(n.code,{children:"sbi.client.no_tls"})," property is ",(0,t.jsx)(n.code,{children:"true"})," then outgoing client requests will use:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.client.cacert"})," is the filename of a file containing a CA bundle, in PEM format, to use to authenticate the server certificate presented by the remote NF."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.client.key"})," is the filename of a private key, in PEM format, to use for encrypting the client communications."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"sbi.client.cert"})," is the filename of the public certificate, in PEM format, to use for authenticating the client with the NF."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"open5gs-integration",children:"Open5GS integration"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.open5gsIntegration"})]}),"\n",(0,t.jsxs)(n.p,{children:["This is a boolean value (",(0,t.jsx)(n.code,{children:"true"})," or ",(0,t.jsx)(n.code,{children:"false"}),") which indicates whether or not the 5GMSd Application Function will attempt to register\nwith a 5G Core, specifically the Network Repository Function (NRF)."]}),"\n",(0,t.jsxs)(n.p,{children:["If this value is ",(0,t.jsx)(n.code,{children:"true"})," then the ",(0,t.jsx)(n.code,{children:"nrf"})," properties will describe the connection information for the Network Repository Function (NRF) to register with. See the ",(0,t.jsx)(n.code,{children:"nrf.sbi"})," entries in the ",(0,t.jsx)(n.a,{href:"#configuration-structure",children:"Configuration Structure"})," example for the address and port format."]}),"\n",(0,t.jsxs)(n.p,{children:["This is required to be ",(0,t.jsx)(n.code,{children:"true"})," if you wish to use the Network Assistance or Dynamic Policies features."]}),"\n",(0,t.jsx)(n.h3,{id:"sbi-and-default-interface-listening-address",children:"SBI and default Interface Listening Address"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.sbi.addr"})," and ",(0,t.jsx)(n.code,{children:"msaf.sbi.port"})]}),"\n",(0,t.jsxs)(n.p,{children:["The listening IP address is set in ",(0,t.jsx)(n.code,{children:"msaf.sbi.addr"})," and the TCP port number is set in ",(0,t.jsx)(n.code,{children:"msaf.sbi.port"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This address is used for SBI communications with other 5G Core Network Functions. It is also the default address for M1, M5 and\nManagement interfaces if they are not explicitly set in the configuration."}),"\n",(0,t.jsx)(n.h3,{id:"m1-interface-listening-address",children:"M1 Interface Listening Address"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.m1.addr"})," and ",(0,t.jsx)(n.code,{children:"msaf.m1.port"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," v1.2.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["The listening IP address is set in ",(0,t.jsx)(n.code,{children:"msaf.m1.addr"})," and the TCP port number is set in ",(0,t.jsx)(n.code,{children:"msaf.m1.port"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This is the communication address for external Application Service Providers to configure their services via the interface at\nreference point M1."}),"\n",(0,t.jsx)(n.h3,{id:"m5-interface-listening-address",children:"M5 Interface Listening Address"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.m5.addr"})," and ",(0,t.jsx)(n.code,{children:"msaf.m5.port"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," v1.2.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["The listening IP address is set in ",(0,t.jsx)(n.code,{children:"msaf.m5.addr"})," and the TCP port number is set in ",(0,t.jsx)(n.code,{children:"msaf.m5.port"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This is the communication address for the 5GMSd Aware Application on the User Equipment implementing the interface at reference\npoint M5."}),"\n",(0,t.jsx)(n.h3,{id:"5gms-af-management-interface-listening-address",children:"5GMS AF Management Interface Listening Address"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.maf.addr"})," and ",(0,t.jsx)(n.code,{children:"msaf.maf.port"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," v1.2.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["The listening IP address is set in ",(0,t.jsx)(n.code,{children:"msaf.maf.addr"})," and the TCP port number is set in ",(0,t.jsx)(n.code,{children:"msaf.maf.port"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"This is a communication interface for local 5GMSd Application Function management. This is not specified in TS 26.512 and is an\nextra interface for this implementation. This should always be listening on a secure network, e.g. localhost only."}),"\n",(0,t.jsx)(n.h3,{id:"application-servers",children:"Application Servers"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.applicationServers"})]}),"\n",(0,t.jsxs)(n.p,{children:["This property is a list of associated 5GMSd Application Servers. Each entry in the list must contain ",(0,t.jsx)(n.code,{children:"canonicalHostname"}),",\n",(0,t.jsx)(n.code,{children:"urlPathPrefixFormat"})," and ",(0,t.jsx)(n.code,{children:"m3Port"})," (since v1.1.0) properties."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"canonicalHostname"})," is the hostname or IP address of the Application Server. This is used to generate ",(0,t.jsx)(n.code,{children:"mediaPlayerEntry"})," URLs for the ServiceAccessInformation objects available at interface M5 if no ",(0,t.jsx)(n.code,{children:"domainNameAlias"})," is given in the ContentHostingConfiguration. From v1.1.0 of the Application Function, this is also the address that the Application Function will use for interface M3 communication with the Application Server."]}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"urlPathPrefixFormat"})," is a template string that is used to set the first part of the URL path for distributions from the Application Server at interface M4. Where the template contains ",(0,t.jsx)(n.code,{children:"{provisioningSessionId}"})," will be replaced by the provisioning session Id that is associated with the ContentHostingConfiguration."]}),"\n",(0,t.jsxs)(n.p,{children:["The host name which is used for c
1ontacting the Application Server on the interface at M3 will be the ",(0,t.jsx)(n.code,{children:"canonicalHostname"})," unless an ",(0,t.jsx)(n.code,{children:"m3Host"})," property is defined for the application server, in which case the value of ",(0,t.jsx)(n.code,{children:"m3Host"})," will be used as the host name to contact the Application Server at."]}),"\n",(0,t.jsxs)(n.p,{children:["The TCP port at which the Application Server interface at M3 is listening is defined by the ",(0,t.jsx)(n.code,{children:"m3Port"})," property. The combination of ",(0,t.jsx)(n.code,{children:"canonicalHostname"})," or ",(0,t.jsx)(n.code,{children:"m3Host"})," and ",(0,t.jsx)(n.code,{children:"m3Port"})," identifies the connection address that the Application Function will use. This property is only available from v1.1.0 onwards."]}),"\n",(0,t.jsx)(n.p,{children:"Example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"msaf:\n applicationServers:\n - canonicalHostname: ext-as.example.com\n urlPathPrefixFormat: /{provisioningSessionId}/\n m3Host: localhost\n m3Port: 7777\n"})}),"\n",(0,t.jsx)(n.h3,{id:"data-collection-consumption-reporting",children:"Data Collection (Consumption Reporting)"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.dataCollectionDir"}),"\n",(0,t.jsx)(n.strong,{children:"Versions:"})," v1.4.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["The Consumption Reporting feature uses a data collection directory to store sent reports in. The path for the data collection root can be set in ",(0,t.jsx)(n.code,{children:"msaf.dataCollectionDir"}),". If not set then consumption reports are discarded after being received. There is no house-keeping for this directory, so an external house-keeping process must be used to free up disk space."]}),"\n",(0,t.jsx)(n.h3,{id:"network-assistance",children:"Network Assistance"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.open5gsIntegration"}),", ",(0,t.jsx)(n.code,{children:"msaf.offerNetworkAssistance"}),", ",(0,t.jsx)(n.code,{children:"msaf.networkAssistance"}),", ",(0,t.jsx)(n.code,{children:"nrf.sbi"})," and ",(0,t.jsx)(n.code,{children:"bsf.notificationListener"}),"\n",(0,t.jsx)(n.strong,{children:"Versions:"})," v1.4.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["The Network Assistance feature requires both ",(0,t.jsx)(n.code,{children:"msaf.open5gsIntegration"})," and ",(0,t.jsx)(n.code,{children:"msaf.offerNetworkAssistance"})," to be ",(0,t.jsx)(n.code,{children:"true"})," (or ",(0,t.jsx)(n.code,{children:"yes"}),") to activate. The ",(0,t.jsx)(n.code,{children:"nrf"})," settings must also point to a valid NRF Network Function (NF), and will be used to find a Binding Support Function (BSF) and/or the Policy Control Function (PCF) which is handling the policies for the User Equipment (UE). The ",(0,t.jsx)(n.code,{children:"bsf.notificationListener"})," sets the address and optional port that will be used to listen for BSF notifications."]}),"\n",(0,t.jsx)(n.p,{children:"When active, this feature will be advertised as available via the Service Access Information objects returned from requests at interface M5."}),"\n",(0,t.jsxs)(n.p,{children:["The Delivery Boost Network Assistance feature will request a guaranteed minimum bit rate for a period of time on behalf of the client. The minimum bit rate used and the period of time are both configurable by setting the values for ",(0,t.jsx)(n.code,{children:"msaf.networkAssistance.deliveryBoost.minDlBitRate"})," and ",(0,t.jsx)(n.code,{children:"msaf.networkAssistance.deliveryBoost.boostPeriod"})," respectively. The ",(0,t.jsx)(n.code,{children:"msaf.networkAssistance.deliveryBoost.minDlBitRate"})," must be expressed as a BitRate string according to ",(0,t.jsx)(n.a,{href:"https://www.3gpp.org/dynareport/29571.htm",children:"TS 29.571"}),", this is a decimal number followed by the bit rate units (",(0,t.jsx)(n.code,{children:"bps"}),", ",(0,t.jsx)(n.code,{children:"Kbps"}),", ",(0,t.jsx)(n.code,{children:"Mbps"}),", ",(0,t.jsx)(n.code,{children:"Gbps"})," or ",(0,t.jsx)(n.code,{children:"Tbps"}),'), e.g. "0.5 Mbps" or "60 Kbps". The ',(0,t.jsx)(n.code,{children:"msaf.networkAssistance.deliveryBoost.boostPerio
1d"})," is the integer number of seconds the boost will be activated for. These default to 1 Mbps for 30 seconds."]}),"\n",(0,t.jsx)(n.p,{children:"Example of active Network Assistance:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"msaf:\n open5gsIntegration: yes\n offerNetworkAssistance: yes\n networkAssistance:\n deliveryBoost:\n minDlBitRate: 1 Mbps\n boostPeriod: 30\n\nnrf:\n sbi:\n - addr: 127.0.0.10\n port: 7777\n\nbsf:\n notificationListener:\n - addr: 127.0.0.99\n"})}),"\n",(0,t.jsx)(n.h3,{id:"dynamic-policies",children:"Dynamic Policies"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.open5gsIntegration"}),", ",(0,t.jsx)(n.code,{children:"nrf.sbi"})," and ",(0,t.jsx)(n.code,{children:"bsf.notificationListener"}),"\n",(0,t.jsx)(n.strong,{children:"Versions:"})," v1.4.0 and above"]}),"\n",(0,t.jsxs)(n.p,{children:["This feature requires the ",(0,t.jsx)(n.code,{children:"msaf.open5gsIntegration"})," to be ",(0,t.jsx)(n.code,{children:"true"})," (or ",(0,t.jsx)(n.code,{children:"yes"}),") and the ",(0,t.jsx)(n.code,{children:"nrf"})," settings to point to a valid NRF NF. The ",(0,t.jsx)(n.code,{children:"bsf.notificationListener"})," sets the address and optional port that will be used to listen for BSF notifications."]}),"\n",(0,t.jsx)(n.p,{children:"Example of active Dynamic Policies:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"msaf:\n open5gsIntegration: yes\n\nnrf:\n sbi:\n - addr: 127.0.0.10\n port: 7777\n\nbsf:\n notificationListener:\n - addr: 127.0.0.99\n port: 9000\n"})}),"\n",(0,t.jsx)(n.h3,{id:"contenthostingconfiguration-file",children:"ContentHostingConfiguration file"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This setting is removed from v1.2.0 onwards."})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.contentHostingConfiguration"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," Up to and including v1.1, removed in v1.2.0 onwards"]}),"\n",(0,t.jsxs)(n.p,{children:["The hosting configuration to use comes from a ContentHostingConfiguration JSON object held in an external file. The file-path to this JSON file is stored in the ",(0,t.jsx)(n.code,{children:"msaf.contentHostingConfiguration"})," property using an absolute or relative (to the ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," configuration file) file-path."]}),"\n",(0,t.jsx)(n.p,{children:"The ContentHostingConfiguration determines the configuration of the 5GMSd Application Server including which certificates and keys to send to the Application Server."}),"\n",(0,t.jsx)(n.h3,{id:"certificates-index",children:"Certificates Index"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This setting will be removed from v1.2.0 onwards."})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.certificates"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," Up to and including v1.1, removed in v1.2.0 onwards"]}),"\n",(0,t.jsx)(n.p,{children:"To test the distribution of media via secure HTTPS, the 5GMSd Application Function (and at runtime the 5GMSd Application Server which\nwill provide the hosting of the media) needs to be configured with one or more private key and public certificate pairs that can be\nreferenced from the ContentHostingConfiguration."}),"\n",(0,t.jsx)(n.p,{children:"To provide this configuration the 5GMSd Application Function, an index file is used to map certificateId values to a file containing the private key, public certificate and optionally any intermediate CA public certificates, all in PEM format. The index file itself contains a JSON object where the keys are the certificateIds as found in the ContentHostingConfiguration files and the values are the relative (to the index file) or absolute path to the PEM file."}),"\n",(0,t.jsxs)(n.p,{children:["The filename of this JSON index file is stored in the ",(0,t.jsx)(n.code,{children:"msaf.certificates"})," property of the ",(0,t.jsx)(n.code,{children:"msaf.yaml"})," configuration file as a relative (to the configuration file) or absolute path."]}),"\n",(0,t.jsxs)(n.p,{children:["For a utility to quickly generate self
1-signed test certificates for a configuration please see the section below on ",(0,t.jsx)(n.a,{href:"#generating-test-certificates",children:"Generating Test Certificates"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"provisioning-session-id",children:"Provisioning Session Id"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"This setting is removed from v1.1.0 onwards."})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.provisioningSessionId"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," Up to and including v1.0, removed in v1.1.0 onwards"]}),"\n",(0,t.jsx)(n.p,{children:"This setting provides the ProvisioningSessionId to use for MVP#2. This is here so that the Application Function and Application\nServer can be synchronised with the same identifier in their respective configurations."}),"\n",(0,t.jsx)(n.p,{children:"This is the only ProvisioningSessionId the MVP#2 5GMSd Application Function will use."}),"\n",(0,t.jsx)(n.h3,{id:"certificate-manager-program",children:"Certificate Manager Program"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.certificateManager"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," From version v1.2.0 onwards"]}),"\n",(0,t.jsx)(n.p,{children:"This is the path of an external program that can manage certificates and request signing of certificates. The example certificate\nmanager program will produce simple self signed certificates and will be the default certificate manager program set in the\ninstalled configuration."}),"\n",(0,t.jsxs)(n.p,{children:['The Certificate Manager program follows the "External Certificate Management" specification from the ',(0,t.jsx)(n.a,{href:"https://github.com/5G-MAG/rt-5gms-application-function/issues/17",children:'"Implement M1 Server Certificates Provisioning API" issue on github'}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"default-caching-ages",children:"Default caching ages"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Location(s):"})," ",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.maxAge"}),", ",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.m1ProvisioningSessions"}),",\n",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.m1ContentHostingConfigurations"}),",\n",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.m1ServerCertificates"}),", ",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.m1ContentProtocols"}),",\n",(0,t.jsx)(n.code,{children:"msaf.serverResponseCacheControl.m5ServiceAccessInformation"}),"\n",(0,t.jsx)(n.strong,{children:"Version:"})," From version v1.2.0 onwards"]}),"\n",(0,t.jsx)(n.p,{children:"These configuration values give the caching time in seconds signalled with responses in the different interfaces."}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Parameter"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"maxAge"})}),(0,t.jsxs)(n.td,{children:["The default ",(0,t.jsx)(n.code,{children:"max-age"})," caching value."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"m1ProvisioningSessions"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"max-age"})," for responses for the M1 ProvisioningSessions API."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"m1ContentHostingConfigurations"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"max-age"})," for responses for the M1 ContentHostingProvisioning API."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"m1ServerCertificates"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"max-age"})," for responses for the M1 ServerCertificatesProvisioning API."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"m1ContentProtocols"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"max-age"})," for responses for the M1 ContentProtocolsDiscovery API."]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"m5ServiceAccessInformation"})}),(0,t.jsxs)(n.td,{children:["The ",(0,t.jsx)(n.code,{children:"max-age"})," for responses for the M5 ServiceAccessInformation API."]})]})]})]}),"\n",(0,t.jsx)(n.h2,{id:"generating-test-certificates",children:"Generating Test Certificates"}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsxs)(n.p,{children:["This section applies only up to and including v1.1. From v1.2.0 onwards certificates are generated and signed dynamically; use the ",(0,t.jsx)(n.a,{href:"#certificate-manager-program",children:"Certificate Manager Program"})," instead."]})}),"\n",(0,t.jsx)(n.admonition,{type:"note",children:(0,t.jsx)(n.p,{children:"These instructions are not needed from v1.2.0 onwards as certificates are dynamically generated and signed."})}),"\n",(0,t.jsxs)(n.p,{children:["To make the generation of certificates easier for testing, a script is available in the ",(0,t.jsx)(n.code,{children:"~/rt-5gms-application-function/subprojects/rt-common-shared/5gms/scripts/make_self_signed_certs.py"})," which will generate an appropriate set of self-signed test certificates. This script requires the ",(0,t.jsx)(n.code,{children:"python3"})," and ",(0,t.jsx)(n.code,{children:"openssl"})," commands to be present, and the Python 3 YAML module. The script executes in the ",(0,t.jsx)(n.code,{children:"python3"})," environment and uses the ",(0,t.jsx)(n.code,{children:"openssl"})," command to generate the PEM certificate and private key file."]}),"\n",(0,t.jsxs)(n.p,{children:["If ",(0,t.jsx)(n.code,{children:"openssl"}),", ",(0,t.jsx)(n.code,{children:"python3"})," or Python3 yaml module are not already installed then they can be installed from your system package manager, for example:"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Ubuntu/Debian and derivatives"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo apt -y install openssl python3 python3-yaml\n"})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"RedHat/CentOS/Fedora/Rocky and derivatives"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo dnf -y install openssl python3 python3-pyyaml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"make_self_signed_certs.py"})," script takes either an Application Function configuration file path or two command line parameters, the first is the file-path for a ContentHostingConfiguration JSON file representing the output of the Application Function and the\nsecond is the file-path of a certificates index JSON file. When using this script with the Application Function it is easier to use\nthe former command syntax."]}),"\n",(0,t.jsxs)(n.p,{children:["The script will examine the Application Function configuration file and extract the ContentHostingConfiguration. This is then examined for the certificateIds that are referenced and will create the private key and public certificate in PEM format at the file-path referenced from the certificates index JSON file. The generated certificates are self-signed, valid for 30 days and will include the ",(0,t.jsx)(n.code,{children:"canonicalHostname"})," from the AF configuration and any ",(0,t.jsx)(n.code,{children:"domainNameAlias"})," values from the ContentHostingConfiguration as Subject Alternative Names for the generated certificates."]}),"\n",(0,t.jsx)(n.p,{children:"For example:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"~/rt-5gms-application-function/subprojects/rt-common-shared/5gms/scripts/make_self_signed_certs.py \\\n --af-conf=/usr/local/etc/open5gs/msaf.yaml\n"})})]})}function h(e={}){let{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},28453(e,n,i){i.d(n,{R:()=>o,x:()=>c});var s=i(96540);let t={},r=s.createContext(t);function o(e){let n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.