Fixing SIP Problems with UC Manager & CUBE Normalization Tools

Similar documents
Fixing SIP Problems with UC Manager's SIP Normalization Tools

Fixing SIP Problems with UC Manager & CUBE Normalization Tools

Fixing SIP Problems with UC Manager's SIP Normalization Tools

Fixing SIP Problems with UC Manager's SIP Normalization Tools

Figure 1: Incoming and Outgoing messages where SIP Profiles can be applied

SIP Reliable Provisional Response on CUBE and CUCM Configuration Example

Figure 1: Incoming and Outgoing messages where SIP Profiles can be applied

Domain-Based Routing Support on the Cisco UBE

Mid-call Re-INVITE/UPDATE Consumption

SIP Transparency. Supported Features CHAPTER

SIP Trunk design and deployment in Enterprise UC networks

SIP Core SIP Technology Enhancements

Manipulating the Request or Response line. getrequestline() returns the method, request-uri, and version

Application Notes for Configuring SIP Trunking between Cincinnati Bell Any Distance evantage and Avaya IP Office Issue 1.0

SIP Trunk design and deployment in Enterprise UC networks

INTERFACE SPECIFICATION SIP Trunking. 8x8 SIP Trunking. Interface Specification. Version 2.0

SIP Trunk design and deployment in Enterprise UC networks

Department of Computer Science. Burapha University 6 SIP (I)

Cisco Unified Communications Manager Trunks

Copying SIP Headers. Feature Information for Copying with SIP Profiles

Copying SIP Headers. Feature Information for Copying with SIP Profiles

TSM350G Midterm Exam MY NAME IS March 12, 2007

Technical specifications for connecting SIP PBX to the Business Trunk service by Slovak Telekom without registration, with static routing.

CCIE Collaboration.

Abstract. Avaya Solution & Interoperability Test Lab

Abstract. Avaya Solution & Interoperability Test Lab

Configuring SIP MWI Features

Chapter 3: IP Multimedia Subsystems and Application-Level Signaling

Setting up Alcatel 4400 Digital PIMG Integration

Setting Up an Alcatel 4400 Digital PIMG Integration with Cisco Unity Connection

Setting Up a Mitel SX-2000 Digital PIMG Integration with Cisco Unity Connection

Application Scenario 1: Direct Call UA UA

Voice over IP Consortium

Application Note 3Com VCX Connect with SIP Trunking - Configuration Guide

SIP System Features. SIP Timer Values. Rules for Configuring the SIP Timers CHAPTER

Cisco Unified Border Element Intercluster Lookup Service

Configuring Multi-Tenants on SIP Trunks

SIP Compliance APPENDIX

Session Initiation Protocol (SIP) Overview

SIP Profiles Feature Module

Session Initiation Protocol (SIP) Overview

Cisco Unified Border Element (CUBE) Integration Guide

SIP System Features. Differentiated Services Codepoint CHAPTER

Avaya IP Office 4.1 SIP Customer Configuration Guide For use with AT&T IP Flexible Reach. Issue th April 2008

Cisco Unified Border Element SIP Support Configuration Guide, Cisco IOS Release 15M&T

2015/04/13 11:41 1/22 UNIVERGE 3C

Application Notes for IntelePeer CoreCloud SIP Trunking Service with Avaya IP Office Release Issue 1.0

Configuring SIP Registration Proxy on Cisco UBE

Cisco TelePresence Integration Guide Documentation for integrating Cisco CTS/TX TelePresence Systems with BlueJeans

Compliance with RFC 3261

Signaling trace on GSM/CDMA VoIP Gateway

2018/05/18 23:05 1/2 UNIVERGE 3C

Session Initiation Protocol (SIP)

Matching Inbound Dial Peers by URI

Configuring an Error Response Code upon an Out-of-Dialog OPTIONS Ping Failure

Application Notes for Configuring SIP Trunking between Bandwidth.com SIP Trunking Solution and an Avaya IP Office Telephony Solution Issue 1.

Troubleshooting Cisco Unity Connection

Common Components. Cisco Unified Border Element (SP Edition) Configuration Profile Examples 5 OL

Setting Up an Avaya Definity ProLogix Digital PIMG Integration with Cisco Unity Connection

BRKCOC-2399 Inside Cisco IT: Integrating Spark with existing large deployments

Overview of SIP. Information About SIP. SIP Capabilities. This chapter provides an overview of the Session Initiation Protocol (SIP).

Rev CUCM Mobility. c cnac o okbook.com

SIP System Features. SIP Timer Values. Rules for Configuring the SIP Timers CHAPTER

MITEL SIP CoE Technical. Configuration Note. Configure Mitel MiVoice Office 6.1 SP1 PR2 for use with IntelePeer SIP Trunking. SIP CoE XXX

Contents XO COMMUNICATIONS CONFIDENTIAL 1

SIP profile setup. About SIP profile setup. SIP profile reset. SIP profile deletion

Deploy Webex Video Mesh

Extensions to Session Initiation Protocol (SIP) and Peer-to-Peer SIP

CUCM 10.5 / CUBE 9.5. BT SIP Trunk Configuration Guide. 1 BT SIP Trunk Configuration Guide

Voice over IP (VoIP)

Cisco Unified CM SIP Trunking, Session Management, and Global Dial Plan Replication

Cisco Expressway Session Classification

SIP Tutorial. Leonid Consulting V1.4. Copyright Leonid Consulting, LLC (2007) All rights reserved.

Configure Jabber Extend and Connect and Modify Calling Party Display

Setup for Cisco Unified Communications Manager

Technical specifications for connecting SIP PBX to the Business Trunk service by Slovak Telekom.

Application Notes for Configuring Avaya IP Office 8.1 with Etisalat SIP Trunk service Issue 1.0

Application Notes for Windstream SIP Trunking Service using Broadsoft Platform with Avaya IP Office Issue 1.0

GSM VoIP Gateway Series

ICE / TURN / STUN Tutorial

Technical specifications for connecting SIP PBX to the Business Trunk service by Slovak Telekom with registration of pilot account.

Transparent Tunneling of QSIG and Q.931 over SIP TDM Gateway and SIP-SIP Cisco Unified Border Element

Multimedia networking: outline

Internet Protocol Version 6 (IPv6)

How to set FAX on asterisk

N-Squared Software SIP Specialized Resource Platform SIP-SDP-RTP Protocol Conformance Statement. Version 2.3

SIP Trunking & Peering Operation Guide

Abstract. Avaya Solution & Interoperability Test Lab

Configuring SIP Call-Transfer Features

Call Park and Directed Call Park

SIPPING Working Group A. Johnston, Ed. Internet-Draft Avaya Intended status: BCP R. Sparks Expires: January 12, 2009 Estacado Systems C. Cunningham S.

Understanding SIP exchanges by experimentation

Cisco Expressway Options with Cisco Meeting Server and/or Microsoft Infrastructure

Cisco Unified CME Commands: M

Abstract. Avaya Solution & Interoperability Test Lab

SIP Protocol Debugging Service

Services Extended Media Forking

TSIN02 - Internetworking

Call Forwarding. Call Forwarding Overview

