Wednesday, December 17

Welcome to the World: Cisco Versus Microsoft

Welcome to the World: Cisco Versus Microsoft

Cisco and Avaya, two major VoIP system providers (among other things) are criticizing Lync Server 2010/2013. And not just for missing one thing – it’s an outright attack.
They’re saying Lync is not suitable for full-time use. Microsoft doesn’t supply all the infrastructure elements needed to run it, causing too much complexity and producing an unreliable product.
 I think “feeling the heat” is apt – because it sounds like Cisco and Avaya are suffering from a serious case of sour grapes.
I’m a bit late to the party here – the smear campaign began in late February – but examination of these criticisms is still fair game. Let’s go through the issues Cisco and Avaya are jabbing at Lync with.

The Strategy: Tear Down Instead of Innovate

The attack takes the form of an online campaign + a white paper from Cisco, with Avaya chiming in. They’re attacking several points about Lync Server, from voice & video reliability to total deployment cost.
The white paper is even in tone. But it’s definitely more of a push against Microsoft’s Lync than neutral advisory on Unified Communications.
The entire issue with this campaign is: They’re attacking competition, instead of examining your own product for improvements you can make.
When was the last time we heard of Cisco innovating? I don’t know of anything really impressive lately.
This is an old, old tactic. And one that has a terrible track record. Yet it’s pulled out almost every time companies want a competitor to go away.
Now Avaya, I kind of like their VoIP. They have a good-quality product. We actually haven’t replaced many Avaya systems with Lync yet…their customers like what they have. Great. No problem here.
So I don’t quite understand why Avaya’s jumping on Cisco’s bandwagon. If your product IS solid and well-supported, then it’s just a competition in the marketplace. Something we ALL have to do.

“Limitations” of Lync, and Why The Objections are Hollow

Let me address a few of the points Cisco and Avaya make in their campaign. From one perspective, they might be considered negatives.
Of course, they might be applied to Cisco and Avaya too. Or maybe they’re just options made available to customers. We’ll see.

Cisco (from the article): “Microsoft doesn’t provide phones, video endpoints, voice and video gateways, networking and cloud PSTN connections – leaving customers to find them elsewhere, increasing cost and complexity to implement, manage and troubleshoot Lync installations.”
Maybe this is intentional? Microsoft doesn’t try to take on all of that, leaving the choice up to service partners and clients? They get to choose which providers for things like SIP and cloud hosting, maybe saving money in the process?
(Full disclosure: PlanetMagpie is one of those service partners. We make several provider options available to Lync Server clients. We tested all of them ourselves, so we could recommend appropriate providers to the right size companies. This way smaller firms only pay for the bandwidth they need.)

Cisco (from the white paper): In attacking what it sees as Microsoft’s strategy for Skype, Cisco says that Skype will evolve to run better on Microsoft’s own software than on others. They point to a statement from Steve Ballmer: “We always want Skype to be first and best on Windows.”
One could easily interpret this line to also mean that they want Skype to remain in its dominant position for Windows voice communications. The position it gained over years of great functionality, on its own before the acquisition. Maybe Microsoft just wants to keep that ball rolling? Who wouldn’t?

Avaya (from the article): “[Avaya] questions whether Lync is resilient enough to provide 99.999% uptime for telephony services, long the industry standard among telecom carriers, says Vincenzo Signore, vice president of marketing.”
This is a dodge. The Lync Server software IS perfectly capable of 99.999% uptime. However, because Lync’s setup brings in other elements such as networking and gateways, Lync cannot be expected to muscle each of these into 99.999% uptime all day every day. It’s perfectly reasonable to want full uptime from VoIP hardware – and we take every step in deployment to assure it.
But let’s face it. Glitches happen. A line goes down now & then. This happens in ALL voice & video networking…even Cisco’s and Avaya’s.

What’s this attack really about? Market Share, and they’re losing it

My impression of Cisco and Avaya’s campaign? They’re scared, and they’re trying to discredit Lync before it eats into more of their market share. Lync is doing great–but rather than improve their own products to continue competition, they’re resorting to attack ads and mudslinging.
Problem is, when you sling mud, a lot of it ends up on you too.
Is Lync Server perfect? No. It’s still a younger piece of software, bound to have a few kinks and support issues. That’s okay. It gives us a HUGE assortment of communications tools in exchange.
I’ll end this post by paraphrasing a military saying: “If you’re catching flak, you’re over the target.”
Looks like Lync Server is definitely over the target!

google-site-verification: google37d0dc02207629cd.html

CUSP Configuration Example

Configure

This section describes the configuration of four call routing scenarios.

Scenario 1

