<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6109039736247726348</id><updated>2011-07-08T05:53:40.152-05:00</updated><title type='text'>Marginal notes</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dblednov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6109039736247726348/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dblednov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Dmitri</name><uri>http://www.blogger.com/profile/06086052901184976976</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6109039736247726348.post-1860940677644735405</id><published>2010-02-22T13:06:00.000-06:00</published><updated>2010-02-22T13:13:11.864-06:00</updated><title type='text'>Cisco-7960 &amp; GXE-5028 Interoperability</title><content type='html'>&lt;style type="text/css"&gt;&lt;!-- .style1 {  font-family: "Courier New", Courier, monospace;  font-size: x-small; } .style3 {  font-size: large;  font-weight: bold; } .style4 {  color: #FF0000;  font-weight: bold; } --&gt;&lt;/style&gt;&lt;br /&gt;A lot  of people complain about interoperability problem between the Cisco 7940/7960  VOIP phone and the Granstream GXE-5024/5028 SIP PBX. Looks like Cisco is unable  (for some magical reason) to register on GXE. I have used Cisco phones for years  and recently bought the GXE-5028 with a bunch of GXP-2000 phones. So now we are  able to build a “testing lab:”&lt;br /&gt;&lt;ol&gt;&lt;li&gt;GXE-5028  (firmware 1.0.1.54) is a SIP server with IP addr 192.168.2.1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cisco7960  (firmware P0S3-08-11-00) is a SIP client/terminal (ext #118) IP addr  192.168.2.54&lt;br /&gt;&lt;/li&gt;&lt;li&gt;GXE-2000 (firmware 1.2.2.26) is an another SIP  client/terminal (ext #118 also) IP addr 192.168.2.109&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Wireshark  (&lt;a href="http://www.wireshark.org/"&gt;www.wireshark.org&lt;/a&gt;) is being used for traffic capturing/analyzing.&lt;br /&gt;All devices utilizing UDP SIP.&lt;br /&gt;&lt;p&gt;Let's  see how Cisco is trying to communicate with GXE and where the  misunderstanding begins over there.&lt;br /&gt;&lt;br /&gt;The  first packet a decent SIP client has to send to a SIP server  is a REGISTER request. Cisco is a decent device for sure, and sends a UDP  packet from random UDP port to predefined 5060 port on GXE, here is the packet  (with some important spots highlighted):&lt;/p&gt;&lt;pre class="style1"&gt;Frame 1 (540 bytes on wire, 540 bytes  captured)&lt;br /&gt;Ethernet II, Src: Cisco_18:72:09  (00:1b:0c:18:72:09), Dst: Grandstr_17:e6:b7 (00:0b:82:17:e6:b7)&lt;br /&gt;Internet Protocol, Src: 192.168.2.54  (192.168.2.54), Dst: 192.168.2.1 (192.168.2.1)&lt;br /&gt;User Datagram Protocol, &lt;span style="background-color: rgb(255, 0, 0);"&gt;Src Port: 50485 (50485)&lt;/span&gt;, Dst Port:  sip (5060)&lt;br /&gt;Session Initiation Protocol&lt;br /&gt;   &lt;span style="background-color: rgb(0, 255, 0);"&gt;Request-Line: REGISTER sip:192.168.2.1 SIP/2.0&lt;br /&gt;        Method: REGISTER&lt;/span&gt;&lt;br /&gt;        [Resent Packet: False]&lt;br /&gt;   Message Header&lt;br /&gt;        &lt;span style="background-color: rgb(255, 255, 0);"&gt;Via: SIP/2.0/UDP  192.168.2.54:5060;branch=z9hG4bK20f9ce38&lt;/span&gt;&lt;br /&gt;           Transport: UDP&lt;br /&gt;           Sent-by Address: 192.168.2.54&lt;br /&gt;           &lt;span style="background-color: rgb(255, 255, 0);"&gt;Sent-by port: 5060&lt;/span&gt;&lt;br /&gt;           Branch: z9hG4bK20f9ce38&lt;br /&gt;        From: &amp;lt;sip:118@192.168.2.1&amp;gt;;tag=001b0c187209166042a5fba9-1c16536a&lt;br /&gt;           SIP from address: sip:118@192.168.2.1&lt;br /&gt;           SIP tag: 001b0c187209166042a5fba9-1c16536a&lt;br /&gt;        To: &amp;lt;sip:118@192.168.2.1&amp;gt;&lt;br /&gt;           SIP to address: sip:118@192.168.2.1&lt;br /&gt;        Call-ID: 001b0c18-72090017-63975e06-76da979f@192.168.2.54&lt;br /&gt;        Max-Forwards: 70&lt;br /&gt;        CSeq: 1202 REGISTER&lt;br /&gt;           Sequence Number: 1202&lt;br /&gt;           Method: REGISTER&lt;br /&gt;        User-Agent: Cisco-CP7960G/8.0&lt;br /&gt;        Contact:  &amp;lt;sip:118@192.168.2.54:5060;transport=udp&amp;gt;;+sip.instance="&amp;lt;urn:uuid:00000000-0000-0000-0000-001b0c187209&amp;gt;";+u.sip!model.ccm.cisco.com="7"&lt;br /&gt;           Contact Binding:  &amp;lt;sip:118@192.168.2.54:5060;transport=udp&amp;gt;;+sip.instance="&amp;lt;urn:uuid:00000000-0000-0000-0000-001b0c187209&amp;gt;";+u.sip!model.ccm.cisco.com="7"&lt;br /&gt;               URI: &amp;lt;sip:118@192.168.2.54:5060;transport=udp&amp;gt;&lt;br /&gt;                   SIP contact address: sip:118@192.168.2.54:5060&lt;br /&gt;        Content-Length: 0&lt;br /&gt;        Expires: 120&lt;/pre&gt;&lt;p&gt;GXE  received this request successfully, and sends a response: &lt;/p&gt;&lt;pre class="style1"&gt;Frame 2 (522 bytes on wire, 522 bytes  captured)&lt;br /&gt;Ethernet II, Src: Grandstr_17:e6:b7  (00:0b:82:17:e6:b7), Dst: Cisco_18:72:09 (00:1b:0c:18:72:09)&lt;br /&gt;Internet Protocol, Src: 192.168.2.1  (192.168.2.1), Dst: 192.168.2.54 (192.168.2.54)&lt;br /&gt;User Datagram Protocol, Src Port:  sip (5060), &lt;span style="background-color: rgb(255, 0, 0);"&gt;Dst Port: 50485 (50485)&lt;/span&gt;&lt;br /&gt;Session Initiation Protocol&lt;br /&gt;   &lt;span style="background-color: rgb(0, 255, 0);"&gt;Status-Line: SIP/2.0 100 Trying&lt;br /&gt;       Status-Code: 100 &lt;/span&gt;&lt;br /&gt;        [Resent Packet: False]&lt;br /&gt;   Message Header&lt;br /&gt;        Via: SIP/2.0/UDP 192.168.2.54:5060;branch=z9hG4bK20f9ce38;rport=50485&lt;br /&gt;           Transport: UDP&lt;br /&gt;           Sent-by Address: 192.168.2.54&lt;br /&gt;           Sent-by port: 5060&lt;br /&gt;           Branch: z9hG4bK20f9ce38&lt;br /&gt;           RPort: 50485&lt;br /&gt;        From: &amp;lt;sip:118@192.168.2.1&amp;gt;;tag=001b0c187209166042a5fba9-1c16536a&lt;br /&gt;           SIP from address: sip:118@192.168.2.1&lt;br /&gt;           SIP tag: 001b0c187209166042a5fba9-1c16536a&lt;br /&gt;        To: &amp;lt;sip:118@192.168.2.1&amp;gt;&lt;br /&gt;           SIP to address: sip:118@192.168.2.1&lt;br /&gt;        Call-ID: 001b0c18-72090017-63975e06-76da979f@192.168.2.54&lt;br /&gt;        CSeq: 1202 REGISTER&lt;br /&gt;           Sequence Number: 1202&lt;br /&gt;           Method: REGISTER&lt;br /&gt;        Contact: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;           Contact Binding: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;               URI: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;                   SIP contact address: sip:192.168.2.1:5060&lt;br /&gt;        Supported: replaces, timer&lt;br /&gt;        User-Agent: Grandstream GXE5028 1.0.1.54&lt;br /&gt;        Allow: INVITE, ACK, OPTIONS, CANCEL, BYE, SUBSCRIBE, NOTIFY, PUBLISH, INFO,  REFER, UPDATE&lt;br /&gt;        Content-Length: 0&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Attention!  Here is very interesting and important point, look at the Red highlighted spot:  GXE sends the response to the UDP port where the request was sent from.  Nothing's wrong at first glance, n'est-ce pas? But Cisco thinks different and  looks puzzled:&lt;/p&gt;&lt;pre class="style1"&gt;Frame 3 (70 bytes on wire, 70 bytes captured)&lt;br /&gt;Ethernet II, Src: Cisco_18:72:09  (00:1b:0c:18:72:09), Dst: Grandstr_17:e6:b7 (00:0b:82:17:e6:b7)&lt;br /&gt;Internet Protocol, Src: 192.168.2.54  (192.168.2.54), Dst: 192.168.2.1 (192.168.2.1)&lt;br /&gt;Internet Control Message Protocol&lt;br /&gt;   &lt;span style="background-color: rgb(255, 0, 0);"&gt;Type: 3 (Destination unreachable)&lt;br /&gt;   Code: 3 (Port unreachable)&lt;/span&gt;&lt;br /&gt;   Checksum: 0x1e3f  [correct]&lt;br /&gt;   Internet Protocol, Src:  192.168.2.1 (192.168.2.1), Dst: 192.168.2.54 (192.168.2.54)&lt;br /&gt;   User Datagram Protocol,  Src Port:  sip (5060), &lt;span style="background-color: rgb(255, 0, 0);"&gt;Dst Port: 50485 (50485)&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;“Hey  guys, I don't know what you want to say, but nobody's listening to you on the  50485 port anymore”, - Cisco says to GXE. Hereby, the registration attempt is  falling down L.  After a short timeout Cisco starts it from the beginning (look at the Frame 1),  however only with the same level of success.&lt;br /&gt;&lt;br /&gt;Well,  what then? Who is wrong? Why does Cisco not continue to listen to the UDP  port the REGISTER request was sent from? Which port does Cisco listen to  really? For the complete answer we have to read the RFC 3261 “SIP: Session Initiation  Protocol.”&lt;br /&gt;&lt;br /&gt;Lets  look into the paragraph “18.2 Servers”. The subparagraph 18.2.2 is  the most interesting for us: &lt;/p&gt;&lt;pre class="style1"&gt;18.2.2  Sending Responses&lt;br /&gt;&lt;br /&gt;  &lt;span style="background-color: rgb(0, 255, 0);"&gt;The server transport uses the  value of the top Via header field in&lt;br /&gt;  order to determine where to  send a response.&lt;/span&gt; It MUST follow the&lt;br /&gt;  following process:&lt;br /&gt;&lt;br /&gt;     o  If the  "sent-protocol" is a reliable transport protocol such as&lt;br /&gt;        TCP or SCTP, or TLS over  those, the response MUST be sent using&lt;br /&gt;        the existing connection to  the source of the original request&lt;br /&gt;        that created the transaction,  if that connection is still open.&lt;br /&gt;        This requires the server  transport to maintain an association&lt;br /&gt;        between server transactions  and transport connections.  If that&lt;br /&gt;        connection is no longer open,  the server SHOULD open a&lt;br /&gt;        connection to the IP address  in the "received" parameter, if&lt;br /&gt;        present, using the port in  the "sent-by" value, or the default&lt;br /&gt;        port for that transport, if  no port is specified.  If that&lt;br /&gt;        connection attempt fails, the  server SHOULD use the procedures&lt;br /&gt;        in [4] for servers in order  to determine the IP address and&lt;br /&gt;        port to open the connection  and send the response to.&lt;br /&gt;&lt;br /&gt;     o  Otherwise, if the Via  header field value contains a "maddr"&lt;br /&gt;        parameter, the response MUST  be forwarded to the address listed&lt;br /&gt;        there, using the port  indicated in "sent-by", or port 5060 if&lt;br /&gt;        none is present.  If the  address is a multicast address, the&lt;br /&gt;        response SHOULD be sent using  the TTL indicated in the "ttl"&lt;br /&gt;        parameter, or with a TTL of 1  if that parameter is not present.&lt;br /&gt;&lt;br /&gt;     o  &lt;span style="background-color: rgb(0, 255, 0);"&gt;Otherwise (for unreliable unicast  transports), if the top Via&lt;br /&gt;        has a "received" parameter, the  response MUST be sent to the&lt;br /&gt;        address in the "received"  parameter, using the port indicated&lt;br /&gt;        in the "sent-by" value, or using  port 5060 if none is specified&lt;br /&gt;        explicitly.  If this fails, for  example, elicits an ICMP "port&lt;br /&gt;        unreachable" response, the procedures  of Section 5 of [4]&lt;br /&gt;        SHOULD be used to determine where to send  the response.&lt;/span&gt; &lt;/pre&gt;&lt;p&gt;“Section  5 of [4]” references us to Section 5 in RFC 3263 “Session Initiation Protocol  (SIP): Locating SIP Servers”: &lt;/p&gt;&lt;pre class="style1"&gt;5 Server  Usage&lt;br /&gt;&lt;br /&gt;  RFC 3261 [1] defines procedures for sending responses  from a server&lt;br /&gt;  back to the client.  Typically, for unicast UDP  requests, the&lt;br /&gt;  response is sent back to the source IP address where  the request came&lt;br /&gt;  from, using the port contained in the Via  header.  For reliable&lt;br /&gt;  transport protocols, the response is sent over the  connection the&lt;br /&gt;  request arrived on.  However, it is important to  provide failover&lt;br /&gt;  support when the client element fails between sending  the request and&lt;br /&gt;  receiving the response.&lt;br /&gt;&lt;br /&gt;  &lt;span style="background-color: rgb(0, 255, 0);"&gt;A server, according to RFC 3261 [1], will send a response&lt;/span&gt; on the&lt;br /&gt;  connection it arrived on (in the case of reliable  transport&lt;br /&gt;  protocols), and &lt;span style="background-color: rgb(0, 255, 0);"&gt;for unreliable transport protocols, to the source&lt;br /&gt;  address of the request, and  the port in the Via header field.&lt;/span&gt;  The&lt;br /&gt;  procedures here are invoked when a server attempts to  send to that&lt;br /&gt;  location and that response fails (the specific  conditions are&lt;br /&gt;  detailed in RFC 3261). "Fails" is defined  as any closure of the&lt;br /&gt;  transport connection the request came in on before  the response can&lt;br /&gt;  be sent, or communication of a fatal error from the  transport layer.&lt;br /&gt;&lt;br /&gt;  In these cases, the server examines the value of the  sent-by&lt;br /&gt;  construction in the topmost Via header.  If it  contains a numeric IP&lt;br /&gt;  address, the server attempts to send the response to  that address,&lt;br /&gt;  using the transport protocol from the Via header, and  the port from&lt;br /&gt;  sent-by, if present, else the default for that  transport protocol.&lt;br /&gt;  The transport protocol in the Via header can indicate  "TLS", which&lt;br /&gt;  refers to TLS over TCP.  When this value is  present, the server MUST&lt;br /&gt;  use TLS over TCP to send the response. &lt;/pre&gt;&lt;p&gt;Is it  not clear?&lt;br /&gt;Now,  lets look at the Cisco REGISTER request (“Frame 1”) yellow highlighted spots: &lt;/p&gt;&lt;pre class="style1"&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;Via: SIP/2.0/UDP  192.168.2.54:5060;branch=z9hG4bK20f9ce38&lt;/span&gt;&lt;br /&gt;           Transport: UDP&lt;br /&gt;           Sent-by Address: 192.168.2.54&lt;br /&gt;           &lt;span style="background-color: rgb(255, 255, 0);"&gt;Sent-by port: 5060&lt;/span&gt; &lt;/pre&gt;&lt;p&gt;Here  is an answer: Cisco is waiting  for the SIP server response listening UDP port 5060, and telling the server about it in quite clear form,  in accordance with RFC. For some unknown reason, GXE ignores the “Via header  field” and sends their responses to the source port of the request packet (in  our case it is port 50485). But  how does the Grandstream GXP-2000 phone work? How can the GXP-2000 encourage  the dumb GXE to send packets to the proper UDP port where they are expected?&lt;/p&gt;&lt;p&gt;Well,  GXP-2000 uses a very simple trick – it sends all packets using not a random,  but a fixed port:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HTTP&lt;/strong&gt; &lt;strong&gt;Grandstream  Device Configuration -&amp;gt; ACCOUNT N -&amp;gt; local SIP port:&lt;/strong&gt; (default  5060)&lt;/p&gt;&lt;p&gt;Here  is a REGISTER request from GXP-2000:&lt;/p&gt;&lt;pre class="style1"&gt;Frame 12 (625 bytes on wire, 625 bytes  captured)&lt;br /&gt;Ethernet II, Src: Grandstr_23:1c:db  (00:0b:82:23:1c:db), Dst: Grandstr_17:e6:b7 (00:0b:82:17:e6:b7)&lt;br /&gt;Internet Protocol, Src: 192.168.2.109  (192.168.2.109), Dst: 192.168.2.1 (192.168.2.1)&lt;br /&gt;User Datagram Protocol, &lt;span style="background-color: rgb(255, 255, 0);"&gt;Src Port: sip (5060)&lt;/span&gt;, Dst Port:  sip (5060)&lt;br /&gt;Session Initiation Protocol&lt;br /&gt;   Request-Line: REGISTER  sip:192.168.2.1:5060 SIP/2.0&lt;br /&gt;        Method: REGISTER&lt;br /&gt;        [Resent Packet: False]&lt;br /&gt;   Message Header&lt;br /&gt;        &lt;span style="background-color: rgb(255, 255, 0);"&gt;Via: SIP/2.0/UDP 192.168.2.109:5060;branch=z9hG4bKbffce08672adb95f&lt;/span&gt;&lt;br /&gt;           Transport: UDP&lt;br /&gt;           Sent-by Address: 192.168.2.109&lt;br /&gt;           &lt;span style="background-color: rgb(255, 255, 0);"&gt;Sent-by port: 5060&lt;/span&gt;&lt;br /&gt;           Branch: z9hG4bKbffce08672adb95f&lt;br /&gt;        From: &amp;lt;sip:118@192.168.2.1:5060&amp;gt;;tag=9a7e40fa42dc8850&lt;br /&gt;           SIP from address: sip:118@192.168.2.1:5060&lt;br /&gt;           SIP tag: 9a7e40fa42dc8850&lt;br /&gt;        To: &amp;lt;sip:118@192.168.2.1:5060&amp;gt;&lt;br /&gt;           SIP to address: sip:118@192.168.2.1:5060&lt;br /&gt;        Contact: &amp;lt;sip:118@192.168.2.109:5060;transport=udp&amp;gt;;reg-id=1;+sip.instance="&amp;lt;urn:uuid:00000000-0000-1000-8000-000b82231cdb&amp;gt;"&lt;br /&gt;           Contact Binding:  &amp;lt;sip:118@192.168.2.109:5060;transport=udp&amp;gt;;reg-id=1;+sip.instance="&amp;lt;urn:uuid:00000000-0000-1000-8000-000b82231cdb&amp;gt;"&lt;br /&gt;               URI: &amp;lt;sip:118@192.168.2.109:5060;transport=udp&amp;gt;&lt;br /&gt;                   SIP contact address: sip:118@192.168.2.109:5060&lt;br /&gt;        Supported: path&lt;br /&gt;        Call-ID: fc22530b910b52fd@192.168.2.109&lt;br /&gt;        CSeq: 10001 REGISTER&lt;br /&gt;           Sequence Number: 10001&lt;br /&gt;           Method: REGISTER&lt;br /&gt;        Expires: 3600&lt;br /&gt;        User-Agent: Grandstream GXP2000 1.2.2.26&lt;br /&gt;        Max-Forwards: 70&lt;br /&gt;        Allow:  INVITE,ACK,CANCEL,BYE,NOTIFY,REFER,OPTIONS,INFO,SUBSCRIBE,UPDATE,PRACK,MESSAGE&lt;br /&gt;        Content-Length: 0 &lt;/pre&gt;&lt;p&gt;And  here is the GXE response: &lt;/p&gt;&lt;pre class="style1"&gt;Frame 13 (495 bytes on wire, 495 bytes  captured)&lt;br /&gt;Ethernet II, Src: Grandstr_17:e6:b7  (00:0b:82:17:e6:b7), Dst: Grandstr_23:1c:db (00:0b:82:23:1c:db)&lt;br /&gt;Internet Protocol, Src: 192.168.2.1  (192.168.2.1), Dst: 192.168.2.109 (192.168.2.109)&lt;br /&gt;User Datagram Protocol, Src Port:  sip (5060), &lt;span style="background-color: rgb(255, 255, 0);"&gt;Dst Port: sip (5060)&lt;/span&gt;&lt;br /&gt;Session Initiation Protocol&lt;br /&gt;   Status-Line: SIP/2.0 100  Trying&lt;br /&gt;        Status-Code: 100&lt;br /&gt;        [Resent Packet: False]&lt;br /&gt;   Message Header&lt;br /&gt;        Via: SIP/2.0/UDP 192.168.2.109:5060;branch=z9hG4bKbffce08672adb95f&lt;br /&gt;           Transport: UDP&lt;br /&gt;           Sent-by Address: 192.168.2.109&lt;br /&gt;           Sent-by port: 5060&lt;br /&gt;           Branch: z9hG4bKbffce08672adb95f&lt;br /&gt;        From: &amp;lt;sip:118@192.168.2.1:5060&amp;gt;;tag=9a7e40fa42dc8850&lt;br /&gt;           SIP from address: sip:118@192.168.2.1:5060&lt;br /&gt;           SIP tag: 9a7e40fa42dc8850&lt;br /&gt;        To: &amp;lt;sip:118@192.168.2.1:5060&amp;gt;&lt;br /&gt;           SIP to address: sip:118@192.168.2.1:5060&lt;br /&gt;        Call-ID: fc22530b910b52fd@192.168.2.109&lt;br /&gt;        CSeq: 10001 REGISTER&lt;br /&gt;           Sequence Number: 10001&lt;br /&gt;           Method: REGISTER&lt;br /&gt;        Contact: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;           Contact Binding: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;               URI: &amp;lt;sip:192.168.2.1:5060&amp;gt;&lt;br /&gt;                   SIP contact address: sip:192.168.2.1:5060&lt;br /&gt;        Supported: replaces, timer&lt;br /&gt;        User-Agent: Grandstream GXE5028 1.0.1.54&lt;br /&gt;        Allow: INVITE, ACK, OPTIONS, CANCEL, BYE, SUBSCRIBE, NOTIFY, PUBLISH, INFO,  REFER, UPDATE&lt;br /&gt;        Content-Length: 0 &lt;/pre&gt;&lt;p&gt;Everything  works fine, GXP and GXE are so much happier with each other.&lt;br /&gt;&lt;br /&gt;Well,  but how can we force Cisco 7960 to send SIP packets not from a randomly chosen  port, but from a fixed port, and continue to listen for a response on it? There  are not so many configuration parameters for Cisco (at least I do not know of  many), and there is nothing that looks like Grandstream’s “local  SIP port.”&lt;br /&gt;&lt;br /&gt;Of  course, there is another option: fix the bugged GXE firmware, or force  Grandstream to do it… But we need results right this instance.&lt;/p&gt;&lt;p&gt;Fortunately,  &lt;span class="style3"&gt;the  workaround &lt;/span&gt;exist and has been found eventually:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;From C7960/7040 keypad:&lt;/strong&gt;&lt;br /&gt;&lt;span class="style4"&gt;Cisco  settings -&amp;gt; SIP configuration -&amp;gt; NAT Enabled = YES&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;OR, in sipdefault.cnf (if you use configuration over TFTP):&lt;/strong&gt;&lt;br /&gt;&lt;span class="style4"&gt;nat_enable:  Yes&lt;/span&gt; &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;It is  not necessary to define the “NAT address” parameter - it can be left empty.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;PS. &lt;em&gt;The "Black Mark" goes to Granstream  for grossly disregards of standards. &lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6109039736247726348-1860940677644735405?l=dblednov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dblednov.blogspot.com/feeds/1860940677644735405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dblednov.blogspot.com/2010/02/cisco-7960-gxe-5028-interoperability.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6109039736247726348/posts/default/1860940677644735405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6109039736247726348/posts/default/1860940677644735405'/><link rel='alternate' type='text/html' href='http://dblednov.blogspot.com/2010/02/cisco-7960-gxe-5028-interoperability.html' title='Cisco-7960 &amp; GXE-5028 Interoperability'/><author><name>Dmitri</name><uri>http://www.blogger.com/profile/06086052901184976976</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