Cisco Unified Communications Gateway Services--Extended Media Forking

Transcription:

Fixing SIP Problems with UC Manager & CUBE Normalization Tools Mark Stover, CCIE #6901 Consulting Systems Engineer BRKCOL-2455

Why have this session? More systems than ever use SIP Last count was 107 Products on SIP Wikipedia Page Google Search for SIP Server yields 14 Million Hits Many of the SIP bits don t quite match up Hence, the need for Interoperability events Things in the real world don t go the way of data sheets and Interoperability Forums! BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 3

What this Session is About Fact 1: SIP is a Standard Fact 2: SIP Configurations are not standardized Which headers are included Format of data in headers (URIs, etc.) Ordering of header fields Contents of the SIP Message Body What do we do when Fact #1 and Fact #2 are at odds in our deployment? We have tools in our toolbox: Unified CM s SIP Transparency and Normalization CUBE s SIP Profiles BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 4

Typical Interop Scenario BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 5

Cisco Spark Ask Question, Get Answers www.ciscospark.com Use Cisco Spark to communicate with the speaker after the event! What if I have a question after visiting Cisco Live?... Cisco Spark Spark rooms will be available until July 29, 2016 How 1. Go to the Cisco Live Mobile app 2. Find this session 3. Click the join link in the session description 4. Navigate to the room, room name = Session ID 5. Enter messages in the room BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 6

Agenda Introduction (Very) Brief Review of SIP When Things Don t Work Overview of SIP Normalization Methods Using Unified CM Normalization Scripts Using IOS SIP Profiles Normalization Using Unified CM Transparency Conclusion 7

Brief Review of SIP 8

Basic Design SIP is a Client-Server Protocol Clients send requests, receive responses Servers receive requests, send responses Modeled after HTTP Text Encoded Protocol Client request Server Each request invokes method on server Main purpose of request response Messages contain bodies BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 9

SIP Methods and Messages SIP Messages have distinct parts: IP/TCP/UDP Envelope SIP Header SIP Message Body MIME-Encoded Session Description Protocol (SDP) May contain other data Call signaling performed by SIP Methods Six Original SIP Methods: INVITE ACK OPTIONS BYE CANCEL REGISTER BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 10

SIP Methods OPTIONS Queries a participant about their media capabilities, and finds them, but doesn t invite PING identifies reachability ACK For reliability and call acceptance REGISTER Informs a SIP server about the location of a user INVITE Invites a participant to a session idempotent - reinvites for session modification BYE Ends a client s participation in a session CANCEL Terminates a search For Your Reference BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 11

SIP Message Syntax Many header fields from http Payload contains a media description SDP Session Description Protocol INVITE sip:alice@company.com SIP/2.0 From: Bob <sip:bob@university.edu> To: Alice <sip:alice@company.com> Via: SIP/2.0/UDP pc.university.edu Call-ID: 199723450578@192.169.100.100 Content-type: application/sdp CSeq: 4711 INVITE Content-Length: 187 v=0 o=ccm-sip 2000 1 IN IP4 192.168.100.100 s=sip Call c=in IP4 192.168.200.200 m=audio 26542 RTP/AVP 0 8 18 101 a=rtpmap:0 PCMU/8000 a=ptime:20 a=mid:1 c=in IP6 2001:0db8:aaaa::0987:65ff:fe01:234b m=audio 26662 RTP/AVP 0 a=mid:2 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 12

Negotiating the Session Called party receives SDP offered by caller Each stream can be accepted rejected Accepting involves generating an SDP listing same stream port number and address of called party subset of codecs from SDP in request Rejecting indicated by setting port to zero Audio stream accepted, PCMU only Video stream rejected, Port 0 For Your Reference v=0 o=user2 16255765 8267374637 IN IP4 4.3.2.1 t=0 0 m=audio 3456 RTP/AVP 0 c=in IP4 4.3.2.1 m=video 0 RTP/AVP 86 c=in IP4 4.3.2.1 Resulting SDP returned in 200 OK Media can now be exchanged BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 13

SIP Responses Status Code Classes 100-199 (1XX): Informational 200-299 (2XX): Success 300-399 (3XX): Redirection 400-499 (4XX): Client Error 500-599 (5XX): Server Error 600-699 (6XX): Global Failure Two groups 100-199: Provisional (Not reliable) 200-699: Final, Definitive Example 200 OK 180 Ringing Look much like requests Headers, bodies Differ in top line Status Code Numeric, 100-699 Meant for computer processing Protocol behavior based on 100s digit Other digits give extra info Reason Phrase Text phrase for humans Can be anything BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 14

SIP Transactions Fundamental unit of messaging exchange Request Zero or more provisional responses Usually one final response Maybe ACK All signaling composed of independent transactions Transactions identified by Cseq Sequence number Method tag BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 15

When things don t work 16

Identifying A Problem Goal is to make two SIP systems talk Both systems already configured with: Appropriate Network Configurations Trunk configuration to reach the other system Routing (dial plan) information in place Make a call From: 1001 on System A; To: 2001 on System Z Both phones exist, are configured, and are able to make other calls And wait BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 17

Symptoms Possible failure modes: Wait forever and get fast busy Call rejected right away Calls work, but other services (e.g. MWI) fail These can be symptoms of numerous problems No bandwidth No DNS Bad Codecs SIP Header Mismatches Etc. Unfortunately, it will take some troubleshooting to isolate the issue BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 18

Gather Information Logs are good: Will help you determine if SIP is the problem May not reflect what is really on the wire May not include the header level detail Packet Capture is your friend Various ways to gather traces Further discussion just ahead Review Paul Giralt s SIP Troubleshooting session for many more details: BRKUCC-2932 Troubleshooting SIP with Cisco Unified Communications Scheduled for Thursday Morning at 09:00 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 19

Getting SIP Messages Three main sources of SIP Message Information 1. Unified CM Trace Files 2. Unified CM Network Capture utils network capture 3. Cisco IOS Packet Capture IP Traffic Capture Feature 4. Network Packet Capture (Wireshark) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 20

Example of Unified CM Trace File 17:38:59.871 //SIP/SIPTcp/wait_SdlReadRsp: Incoming SIP TCP message from 192.168.100.100 on port 65067 with 1872 bytes: INVITE sip:4125551212@192.168.200.200:5060 SIP/2.0 Via: SIP/2.0/TCP 192.168.100.100:5060;branch=z9hG4bK1266281727 From: "Alice" <sip:918145551212@192.168.100.100>;tag=3e6d44cc-ce4 To: <sip:4125551212@192.168.200.200> Date: Wed, 12 Oct 2011 21:38:59 GMT Call-ID: 6E2FCA41-F45111E0-95FBF44A-5979DA79@192.168.100.100 Supported: 100rel,timer,resource-priority,replaces,sdp-anat Cisco-Guid: 1847785776-4098953696-3044132940-1967707264 User-Agent: Cisco-SIPGateway/IOS-12.x CSeq: 101 INVITE Timestamp: 1318455539 Expires: 180 Allow-Events: telephone-event Content-Type: multipart/mixed;boundary=uniqueboundary Mime-Version: 1.0 Content-Length: 929 --uniqueboundary Content-Type: application/sdp Content-Disposition: session;handling=required v=0 o=ciscosystemssip-gw-useragent 4535 5918 IN IP4 192.168.100.100 s=sip Call c=in IP4 192.168.100.100 t=0 0 m=audio 17620 RTP/AVP 0 100 101 c=in IP4 192.168.100.100 a=rtpmap:0 PCMU/8000 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 21

