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