Call Flow: IP Phone 1 -- CME -- SIP -- CUSP -- SIP -- CUCM -- IP Phone 2
Dial 408 202 2102 from IP Phone 1 registered to CallManager Express (CME) in order to reach IP Phone 2 registered to Cisco Unified Communications Manager (CUCM) via CUSP.
CME acts as a Public Switched Telephone Network (PSTN) in this scenario.The SIP INVITE comes to CUSP from CME.
             
             CLI
             trigger post-normalization sequence 1 policy 
             UC520-Four-to-Full condition TC-UC520-to-PSTN 

  1. GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 util.Normalization - 
    Entering Normalization(moduleRequest:post-normalize)
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 conditions.RegexCondition - 
    inNetwork='Net-PSTN'
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 conditions.RegexCondition - 
    IN_NETWORK: Net-PSTN
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 conditions.AbstractRegexCondition -
    pattern(^\QNet-From-UC520\E$), toMatch(Net-PSTN) returning false
    [REQUESTI.12] INFO  2013.02.27 19:15:59:254 util.Normalization -
    skipping post-normalize, due to either no trigger is configured or triggers 
    did not evaluate to true or is configured to by-pass
  2. The Server Group configuration is checked in order to find the element IP address, and the call is routed to the best route possible based on the Q-value and Weight configuration.

    CLI
    !
    server-group sip group SG-CUCM.ajeet.com Net-CUCM 
     element ip-address 14.128.64.191 5060 udp q-value 1 weight 50 
     element ip-address 14.128.64.192 5060 udp q-value 1.0 weight 100 
     failover-resp-codes 503
     lbtype global
     ping
     end server-group
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.12] INFO  2013.02.27 19:15:59:254 loadbalancer.LBFactory - 
    lbtype is 0(global)
    [REQUESTI.12] INFO  2013.02.27 19:15:59:254 loadbalancer.LBFactory - 
    Default lbtype is 3(call-id)
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 loadbalancer.LBBase - 
    Entering getServer()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 loadbalancer.LBBase - 
    Entering initializeDomains()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 servergroups.
    ServerGlobalStateWrapper - Net-CUCM:14.128.64.191:5060:1 
    numTries=2--->isServerAvailable(): true
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:254 servergroups.
    ServerGlobalStateWrapper - Net-CUCM:14.128.64.192:5060:1 
    numTries=2--->isServerAvailable(): true
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 servergroups.AbstractNextHop -
    Entering compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 servergroups.AbstractNextHop -
    Leaving compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 loadbalancer.LBBase - 
    Leaving initializeDomains()
    [REQUESTI.12] INFO  2013.02.27 19:15:59:255 loadbalancer.LBHashBased - 
    list of elements in order on which load balancing is done : 
    {reSgElementWeight=50, reSgElementSgName=SG-CUCM.ajeet.com, 
    reSgElementTransport=UDP, reSgElementQValue=1.0, reSgElementPort=5060, 
    reSgElementHost=14.128.64.191}, {reSgElementWeight=100, reSgElementSgName=
    SG-CUCM.ajeet.com, reSgElementTransport=UDP, reSgElementQValue=1.0, 
    reSgElementPort=5060, reSgElementHost=14.128.64.192},
     [REQUESTI.12] INFO  2013.02.27 19:15:59:255 loadbalancer.LBHashBased - 
    Hashing on F3E5F396-804811E2-9818EC62-1B7185EE@14.128.100.150
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 loadbalancer.DsHashAlgorithm - 
    Entering selectIndex()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 loadbalancer.DsHashAlgorithm - 
    Leaving selectIndex()
    [REQUESTI.12] INFO  2013.02.27 19:15:59:255 loadbalancer.LBHashBased - 
    Index selected 0
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 servergroups.AbstractNextHop - 
    Entering compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 servergroups.AbstractNextHop - 
    Leaving compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 loadbalancer.LBBase - 
    Server group SG-CUCM.ajeet.com selected {reSgElementWeight=50, 
    reSgElementSgName=SG-CUCM.ajeet.com, reSgElementTransport=UDP, 
    reSgElementQValue=1.0, reSgElementPort=5060, reSgElementHost=14.128.64.191}
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:255 loadbalancer.LBBase - 
    Leaving getServer()
  3. The Route Table (RT-CUCM) configuration is checked in order to find the Target Destination (SG-CUCM.ajeet.com).

    CLI
    !
    route table RT-CUCM 
     key 1111 target-destination SG-CUCM.ajeet.com Net-CUCM
     end route table
    !

    GUI




    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 routingtables.RoutingTable - 
    Entering lookup()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 routingtables.RoutingTable - 
    Looking up 1111 in table RT-CUCM with rule exact and modifiers=none
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 routingtables.RoutingTable - 
    Entering applyModifiers()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 routingtables.RoutingTable - 
    Leaving applyModifiers(), returning 1111
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 routingtables.RoutingTable - 
    Leaving lookup()
    [REQUESTI.12] INFO  2013.02.27 19:15:59:252 nrs.XCLPrefix - 
    NRS Routing decision is: RouteTable:RT-CUCM, RouteKey:1111, 
    TargetDestination:SG-CUCM.ajeet.com, Network:Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.12] INFO  2013.02.27 19:15:59:252 loadbalancer.LBFactory - 
    lbtype is 3(call-id)
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 nrs.XCLPrefix - 
    Stored NRSAlgResult=isFound=true, isFailure=false, Response=-1, 
    Routes=[Ruri: SG-CUCM.ajeet.com, Route: null, Network: Net-CUCM, 
    q-value=1.0radvance=[502, 503]], PolicyAdvance=null
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 nrs.NRSAlgResult -
    set policyAdvance as specified in route=RouteTable:RT-CUCM, RouteKey:1111, 
    TargetDestination:SG-CUCM.ajeet.com, Network:Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 nrs.NRSAlgResult - 
    no policyAdvance specified in route
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:253 nrs.NRSAlgResult - 
    set policyAdvance as specified in algorithm={lookupkeymodifier=
    [ RegexModifier: match= 4082022102, replace= 1111, ignore case= false], 
    lookuprule=0, lookupfield=45, lookuplenght=-1, lookuptable=RT-CUCM, 
    sequence=100, algorithm=1}
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:253 nrs.NRSAlgResult - 
    no policyAdvance specified in algorithm
  4. The Route Policy (Policy-to-CUCM) configuration is checked in order to find the Route Table (RT-CUCM) that matches.

    CLI
    !
    policy lookup Policy-to-CUCM
     sequence 100 RT-CUCM request-uri uri-component user
      modify-key 4082022102 1111
      rule exact
      end sequence
     end policy
    !

    GUI




    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.XCLPrefix - 
    Entering getKeyValue()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector - 
    getUriPart: URI - sip:4082022102@14.128.100.169:5060 part 6
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector - 
    Requested field 45
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector -
     Returning key 4082022102
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector -
     Retrieved Modifier  RegexModifier: match= 4082022102, replace= 
    1111, ignore case= false
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector - 
    Input field: 4082022102
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 nrs.FieldSelector -
     Modified field: 1111
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 nrs.XCLPrefix - 
    Leaving getKeyValue()
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:252 modules.XCLLookup -
     table=RT-CUCM, key=1111
    [REQUESTI.12] INFO  2013.02.27 19:15:59:252 modules.XCLLookup -
     table is RT-CUCM
  5. The Routing Trigger configuration is checked in order to find the Route Policy (Policy-to-CUCM) that matches based on the Trigger Condition (TC-from-PSTN).

    CLI
    trigger routing sequence 1 policy Policy-to-CUCM condition TC-from-PSTN 

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<Policy-to-CUCM> actionParameter<>
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:251 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
  6. The Trigger Condition (TC-from-PSTN) is matched.

    CLI
    !
    trigger condition TC-from-PSTN
     sequence 1 
      in-network ^\QNet-PSTN\E$
      end sequence
     end trigger condition
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.RegexCondition - 
    inNetwork='Net-PSTN'
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.RegexCondition - 
    IN_NETWORK: Net-PSTN
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.AbstractRegexCondition -
    pattern(^\QNet-PSTN\E$), toMatch(Net-PSTN) returning true
  7. The call is accepted to the network (Net-PSTN) configuration that matches.

    CLI
    sip listen Net-PSTN udp 14.128.100.169 5060
    
     !
    sip network Net-PSTN standard
      no non-invite-provisional
     allow-connections
     retransmit-count invite-client-transaction 3
      retransmit-count invite-server-transaction 5
     retransmit-count non-invite-client-transaction 3
      retransmit-timer T1 500
      retransmit-timer T2 4000
      retransmit-timer T4 5000
      retransmit-timer TU1 5000
      retransmit-timer TU2 32000
      retransmit-timer clientTn 64000
      retransmit-timer serverTn 64000
      tcp connection-setup-timeout 1000
      udp max-datagram-size 1500
      end network
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 
    conditions.RegexCondition - inNetwork='Net-PSTN'
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 
    conditions.RegexCondition - IN_NETWORK: Net-PSTN 
  8. [DsTransportListener-2] DEBUG 2013.02.27 19:15:59:245 DsSipLlApi.Wire - 
    Received UDP packet on 14.128.100.169:5060 ,source 14.128.100.150:57878
    INVITE sip:4082022102@14.128.100.169:5060 SIP/2.0
    Via: SIP/2.0/UDP 14.128.100.150:5060;branch=z9hG4bK21F2555
    Remote-Party-ID: "4082025555" <sip:4082025555@14.128.100.150>;
    party=calling;screen=yes;privacy=off
    From: "4082025555" <sip:4082025555@14.128.100.150>;tag=81D7430C-1D2
    To: <sip:4082022102@14.128.100.169>
    Date: Wed, 27 Feb 2013 19:15:59 GMT
    Call-ID: F3E5F396-804811E2-9818EC62-1B7185EE@14.128.100.150
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE:  1800
    Cisco-Guid: 4091813662-2152206818-2551376994-0460424686
    User-Agent: Cisco-SIPGateway/IOS-12.x
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER,
    SUBSCRIBE, NOTIFY, INFO, REGISTER
    CSeq: 101 INVITE
    Timestamp: 1361992559
    Contact: <sip:4082025555@14.128.100.150:5060>
    Expires: 180
    Allow-Events: telephone-event
    Max-Forwards: 69
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    Content-Length: 410
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 1007 629 IN IP4 14.128.100.150
    s=SIP Call
    c=IN IP4 14.128.100.150
    t=0 0
    m=audio 16930 RTP/AVP 18 101
    c=IN IP4 14.128.100.150
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    m=video 17954 RTP/AVP 97
    c=IN IP4 14.128.100.150
    b=TIAS:1000000
    a=rtpmap:97 H264/90000
    a=fmtp:97 profile-level-id=42801E;packetization-mode=0
    
    --- end of packet ---
  9. The Pre-Normalization sequence is executed.

    CLI
    trigger pre-normalization sequence 1 policy CUCM-Prefix-408
    condition TC-from-CUCM 
    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 util.Normalization - 
    Entering Normalization(moduleRequest:pre-normalize)
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.RegexCondition - 
    inNetwork='Net-PSTN'
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.RegexCondition - 
    IN_NETWORK: Net-PSTN
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:250 conditions.AbstractRegexCondition -
    pattern(^\QNet-CUCM\E$), toMatch(Net-PSTN) returning false
    [REQUESTI.12] INFO  2013.02.27 19:15:59:250 util.Normalization - 
    skipping pre-normalize, due to either no trigger is configured or triggers 
    did not evaluate to true or is configured to by-pass
  10. The SIP INVITE is sent to the selected element.
    [REQUESTI.12] DEBUG 2013.02.27 19:15:59:256 DsSipLlApi.Wire - 
    Sending UDP packet on 14.128.100.169:32771, destination 14.128.64.191:5060
    INVITE sip:4082022102@SG-CUCM.ajeet.com SIP/2.0
    Via: SIP/2.0/UDP 14.128.100.169:5061;branch=z9hG4bK.ToYJFeKMyfZGySv.gcLjg~~231
    Via: SIP/2.0/UDP 14.128.100.150:5060;branch=z9hG4bK21F2555
    Max-Forwards: 68
    To: <sip:4082022102@14.128.100.169>
    From: "4082025555" <sip:4082025555@14.128.100.150>;tag=81D7430C-1D2
    Contact: <sip:4082025555@14.128.100.150:5060>
    Expires: 180
    Remote-Party-ID: "4082025555" <sip:4082025555@14.128.100.150
    >;party=calling;screen=yes;privacy=off
    Call-ID: F3E5F396-804811E2-9818EC62-1B7185EE@14.128.100.150
    CSeq: 101 INVITE
    Content-Length: 410
    Date: Wed, 27 Feb 2013 19:15:59 GMT
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE: 1800
    Cisco-Guid: 4091813662-2152206818-2551376994-0460424686
    User-Agent: Cisco-SIPGateway/IOS-12.x
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER,
     SUBSCRIBE, NOTIFY, INFO, REGISTER
    Timestamp: 1361992559
    Allow-Events: telephone-event
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 1007 629 IN IP4 14.128.100.150
    s=SIP Call
    c=IN IP4 14.128.100.150
    t=0 0
    m=audio 16930 RTP/AVP 18 101
    c=IN IP4 14.128.100.150
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    m=video 17954 RTP/AVP 97
    c=IN IP4 14.128.100.150
    b=TIAS:1000000
    a=rtpmap:97 H264/90000
    a=fmtp:97 profile-level-id=42801E;packetization-mode=0

  11.  Enterprise Parameter > Clusterwide Domain Configuration > Cluster Fully Qualified Domain Name should be the same as the server group name.