Using Unified CM Network Capture admin:utils network capture size 1500 port 5060 file testsipcap verbose Executing command with options: size=1500 count=1000 interface=eth0 src= dest= port=5060 ip= admin:file list activelog platform/cli/ testsipcap.cap dir count = 0, file count = 1 admin:file get activelog platform/cli/testsipcap.cap Please wait while the system is gathering files info...done. Sub-directories were not traversed. Number of files affected: 1 Total size in Bytes: 6040 Total size in Kbytes: 5.8984375 Would you like to proceed [y/n]? y SFTP server IP: 192.168.101.101 SFTP server port [22]: User ID: admin Password: ******** Download directory: Downloads. Transfer completed. BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 22

Using Wireshark BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 23

Determine Needed Results 1. Make calls in both directions: Get SIP Captures of test calls in both directions 2. Traces may give you a clue: Mismatch in domain names No domain in one direction Mailbox you want is last redirect instead of first in list 3. May have to research each system s SIP trunk requirements Compare it to the other vendor s normal operation 4. Use your research and troubleshooting to determine the fix: Change the domain name of messages from incorrectly configured system Add a missing domain Remove headers that cause a failure BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 24

Write, Test, and Deploy Use the desired result to formulate a plan Configure SIP Normalization to process appropriate headers Test against traffic on a SIP trunk that does not carry production traffic Deploy to production trunk and verify BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 25

SIP Transparency & Normalization vs. IOS SIP Profiles 26

SIP Transparency & Normalization Unified CM s Normalization Tool Provide an interface for customization of SIP messages Initially conceived for Cisco Unified CM Session Management Edition (SME) Also supports Cisco Unified Communications Manager without SME Available in Release 8.5 and later Include: A Lua execution environment SIP Transparency & Normalization APIs Support: Transparent passing of SIP information from one call leg to another Normalizing SIP Messages to provide interoperability BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 27

IOS SIP Profiles Unified Border Element s (CUBE) Normalization Tool Key Cisco Unified Border Element (CUBE) function Customize SIP messaging to enable session negotiation with SIP Service Provider (to meet policy and security needs) Resolve incompatibilities between SIP devices inside the enterprise network Use IOS feature navigator to confirm minimum version requirements First available in IOS 12.4.15XZ Inbound SIP Profiles available in IOS 15.4.2T Uses regular expressions to match and replace fields in SIP messages BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 28

New Features in IOS SIP Profiles New Normalization and Transparency features continue to be added Inbound SIP Profiles available in IOS 15.4(2)T (CUBE 10.0.1) New features in IOS 15.5(2)T (CUBE 11.0): SIP Profile Rule Tags Normalization support for non-standard SIP Headers SDP Pass-Through and Normalization in IOS 15.6 (1)T (CUBE 11.5) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 29

Normalization Comparison What s the difference between SIP Profiles and SIP T&N Feature IOS SIP Profiles SIP T&N Platform CUBE Unified CM Outbound Messages Yes Yes Inbound Messages Yes (15.4.2T) Yes Transparency SDP Only (15.6.1T) Yes Programmability Match & Replace Lua Scripting Matching RegEx (egrep) Lua Matching (globbing) Conditionals & Loops No Yes Headers Yes Yes Message Body SDP Only Any BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 30

Overview of SIP Transparency & Normalization 31

SIP Transparency & Normalization Unified CM s Normalization Tool Provide an interface for customization of SIP messages Initially conceived for Cisco Unified CM Session Management Edition (SME) Also supports Cisco Unified Communications Manager without SME Available in Release 8.5 and later Include: A Lua execution environment SIP Transparency & Normalization APIs Support: Transparent passing of SIP information from one call leg to another Normalizing SIP Messages to provide interoperability BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 32

SIP Transparency Unified CM is a Back to Back User Agent (B2BUA) In a Session Management role, Unified CM will (by default ) insert itself in the call Will become the call agent for next leg Will remove any unsupported headers on the next leg Transparency allows SIP information to be passed from one call leg to another What that means? Transparency allows 3rd-Party Headers to pass through Unified CM BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 33

What can a transparency script do? To provide transparency, the script has to pass SIP information Almost any information in a SIP message can be passed through Currently, SIP Transparency can manage: SIP headers SIP parameters Content bodies BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 34

SIP Normalization The process of transforming inbound and outbound SIP messages Inbound normalization makes the SIP message useable by Unified CM For Example, how can we handle SIP redirecting numbers? Unified CM uses the Diversion header for redirecting number(s) Other SIP devices use the History-Info header for this purpose Normalization can transform History-Info headers into Diversion headers Outbound normalization makes the SIP message useable by another SIP device Use normalization to transform Unified CM s Diversion headers into History-Info headers for another SIP PBX BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 35

What can a normalization script change? Manipulate almost every aspect of a SIP message Currently, SIP Normalization can change: The request URI The response code and phrase SIP headers SIP parameters Content bodies SDP BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 36

Normalization Script Examples Reorder codecs in the SDP of an early offer Remove specific headers such as Cisco-Guid Mask the number to E.164 in a Diversion header to meet Service Provider requirements Fix the domain name of a system with the wrong one using a configured parameter in Unified CM Convert IP addresses to domain names Add content to the SIP Message Body BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 37

Case Study-Problem Statement Customer has several PBXs trunked to a Unified CM cluster Unified CM SIP trunked to a 3rd-party voice mail system After multiple call forwards, some calls are sent to voice mail Most calls go to the correct voice mail box Calls from one PBX did not In the broken case: Reaching the greeting for the station that finally forwarded the call to voice mail Not reaching the voice mail of the station originally called Will solve this problem with SIP Normalization in just a little while BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 38

Using Unified CM Normalization Scripts 39

Putting SIP Normalization to Work Using message handlers to manipulate SIP messages Message Handler name tells you: When the Handler will be invoked What type of message the Handler is for You want your script to process INVITEs received by Unified CM: Script should have an inbound_invite message handler Corresponding message handler invoked anytime an inbound INVITE is received A single parameter called msg represents the SIP Message in script Scripts use Cisco SIP Message API library to access and manipulate the msg parameter Let s try looking at a diagram BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 40

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 41

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 42

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 43

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 44

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 45

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 46

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 47

How a Normalization Script Gets Run BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 48

Let s Start with a Simple Script Need to convert incoming History-Info headers into Diversion headers Script will run when Unified CM receives an INVITE Need to remove Cisco-Guid from outgoing headers Script will run when Unified CM sends an INVITE BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 49

Our First SIP Normalization Script M = {} function M.inbound_INVITE(msg) msg:converthitodiversion() end function M.outbound_INVITE(msg) msg:removeheader("cisco-guid") end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 50

