[HELP] Funny behaviour with MGCP


#1

Hello everyone,

Many thanks in advance for your support and for the terrific product that is Asterisk!

We have set up a prototype in order to try Asterisk’s MGCP features. It consists of the following:

  • An Asterisk 1.0.9 server running on SuSe Linux 10, with a 2.6.13 stock kernel.
  • A pair of DrayTek Vigor 2330V VoIP routers acting as media gateways, each equipped with 4-port FXS interfaces.

The two V3300 routers sit behind two DrayTek V2800 ADSL access routers, but the latter are configured to perform single-host NAT (i.e. all traffic is transparently redirected to the V3300,). Additionaly, the two V3300 gateways are configured to do NAT traversal for all VoIP traffic (i.e., they embed the IP address used for NAT in the MGCP packet headers). In other words, the whole NAT infrastrucuture should operate transparently for Asterisk (we don’t need to use ‘nat=yes’ in mgcp.conf).

Said this, everything seems to work just fine. We can ring any extension the voice channel is set up and torn down flawessly.

However, the problem is that we have discovered -with the help of a network analyzer- that all RTP traffic is being sent THROUGH the Asterisk server. MGCP is supposed to send all RTP traffic end-to-end, and NOT trough the Call Agent.

Both, the V3300 routers and Asterisk are using G729 (so, in theory, no codec translation is required). All endpoints also do outband DTMF (conforming to RFC-2833), so, if we got the theory right, Asterisk shouldn’t get involved with UDP traffic at all, except for the ringtones, etc.

Finaly we have set the option “canreinvite=yes” for all our endpoints.

Our Ethereal log reveals that, by some unknown reason, Asterisk is not sending “reinvites” to the endpoints, but setting up all the MGCP against itself and never releasing them.

Our questions are:

  • Is actually direct, end-to-end RTP channel setup supported by MGCP at all?
  • Does Asterisk support this feature? (we know that it does for SIP).

Below is a copy of our running mgcp.conf and an excerpt of our extensions.conf where we assign the MGCP channels:

---------------- MGCP.CONF ---------------

;
; MGCP Configuration for Asterisk
;
[general]
;port = 2427
bindaddr = 0.0.0.0
disallow=all
allow=g729
alow=gsm

;; The MGCP channel supports the following service codes:
;; # - Transfer
;; *67 - Calling Number Delivery Blocking
;; *70 - Cancel Call Waiting
;; *72 - Call Forwarding Activation
;; *73 - Call Forwarding Deactivation
;; *78 - Do Not Disturb Activation
;; *79 - Do Not Disturb Deactivation
;; *8 - Call pick-up
;

[10.0.2.1]
context=local
host=10.0.2.1
nat=no
canreinvite=yes
;wcardep=aaln/* ; enables wildcard endpoint.
callwaiting=yes
transfer=yes
cancallforward=yes
threewaycalling=yes
dtmfmode=outband
;singlepath=yes

callerid = “Ext 1001” <3001>
line => aaln/1

callerid = “Ext 1002” <3002>
line => aaln/2

callerid = “Ext 1003” <3003>
line => aaln/3

callerid = “Ext 1004” <3004>
line => aaln/4

[10.0.1.3]
context=local
host=10.0.1.3
nat=no
canreinvite=yes
;wcardep=aaln/* ; enables wildcard endpoint.
callwaiting=yes
transfer=yes
threewaycalling=yes
cancallforward=yes
dtmfmode=outband
;singlepath=yes

callerid = “Ext 1005” <3005>
line => aaln/5

;callerid = “Ext 1006” <3006>
line => aaln/6

;callerid = “Ext 1007” <3007>
line => aaln/7

;callerid = “Ext 1008” <3008>
line => aaln/8

-------------- EXTENSIONS.CONF -------------
(…)

[local]

exten => 1001,1,Dial(MGCP/aaln/1@10.0.2.1)
exten => 1002,1,Dial(MGCP/aaln/2@10.0.2.1)
exten => 1003,1,Dial(MGCP/aaln/3@10.0.2.1)
exten => 1004,1,Dial(MGCP/aaln/4@10.0.2.1)

exten => 1005,1,Dial(MGCP/aaln/5@10.0.1.3)
exten => 1006,1,Dial(MGCP/aaln/6@10.0.1.3)
exten => 1007,1,Dial(MGCP/aaln/7@10.0.1.3)
exten => 1008,1,Dial(MGCP/aaln/8@10.0.1.3)

(…)