description="A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with '+'.",
examples=['+123456789'],
pattern='^\\+[1-9][0-9]{4,14}$',
examples=["+123456789"],
pattern="^\\+[1-9][0-9]{4,14}$",
),
]
classNetworkAccessIdentifier(RootModel[str]):
root:Annotated[
str,
Field(
description='A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator.',
examples=['123456789@domain.com'],
description="A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator.",
examples=["123456789@domain.com"],
),
]
classSingleIpv4Addr(RootModel[IPv4Address]):
root:Annotated[
IPv4Address,
Field(
description='A single IPv4 address with no subnet mask',
examples=['203.0.113.0'],
description="A single IPv4 address with no subnet mask",
examples=["203.0.113.0"],
),
]
classPort(RootModel[int]):
root:Annotated[int,Field(description='TCP or UDP port number',ge=0,le=65535)]
root:Annotated[int,Field(description="TCP or UDP port number",ge=0,le=65535)]
classDeviceIpv4Addr1(BaseModel):
publicAddress:SingleIpv4Addr
@@ -206,95 +211,132 @@ class DeviceIpv4Addr(RootModel[DeviceIpv4Addr1 | DeviceIpv4Addr2]):
root:Annotated[
DeviceIpv4Addr1|DeviceIpv4Addr2,
Field(
description='The device should be identified by either the public (observed) IP address and port as seen by the application server, or the private (local) and any public (observed) IP addresses in use by the device (this information can be obtained by various means, for example from some DNS servers).\n\nIf the allocated and observed IP addresses are the same (i.e. NAT is not in use) then the same address should be specified for both publicAddress and privateAddress.\n\nIf NAT64 is in use, the device should be identified by its publicAddress and publicPort, or separately by its allocated IPv6 address (field ipv6Address of the Device object)\n\nIn all cases, publicAddress must be specified, along with at least one of either privateAddress or publicPort, dependent upon which is known. In general, mobile devices cannot be identified by their public IPv4 address alone.\n',
description="The device should be identified by either the public (observed) IP address and port as seen by the application server, or the private (local) and any public (observed) IP addresses in use by the device (this information can be obtained by various means, for example from some DNS servers).\n\nIf the allocated and observed IP addresses are the same (i.e. NAT is not in use) then the same address should be specified for both publicAddress and privateAddress.\n\nIf NAT64 is in use, the device should be identified by its publicAddress and publicPort, or separately by its allocated IPv6 address (field ipv6Address of the Device object)\n\nIn all cases, publicAddress must be specified, along with at least one of either privateAddress or publicPort, dependent upon which is known. In general, mobile devices cannot be identified by their public IPv4 address alone.\n",
description='The device should be identified by the observed IPv6 address, or by any single IPv6 address from within the subnet allocated to the device (e.g. adding ::0 to the /64 prefix).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n',
description="The device should be identified by the observed IPv6 address, or by any single IPv6 address from within the subnet allocated to the device (e.g. adding ::0 to the /64 prefix).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n",
description='IPv4 address may be specified in form <address/mask> as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n',
examples=['198.51.100.0/24'],
description="IPv4 address may be specified in form <address/mask> as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n",
description='IPv6 address may be specified in form <address/mask> as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n',
description="IPv6 address may be specified in form <address/mask> as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n",
list[Range]|None,Field(description='Range of TCP or UDP ports',min_length=1)
list[Range]|None,Field(description="Range of TCP or UDP ports",min_length=1)
]=None
ports:Annotated[
list[Port]|None,Field(description='Array of TCP or UDP ports',min_length=1)
list[Port]|None,Field(description="Array of TCP or UDP ports",min_length=1)
]=None
classQosProfileName(RootModel[str]):
root:Annotated[
str,
Field(
description='A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the API provider implementation.\nSome options addresses:\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\nThe set of QoS Profiles that an API provider is offering may be retrieved by means of the QoS Profile API (qos-profile) or agreed on onboarding time.\n',
examples=['voice'],
description="A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the API provider implementation.\nSome options addresses:\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\nThe set of QoS Profiles that an API provider is offering may be retrieved by means of the QoS Profile API (qos-profile) or agreed on onboarding time.\n",
examples=["voice"],
max_length=256,
min_length=3,
pattern='^[a-zA-Z0-9_.-]+$',
pattern="^[a-zA-Z0-9_.-]+$",
),
]
classCredentialType(Enum):
PLAIN="PLAIN"
ACCESSTOKEN="ACCESSTOKEN"
REFRESHTOKEN="REFRESHTOKEN"
classSinkCredential(BaseModel):
credentialType:Annotated[
CredentialType,
Field(
description="The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n"
),
]
classBaseSessionInfo(BaseModel):
device:Device|None=None
applicationServer:ApplicationServer
devicePorts:Annotated[
PortsSpec|None,
Field(
description='The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports'
description="The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports"
),
]=None
applicationServerPorts:Annotated[
PortsSpec|None,
Field(
description='A list of single ports or port ranges on the application server'
description="A list of single ports or port ranges on the application server"
),
]=None
qosProfile:QosProfileName
sink:Annotated[
AnyUrl|None,
Field(
description="The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol.",
examples=["https://endpoint.example.com/sink"],
),
]=None
sinkCredential:Annotated[
SinkCredential|None,
Field(
description="A sink credential provides authentication or authorization information necessary to enable delivery of events to a target."
),
]=None
classCreateSession(BaseSessionInfo):
duration:Annotated[
int,
Field(
description='Requested session duration in seconds. Value may be explicitly limited for the QoS profile, as specified in the Qos Profile (see qos-profile API). Implementations can grant the requested session duration or set a different duration, based on network policies or conditions.\n',
description="Requested session duration in seconds. Value may be explicitly limited for the QoS profile, as specified in the Qos Profile (see qos-profile API). Implementations can grant the requested session duration or set a different duration, based on network policies or conditions.\n",