Focus on SIP Normalization Script - 1 M = {} Creates an empty Lua Table called M for all Handlers M is also the name of the Lua Module function M.inbound_INVITE(msg) msg:converthitodiversion() end function M.outbound_INVITE(msg) msg:removeheader("cisco-guid") end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 51

Focus on SIP Normalization Script - 2 M = {} function M.inbound_INVITE(msg) end msg:converthitodiversion() Inbound INVITE Message Handler Inbound SIP Message accessed through msg Invokes an API call to perform the actual conversion function M.outbound_INVITE(msg) msg:removeheader("cisco-guid") end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 52

Focus on SIP Normalization Script - 3 M = {} function M.inbound_INVITE(msg) msg:converthitodiversion() End function M.outbound_INVITE(msg) end msg:removeheader("cisco-guid") Outbound INVITE Message Handler Outbound SIP Message accessed through msg Invokes API call to remove a header (in this case, Cisco-Guid) return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 53

Focus on SIP Normalization Script - 4 M = {} function M.inbound_INVITE(msg) msg:converthitodiversion() end function M.outbound_INVITE(msg) msg:removeheader("cisco-guid") end return M Line is required Returns the Lua Table containing the message handlers to Unified CM execution environment Cisco SIP Lua Environment uses Table M to identify the message handlers BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 54

SIP Message Handler Formalities Each Transparency and Normalization script provides: Set of call-back functions to manipulate SIP messages Call-back functions are called message handlers The message handler s name indicates when a handler is invoked Only one Transparency AND Normalization Script per SIP Trunk or Device Must define all message handlers in that single script Mix and match methods and directions in a single script Handlers for requests and responses have slightly different formats Will be covered next BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 55

Request Message Handlers Request message handler is named by combining: the SIP message direction AND the SIP method name Identify the method name from the 'request line' of the SIP message Request format: <direction>_<method> Examples: inbound_invite outbound_update BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 56

Response Message Handlers Response message handler is named by combining: the message direction PLUS the response code AND the SIP method Identify the method name from the CSeq header Response format: <direction>_<response code>_<method> Examples: inbound_183_invite inbound_200_invite outbound_200_update BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 57

Using Wild Cards in Message Handler Names For Request Messages A wildcard ANY can be used in place of <method> <direction> does not support a wild card For Response Messages: A wildcard ANY can be used in place of <method> A wildcard ANY can be used in place of <response code> <method> and <response code> can both be ANY <direction> does not support a wild card Cannot have a wildcard ANY <method> with a specific <response code> A wildcard character X can be used in <response code> BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 58

Examples of Wild Cards Valid Request Message Handler Names M.inbound_INVITE M.inbound_ANY M.outbound_ANY Valid Response Message Handler Names M.inbound_183_INVITE M.inbound_18X_INVITE M.outbound_ANY_INVITE M.outbound_ANY_ANY Invalid Response Names M.inbound_183_ANY BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 59

Rules for picking a message handler For Your Reference Unified CM uses these rules to choose a message handler: Message handlers are case-sensitive The direction is either inbound or outbound The direction is always written as lowercase The message direction is relative to Unified CM Note: The message direction has nothing to do with the dialog direction of the SIP session The method name in the SIP message is converted to uppercase to pick the message handler Longest match criteria: Unified CM uses the longest-match to choose the message handler A script has two message handlers: inbound_any_any and inbound_183_invite A 183 response is received by Unified CM The inbound_183_invite handler will be executed since it is the longest match BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 60

Built-In Normalization Scripts You can also find Transparency & Normalization scripts in some Interoperability guides. BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 61

APIs for SIP and SDP Normalization SIP Messages APIs: Allows script to manipulate the SIP message SDP APIs: Allows script to manipulate the SDP For Your Reference SIP Pass Through APIs: Allows script to pass information from one call leg to another SIP Utility APIs: Utilities to manipulate header data such a parsing URIs into a SIP URI object SIP URI APIs: Allows script to manipulate the parsed SIP URI object Trace APIs: Allows script to enable, disable and manage tracing Script Parameters API: Allows script to obtain trunk or line specific parameters BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 62

SIP Objects and Normalization Which SIP methods can be normalized? You can invoke a scripts based on any Method that Unified CM handles Which SIP headers can your script access? You can access any headers in the message that invokes the script Which lines in the message s SDP can you access? Your script can access any of the SDP lines For normalization, scripts can manipulate almost every aspect of a SIP message BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 63

SIP Objects and Transparency support Transparency is limited to INVITE dialogs on SIP trunks Transparency scripts can pass almost any information in a SIP message SIP Headers SIP Parameters Content Bodies These SIP objects do not support Transparency scripts SUBSCRIBE dialogs PUBLISH out-of-dialog REFER out-of-dialog unsolicited NOTIFY MESSAGE BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 64

Unified CM Normalization Case Study 65

Case Study Calls going to the wrong mail box Customer has several PBXs trunked to Cisco Unified CM Unified CM interfaced to a 3rd-party voice mail system via SIP Calls sent to voice mail after multiple call forwards Most calls were going to the correct voice mail box Calls from one PBX were not In the broken case, calls were going to the voice mail box of the last station the call was forwarded to Let s look in detail at these call flows BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 66

Case study call flow 5 Call from PSTN for x1100 1 Call from PSTN for x2100 6 Call Forward All to x1200 Bad Result 7 8 No Answer to Voice Mail Greeting for x1200 4 Greeting for x2100 2 Call Forward All to x2200 Good Result 3 No Answer to Voice Mail BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 67

Problem: SIP header from call to wrong mail box INVITE sip:4125553000@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/TCP 192.168.2.2:5060;branch=z9hG4bK12b5cc229a69621 From: "PSTN" <sip:8145551212@192.168.2.2>;tag=16101269~0458486e-22501993c802-145785687 To: <sip:4125553000@192.168.1.1> Date: Wed, 19 Dec 2012 16:45:01 GMT Call-ID: c9d9ea00-eef16a0d-46c59c-a5086cc6@192.168.2.2 Supported: 100rel,timer,resource-priority,replaces User-Agent: Cisco-CUCM8.5 Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY CSeq: 101 INVITE Expires: 180 Call-Info: <sip:192.168.2.2:5060>;method="notify;event=telephone-event;duration=500" Cisco-Guid: 3386501632-0000065536-0002912165-2768792774 Diversion: <sip:4125551200@192.168.2.2>;reason=no-answer;privacy=off;screen=yes Diversion: <sip:4125551100@192.168.2.2>;reason=unconditional;privacy=off;screen=yes Contact: sip:8145551212@192.168.2.2:5060;transport=tcp Content-Length: 0 Call goes to x1200 greeting instead of x1100 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 68

What the script will have to accomplish Keep it simple & just remove the headers we don t need for voice mail BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 69

Minimal Normalization Script for outbound INVITEs M = {} function M.outbound_INVITE(msg) INVITES to VM -- Process outbound -- Process INVITE to normalize it... end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 70

