draft-ietf-asap-sip-auto-peer-01.txt   draft-ietf-asap-sip-auto-peer-02.txt 
ASAP K. Inamdar ASAP K. Inamdar
Internet-Draft Unaffiliated Internet-Draft Unaffiliated
Intended status: Standards Track .S. Narayanan Intended status: Standards Track S. Narayanan
Expires: 9 December 2021 C. Jennings Expires: 9 December 2021 C. Jennings
Cisco Systems Cisco Systems
7 June 2021 7 June 2021
Automatic Peering for SIP Trunks Automatic Peering for SIP Trunks
draft-ietf-asap-sip-auto-peer-01 draft-ietf-asap-sip-auto-peer-02
Abstract Abstract
This draft specifies a configuration workflow to enable enterprise This draft specifies a configuration workflow to enable enterprise
Session Initiation Protocol (SIP) networks to solicit the capability Session Initiation Protocol (SIP) networks to solicit the capability
set of a SIP service provider network. The capability set can set of a SIP service provider network. The capability set can
subsequently be used to configure features and services on the subsequently be used to configure features and services on the
enterprise edge element, such as a Session Border Controller (SBC), enterprise edge element, such as a Session Border Controller (SBC),
to ensure smooth peering between enterprise and service provider to ensure smooth peering between enterprise and service provider
networks. networks.
skipping to change at page 13, line 5 skipping to change at page 13, line 5
* Parentheses enclose choice and case nodes, and case nodes are also * Parentheses enclose choice and case nodes, and case nodes are also
marked with a colon (":"). marked with a colon (":").
* Ellipsis ("...") stands for contents of subtrees that are not * Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
The data model for the peering capability document has the following The data model for the peering capability document has the following
structure: structure:
+--rw peering-response module: ietf-sip-auto-peering
+--rw variant string +--rw peering-info
+--rw transport-info +--rw variant string
| +--rw transport? enumeration +--rw transport-info
| +--rw registrar* host-port | +--rw transport? enumeration
| +--rw registrarRealm? string | +--rw registrar* host-port
| +--rw callControl* host-port | +--rw registrarRealm? string
| +--rw dns* inet:ip-address | +--rw callControl* host-port
| +--rw outboundProxy? host-port | +--rw dns* inet:ip-address
+--rw call-specs | +--rw outboundProxy? host-port
| +--rw earlyMedia? boolean +--rw call-specs
| +--rw signalingForking? boolean | +--rw earlyMedia? boolean
| +--rw supportedMethods? string | +--rw signalingForking? boolean
| +--rw numRange | +--rw supportedMethods? string
| +--rw numRangeType* string | +--rw numRange
| +--rw count* int32 | +--rw numRangeType? string
| +--rw value* string | +--rw count? int32
+--rw media | +--rw value* string
| +--rw mediaTypeAudio +--rw media
| | +--rw mediaFormat* string | +--rw mediaTypeAudio
| +--rw fax | | +--rw mediaFormat* string
| | +--rw protocol* enumeration | +--rw fax
| +--rw rtp | | +--rw protocol* enumeration
| | +--rw RTPTrigger? boolean | +--rw rtp
| | +--rw symmetricRTP? boolean | | +--rw RTPTrigger? boolean
| +--rw rtcp | | +--rw symmetricRTP? boolean
| +--rw symmetricRTCP? boolean | +--rw rtcp
| +--rw RTCPfeedback? boolean | +--rw symmetricRTCP? boolean
+--rw dtmf | +--rw RTCPfeedback? boolean
| +--rw payloadNumber? int8 +--rw dtmf
| +--rw iteration? boolean | +--rw payloadNumber? int8
+--rw security | +--rw iteration? boolean
| +--rw signaling +--rw security
| +--rw type* string | +--rw signaling
| +--rw version* string | | +--rw type? string
| +--rw mediaSecurity | | +--rw version? string
| +--rw keyManagement? string | +--rw mediaSecurity
| +--rw certLocation string | | +--rw keyManagement? string
| +--rw secureTelephonyIdentity | +--rw certLocation? string
| +--rw STIRCompliance boolean | +--rw secureTelephonyIdentity
| +--rw certDelegation boolean | +--rw STIRCompliance? boolean
| +--rw ACMEDirectory string | +--rw certDelegation? boolean
+--rw extensions? string | +--rw ACMEDirectory? string
+--rw extensions? string
7.2. YANG Model 7.2. YANG Model
This section defines the YANG module for the peering capability set This section defines the YANG module for the peering capability set
document. It imports modules (ietf-yang-types and ietf-inet-types) document. It imports modules (ietf-yang-types and ietf-inet-types)
from [RFC 6991 (https://tools.ietf.org/html/rfc6991)]. from [RFC 6991 (https://tools.ietf.org/html/rfc6991)].
module ietf-sip-auto-peering { module ietf-sip-auto-peering {
namespace "urn:ietf:params:xml:ns:ietf-sip-auto-peering"; namespace "urn:ietf:params:xml:ns:ietf-sip-auto-peering";
prefix "peering"; prefix "peering";
description description
"Data model for transmitting peering parameters from SP to Enterprise"; "Data model for transmitting peering parameters from SP to
Enterprise";
revision 2019-05-06 { revision 2019-05-06 {
description "Initial revision of peering-response doc."; description "Initial revision of peering-response doc.";
} }
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
typedef ipv4-address-port { typedef ipv4-address-port {
type string { type string {
pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}" pattern "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\"
+ "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" + ".){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
+ ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|" + ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]"
+ "655[1-2][0-9]|6553[1-5])$"; + "{2}|655[1-2][0-9]|6553[1-5])$";
} }
description "The ipv4-address-port type represents an IPv4 address in description "The ipv4-address-port type represents an IPv4
dotted-quad notation followed by a port number."; address in dotted-quad notation followed by a port number.";
} }
typedef ipv6-address-port { typedef ipv6-address-port {
type string { type string {
pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}" pattern "((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}"
+ "((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|" + "((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|"
+ "(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}" + "(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}"
+ "(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))" + "(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))"
+ ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|" + ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]"
+ "655[1-2][0-9]|6553[1-5])$"; + "{2}|655[1-2][0-9]|6553[1-5])$";
pattern pattern
"(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|" "(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|"
+ "((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)" + "((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)"
+ ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|" + ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]"
+ "655[1-2][0-9]|6553[1-5])$"; + "{2}|655[1-2][0-9]|6553[1-5])$";
} }
description description
"The ipv6-address type represents an IPv6 address in full, "The ipv6-address type represents an IPv6 address in full,
mixed, shortened, and shortened-mixed notation followed by a port mixed, shortened, and shortened-mixed notation followed by
number."; a port number.";
} }
typedef ip-address-port { typedef ip-address-port {
type union { type union {
type ipv4-address-port; type ipv4-address-port;
type ipv6-address-port; type ipv6-address-port;
} }
description description
"The ip-address-port type represents an IP address:port number "The ip-address-port type represents an IP address:port number
and is IP version neutral."; and is IP version neutral.";
} }
typedef domain-name-port { typedef domain-name-port {
type string { type string {
pattern pattern
"((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*" "((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*"
+ "([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)" + "([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)"
+ "|\." + "|\."
+ ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|" + ":^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]"
+ "655[1-2][0-9]|6553[1-5])$"; + "{2}655[1-2][0-9]|6553[1-5])$";
length "1..258"; length "1..258";
} }
description description
"The domain-name-port type represents a DNS domain name followed by a "The domain-name-port type represents a DNS domain name
port number. The name SHOULD be fully qualified whenever possible."; followed by a port number. The name SHOULD be fully qualified
whenever possible.";
} }
typedef host-port { typedef host-port {
type union { type union {
type ip-address-port; type ip-address-port;
type domain-name-port; type domain-name-port;
} }
description description
"The host type represents either an IP address or a DNS "The host type represents either an IP address or a DNS
domain name followed by a port number."; domain name followed by a port number.";
skipping to change at page 16, line 12 skipping to change at page 16, line 14
container transport-info { container transport-info {
leaf transport { leaf transport {
type enumeration { type enumeration {
enum "TCP"; enum "TCP";
enum "TLS"; enum "TLS";
enum "UDP"; enum "UDP";
enum "TCP;TLS"; enum "TCP;TLS";
enum "TCP;TLS;UDP"; enum "TCP;TLS;UDP";
enum "TCP;UDP"; enum "TCP;UDP";
} }
description "Transport Protocol(s) used in SIP communication"; description "Transport Protocol(s) used in SIP
communication";
} }
leaf-list registrar { leaf-list registrar {
type host-port; type host-port;
max-elements 3; max-elements 3;
description "List of service provider registrar servers"; description "List of service provider registrar servers";
} }
leaf registrarRealm { leaf registrarRealm {
type string; type string;
description "Realm for REGISTER requests carrying credentials"; description "Realm for REGISTER requests carrying
credentials";
} }
leaf-list callControl { leaf-list callControl {
type host-port; type host-port;
max-elements 3; max-elements 3;
description "List of service provider call control servers"; description "List of service provider call control servers";
} }
leaf-list dns { leaf-list dns {
type inet:ip-address; type inet:ip-address;
max-elements 2; max-elements 2;
description "IP address of the DNS Server(s) hosted by the service description "IP address of the DNS Server(s) hosted by the
provider"; service provider";
} }
leaf outboundProxy { leaf outboundProxy {
type host-port; type host-port;
description "SIP Outbound Proxy"; description "SIP Outbound Proxy";
} }
} }
container call-specs { container call-specs {
leaf earlyMedia { leaf earlyMedia {
type boolean; type boolean;
description "Flag indicating whether the service provider is expected description "Flag indicating whether the service provider
to deliver early media."; is expected to deliver early media.";
} }
leaf signalingForking { leaf signalingForking {
type boolean; type boolean;
description "Flag indicating whether the service provider is capable description "Flag indicating whether the service provider
of forking incoming calls "; is capable of forking incoming calls ";
} }
leaf supportedMethods { leaf supportedMethods {
type string; type string;
description "Leaf/Leaf List indicating the different SIP methods description "Leaf/Leaf List indicating the different SIP
support by the service provider."; methods support by the service provider.";
} }
container numRange { container numRange {
leaf numRangeType { leaf numRangeType {
type string; type string;
description "String indicating whether the DID number range is description "String indicating whether the DID number
passed by value or by reference" range is passed by value or by reference"
} }
leaf count { leaf count {
when "../numRangeType = 'range' or ../numRangeType = 'block'"; when "../numRangeType = 'range' or
../numRangeType = 'block'";
type int32; type int32;
description "Number of DID numbers present in the number range." description "Number of DID numbers present in the number
range."
} }
leaf-list value { leaf-list value {
type string; type string;
description "Value of the DID number range or URL being passed as description "Value of the DID number range or URL being
reference." passed as reference."
} }
} }
} }
container media { container media {
container mediaTypeAudio { container mediaTypeAudio {
leaf-list mediaFormat { leaf-list mediaFormat {
type string; type string;
description "Leaf List indicating the audio media formats supported."; description "Leaf List indicating the audio media formats
supported.";
} }
} }
container fax { container fax {
leaf-list protocol { leaf-list protocol {
type enumeration { type enumeration {
enum "pass-through"; enum "pass-through";
enum "t38"; enum "t38";
} }
max-elements 2; max-elements 2;
description "Leaf List indicating the different fax protocols description "Leaf List indicating the different fax
supported by the service provider."; protocols supported by the service provider.";
} }
} }
container rtp { container rtp {
leaf RTPTrigger { leaf RTPTrigger {
type boolean; type boolean;
description "Flag indicating whether the service provider expects to description "Flag indicating whether the service provider
receive the first media packet."; expects to receive the first media packet.";
} }
leaf symmetricRTP { leaf symmetricRTP {
type boolean; type boolean;
description "Flag indicating whether the service provider expects description "Flag indicating whether the service provider
symmetric RTP defined in [@RFC4961]"; expects symmetric RTP defined in [@RFC4961]";
} }
} }
container rtcp { container rtcp {
leaf symmetricRTCP { leaf symmetricRTCP {
type boolean; type boolean;
description " Flag indicating whether the service provider expects description " Flag indicating whether the service
symmetric RTP defined in [@RFC4961]."; provider expects symmetric RTP defined in [@RFC4961].";
} }
leaf RTCPfeedback { leaf RTCPfeedback {
type boolean; type boolean;
description "Flag Indicating support for RTP profile extension for description "Flag Indicating support for RTP profile
RTCP-based feedback, as defined in [@RFC4585]"; extension for RTCP-based feedback, as defined in [@RFC4585]";
} }
} }
} }
container dtmf { container dtmf {
leaf payloadNumber { leaf payloadNumber {
type int8 { type int8 {
range "96..127"; range "96..127";
} }
description "Leaf that indicates the payload number(s) supported by description "Leaf that indicates the payload number(s)
the service provider for DTMF relay via Named-Telephony-Events"; supported by the service provider for DTMF relay via
Named-Telephony-Events";
} }
leaf iteration { leaf iteration {
type boolean; type boolean;
description "Flag identifying whether the service provider supports description "Flag identifying whether the service provider
NTE DTMF relay using the procedures of [@RFC2833] or [@RFC4733] ."; supports NTE DTMF relay using the procedures of [@RFC2833]
or [@RFC4733] .";
} }
} }
container security { container security {
container signaling { container signaling {
leaf type { leaf type {
type string { type string {
pattern "TLS"; pattern "TLS";
} }
description "Type of signaling security supported."; description "Type of signaling security supported.";
skipping to change at page 19, line 28 skipping to change at page 19, line 35
type string { type string {
pattern "([1-9]\.[0-9])(;[1-9]\.[0-9])?|(NULL)"; pattern "([1-9]\.[0-9])(;[1-9]\.[0-9])?|(NULL)";
} }
description "Indicates TLS version for SIP signaling"; description "Indicates TLS version for SIP signaling";
} }
} }
container mediaSecurity { container mediaSecurity {
leaf keyManagement { leaf keyManagement {
type string { type string {
pattern "(SDES(;DTLS-SRTP,version=[1-9]\.[0-9](,[1-9]\." pattern "(SDES(;DTLS-SRTP,version=[1-9]\.[0-9](,[1-9]"
+ "[0-9])?)?)|(DTLS-SRTP,version=[1-9]\.[0-9](,[1-9]\.[0-9])?)" + "\.[0-9])?)?)|(DTLS-SRTP,version=[1-9]\.[0-9](,[1-9]"
+ "|(NULL)"; + "\.[0-9])?)|(NULL)";
} }
description "Leaf that identifies the key management methods description "Leaf that identifies the key management
supported by the service provider for SRTP."; methods supported by the service provider for SRTP.";
} }
} }
leaf certLocation { leaf certLocation {
type string; type string;
description "Location of the service provider certificate chain description "Location of the service provider certificate
for SIP over TLS."; chain for SIP over TLS.";
} }
container secureTelephonyIdentity { container secureTelephonyIdentity {
leaf STIRCompliance { leaf STIRCompliance {
type boolean; type boolean;
description "Indicates whether the SIP service provider is STIR description "Indicates whether the SIP service provider
compliant."; is STIR compliant.";
} }
leaf certDelegation { leaf certDelegation {
type boolean; type boolean;
description "Indicates whether a SIP service provider is willing description "Indicates whether a SIP service provider is
to delegate authority to the enterprise network over its allocated willing to delegate authority to the enterprise network
number range(s)"; over its allocated number range(s)";
} }
leaf ACMEDirectory { leaf ACMEDirectory {
when "../certDelegation = 1 or ../certDelegation = 'true'"; when "../certDelegation = 1
type string; or ../certDelegation = 'true'";
description "Directory object URL, when de-referenced, provides a type string;
collection of field name-value pairs to kickstart ACME."; description "Directory object URL, when de-referenced,
} provides a collection of field name-value pairs to
} kickstart ACME.";
}
}
} }
leaf extensions { leaf extensions {
type string; type string;
description "Lists the various SIP extensions supported by SP"; description "Lists the various SIP extensions supported by
the service provider.";
} }
} }
} }
7.3. Node Definitions 7.3. Node Definitions
This sub-sections provides the definition and encoding rules of the This sub-sections provides the definition and encoding rules of the
various nodes of the YANG module defined in section 9.2 various nodes of the YANG module defined in section 9.2
*capability-set*: This node serves as a container for all the other *capability-set*: This node serves as a container for all the other
 End of changes. 38 change blocks. 
122 lines changed or deleted 134 lines changed or added

This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/