Scenario 2

Call Flow: IP Phone 1 -- CUCM -- SIP -- CUSP -- SIP -- CME -- IP Phone 2
Dial 202 2222 from IP Phone 2. 408 should be prefixed with Pre-Normalization in order to reach IP Phone 1.
CME acts as PSTN in this scenario.
  1. The call is accepted on the network (Net-CUCM) configuration that matches.

    CLI
    sip listen Net-CUCM udp 14.128.100.169 5061 
    
    !
    sip network Net-CUCM standard 
     no non-invite-provisional 
     allow-connections
     retransmit-count invite-client-transaction 3 
     retransmit-count invite-server-transaction 5 
     retransmit-count non-invite-client-transaction 3 
     retransmit-timer T1 500 
     retransmit-timer T2 4000 
     retransmit-timer T4 5000 
     retransmit-timer TU1 5000 
     retransmit-timer TU2 32000 
     retransmit-timer clientTn 64000 
     retransmit-timer serverTn 64000 
     tcp connection-setup-timeout 1000 
     udp max-datagram-size 1500 
     end network
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:373 conditions.RegexCondition - 
    inNetwork='Net-CUCM'
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:373 conditions.RegexCondition - 
    IN_NETWORK: Net-CUCM
  2. The Route Table (RT-PSTN) configuration is checked in order to find the Target Destination (SG-PSTN).

    CLI
    !
    route table RT-PSTN 
     key 4082022222 target-destination SG-PSTN Net-PSTN
     end route table
    !

    GUI




    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 routingtables.RoutingTable -
    Entering lookup()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 routingtables.RoutingTable - 
    Looking up 4082022222 in table RT-PSTN with rule exact and modifiers=none
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 routingtables.RoutingTable - 
    Entering applyModifiers()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 routingtables.RoutingTable - 
    Leaving applyModifiers(), returning 4082022222
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 routingtables.RoutingTable - 
    Leaving lookup()
    [REQUESTI.12] INFO  2013.02.28 00:34:03:376 nrs.XCLPrefix - 
    NRS Routing decision is: RouteTable:RT-PSTN, RouteKey:4082022222, 
    TargetDestination:SG-PSTN, Network:Net-PSTN
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.12] INFO  2013.02.28 00:34:03:376 loadbalancer.LBFactory - 
    lbtype is 3(call-id)
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 nrs.XCLPrefix - 
    Stored NRSAlgResult=isFound=true, isFailure=false, Response=-1, 
    Routes=[Ruri: SG-PSTN, Route: null, Network: Net-PSTN, q-value=1.
    0radvance=[502, 503]], PolicyAdvance=null
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 nrs.NRSAlgResult - 
    set policyAdvance as specified in route=RouteTable:RT-PSTN, RouteKey:4082022222,
    TargetDestination:SG-PSTN, Network:Net-PSTN
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 nrs.NRSAlgResult - 
    no policyAdvance specified in route
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 nrs.NRSAlgResult - 
    set policyAdvance as specified in algorithm={lookuprule=0, lookupfield=45, 
    lookuplenght=-1, lookuptable=RT-PSTN, sequence=100, algorithm=1}
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:376 nrs.NRSAlgResult - 
    no policyAdvance specified in algorithm
  3. The Post-Normalization Sequence is executed.

    CLI
    trigger post-normalization sequence 1 policy UC520-Four-to-Full 
    condition TC-UC520-to-PSTN 
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 util.Normalization - 
    Entering Normalization(moduleRequest:post-normalize)
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 conditions.RegexCondition - 
    inNetwork='Net-CUCM'
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 conditions.RegexCondition - 
    IN_NETWORK: Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 conditions.AbstractRegexCondition - 
    pattern(^\QNet-From-UC520\E$), toMatch(Net-CUCM) returning false
    [REQUESTI.12] INFO  2013.02.28 00:34:03:378 util.Normalization - 
    skipping post-normalize, due to either no trigger is configured or triggers 
    did not evaluate to true or is configured to by-pass
  4. The Route Policy (Policy-to-PSTN) configuration is checked in order to find the Route Table (RT-PSTN) that matches.

    CLI
    !
    policy lookup Policy-to-PSTN
     sequence 100 RT-PSTN request-uri uri-component user
      rule exact
      end sequence
     end policy
    !

    GUI




    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 nrs.XCLPrefix - 
    Entering getKeyValue()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 nrs.FieldSelector - 
    getUriPart: URI - sip:4082022222@14.128.100.169:5061 part 6
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 nrs.FieldSelector - 
    Requested field 45
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 nrs.FieldSelector - 
    Returning key 4082022222
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 nrs.XCLPrefix - 
    Leaving getKeyValue()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 modules.XCLLookup - 
    table=RT-PSTN, key=4082022222
    [REQUESTI.12] INFO  2013.02.28 00:34:03:376 modules.XCLLookup - 
    table is RT-PSTN
  5. The Routing Trigger configuration is checked in order to discover the Route Policy (Policy-to-PSTN) that matches based on the Trigger Condition (TC-from-CUCM).

    CLI
    trigger routing sequence 2 policy Policy-to-PSTN condition TC-from-CUCM

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.RegexCondition - 
    inNetwork='Net-CUCM'
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.RegexCondition - 
    IN_NETWORK: Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.AbstractRegexCondition -
    pattern(^\QNet-CUCM\E$), toMatch(Net-CUCM) returning true
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<Policy-to-PSTN> actionParameter<>
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:375 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
  6. The Trigger Condition (TC-from-CUCM) is matched.

    CLI
    !
    trigger condition TC-from-CUCM
     sequence 1 
      in-network ^\QNet-CUCM\E$
      end sequence
     end trigger condition
    !

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.RegexCondition - 
    inNetwork='Net-CUCM'
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.RegexCondition - 
    IN_NETWORK: Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.AbstractRegexCondition - 
    pattern(^\QNet-CUCM\E$), toMatch(Net-CUCM) returning true
  7. The Pre-Normalization sequence is executed.

    CLI
    trigger pre-normalization sequence 1 policy CUCM-Prefix-408 
    condition TC-from-CUCM 

    !
    policy normalization CUCM-Prefix-408
     uri-component update request-uri user 2022222 4082022222
     end policy
    !

    GUI




    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:373 util.Normalization - 
    Entering Normalization(moduleRequest:pre-normalize
    )[REQUESTI.12] DEBUG 2013.02.28 00:34:03:373 conditions.RegexCondition - 
    inNetwork='Net-CUCM'
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:373 conditions.RegexCondition - 
    IN_NETWORK: Net-CUCM
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 conditions.AbstractRegexCondition - 
    pattern(^\QNet-CUCM\E$), toMatch(Net-CUCM) returning true
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<CUCM-Prefix-408> actionParameter<>
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 normalization.
    URIComponentNormalizationAlgorithm - normalizing request-uri
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 normalization.
    URIComponentNormalizationAlgorithm - 
    updating user/phone of the sip:2022222@14.128.100.169:5061 to 4082022222
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:374 util.Normalization -
     Leaving Normalization.normalize()
  8. The SIP INVITE comes to CUSP from CUCM.
    [DsTransportListener-0] DEBUG 2013.02.28 00:34:03:370 DsSipLlApi.Wire - 
    Received UDP packet on 14.128.100.169:5061 ,source 14.128.64.192:5060
    INVITE sip:2022222@14.128.100.169:5061 SIP/2.0
    Via: SIP/2.0/UDP 14.128.64.192:5060;branch=z9hG4bK18012ae333f
    From: "SJ Phone 1" <sip:2001@14.128.64.192>;
    tag=534264~c1b77ee1-4af9-4a41-aed3-3846cd699427-49616146
    To: <sip:2022222@14.128.100.169>
    Date: Thu, 28 Feb 2013 00:34:03 GMT
    Call-ID: 8be55500-12e1a5fb-ab-c040800e@14.128.64.192
    Supported: timer,resource-priority,replaces
    Min-SE:  1800
    User-Agent: Cisco-CUCM8.6
    Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE,
     REFER, SUBSCRIBE, NOTIFY
    CSeq: 101 INVITE
    Expires: 180
    Allow-Events: presence, kpml
    Supported: X-cisco-srtp-fallback,X-cisco-original-called
    Call-Info: <sip:14.128.64.192:5060>
    ;method="NOTIFY;Event=telephone-event;Duration=500"
    Cisco-Guid: 2347062528-0000065536-0000000107-3225452558
    Session-Expires:  1800
    P-Asserted-Identity: "SJ Phone 1" <sip:2001@14.128.64.192>
    Remote-Party-ID: "SJ Phone 1" <sip:2001@14.128.64.192>
    ;party=calling;screen=yes;privacy=off
    Contact: <sip:2001@14.128.64.192:5060>
    Max-Forwards: 70
    Content-Length: 0
    
    --- end of packet ---
  9. The Server Group (SG-PSTN) configuration is checked in order to find the element IP address, and the call is routed to the best route possible based on the Q-value and Weight configuration.

    CLI
    !
    server-group sip group SG-PSTN Net-PSTN 
     element ip-address 14.128.100.150 5060 udp q-value 1.0 weight 0 
     failover-resp-codes 503
     lbtype global
     ping
     end server-group
    ! 

    GUI


    DEBUG
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.12] INFO  2013.02.28 00:34:03:378 loadbalancer.LBFactory - 
    lbtype is 0(global)
    [REQUESTI.12] INFO  2013.02.28 00:34:03:378 loadbalancer.LBFactory - 
    Default lbtype is 3(call-id)
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 loadbalancer.LBBase - 
    Entering getServer()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 loadbalancer.LBBase - 
    Entering initializeDomains()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 servergroups.
    ServerGlobalStateWrapper - Net-PSTN:14.128.100.150:5060:1 numTries=
    2--->isServerAvailable(): true
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 loadbalancer.LBBase - 
    Leaving initializeDomains()
    [REQUESTI.12] INFO  2013.02.28 00:34:03:378 loadbalancer.LBHashBased - 
    list of elements in order on which load balancing is done : 
    {reSgElementWeight=0, reSgElementSgName=SG-PSTN, reSgElementTransport=UDP, 
    reSgElementQValue=1.0, reSgElementPort=5060, reSgElementHost=14.128.100.150}
    , [REQUESTI.12] DEBUG 2013.02.28 00:34:03:378 servergroups.AbstractNextHop - 
    Entering compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:379 servergroups.AbstractNextHop - 
    Leaving compareDomainNames()
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:379 loadbalancer.LBBase - 
    Server group SG-PSTN selected {reSgElementWeight=0, reSgElementSgName=SG-PSTN, 
    reSgElementTransport=UDP, reSgElementQValue=1.0, reSgElementPort=5060, 
    reSgElementHost=14.128.100.150}
    [REQUESTI.12] DEBUG 2013.02.28 00:34:03:379 loadbalancer.LBBase - 
    Leaving getServer()
  10. The SIP INVITE is sent to the selected element.
    [CT_CALLBACK.13] DEBUG 2013.02.28 00:34:06:260 DsSipLlApi.Wire - 
    Sending UDP packet on 14.128.100.169:32772, destination 14.128.64.192:
    5060SIP/2.0 200 OK
    Via: SIP/2.0/UDP 14.128.64.192:5060;branch=z9hG4bK18012ae333f
    To: <sip:2022222@14.128.100.169>;tag=82FA7450-F53
    From: "SJ Phone 1" <sip:2001@14.128.64.192>
    ;tag=534264~c1b77ee1-4af9-4a41-aed3-3846cd699427-49616146
    Contact: <sip:4082022222@14.128.100.150:5060>
    Require: timer
    Remote-Party-ID: <sip:4082022222@14.128.100.150>
    ;party=called;screen=no;privacy=off
    Call-ID: 8be55500-12e1a5fb-ab-c040800e@14.128.64.192
    CSeq: 101 INVITE
    Content-Length: 276
    Date: Thu, 28 Feb 2013 00:34:03 GMT
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, 
    SUBSCRIBE, NOTIFY, INFO, REGISTER
    Allow-Events: telephone-event
    Supported: replaces
    Supported: sdp-anat
    Supported: timer
    Server: Cisco-SIPGateway/IOS-12.x
    Session-Expires: 1800;refresher=uac
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 6810 2753 IN IP4 14.128.100.150
    s=SIP Call
    c=IN IP4 14.128.100.150
    t=0 0
    m=audio 16862 RTP/AVP 18 101
    c=IN IP4 14.128.100.150
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    a=ptime:20