Add logic to remove extra Diversion Headers -- Get all Diversion Headers local DiversArray = msg:getheadervalues("diversion ) local DiversCount = #DiversArray if DiversCount > 1 then for I = 1, (DiversCount - 1) do -- Number of Diversion Headers -- Only if there s more than one -- Remove all but last header -- remove a Diversion Header msg:removeheadervalue("diversion", DiversArray[I]) end end BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 71

Completed Script M = {} function M.outbound_INVITE(msg) local DiversArray = msg:getheadervalues("diversion ) local DiversCount = #DiversArray if DiversCount > 1 then for I = 1, (DiversCount - 1) do -- Process outbound INVITES to VM -- Get all Diversion Headers -- # of Diversion Headers in Invite -- Only if there s more than one -- Remove all but last header msg:removeheadervalue("diversion", DiversArray[I]) -- remove a Diversion Header end end end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 72

Deploy the script to Unified CM Now that we have a script, what do we do with it? Apply it to the voice mail SIP trunk in Unified CM: 1. Add a SIP Normalization Script 2. Can be imported from a text file or copy/paste 3. Save the Script 4. Apply the Script to the appropriate SIP trunk BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 73

Add a SIP Normalization Script BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 74

Import the Script BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 75

Configure and save the Script BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 76

Apply the Script to the SIP trunk BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 77

Verify that your script fixes the problem INVITE sip:4125553000@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/TCP 192.168.2.2:5060;branch=z9hG4bK12b5cc229a69621 From: "PSTN" <sip:8145551212@192.168.2.2>;tag=16101269~0458486e-22501993c802-145785687 To: <sip:4125553000@192.168.1.1> Date: Wed, 19 Dec 2012 16:45:01 GMT Call-ID: c9d9ea00-eef16a0d-46c59c-a5086cc6@192.168.2.2 Supported: 100rel,timer,resource-priority,replaces User-Agent: Cisco-CUCM8.5 Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY CSeq: 101 INVITE Call-Info: <sip:192.168.2.2:5060>;method="notify;event=telephone-event;duration=500" Cisco-Guid: 3386501632-0000065536-0002912165-2768792774 Session-Expires: 1800 Diversion: <sip:4125551100@192.168.2.2>;reason=unconditional;privacy=off;screen=yes Contact: sip:8145551212@192.168.2.2:5060;transport=tcp Content-Length: 0 Call now goes to x1100 greeting (1 Diversion Header) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 78

Revisiting Use Last Diversion Header Same symptoms, different cause Thought this had been solved Another customer had calls to voicemail going to the wrong destination Discovered there were multiple Diversion Headers Diversion: Doe, John" <sip:jdoe@192.168.3.3>;reason=no-answer;privacy=off Diversion: Doe, John" <sip:1000@192.168.3.3>;reason=no-answer;privacy=off" Because of the comma in the Header, it breaks the processing It actually causes an issue with the SIP Normalization API The Headers are parsed into a Lua Table using commas and <CR><LF> BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 79

New Approach to Choosing the Last Diversion Process all Diversion Headers as one long string getheader( Diversion ) returns all Diversion Headers in a single string Each header will be comma separated Doe, John" <sip:jdoe@192.168.3.3>;reason=no-answer;privacy=off, Doe, John" <sip:1000@192.168.3.3>;reason=no-answer;privacy=off To get right voicemail box, really care about: Doe, John <sip:1000@192.168.3.3>;reason=no-answer Rest of the string can be discarded Can use Lua string matching to greedy match everything up to the last, "(.+),\" -- Note the \ to be able to match a Can replace everything matched with using: \ Doe, John" <sip:1000@192.168.3.3>;reason=no-answer;privacy=off BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 80

Complete Lua Script M = {} function M.outbound_INVITE(msg) -- Get all Diversion Headers local DiversHeaders = msg:getheader("diversion") if string.len(diversheaders) == 0 then -- no Diversion Headers else -- Greedy match everything up to the last," and replace with " newdiversheader = string.gsub(diversheaders, "(.+),\", "\"") msg:removeheader("diversion") -- remove Diversion Headers msg:addheader("diversion", newdiversheader) -- add last Diversion Header back end end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 81

Some Common Scripting Forms 82

Navigating Script Formats Sample Normalization Scripts are available Can be confusing, not all scripts follow same format Scripts follow two basic formats: Function Name made up of the direction and SIP method example: function M.inbound_INVITE(msg) Function Name indicates purpose, but not direction or SIP Method example: function add_reply_to_header(msg) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 83

Name = Direction + Method M = {} function M.inbound_INVITE(msg)... (function code)... end return M Good: Know exactly what SIP messages will be acted on Bad: Cannot reuse the function for anything else Need to repeat the code to duplicate processing on outbound INVITE BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 84

Example: Name with Purpose M = {} local function add_reply_to_header(msg)... (function code)... end M.outbound_INVITE = add_reply_to_header return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 85

Name with Purpose Good: Function name describes exactly what it does Can reuse the function without repeating it To use add_reply_to_header for inbound INVITES: M.inbound_INVITE = add_reply_to_header To use add_reply_to_header for outbound INVITES: M.outbound_INVITE = add_reply_to_header Bad: Might search through entire script to figure out the direction and SIP Method BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 86

Using Script Parameters SIP T&N allows you to set script parameters Available in Unified CM Admin pages Allows deployment of a generic script Provide script with site settings at load time Use same script in multiple locations without rewriting Example: local mydomain = scriptparameters.getvalue("localdomain") local fqdn = host..... mydomain BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 87

Setting a Script Parameter Access Unified CM Admin Set on the SIP Trunk Configuration page Must know the Parameter Name from the script Parameters are not indexed by Unified CM No pick-list provided BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 88

Enabling Tracing in Scripts Scripts can write trace information to Unified CM logs Tracing must be enabled in BOTH: Your script Unified CM Configuration Can embed tracing in every script: Use for testing and troubleshooting Disable from Unified CM Admin in production to optimize performance Trace output added to Unified CM SDI Trace BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 89

Adding Tracing to Your Scripts trace.enable() function M.inbound_NOTIFY(msg) local callid = msg:getheader("call-id") trace.format("m.inbound_notify: callid is '%s'", callid) trace.format(" -- missing URI host, no changes made") BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 90

Enabling Tracing from Unified CM BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 91

Overview of SIP Profiles Normalization 92

IOS SIP Profiles Unified Border Element s (CUBE) Normalization Tool CUBE supports normalization of SIP messages Includes add/remove/modify/copy of headers in a SIP message SIP Profiles feature added in 12.4(20)T and enhanced in 15.1(3)T and 15.4(1)T Inbound SIP Profiles available in IOS 15.4(2)T Inbound normalization takes place before regular SIP call processing CUBE acts as if it directly received the normalized message BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 93

IOS SIP Profile Uses Situations that IOS SIP Profiles can address Device rejects an unknown (IOS) header instead of ignoring it Device sends incorrect data in a SIP message For example, uses internal extension instead of E.164 number Device does not implement (or implements incorrectly) protocol procedures Device expects an optional header value or parameter that can be implemented in different ways Device sends a value or parameter that must be changed (or suppressed) before it leaves or enters the network Variations in the SIP standards on how to achieve certain functions BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 94

What can SIP Profiles normalization change? Add, modify, remove or copy any SIP or SDP header value in a SIP message SIP Profiles does not allow you to remove or add mandatory SIP headers Only the modify option is available for mandatory headers Mandatory SIP headers include: To From Via Cseq Call-Id Max-Forwards Mandatory SDP headers include: v, o, s, t,c, and m BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 95

Case Study-Problem Statement Customer has SIP trunks configured to the SIP service provider Unified CM configured to turn 4-digit extension into a valid E.164 number Dialed calls to the PSTN are completed Calls forwarded to PSTN fail Will solve this problem with SIP Profiles BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 96

Using IOS SIP Profiles Normalization 97

Putting SIP Profiles to Work Using profiles to manipulate SIP messages SIP profiles can be configured either at the dial-peer or global levels Message modification uses regular expressions to match and replace fields Modification can also be used to change a header name to the compact form For example, From to f By default, IOS never sends the compact form (it receives either long or short form) SIP Profiles cannot modify compact form headers Changes made to messages are not remembered by CUBE Content-length field is recalculated after normalization is applied BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 98

Using Wild Cards in Rules ANY keyword indicates that a rule will be applied to any message within the specified category Note that rules configured for an INVITE message only apply to the first INVITE in the call REINVITE supports operations needed on subsequent INVITEs in the call BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 99

Using SIP Profiles: Adding Headers Add new information that might be missing from a message s SIP or SDP Headers Useful for adding fixed value headers to SIP Messages Used for: Adding new headers to SIP Requests or Responses Adding new SDP headers to specific SDP lines BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 100

Example: Adding Headers Adding a Retry-After Header Incoming Outgoing 480 Temporarily Not Available CUBE 480 Temporarily Not Available Retry-After: 60 voice class sip-profiles 10 response 480 sip-header Retry-After add Retry-After: 60 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 101

Example: Adding Headers Adding a Retry-After Header Incoming Outgoing 480 Temporarily Not Available CUBE 480 Temporarily Not Available Retry-After: 60 voice class sip-profiles 10 rule 10 response 480 sip-header Retry-After add Retry-After: 60 Note that, rule tagging is a new CUBE feature in IOS 15.5(2)T BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 102

Using SIP Profiles: Removing Headers Provides the ability to remove a message s SIP or SDP Headers Used for: Removing an incompatible header Discarding internal information not needed by SIP Service Provider BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 103

Example: Removing Headers Removing the Cisco-Guid Header Incoming INVITE sip:5551000@sip.com:5060 SIP/2.0 Cisco-Guid: 3386501632-0000065536 CUBE Outgoing INVITE sip:5551000@sip.com:5060 SIP/2.0 voice class sip-profiles 20 rule 10 request ANY sip-header Cisco-Guid remove rule 20 response ANY sip-header Cisco-Guid remove BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 104

Using SIP Profiles: Modifying Messages Using regular expressions to match and replace fields Add fixed strings to existing header Substrings that have been matched can be part of replacement patterns When multiple rules apply to the same header, the second rule applies to the result string of the first rule Used for: Adding parameters to a header Modifying the URI Changing SDP BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 105

Example: Modifying Headers (1) Modify the originator SDP o= line Incoming INVITE sip:5551000@sip.com:5060 SIP/2.0 o=ciscosystemssip-gw-useragent 4535 5918 IN IP4 192.168.100.100 CUBE Outgoing INVITE sip:5551000@sip.com:5060 SIP/2.0 o=- 4535 5918 IN IP4 192.168.100.100 voice class sip-profiles 30 request INVITE sdp-header Session-Owner modify CiscoSystems-SIP-GW-UserAgent - BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 106

Example: Modifying Headers (2) Change anonymous to a directory number Incoming INVITE sip:5551000@sip.com:5060 SIP/2.0 From: <sip:anonymous@public.com:5060> CUBE Outgoing INVITE sip:5551000@sip.com:5060 SIP/2.0 From: <sip:5551212@public.com:5060> voice class sip-profiles 40 request INVITE sip-header From modify sip:anonymous@" sip:5551212@ BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 107

Using SIP Profiles: Copying Header Information Matched substrings can be saved in variables to copy into another header Variables u01 to u99 are shared by inbound and outbound SIP Profiles Can be used to copy information from inbound message to outbound message Uses peer-header feature of SIP Profiles Can use additional rules to modify the copied information Used for: Duplicating content of existing header to another header BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 108

Example: Copying Headers Copying phone number to Request URI Incoming INVITE sip:tjones@sip.com:5060 SIP/2.0 To: tjones <5551000@sip.com:5060> CUBE Outgoing INVITE sip:5551000@sip.com:5060 SIP/2.0 To: tjones <5551000@sip.com:5060> voice class sip-profiles 50 request INVITE sip-header To copy "sip:(.*)@" u01 request INVITE sip-header SIP-Req-URI modify ".*@(.*)" "INVITE sip:\u01@\1" BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 109

Using the SIP Profile Generation Tool BU provided web-based tools to help you build SIP Profiles Paste in messages, edit what you need, see the rule Manipulate the rule and see if the results are still correct Found at: http://cantor.cisco.com/sip-profilesgen.html BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 110

SIP-Profile Generation Tool Example BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 111

SIP-Profile Generation Tool Example BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 112

SIP-Profile Generation Tool Example BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 113

SIP-Profile Generation Tool Example BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 114

Inbound versus Outbound SIP Profiles SIP profiles can be applied to outgoing SIP messages Outbound rules are applied as the last step before the message leaves CUBE Normalization is after destination dial-peer matching has taken place Changes to the SIP message are not remembered after the message is sent SIP profiles can be applied to incoming SIP messages Inbound rules are first applied as the message enters CUBE Normalization is done prior to dial-peer matching CUBE will perform a preliminary match to determine if inbound SIP Profile exists After normalization, final dial peer will be chosen BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 115

Some Inbound SIP Profile Notes Incoming messages can contain multiple instances of same header For example, an INVITE can have multiple Diversion headers Header values will be in a comma separated list Must keep this in mind if you plan to modify these headers If preliminary inbound dial-peer matching fails, Inbound SIP Profiles attached to dial peers will not run Could happen if the inbound message has an invalid Request URI. A global Inbound SIP profile could be used, but use caution Performing SIP normalization will add extra processing logic, which slightly reduces CUBE performance BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 116

Enabling Inbound SIP Profile Feature Inbound SIP Profile has to be enabled at global level for normalizing incoming messages Configuration Example voice service voip sip sip-profiles inbound BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 117

Enabling Outbound SIP Profile Dial-Peer Profile Configuration Outbound SIP Profile removes the Cisco-Guid from any message leaving CUBE via specified Dial-Peer Configuration Example: voice class sip-profiles 20 request ANY sip-header Cisco-Guid remove response ANY sip-header Cisco-Guid remove dial-peer voice 10 voip voice-class sip profiles 20 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 118

Troubleshooting Commands Debug and Show Debug commands: debug ccsip info debug ccsip feature sip-profile debug ccsip error debug ccsip message Show commands: Verify the SIP Profile is assigned to a dial-peer: show dial-peer voice 1 include sip profile BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 119

Troubleshooting Sample sip profile to change user part of From header from anonymous to some value. voice class sip-profiles 1 request INVITE sip-header FROM modify "sip:anonymous@" "sip:1234@" INVITE sip:1111@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/UDP 192.168.2.1;branch=z9hG4bK-24227-1-0 From: anonymous <sip:anonymous@192.168.2.1:9232>;tag=1 To: 1111 <sip:1111@192.168.1.1:5060> Call-ID: 1-24227@192.168.2.1 Sample log: Sample incoming message with From header set to anonymous. Sip profile invoked for modifying the message is displayed here Jan 17 18:24:00 EST: //-1/xxxxxxxxx/SIP/Info/verbose/64/ccsip_inbound_profile_populate_callinfo_in_ccb: Dial-peer 1 is used for inbound profiles config Jan 17 18:24:00 EST: //-1/xxxxxxxxx/SIP/Info/info/64/sipSPISetSipProfilesTag: voice class SIP Profiles inbound tag is set : 1 Jan 17 18:24:00 EST: //-1/xxxxxxxxx/SIP/Info/info/64/sip_profiles_application_modify_remove_header: Header before modification : From: sipp <sip:anonymous@192.168.2.1:9232>;tag=1 Jan 17 18:24:00 EST: //-1/xxxxxxxxx/SIP/Info/info/64/sip_profiles_application_modify_remove_header: Header after modification : From: sipp <sip:1234@192.168.2.1:9232>;tag=1 From header after modification BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 120

SIP Profiles Case Study 121

Case Study-Problem Statement Forwarded PSTN calls fail Customer has SIP trunks configured to the SIP service provider Unified CM configured to turn 4-digit extension into a valid E.164 number Dialed calls to the PSTN are completed Calls forwarded to PSTN fail Let s look at the problem BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 122

SIP Headers for Forwarded Call INVITE sip:4125553000@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/TCP 192.168.2.2:5060;branch=z9hG4bK12b5cc229a69621 From: Mark" <sip:8145551212@192.168.2.2>;tag=16101269~0458486e-22501993c802-145785687 To: <sip:4125553000@192.168.1.1> Cisco-Guid CSeq: 101 INVITE meaningless outside Cisco-Guid: 3386501632-0000065536-0002912165-2768792774 enterprise Diversion: <sip:1100@192.168.2.2>;reason=unconditional;privacy=off;screen=yes Content-Length: 0 Diversion Header contains internal Extension (x1100) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 123

Tackling the Problem (1) Removing Cisco-Guid Removing Cisco-Guid from all requests and responses is straightforward No downside on trunks to SIP SP since it has no meaning outside enterprise SIP profile rules: request ANY sip-header Cisco-Guid remove response ANY sip-header Cisco-Guid remove BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 124

Tackling the Problem (2) Modifying Diversion Header Need to add the required E.164 digits to the extension in the Diversion Header Take advantage of the dial-plan All internal extensions have the format 1xxx Insert the digits 814555 in front of the extension Match the 1200@ in Diversion Header: (1 )@ Replace the match with 8145551200@ : 814555\1@ Complete SIP profile rule: request INVITE sip-header Diversion modify (1 )@ 814555\1@ BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 125

Complete the Configuration Applying the SIP Profile rules to outgoing dial-peer Sample Configuration: voice class sip-profiles 100 request ANY sip-header Cisco-Guid remove response ANY sip-header Cisco-Guid remove request INVITE sip-header Diversion modify (1 )@ 814555\1@! dial-peer voice 100 voip voice-class sip profiles 100! BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 126

Verify Results of SIP Profiles INVITE sip:4125553000@192.168.1.1:5060 SIP/2.0 Via: SIP/2.0/TCP 192.168.2.2:5060;branch=z9hG4bK12b5cc229a69621 From: Mark" <sip:8145551212@192.168.2.2>;tag=16101269~0458486e-22501993c802-145785687 To: <sip:4125553000@192.168.1.1> Cisco-Guid removed CSeq: 101 INVITE Diversion: <sip:8145551200@192.168.2.2>;reason=unconditional;privacy=off;screen=yes Content-Length: 0 Diversion Header normalized to E.164 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 127

Bonus Case Study 128

MWI Lights Don t Light Adapting SIP Notify Problem: Unity Connection provides voicemail for user on multiple vendor PBXs Unity Connection homed to Unified CM SME SME connects to other PBXs via SIP One vendors PBX fails to update MWI status Initial Troubleshooting: Gathered traces: SIP Notify being sent to system Opened case with vendor Software release running on system needs Message-Account in the Notify BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 129

First Try Add a Message-Account header No detail available on what Notify should look like You need a Message-Account Header Make it look like the To: Header That s easy Use geturi(to) gives me the URI from the To: Use that to add a new header to message: addheader( Message-Account, <uri from geturi>) Turns out it wasn t so easy BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 130

Revisiting the Problem Discover that Message-Account isn t a SIP Header at least for this release Message-Account should be in the content body Oh, and by the way Can you make sure it is right after the Messages-Waiting line That s a bit more complicated BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 131

Tackling the Problem Can use the geturi( To ) function to grab the To: header like before You can t edit the content body in place: Read the body and save it: getcontentbody() Delete the current body: removecontentbody() Add updated body: addcontentbody() Easy: Add the Message-Account: line to beginning or end of body Harder content body processing: Add Message-Account: line right after Messages-Waiting: line Don t know where in the body Messages-Waiting: line is Maintain CR-LF terminator on each line of body Use string matching and (partial) substitution BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 132

Updating the Content Body Before and After Content-Body from Unity Connection: Messages-Waiting: yes Voice-Message: 5/0 (0/0) Fax-Message: 0/0 (0/0) Content-Body desired: Messages-Waiting: yes Message-Account: sip:5000@10.10.10.10 Voice-Message: 5/0 (0/0) Fax-Message: 0/0 (0/0) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 133

Build the Script Basics M = {} function M.outbound_NOTIFY(msg)... end return M BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 134

Create the Message-Account Line -- Get the URI from To: and extract user and host local uristring = msg:geturi("to") local nuri = siputils.parseuri(uristring) nuser = nuri:getuser() nhost = nuri:gethost() -- Build the Message-Account line ma = string.format( Message-Account: sip:%s@%s\r\n, nuser, nhost) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 135

Update the Content Body -- Set the content type of the body local ct = "application/simple-message-summary" -- Get the existing content body local cb = msg:getcontentbody(ct) -- Build a new content body local ncb = string.gsub(cb, "Messages%-Waiting%:%s%w+%c+", "%0".. ma) -- Have to remove the existing content body and re-add msg:removecontentbody(ct) msg:addcontentbody(ct, ncb) BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 136

Taking a Look at the String Operation Breaking down the key string operation string.gsub(cb, "Messages%-Waiting%:%s%w+%c+", "%0".. ma) string.gsub takes three arguments: 1. String you want to process 2. String you want to find (match) 3. What you want to replace the matched string with Looking for Messages-Waiting: yes\r\n (or no) Take what we matched: %0 concatenate on the Message-Address we built before get the two lines we want for the Content Body BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 137

Overview of Unified CM Transparency 138

SIP Transparency Recap Unified CM is a B2BUA, so it consumes SIP headers that pass through: That s true for KNOWN headers (there s a list of 71 of them) Unknown headers pass through transparently Transparency feature allow s you to take information from known headers and preserve it as the call legs pass across Unified CM Unified CM can transparently pass: Parameters Unknown headers Unknown content-bodies BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 139

Why Use SIP Transparency? BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 140

Why Use SIP Transparency? Unified CM acting as SME will begin routing calls between PBX-A and PBX-Z BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 141

Why Use SIP Transparency? BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 142

Why Use SIP Transparency? BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 143

How Can Transparency Preserve 181 Unified CM consumes Reason header it is a known header The transparency feature lets you pass unknown headers through Unified CM Goal is to preserve the 181 Call is being forwarded Place in an unknown header when it ingresses Unified CM Restore the 181 as it egresses Unified CM BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 144

On Inbound 1. Invoked when Unified CM receives a 181 message response in an INVITE dialog 2. Create the PassThrough message block 3. Get the Reason header contents 4. Add the contents to an unknown X-Reason header B = {} function B.inbound_181_INVITE(msg) local pt = msg:getpassthrough() local rson = msg:getheader("reason") if pt and rson then pt:addheader("x-reason", rson) end end return B BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 145

Unified CM Processes the SIP Message Because the reason is preserved in the X-Reason header: Unified CM will not consume it It is preserved through call processing in the pass-through object Unified CM will consume the actual 181 Response and Unified CM will create a new 180 Response to take it s place The 180 Response still contains the pass-through object The 180 Response is now ready for Outbound Processing BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 146

On Outbound A = {} function A.outbound_180_INVITE(msg) local reason = msg:getheader("x-reason") if reason then if string.find(reason, "cause=181") then msg:setresponsecode(181,"call is being forwarded") msg:addheader("reason", reason) end msg:removeheader("x-reason") end end return A BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 147

Conclusion 148

How to Choose Your Tool Should I pick Unified CM or IOS There is overlap between what you can accomplish with both tools Some things to consider when choosing a tool: What does the call flow look like? Programming versus Match/Replace? Knowledge of Language (Lua vs. RegEx)? Is the right version available? Are needed features available? BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 149

Make a Plan and Practice Patience If you can identify the problem, you can fix it Traces and packet captures are your friend All normalization scripts or expressions have same beginnings Transparency relies on turning known headers into unknown ones Test, write, test, fix, test, then go to production BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 150

Next Steps Use the available resources to learn more I ve listed many in the following slides Use the Appendix to this deck Introduction to Lua Some additional Normalization examples Start small, and build on your knowledge BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 151

Resources Unified CM Transparency & Normalization SIP Chapter in Unified CM System Guide: http://www.cisco.com/en/us/docs/voice_ip_comm/cucm/admin/10_0_1/ccmsys/cucm_ BK_SE5FCFB6_00_cucm-system-guide-100_chapter_0101000.html Developer Guide for SIP Transparency and Normalization http://www.cisco.com/en/us/docs/voice_ip_comm/cucm/sip_tn/9_1_1/sip_t_n.html Cisco Interoperability Portal http://www.cisco.com/go/interoperability Cisco Developer Network http://developer.cisco.com/ BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 152

Resources IOS SIP Profiles Configuration Note for CUBE SIP Normalization: http://www.cisco.com/c/en/us/support/docs/voice-unified-communications/unifiedborder-element/105624-cube-sip-normalization.html SIP Configuration Guide (15M&T) http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/voice/sip/configuration/15-mt/sipconfig-15-mt-book.html CUBE Configuration Guide for SIP Profiles http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/voice/cube/configuration/cubebook/voi-sip-param-mod.html#reference_869720458984374988879107666015624 BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 153

Resources: Where to Ask Questions Cisco Developer Network has a SIP Transparency and Normalization Forum Part of the SIP Developer Portal Post questions there and interact with other developers BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 154

Complete Your Online Session Evaluation Give us your feedback to be entered into a Daily Survey Drawing. A daily winner will receive a $750 Amazon gift card. Complete your session surveys through the Cisco Live mobile app or from the Session Catalog on CiscoLive.com/us. Don t forget: Cisco Live sessions will be available for viewing on-demand after the event at CiscoLive.com/Online BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 155

Continue Your Education Demos in the Cisco campus Walk-in Self-Paced Labs Lunch & Learn Meet the Engineer 1:1 meetings Related sessions BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 156

Join the Customer Connection Program 19,000+ Members Strong Influence product direction Access to early adopter & beta trials Monthly technical & roadmap briefings Connect in private online community Exclusive perks at Cisco Live Collaboration NDA Roadmap Sessions Mon & Tues Q&A Open Forum with Collaboration Product Management Tues 4:00 5:30 Reserved seats at Collaboration Innovation Talk Thurs 8:00am 9:00am 2 new CCP tracks launching at Cisco Live: Security & Enterprise Networks Join in World of Solutions Collaboration zone Join at the Customer Connection stand New member thank-you gift * CCP ribbon for access to NDA sessions Join Online www.cisco.com/go/ccp Come to Collaboration zone to get your ribbon and new member gift * While supplies last BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 157

Please join us for the Service Provider Innovation Talk featuring: Yvette Kanouff Senior Vice President and General Manager, SP Business Joe Cozzolino Senior Vice President, Cisco Services Thursday, July 14 th, 2016 11:30 am - 12:30 pm, In the Oceanside A room What to expect from this innovation talk Insights on market trends and forecasts Preview of key technologies and capabilities Innovative demonstrations of the latest and greatest products Better understanding of how Cisco can help you succeed Register to attend the session live now or watch the broadcast on cisco.com 158

Thank you 159

Collaboration Cisco Education Offerings Course Description Cisco Certification CCIE Collaboration Advanced Workshop (CIEC) Implementing Cisco Collaboration Applications (CAPPS) Implementing Cisco IP Telephony and Video Part 1 (CIPTV1) Implementing Cisco IP Telephony and Video Part 2 (CIPTV2) Troubleshooting Cisco IP Telephony and Video (CTCOLLAB) Implementing Cisco Collaboration Devices (CICD) Implementing Cisco Video Network Devices (CIVND) Gain expert-level skills to integrate, configure, and troubleshoot complex collaboration networks Understand how to implement the full suite of Cisco collaboration applications including Jabber, Cisco Unified IM and Presence, and Cisco Unity Connection. Learn how to implement Cisco Unified Communications Manager, CUBE, and audio and videoconferences in a single-site voice and video network. Obtain the skills to implement Cisco Unified Communications Manager in a modern, multisite collaboration environment. Troubleshoot complex integrated voice and video infrastructures Acquire a basic understanding of collaboration technologies like Cisco Call Manager and Cisco Unified Communications Manager. Learn how to evaluate requirements for video deployments, and implement Cisco Collaboration endpoints in converged Cisco infrastructures. CCIE Collaboration CCNP Collaboration CCNP Collaboration CCNA Collaboration For more details, please visit: http://learningnetwork.cisco.com Questions? Visit the Learning@Cisco Booth or contact ask-edu-pm-dcv@cisco.com BRKCOL-2455 2016 Cisco and/or its affiliates. All rights reserved. Cisco Public 161

Appendix Overview of Lua & Lua Programming Additional SIP Normalization Scripts 162