Scenario 3

Call Flow: IP Phone 1 -- CME 1 -- SIP -- CUSP -- SIP --  CME 2 -- IP Phone 2
Dial 4001 or 4002 from IP Phone 1 in order to reach extensions on IP Phone 2.
CME 2 is UC520 in this scenario and CME 1 acts as PSTN.
  1. The SIP INVITE comes to CUSP from CME 1 (PSTN).
    [DsTransportListener-3] DEBUG 2013.02.28 05:28:57:360 DsSipLlApi.Wire - 
    Received UDP packet on 14.128.100.169:5062 ,source 14.128.100.150:56578
    INVITE sip:4002@14.128.100.169:5062 SIP/2.0
    Via: SIP/2.0/UDP 14.128.100.150:5060;branch=z9hG4bK2292567
    Remote-Party-ID: <sip:85224044444@14.128.100.150>
    ;party=calling;screen=no;privacy=off
    From: <sip:85224044444@14.128.100.150>;tag=84086F7C-10B8
    To: <sip:4002@14.128.100.169>
    Date: Thu, 28 Feb 2013 05:28:57 GMT
    Call-ID: 9559E957-809E11E2-9856EC62-1B7185EE@14.128.100.150
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE:  1800
    Cisco-Guid: 2446255913-2157842914-2555505762-0460424686
    User-Agent: Cisco-SIPGateway/IOS-12.x
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER,
     SUBSCRIBE, NOTIFY, INFO, REGISTER
    CSeq: 101 INVITE
    Max-Forwards: 70
    Timestamp: 1362029337
    Contact: <sip:85224044444@14.128.100.150:5060>
    Expires: 180
    Allow-Events: telephone-event
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    Content-Length: 276
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 3653 4016 IN IP4 14.128.100.150
    s=SIP Call
    c=IN IP4 14.128.100.150
    t=0 0
    m=audio 19202 RTP/AVP 18 101
    c=IN IP4 14.128.100.150
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    a=ptime:20
    
    --- end of packet ---
  2. The call is accepted on the network (Net-UC520) configuration that matches.

    CLI
    sip listen Net-UC520 udp 14.128.100.169 5062
    
     !
    sip network Net-From-UC520 standard 
     no non-invite-provisional 
     allow-connections
     retransmit-count invite-client-transaction 3 
     retransmit-count invite-server-transaction 5 
     retransmit-count non-invite-client-transaction 3
      retransmit-timer T1 500
      retransmit-timer T2 4000
      retransmit-timer T4 5000
      retransmit-timer TU1 5000
      retransmit-timer TU2 32000
      retransmit-timer clientTn 64000
      retransmit-timer serverTn 64000
      tcp connection-setup-timeout 1000
      udp max-datagram-size 1500
      end network
    !

    GUI


    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 conditions.RegexCondition - 
    inNetwork='Net-UC520'
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 conditions.RegexCondition - 
    IN_NETWORK: Net-UC520
  3. The Pre-Normalization sequence is executed.

    CLI
    trigger pre-normalization sequence 1 policy CUCM-Prefix-408 condition 
    TC-from-CUCM 
    GUI


    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 util.Normalization -
    Entering Normalization(moduleRequest:pre-normalize)
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 conditions.RegexCondition - 
    inNetwork='Net-UC520'
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 conditions.RegexCondition - 
    IN_NETWORK: Net-UC520
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:362 conditions.AbstractRegexCondition - 
    pattern(^\QNet-CUCM\E$), toMatch(Net-UC520) returning false
    [REQUESTI.10] INFO  2013.02.28 05:28:57:362 util.Normalization - 
    skipping pre-normalize, due to either no trigger is configured or triggers 
    did not evaluate to true or is configured to by-pass
  4. The Trigger Condition (TC-PSTN-to-UC520) is matched.

    CLI
    !
    trigger condition TC-PSTN-to-UC520
     sequence 1 
      in-network ^\QNet-UC520\E$
      end sequence
     end trigger condition
    !

    GUI


    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 conditions.RegexCondition - 
    inNetwork='Net-UC520'
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 conditions.RegexCondition - 
    IN_NETWORK: Net-UC520
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 conditions.AbstractRegexCondition -
    pattern(^\QNet-UC520\E$), toMatch(Net-UC520) returning true
  5. The Routing Trigger configuration is checked in order to find the Route Policy (Policy-UC520) that matches based on the Trigger Condition (TC-PSTN-to-UC520).

    CLI
    trigger routing sequence 3 policy Policy-UC520 condition TC-PSTN-to-UC520 
    GUI


    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<Policy-UC520> actionParameter<>
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
  6. The Route Policy (Policy-UC520) configuration is checked in order to find the Route Table (RT-UC520) that matches.

    CLI
    !
    policy lookup Policy-UC520
     sequence 100 RT-UC520 request-uri uri-component user
      modify-key 400[12] 2222
      rule exact
      end sequence
     end policy
    !

    GUI




    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.XCLPrefix - 
    Entering getKeyValue()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    getUriPart: URI - sip:4002@14.128.100.169:5062 part 6
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    Requested field 45
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    Returning key 4002
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    Retrieved Modifier  RegexModifier: match= 400[12], replace= 2222, 
    ignore case= false
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    Input field: 4002
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.FieldSelector - 
    Modified field: 2222
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 nrs.XCLPrefix - 
    Leaving getKeyValue()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:363 modules.XCLLookup - 
    table=RT-UC520, key=2222
    [REQUESTI.10] INFO  2013.02.28 05:28:57:364 modules.XCLLookup - 
    table is RT-UC520
  7. The Route Table (RT-UC520) configuration is checked in order to find the Target Destination (RG-UC520).

    CLI
    !
    route table RT-UC520 
     key 2222 group RG-UC520
     end route table
    !
    GUI




    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 routingtables.RoutingTable - 
    Entering lookup()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 routingtables.RoutingTable - 
    Looking up 2222 in table RT-UC520 with rule exact and modifiers=none
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 routingtables.RoutingTable - 
    Entering applyModifiers()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 routingtables.RoutingTable - 
    Leaving applyModifiers(), returning 2222
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 routingtables.RoutingTable - 
    Leaving lookup()
    [REQUESTI.10] INFO  2013.02.28 05:28:57:364 nrs.XCLPrefix - 
    NRS Routing decision is: RouteTable:RT-UC520, RouteKey:2222, RouteGroup:RG-UC520
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.10] INFO  2013.02.28 05:28:57:364 loadbalancer.LBFactory - 
    lbtype is 3(call-id)
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 nrs.XCLPrefix - 
    Stored NRSAlgResult=isFound=true, isFailure=false, Response=-1, 
    Routes=[Ruri: SG-UC520, Route: null, Network: Net-UC520, q-value=1.
    0radvance=[502, 503]], PolicyAdvance=null
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 nrs.NRSAlgResult - 
    set policyAdvance as specified in route=RouteTable:RT-UC520, RouteKey:2222, 
    RouteGroup:RG-UC520
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 nrs.NRSAlgResult - 
    no policyAdvance specified in route
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 nrs.NRSAlgResult - 
    set policyAdvance as specified in algorithm={lookupkeymodifier=
    [ RegexModifier: match= 400[12], replace= 2222, ignore case= false], 
    lookuprule=0, lookupfield=45, lookuplenght=-1, lookuptable=RT-UC520, 
    sequence=100, algorithm=1}
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:364 nrs.NRSAlgResult - 
    no policyAdvance specified in algorithm
  8. The Post-Normalization Sequence is executed.

    CLI
    trigger post-normalization sequence 1 policy UC520-Four-to-Full 
    condition TC-UC520-to-PSTN 
    GUI


    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 util.Normalization - 
    Entering Normalization(moduleRequest:post-normalize)
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 conditions.RegexCondition - 
    inNetwork='Net-UC520'
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 conditions.RegexCondition - 
    IN_NETWORK: Net-UC520
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 conditions.AbstractRegexCondition - 
    pattern(^\QNet-From-UC520\E$), toMatch(Net-UC520) returning false
    [REQUESTI.10] INFO  2013.02.28 05:28:57:365 util.Normalization - 
    skipping post-normalize, due to either no trigger is configured or 
    triggers did not evaluate to true or is configured to by-pass
  9. The Route Group configuration is checked in order to find the element IP address, and the call is routed to the best route possible based on the Q-value and Weight setting.

    CLI
    !
    route group RG-UC520 
     element target-destination SG-UC520 Net-UC520 q-value 1.0 
      failover-codes 502 - 503 
      weight 0 
      end element
     end route
    !

    !
    server-group sip group SG-UC520 Net-UC520 
     element ip-address 14.128.100.161 5060 udp q-value 1.0 weight 0 
     failover-resp-codes 503
     lbtype global
     ping
     end server-group
    !

    GUI






    DEBUG
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.10] INFO  2013.02.28 05:28:57:365 loadbalancer.LBFactory - 
    lbtype is 0(global)
    [REQUESTI.10] INFO  2013.02.28 05:28:57:365 loadbalancer.LBFactory - 
    Default lbtype is 3(call-id)
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 loadbalancer.LBBase - 
    Entering getServer()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 loadbalancer.LBBase - 
    Entering initializeDomains()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:365 servergroups.
    ServerGlobalStateWrapper - Net-UC520:14.128.100.161:5060:1 numTries=
    2--->isServerAvailable(): true
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:366 loadbalancer.LBBase - 
    Leaving initializeDomains()
    [REQUESTI.10] INFO  2013.02.28 05:28:57:366 loadbalancer.LBHashBased - 
    list of elements in order on which load balancing is done : 
    {reSgElementWeight=0, reSgElementSgName=SG-UC520, reSgElementTransport=UDP, 
    reSgElementQValue=1.0, reSgElementPort=5060, reSgElementHost=14.128.100.161},
     [REQUESTI.10] DEBUG 2013.02.28 05:28:57:366 servergroups.AbstractNextHop - 
    Entering compareDomainNames()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:366 servergroups.AbstractNextHop - 
    Leaving compareDomainNames()
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:366 loadbalancer.LBBase - 
    Server group SG-UC520 selected {reSgElementWeight=0, reSgElementSgName=SG-UC520, 
    reSgElementTransport=UDP, reSgElementQValue=1.0, reSgElementPort=5060,
    reSgElementHost=14.128.100.161}
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:366 loadbalancer.LBBase - 
    Leaving getServer()
  10. The SIP INVITE is sent to the selected element.
    [REQUESTI.10] DEBUG 2013.02.28 05:28:57:367 DsSipLlApi.Wire - 
    Sending UDP packet on 14.128.100.169:32773, destination 14.128.100.161:5060
    INVITE sip:4002@SG-UC520 SIP/2.0
    Via: SIP/2.0/UDP 
    14.128.100.169:5062;branch=z9hG4bK.ToYJFeKMyfZGySv.gcLjg~~237
    Via: SIP/2.0/UDP 14.128.100.150:5060;branch=z9hG4bK2292567
    Max-Forwards: 69
    To: <sip:4002@14.128.100.169>
    From: <sip:85224044444@14.128.100.150>;tag=84086F7C-10B8
    Contact: <sip:85224044444@14.128.100.150:5060>
    Expires: 180
    Remote-Party-ID: <sip:85224044444@14.128.100.150>
    ;party=calling;screen=no;privacy=off
    Call-ID: 9559E957-809E11E2-9856EC62-1B7185EE@14.128.100.150
    CSeq: 101 INVITE
    Content-Length: 276
    Date: Thu, 28 Feb 2013 05:28:57 GMT
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE: 1800
    Cisco-Guid: 2446255913-2157842914-2555505762-0460424686
    User-Agent: Cisco-SIPGateway/IOS-12.x
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER,
     SUBSCRIBE, NOTIFY, INFO, REGISTER
    Timestamp: 1362029337
    Allow-Events: telephone-event
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 3653 4016 IN IP4 14.128.100.150
    s=SIP Call
    c=IN IP4 14.128.100.150
    t=0 0
    m=audio 19202 RTP/AVP 18 101
    c=IN IP4 14.128.100.150
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    a=ptime:20

Scenario 4

Call Flow:IP Phone 1 -- CME 1 -- SIP -- CUSP -- SIP -- CME 2 -- IP Phone 2
Dial 4444 from IP Phone 2 which is changed to 415 240 4444 with Post-Normalization in order to reach IP Phone 1.
CME 2 is UC520 in this scenario and CME 1 acts as PSTN.
  1. The SIP INVITE comes to CUSP from CME 2 (UC520).
    [DsTransportListener-1] DEBUG 2013.02.28 07:06:57:220 DsSipLlApi.Wire - 
    Received UDP packet on 14.128.100.169:5063 ,source 14.128.100.161:59404
    INVITE sip:4444@14.128.100.169:5063 SIP/2.0
    Date: Thu, 28 Feb 2013 07:09:20 GMT
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, 
    SUBSCRIBE, NOTIFY, INFO, REGISTER
    From: <sip:4001@14.128.100.161>;tag=256D566C-22AC
    Allow-Events: telephone-event
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE:  1800
    Remote-Party-ID: <sip:4001@14.128.100.161>
    ;party=calling;screen=no;privacy=off
    Cisco-Guid: 2598740490-2158760418-2150671243-2598404062
    Timestamp: 1362035360
    Content-Length: 543
    User-Agent: Cisco-SIPGateway/IOS-12.x
    To: <sip:4444@14.128.100.169>
    Contact: <sip:4001@14.128.100.161:5060>
    Expires: 180
    Content-Type: multipart/mixed;boundary=uniqueBoundary
    Call-ID: 9B62C157-80AC11E2-8035A38B-9AE07FDE@14.128.100.161
    Via: SIP/2.0/UDP 14.128.100.161:5060;branch=z9hG4bK21E82
    CSeq: 101 INVITE
    Max-Forwards: 70
    Mime-Version: 1.0
    
    --uniqueBoundary
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 3418 2914 IN IP4 14.128.100.161
    s=SIP Call
    c=IN IP4 14.128.100.161
    t=0 0
    m=audio 17618 RTP/AVP 18 101
    c=IN IP4 14.128.100.161
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    a=ptime:20
    
    --uniqueBoundary
    Content-Type: application/gtd
    Content-Disposition: signal;handling=optional
    
    IAM,
    GCI,9ae5a20a80ac11e28030a38b9ae07fde
    
    --- end of packet ---
  2. The call is accepted on the network (Net-From-UC520) configuration that matches.

    CLI
    sip listen Net-From-UC520 udp 14.128.100.169 5063
     !
    sip network Net-From-UC520 standard
      no non-invite-provisional
      allow-connections
     retransmit-count invite-client-transaction 3
      retransmit-count invite-server-transaction 5
      retransmit-count non-invite-client-transaction 3
      retransmit-timer T1 500 
     retransmit-timer T2 4000
      retransmit-timer T4 5000
      retransmit-timer TU1 5000
      retransmit-timer TU2 32000
      retransmit-timer clientTn 64000
      retransmit-timer serverTn 64000
      tcp connection-setup-timeout 1000
      udp max-datagram-size 1500
      end network
    !

    GUI


    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    inNetwork='Net-From-UC520'
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    IN_NETWORK: Net-From-UC520
  3. The Pre-Normalization sequence is executed.

    CLI
    trigger pre-normalization sequence 1 policy CUCM-Prefix-408 condition 
    TC-from-CUCM 
    GUI


    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 util.Normalization - 
    Entering Normalization(moduleRequest:pre-normalize)
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    inNetwork='Net-From-UC520'
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    IN_NETWORK: Net-From-UC520
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.AbstractRegexCondition - 
    pattern(^\QNet-CUCM\E$), toMatch(Net-From-UC520) returning false
    [REQUESTI.5] INFO  2013.02.28 07:06:57:229 util.Normalization - 
    skipping pre-normalize, due to either no trigger is configured or triggers 
    did not evaluate to true or is configured to by-pass
  4. The Trigger Condition (TC-UC520-to-PSTN) is matched.

    CLI
    !
    trigger condition TC-UC520-to-PSTN
     sequence 1
       in-network ^\QNet-From-UC520\E$
     end sequence
     end trigger condition
    !

    GUI


    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    inNetwork='Net-From-UC520'
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:229 conditions.RegexCondition - 
    IN_NETWORK: Net-From-UC520
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 conditions.AbstractRegexCondition - 
    pattern(^\QNet-From-UC520\E$), toMatch(Net-From-UC520) returning true
  5. The Routing Trigger configuration is checked in order to find the Route Policy (Policy-UC520-to-PSTN) that matches based on the Trigger Condition (TC-UC520-to-PSTN).

    CLI
    trigger routing sequence 4 policy Policy-UC520-to-PSTN condition 
    TC-UC520-to-PSTN 
    GUI


    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<Policy-UC520-to-PSTN> actionParameter<>
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
  6. The Route Policy (Policy-UC520-to-PSTN) configuration is checked in order to find the Route Table (RT-UC520-PSTN) that matches.

    CLI
    !
    policy lookup Policy-UC520-to-PSTN
     sequence 100 RT-UC520-PSTN request-uri uri-component user
      modify-key 4444 3333
      rule exact
      end sequence
     end policy
    ! 

    GUI




    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.XCLPrefix - 
    Entering getKeyValue()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    getUriPart: URI - sip:4444@14.128.100.169:5063 part 6
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    Requested field 45
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    Returning key 4444
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    Retrieved Modifier  RegexModifier: match= 4444, replace= 3333, 
    ignore case= false
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    Input field: 4444
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.FieldSelector - 
    Modified field: 3333
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 nrs.XCLPrefix - 
    Leaving getKeyValue()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 modules.XCLLookup - 
    table=RT-UC520-PSTN, key=3333
    [REQUESTI.5] INFO  2013.02.28 07:06:57:230 modules.XCLLookup - 
    table is RT-UC520-PSTN
  7. The Route Table (RT-UC520-PSTN) configuration is checked in order to find the Target Destination (RG-UC520).

    CLI
    !
    route table RT-UC520-PSTN
      key 3333 group RG-UC520-to-PSTN
     end route table
    !
    GUI




    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:230 routingtables.RoutingTable - 
    Entering lookup()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 routingtables.RoutingTable - 
    Looking up 3333 in table RT-UC520-PSTN with rule exact and modifiers=none
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 routingtables.RoutingTable - 
    Entering applyModifiers()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 routingtables.RoutingTable - 
    Leaving applyModifiers(), returning 3333
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 routingtables.RoutingTable - 
    Leaving lookup()
    [REQUESTI.5] INFO  2013.02.28 07:06:57:231 nrs.XCLPrefix - 
    NRS Routing decision is: RouteTable:RT-UC520-PSTN, RouteKey:3333, 
    RouteGroup:RG-UC520-to-PSTN
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 loadbalancer.LBFactory - 
    Entering createLoadBalancer()
    [REQUESTI.5] INFO  2013.02.28 07:06:57:231 loadbalancer.LBFactory - 
    lbtype is 3(call-id)
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 loadbalancer.LBFactory - 
    Leaving createLoadBalancer()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.XCLPrefix - 
    Stored NRSAlgResult=isFound=true, isFailure=false, Response=-1, 
    Routes=[Ruri: 14.128.100.150, Route: null, Network: Net-From-UC520, 
    q-value=1.0radvance=[502, 503]], PolicyAdvance=null
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSAlgResult - 
    set policyAdvance as specified in route=RouteTable:RT-UC520-PSTN, 
    RouteKey:3333, RouteGroup:RG-UC520-to-PSTN
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSAlgResult - 
    no policyAdvance specified in route
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSAlgResult - 
    set policyAdvance as specified in algorithm={lookupkeymodifier=
    [ RegexModifier: match= 4444, replace= 3333, ignore case= false], 
    lookuprule=0, lookupfield=45, lookuplenght=-1, lookuptable=RT-UC520-PSTN, 
    sequence=100, algorithm=1}
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSAlgResult - 
    no policyAdvance specified in algorithm
  8. The Post-Normalization sequence is executed.

    CLI
    trigger post-normalization sequence 1 policy UC520-Four-to-Full 
    condition TC-UC520-to-PSTN 
    !
    policy normalization UC520-Four-to-Full
     uri-component update request-uri user 4444 85224044444
     end policy
    !

    GUI




    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 util.Normalization - 
    Entering Normalization(moduleRequest:post-normalize)
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 conditions.RegexCondition - 
    inNetwork='Net-From-UC520'
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 conditions.RegexCondition - 
    IN_NETWORK: Net-From-UC520
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 conditions.AbstractRegexCondition - 
    pattern(^\QNet-From-UC520\E$), toMatch(Net-From-UC520) returning true
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 triggers.ModuleTrigger - 
    ModuleTrigger.eval() action<UC520-Four-to-Full> actionParameter<>
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 triggers.ModuleTrigger - 
    ModuleTrigger.eval() got the policy, executing it ...
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 normalization.URIComponentNormalizationAlgorithm - 
    normalizing request-uri
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 normalization.URIComponentNormalizationAlgorithm - 
    updating user/phone of the sip:4444@14.128.100.150 to 85224044444
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 util.Normalization - 
    Leaving Normalization.normalize()
  9. The Route Group configuration is checked in order to find the element IP address, and the call is routed to the best route possible based on the Q-value and Weight setting.

    CLI
    !
    route group RG-UC520-to-PSTN 
     element target-destination 14.128.100.150 Net-From-UC520 q-value 1.0 
      failover-codes 502 - 503
       weight 0 
      end element
     end route
    !

    GUI




    DEBUG
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 loadbalancer.LBBase - 
    Entering getServer()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 loadbalancer.LBBase - 
    Entering initializeDomains()
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSRoutes - 
    routes before applying time policies: [Ruri: 14.128.100.150, 
    Route: null, Network: Net-From-UC520, q-value=1.0radvance=[502, 503]]
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 nrs.NRSRoutes - 
    routes after applying time policies: [Ruri: 14.128.100.150, Route: 
    null, Network: Net-From-UC520, q-value=1.0radvance=[502, 503]]
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:231 loadbalancer.LBBase - 
    Leaving initializeDomains()
    [REQUESTI.5] INFO  2013.02.28 07:06:57:231 loadbalancer.LBHashBased - 
    list of elements in order on which load balancing is done : Ruri: 
    14.128.100.150, Route: null, Network: Net-From-UC520, q-value=
    1.0radvance=[502, 503],
     [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 loadbalancer.LBBase - 
    Server group route-sg selected Ruri: 14.128.100.150, Route: null, 
    Network: Net-From-UC520, q-value=1.0radvance=[502, 503]
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:232 loadbalancer.LBBase - 
    Leaving getServer()
  10. The SIP INVITE is sent to the selected element.
    [REQUESTI.5] DEBUG 2013.02.28 07:06:57:233 DsSipLlApi.Wire - 
    Sending UDP packet on 14.128.100.169:32770, destination 14.128.100.150:5060
    INVITE sip:85224044444@14.128.100.150 SIP/2.0
    Via: SIP/2.0/UDP 
    14.128.100.169:5063;branch=z9hG4bK.ToYJFeKMyfZGySv.gcLjg~~238
    Via: SIP/2.0/UDP 14.128.100.161:5060;branch=z9hG4bK21E82
    Max-Forwards: 69
    To: <sip:4444@14.128.100.169>
    From: <sip:4001@14.128.100.161>;tag=256D566C-22AC
    Contact: <sip:4001@14.128.100.161:5060>
    Expires: 180
    Remote-Party-ID: <sip:4001@14.128.100.161>
    ;party=calling;screen=no;privacy=off
    Call-ID: 9B62C157-80AC11E2-8035A38B-9AE07FDE@14.128.100.161
    CSeq: 101 INVITE
    Content-Length: 543
    Date: Thu, 28 Feb 2013 07:09:20 GMT
    Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRACK, UPDATE, REFER,
     SUBSCRIBE, NOTIFY, INFO, REGISTER
    Allow-Events: telephone-event
    Supported: 100rel,timer,resource-priority,replaces,sdp-anat
    Min-SE: 1800
    Cisco-Guid: 2598740490-2158760418-2150671243-2598404062
    Timestamp: 1362035360
    User-Agent: Cisco-SIPGateway/IOS-12.x
    Content-Type: multipart/mixed;boundary=uniqueBoundary
    MIME-Version: 1.0
    
    --uniqueBoundary
    Content-Type: application/sdp
    Content-Disposition: session;handling=required
    
    v=0
    o=CiscoSystemsSIP-GW-UserAgent 3418 2914 IN IP4 14.128.100.161
    s=SIP Call
    c=IN IP4 14.128.100.161
    t=0 0
    m=audio 17618 RTP/AVP 18 101
    c=IN IP4 14.128.100.161
    a=rtpmap:18 G729/8000
    a=fmtp:18 annexb=no
    a=rtpmap:101 telephone-event/8000
    a=fmtp:101 0-16
    a=ptime:20
    
    --uniqueBoundary
    Content-Type: application/gtd
    Content-Disposition: signal;handling=optional
    
    IAM,
    GCI,9ae5a20a80ac11e28030a38b9ae07fde

Configuration for All Four Scenarios

Here is the complete CUSP configuration for all four call scenarios described in this document:
ajeesing-cusp-8.5.3(cusp)# show configuration active verbose
 Building CUSP configuration...
!
server-group sip global-load-balance call-id
server-group sip retry-after 0
server-group sip element-retries udp 2 
server-group sip element-retries tls 1 
server-group sip element-retries tcp 1
sip dns-srv
 enable 
 no naptr 
 end dns
!
no sip header-compaction 
!
sip logging 
sip max-forwards 70
sip network Net-CUCM standard 
 no non-invite-provisional 
 allow-connections
 retransmit-count invite-client-transaction 3
  retransmit-count invite-server-transaction 5 
 retransmit-count non-invite-client-transaction 3 
 retransmit-timer T1 500 
 retransmit-timer T2 4000 
 retransmit-timer T4 5000 
 retransmit-timer TU1 5000 
 retransmit-timer TU2 32000 
 retransmit-timer clientTn 64000 
 retransmit-timer serverTn 64000 
 tcp connection-setup-timeout 1000
  udp max-datagram-size 1500
  end network
!
sip network Net-From-UC520 standard 
 no non-invite-provisional 
 allow-connections
 retransmit-count invite-client-transaction 3 
 retransmit-count invite-server-transaction 5 
 retransmit-count non-invite-client-transaction 3 
 retransmit-timer T1 500 
 retransmit-timer T2 4000 
 retransmit-timer T4 5000 
 retransmit-timer TU1 5000 
 retransmit-timer TU2 32000 
 retransmit-timer clientTn 64000 
 retransmit-timer serverTn 64000 
 tcp connection-setup-timeout 1000 
 udp max-datagram-size 1500 
 end network
!
sip network Net-PSTN standard 
 no non-invite-provisional 
 allow-connections
 retransmit-count invite-client-transaction 3 
 retransmit-count invite-server-transaction 5
  retransmit-count non-invite-client-transaction 3 
 retransmit-timer T1 500 
 retransmit-timer T2 4000 
 retransmit-timer T4 5000 
 retransmit-timer TU1 5000 
 retransmit-timer TU2 32000 
 retransmit-timer clientTn 64000 
 retransmit-timer serverTn 64000 
 tcp connection-setup-timeout 1000 
 udp max-datagram-size 1500 
 end network
!
sip network Net-UC520 standard 
 no non-invite-provisional 
 allow-connections
 retransmit-count invite-client-transaction 3 
 retransmit-count invite-server-transaction 5 
 retransmit-count non-invite-client-transaction 3 
 retransmit-timer T1 500 
 retransmit-timer T2 4000 
 retransmit-timer T4 5000 
 retransmit-timer TU1 5000 
 retransmit-timer TU2 32000 
 retransmit-timer clientTn 64000 
 retransmit-timer serverTn 64000 
 tcp connection-setup-timeout 1000 
 udp max-datagram-size 1500 
 end network
!
sip overload reject retry-after 0 
sip peg-counting 2 86400 
sip privacy service 
sip queue message 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 20 
 end queue
!
sip queue radius 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 20 
 end queue
!
sip queue request 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 20 
 end queue
!
sip queue response 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 20 
 end queue
!
sip queue st-callback 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 10 
 end queue
!
sip queue timer 
 drop-policy none 
 low-threshold 80 
 size 2500 
 thread-count 8 
 end queue
!
sip queue xcl 
 drop-policy head 
 low-threshold 80 
 size 2000 
 thread-count 2 
 end queue
!
route recursion 
!
sip tcp connection-timeout 30 
sip tcp max-connections 256 
!
no sip tls 
!
trigger condition TC-PSTN-to-UC520
 sequence 1 
  in-network ^\QNet-UC520\E$
  end sequence
 sequence 2 
  in-network ^\QNet-CUCM\E$
  end sequence
 end trigger condition
!
trigger condition TC-UC520-to-PSTN
 sequence 1 
  in-network ^\QNet-From-UC520\E$
  end sequence
 end trigger condition
!
trigger condition TC-from-CUCM
 sequence 1 
  in-network ^\QNet-CUCM\E$
  end sequence
 end trigger condition
!
trigger condition TC-from-PSTN
 sequence 1 
  in-network ^\QNet-PSTN\E$
  end sequence
 sequence 2 
  in-network ^\QNet-CUCM\E$
  message request
  end sequence
 end trigger condition
!
trigger condition mid-dialog
 sequence 1 
  mid-dialog 
  end sequence
 end trigger condition
!
accounting
 no enable 
 no client-side 
 no server-side 
 end accounting
!
server-group sip group SG-CUCM.ajeet.com Net-CUCM 
 element ip-address 14.128.64.191 5060 udp q-value 1 weight 50
  element ip-address 14.128.64.192 5060 udp q-value 1.0 weight 100
  failover-resp-codes 503
 lbtype global
 ping
 end server-group
!
server-group sip group SG-PSTN Net-PSTN 
 element ip-address 14.128.100.150 5060 udp q-value 1.0 weight 0
  failover-resp-codes 503
 lbtype global
 ping
 end server-group
!
server-group sip group SG-UC520 Net-UC520 
 element ip-address 14.128.100.161 5060 udp q-value 1.0 weight 0 
 failover-resp-codes 503
 lbtype global
 ping
 end server-group
!
route group RG-UC520 
 element target-destination SG-UC520 Net-UC520 q-value 1.0 
  failover-codes 502 - 503 
  weight 0 
  end element
 end route
!
route group RG-UC520-to-PSTN 
 element target-destination 14.128.100.150 Net-From-UC520 q-value 1.0 
  failover-codes 502 - 503 
  weight 0 
  end element
 end route
!
route table RT-CUCM 
 key 1111 target-destination SG-CUCM.ajeet.com Net-CUCM
 end route table
!
route table RT-PSTN 
 key 4082022222 target-destination SG-PSTN Net-PSTN
 end route table
!
route table RT-UC520 
 key 2222 group RG-UC520
 end route table
!
route table RT-UC520-PSTN 
 key 3333 group RG-UC520-to-PSTN
 end route table
!
policy normalization CUCM-Prefix-408
 uri-component update request-uri user 2022222 4082022222
 end policy
!
policy normalization UC520-Four-to-Full
 uri-component update request-uri user 4444 85224044444
 end policy
!
policy lookup Policy-UC520
 sequence 100 RT-UC520 request-uri uri-component user
  modify-key 400[12] 2222
  rule exact
  end sequence
 end policy
!
policy lookup Policy-UC520-to-PSTN
 sequence 100 RT-UC520-PSTN request-uri uri-component user
  modify-key 4444 3333
  rule exact
  end sequence
 end policy
!
policy lookup Policy-to-CUCM
 sequence 100 RT-CUCM request-uri uri-component user
  modify-key 4082022102 1111
  rule exact
  end sequence
 end policy
!
policy lookup Policy-to-PSTN
 sequence 100 RT-PSTN request-uri uri-component user
  rule exact
  end sequence
 end policy
!
trigger routing sequence 1 policy Policy-to-CUCM condition 
TC-from-PSTN 
trigger routing sequence 2 policy Policy-to-PSTN condition 
TC-from-CUCM 
trigger routing sequence 3 policy Policy-UC520 condition 
TC-PSTN-to-UC520 
trigger routing sequence 4 policy Policy-UC520-to-PSTN condition 
TC-UC520-to-PSTN 
trigger pre-normalization sequence 1 policy CUCM-Prefix-408 
condition TC-from-CUCM 
trigger post-normalization sequence 1 policy UC520-Four-to-Full
condition TC-UC520-to-PSTN 
!
server-group sip ping-options Net-CUCM 14.128.100.169 4001 
 method OPTIONS
 ping-type proactive 2500
 timeout 2000
 end ping
!
server-group sip global-ping 
sip cac session-timeout 720 
sip cac Net-CUCM 14.128.64.191 5060 udp limit -1 
sip cac Net-CUCM 14.128.64.192 5060 udp limit -1 
sip cac Net-PSTN 14.128.100.150 5060 udp limit -1 
sip cac Net-UC520 14.128.100.161 5060 udp limit -1 
!
no sip cac 
!
sip listen Net-CUCM udp 14.128.100.169 5061 
sip listen Net-From-UC520 udp 14.128.100.169 5063 
sip listen Net-PSTN udp 14.128.100.169 5060 
sip listen Net-UC520 udp 14.128.100.169 5062 
!
call-rate-limit 200
!
end
ajeesing-cusp-8.5.3(cusp)# 

CUCM to CUBE Integration Configuration Example

Components Used

The information in this document is based on the fact that any number of CUCM servers, any Cisco Integrated Services Router (ISR), ISR Generation 2 (G2), or Cisco Aggregation Services Router (ASR) can be a CUBE. No Digital Signal Processors (DSPs) are required for basic CUBE operation.
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.

Configure

The CUBE-Side of the CUCM-to-CUBE Integration

When you first set up a CUBE, you must enable the router in order to route calls like a CUBE. This image shows a basic Voice Service VoIP configuration on a CUBE:





Here are some important points about this configuration:


  • The first line of the configuration is mode border-element, which enables CUBE on a router. Some devices do not have this configuration when they operate as a CUBE.
  • Allow-connections sip to sip enables the CUBE to accept Session Initiation Protocol (SIP) calls and route them as SIP calls. There are options for H323 as well.
  • Fax protocol t38 is a default configuration for ISR G2 routers. It is not needed for CUBE configuration.
  • Early-offer forced allows CUBE to route calls in a Delayed Offer to Early Offer scenario. Almost all of the providers require Early Offer SIP calls. It is actually recommended to send Early Offer from CUCM in order to avoid early media cut-through issues.
  • Midcall-signaling passthru is only for SIP-to-SIP calls. It is required for some supplementary services to work.
  • G729 annexb-all is optimal in cases where CUBE negotiates with providers who do not follow the RFC format for G729r8 and G729br8 codecs.

Dial-Peer Configuration on CUBE

Dial-peers on CUBE are like other dial-peers on Cisco IOS gateways. The difference is that the calls route from one VoIP dial-peer to another VoIP dial-peer.
Notice that there are two dial-peers here: incoming and outgoing.BE always matches two dial-peers. Incoming dial-peers are from the CUBE perspective, either from the CUCM or from the SIP provider. Outgoing dial-peers are sent towards the CUCM or to the SIP Provider.
ICisco recommends that you perform most of the digit manipulation on CUCM through Significant Digits, External Phone Number Mask, and Translations.
Digit manipulation can be performed on CUBE, the same way it is performed on Cisco IOS Voice Gateways. 

Basic IP Addressing

IP addressing on CUBE is accomplished the same way as on other Cisco IOS devices, but it uses the routing table in order to determine from which interface the CUBE sources SIP traffic. The show ip route A.B.C.D command provides information about the interface the CUBE uses in order to source SIP traffic. This is important when calls are sent to CUCM and when calls are sent to an SIP provider. Static routes might be needed in order to make this work.
In some cases, you might have to bind SIP to a particular interface, such as a loopback interface on the CUBE. SIP binding can cause side effects, such as when the CUBE does not listen for SIP traffic on a particular interface. Cisco recommends that you not use bindings and let the routing table decide, but this is not always possible. You can apply SIP bindings under Voice Service VoIP > SIP, or on individual dial-peers. 

Voice-Class Codecs on CUBE

Voice-class codecs are used for CUBE in order to offer multiple codecs when calls use a particular VoIP dial-peer. This is the same as it was on a Cisco IOS Voice Gateway, but when it is a CUBE, codecs are filtered from one VoIP call leg to the other. It uses codecs that are available on both the incoming dial-peer and the outgoing dial-peer. The codecs that match both are sent offers. When CUBE receives a SIP message with Session Description Protocol (SDP), it also matches this against the voice-class codecs. This allows CUBE to filter codecs based on what is received from the SIP message with SDP, the inbound dial-peer, and the outbound dial-peer. The other SIP User Agent (UA) then responds to the codecs offered.
The voice-class codec in the previous image contains three codecs, g729r8g711ulaw, or g711alaw. The image shows them in the order in which the Cisco IOS gateway prioritizes how the codecs are offered to the far end.  Voice-class codecs are applied to dial-peers.

Cisco IOS Toll-Fraud Application

The toll-fraud application in Cisco IOS is useful because it can prevent unwanted SIP access, but without proper planning, it can cause some issues with normal operation. The toll-fraud application in Cisco IOS allows the router to specify the devices that can communicate with it to make calls (H323 or SIP). IP addresses that are used as session targets on dial-peers are automatically allowed to send calls to the Cisco IOS Voice Gateway without extra configuration. This usually includes all of the SIP Providers and CUCM servers in the environment, but not always. If it does not, these must be manually added to the CUBE. Only the signaling addresses must be added, not the media addresses.

The CUCM-Side of the CUCM-to-CUBE Integration

  1. In order to add the trunk to the CUCM configuration, navigate to this location:


  2. Select Add New and proceed to set up the SIP trunk as shown here:


  3. Within the trunk configuration page, remember to select the proper device pool that allows calls inbound to the particular CUCM server that accepts calls.




    Once the trunk is created, ensure that the route patterns access it correctly either through a SIP Route Pattern or a Route List / Route Group setup.

    The Redirecting Diversion Header can be ticked for inbound or outbound calls.

    When External Numbers are forwarded into the VoIP Network, SIP invite messages come with relayed diversion information into CUCM. It shows the originating calling party. For example, if a call flow is integrated with Cisco Unity Connection (UC) and goes into voicemail, UC uses the initial diversion source (external forwarded number) as the destination mailbox. So it is possible that they could get the default opening greeting instead of the subscribers mailbox as expected. It depends on the call flow and requirements of your topology whether this is going to be required for the configuration.


  4. The SIP profile for Early Offer is often needed when you connect the CUBE to a provider. If the trunk connects to another Cisco device, then you might not want to select the Media Transport Protocol (MTP) insert, based on the far-end devices. This image shows the SIP profile location and where to select the box for Early Offer.







    Early Offer often helps to resolve early media issues that arise when you integrate the CUCM server and CUBE to other third-party products. It is also recommended within the Solution Reference Network Design (SRND).

    If the profile is going to be modified, it is always best to create a new profile to use instead of the default profile.

    Note: This checkbox is used when end users do not want to have an MTP used on every call.
  5. It might be necessary to change from TCP/UDP for the protocol within the SIP security profile based on the call flow. In order to make this change, navigate to SIP Trunk Security Profiles > Non Secure SIP Trunk Profile:







    Calls will fail, and CUBE/CUCM traces are required in order to understand what happens during the failure, but this feature can be modified in order to confirm that it is not the cause of the problem. However, once this is modified, you must reset/restart the trunk in order to make the change occur.
  6. In some circumstances, the External Phone Mask on the phone configuration might need to be added in order for the call to proceed, because some Telcos do not allow the call to proceed without the expected mask. In order to make this modification, go to the Directory Number (DN) configuration page of the calling party phone, make the change necessary for the box, and reset/restart the phone after the changes are saved.

My CCIE#53599

My journey started in 2013 when I decided for a CCIE in voice. One never really knows what they are in for when starting down this r...