Talwar
Talwar
-1-
MINT 709 Capstone Project
Abstract
As we know, IPv4 is being transitioned to IPv6 slowly. VoIP systems would also
have to undergo the necessary changes. The interesting point during this transition
would be when some companies might have a mix of IPv4 and IPv6 network or an
IPv4 VoIP system would be trying to connect to a VoIP system based on IPv6.
During the project, I wanted to create a Local Area network mixed with IPv4 and
IPv6 and see their resulting effects on the VoIP system. This understandably would
have an effect on the resources of the company as well, as they have to upgrade or
use extra equipments. So I experimented with an open source telephony platform
(Freeswitch) which had IPv6 capability.
-2-
MINT 709 Capstone Project
Acknowledgment
I would like to express my gratitude to Dr. M.H. MacGregor for his help and
guidance in order to complete the project.
A special thanks to Mr. Shahnawaz Mir for all the help extended by him in the
MINT lab and the valuable technical guidance.
-3-
MINT 709 Capstone Project
Table of Contents
Chapter 1 Introduction…………………………………………………...........Page 5
• IPv6 deployment issues
• Project Objective
Chapter 3 FreeSWITCH………………………………………………...……Page 22
Chapter 5 Conclusion………………………………………………………...Page 38
Appendix
References
-4-
MINT 709 Capstone Project
Chapter 1 Introduction
In the past few years, the telecommunication industry has undergone the rapid
changes in the way people and organizations communicate with each other. Many
of these changes came from the explosive growth of the internet and its applications
based on the Internet Protocol. The internet has become a universal means of
communication.
Even though, IPv4 is a flexible and powerful mechanism. However, IPv4 is starting
to exhibit limitations, not only with references to the need for raw increase of the IP
address space, driven, for example, by new populations of user in large countries
like China and India, along with new technologies with “always connected devices”
(xDSL, Cable, PDAs, UMTS mobile telephone, etc), but also in reference of VoIP
both in terms of the NAT issue as well as the QOS issue.
Third generation VoIP network constructs are just around the corner. These
networks will be characterized by the following features:
• Full end to end IP based (specially IPv6-based).
• Fully accessible to any user in the world.
• SIP based for advanced signaling.
• Seamless integration with corporate enterprise networks from a protocol and
security perspective.
• QoS enabled in the wireless LAN environment.
• Integrations with 3G cellular systems.
• Commercial grade service levels/reliability/security.
• Video conferencing support.
• End to end QoS enabled.
-5-
MINT 709 Capstone Project
Despite the initial expectations raised, IPv6 is clearly far from being extensively
deployed and therefore it is too early to claim any complete success for it yet.
Various reasons for this are:
• The warnings regarding IPv4 address exhaustion have not yet materialized.
By analyzing past data forecast that IPv4 addresses will hold out beyond 2030
unless new conditions arise that bring about a change in the current trend in
address consumption such as a strong demand for addresses for mobile
devices or the addition of a large number of users in China or India.
• Also, there have been technological obstacles to the success of IPv6. While
basic IPv6 standards have been available for some time, the standardization
process has not been smooth in some key areas like DHCPv6, Mobile IPv6.
• There have also been some changes made to the core specifications in recent
years, such as the deprecation of sit-local addresses or updates to the
programming interfaces.
• The biggest challenge is the requirement for applications using the socket
interface to be ported to a new programming interface to be able to use IPv6
due to dependencies imposed by the socket interface on the specific protocol
to be used.
• Other reasons have been inferior support for IPv6 compared to IPv4 in terms
of both functionality and performance.
All these factors show the migration process will entail significant costs and
complexities for networking organizations.
Project Objective
Since significant resources and number of issues are associated with migration to
VoIP (IPv6 based). There is an excellent probability that not every organization
-6-
MINT 709 Capstone Project
In this project, I tried to deploy a mix of VoIP system based on IPv4 and IPv6. The
main hardware and software components involved were:
• Cisco 2821 router.
• Cisco 7941G IP phones.
• Freeswitch 1.0.5(Soft switch).
• Sip communicator (soft phone with IPv6).
-7-
MINT 709 Capstone Project
In a VoIP network, just like in a traditional telephone network requires two paths: a
protocol stack that includes Real-time transport protocol (RTP) for audio path and
one or more call control models that provide the signaling path.
Due to the time-sensitive nature of voice traffic, UDP/IP was the logical choice to
carry voice. More information is needed on a packet by packet basis than UDP
offered, however. So, for real time or delay sensitive traffic the Internet Engineering
Task Force (IETF) adopted the RTP. VoIP rides on top of RTP, which rides on top
UDP. Therefore, VoIP is carried with an RTP/UDP/IP packet header. We will look
at some detail of the Real-Time protocol (RTP) which is used to carry the audio
traffic in a VoIP network.
The most common call control models used are H.323, MGCP and SIP. For IPv6
SIP is the most important call control protocol. Also, we would be using a mix of
call controls in our project which would be SCCP and SIP.
Real-Time Protocol
RTP is the standard for transmitting delay-sensitive traffic across packet based
networks. RTP rides on top of UDP and IP. RTP gives receiving stations
information that it is not in the connectionless UDP/IP streams. As shown in figure,
two important bits of information are sequence information and time stamping. RTP
uses the sequence information to determine whether the packets are arriving in
order or not and it uses the time stamping information to determine the inter arrival
packet time (Jitter).
-8-
MINT 709 Capstone Project
RTP can be for media on demand as well as for interactive services such as Internet
telephony. RTP consists of a data part and a control part, the latter called RTP
control protocol (RTCP).
The data part of RTP is a thin protocol that provides support for applications with
real-time properties such as continuous media (for example audio and video)
including timing reconstruction, loss detection and content identification.
RTCP provides support for real-time conferencing of groups of any size within an
internet. This support includes source identification and support for gateways such
as audio and video bridges as well as multicast to unicast translators. It also offers
QoS feedback from receivers to the multicast group, as well as, support for the
synchronization of different media streams.
Using RTP is important for real-time traffic but a few drawbacks exist. The
IP/RTP/UDP headers are 20, 8 and 12 bytes respectively. This adds up to a 40 byte
header which is twice as big as the payload when using G.729 with two speech
samples (20ms). We can compress this large header to 2 or 4 bytes by using RTP
header compression (CRTP).
-9-
MINT 709 Capstone Project
The RTP control (RTCP) supplements RTP by handling the administrative and
reporting aspects of an RTP multicast conference. RTCP is specified in RFC 1889
as part of RTP. Even though RTCP is designed to scale for large conferences, it is
useful in a simple point to point VoIP call to provide QoS feedback from the
receiver to the sender in each direction.
For large multicast conferences the bandwidth of RTP media tends to remain
constant because only a few people can speak at a time even if thousands of people
are listening. RTCP control information is sent from each participant to every other
participant, so scalability is a big issue. If each participant sends a 100 byte packet
every second, then a conference with 10,000 people causes each participant to
receive 1 Mbps of control information. RTCP addresses this problem by
transmitting packet less often as the number of detected conference participants
increases. The RTCP algorithm limits control bandwidth to approximately 5 percent
of the bandwidth in the media stream by default, although applications can adjust
this amount as necessary.
H.323
- 10 -
MINT 709 Capstone Project
In addition to the above protocols the following functional components make up the
H.323 environment:
- 12 -
MINT 709 Capstone Project
The second popular VoIP call signaling protocol is the Media Gateway Control
Protocol (MGCP). MGCP is an IETF standard and is described as a centralized
device control protocol with simple end points. It allows a central control
component or call agent for remotely control various devices. It is referred to as a
stimulus protocol because the endpoints and gateways can not function alone.
MGCP incorporated the IETF Session Description Protocol (SDP) to describe the
type of session to initiate.
- 13 -
MINT 709 Capstone Project
- 14 -
MINT 709 Capstone Project
Now that we understand the different components that make up the MGCP
environment we need to look at some of the basic MGCP concepts. The basic
MGCP concepts can be classified into three groups:
- 15 -
MINT 709 Capstone Project
delete connection request to each gateway. To create a multipoint call, the call
agent instructs an endpoint to create multiple connections. The endpoint is
responsible for mixing the audio signals.
• Event and Signals – Events and signals help the call agent to instruct the
gateway of the basic as well as complicated call control and signaling
procedures. The call agent informs the gateway of what events to monitor on
an endpoint, what to do if an event occurs and when to generate a notification
to the call agent. For example, an event is an analog line in an off-hook
condition. Using signals, the call agent requests that the gateway to provide
dial tone upon observing the off-hook event. Events and signals are assigned
simple case insensitive codes. For example, the code for an off-hook transition
event is “hd” and the code dial tone signal is “dl”.
- 16 -
MINT 709 Capstone Project
Packages cluster events and signals by their relevance to various types of endpoints.
Conceptually, gateways also cluster endpoints of different types. It is appropriate
then to associate packages with gateways. The table below lists the gateways and
identified the packages that are associated with them:
A digit map is a specification of the dial plan. When you download a digit map to a
gateway for use on an endpoint, it allows the gateway to collect digits until the
gateway either finds a match or concludes that the digit dialed could not possibly
match a specification. When either condition occurs, the gateway notifies the call
agent. Without a digit map, a gateway must notify the call agent on each digit
dialed, which places a heavy burden on the call agent and the network connecting
- 17 -
MINT 709 Capstone Project
This completes the discussion on the MGCP components and concepts. One other
thing to know is the MGCP control commands. A call agent uses control commands
or messages to direct its gateways and their operational behavior. Gateways use the
following commands in response to requests from a call agent and for notifying the
call agent of events and abnormal behavior:
- 18 -
MINT 709 Capstone Project
The primary motivation behind SIP was to support next generation communications
that use the internet, however, IETF has made great progress in allowing SIP to
work with legacy voice networks.
SIP is a peer to peer protocol; the peers in a session are called User Agents (UA). A
UA consists of two components:
• User Agent Client (UAC) – a client application that initiates a SIP request.
• User Agent Server (UAS) – a server application that contacts the user when a
SIP invitation is received and then returns a response on behalf of the user to
the originator.
A SIP UA can function as a UAC or UAS during a session but not as both in the
- 19 -
MINT 709 Capstone Project
same session. The initiating UA uses a UAC and the terminating UA uses a UAS.
The physical components of a SIP network are grouped into following two
categories, user agents and SIP servers.
- 20 -
MINT 709 Capstone Project
server in the network. The next server can be another proxy or UAS. Proxy
servers provide function such as authentication, authorization, network access
control, routing and security.
• Redirect server – Provides a UA with information on the next server the UA
should contact. The server can be another network server or UA, the UA then
redirects the invitation to the server identified by the redirect server.
• Registrar server – Requests from UACs for registration of their current
location.
• Location server – A service providing address resolution services to SIP
proxy or redirect servers. A location server can include a database of
registrations or access to commonly used tools such as Lightweight directory
access Protocol (LDAP).
If a UAC recognizes the destination UAS the client communicate directly with the
server. In situations where the client is unable to establish a direct relationship, the
client solicits the assistance of a network server. The following describes setting up
a call using a proxy server.
- 21 -
MINT 709 Capstone Project
Chapter 3 Freeswitch
Freeswitch is neither a pure switch which simply route calls like GnuGK and SER,
nor a PABX or IVR like Asterisk and its derivatives; In fact it occupies a space
between them. Freeswitch provides building blocks from which applications can be
built such a PABX, a voicemail system or a conferencing system. Freeswitch
supports various technologies such as SIP and H.323, which makes it easy to
interface with other open source PBX systems such as sipXecs, call weaver or
Asterisk.
Freeswitch supports both wide and narrow band codecs making it an ideal solution
to bridge legacy devices to the future. The voice channels and the conference bridge
module all can operate at 8, 12, 16, 24, 32 or 48 kHz and can bridge channels of
- 22 -
MINT 709 Capstone Project
different rates. Freeswitch build natively and runs standalone on several operating
systems including Windows, Mac OS X, Linux, BSD and Solaris on both 32 and 64
bit platforms.
- 23 -
MINT 709 Capstone Project
Directory: The directory holds authentication credentials for other sip endpoints
- 24 -
MINT 709 Capstone Project
Freeswitch has a large number of other configuration files as well. The figure on the
next page shows the various configuration files and their default contents along
with the standard modules.
- 25 -
MINT 709 Capstone Project
- 26 -
MINT 709 Capstone Project
As we have already discussed VoIP protocols and Freeswitch. We can take in depth
look at the actual design of my VoIP network setup.
Now we are going to discuss all the network components one by one as shown in
the figure:
SIP Communicator:
- 27 -
MINT 709 Capstone Project
In Account Registration Wizard, click on the Advanced tab and fill up the options
as shown in the screenshot below,
- 28 -
MINT 709 Capstone Project
Freeswitch is the proxy server being used in this project. The Freeswitch is installed
on an Ubuntu machine. The Ubuntu has three interface cards installed on it;
however we are just using two interfaces, eth0 and eth1.
eth0 is connected to the Cisco router 2821, it has a forced IP address of 10.1.31.15
and a default gateway of 10.1.31.1.
- 29 -
MINT 709 Capstone Project
eth1 is connected to the Windows XP and has an IPv6 address forced on it, which is
2001:db8:c18:1::2. Figure shown below shows the configuration on the Ethernet
interfaces.
As our SIP proxy server is connected to the Cisco, we should be able to make it talk
to the Freeswitch. For Cisco to talk to FS, we need to create a gateway profile in the
/conf/sip_profile/internal so that Cisco can register with FS.
<X-PRE-PROCESS cmd=“internal/*.xml”>
- 31 -
MINT 709 Capstone Project
<include>
<gateway name=“10.1.31.15”>
<param name=“username” value=“1000”/>
<param name=“password” value=“1234”/>
<param name=“expire-seconds” value=“60”/>
<param name=“register” value=“true”/>
<param name=“register-transport” value=“udp”/>
<param name=“retry-seconds” value=“30”/>
<param name=“caller_id_in_from” value=“false”/>
<param name=“contact-params” value=“tport=5060”/>
<param name=“ping” value=“25”>
</gateway>
</include>
That’s the whole file. The “name” has to be something DNS can translate or an
actual IP address. Username and password is something which I setup on the Cisco
which you will come across when we will discuss about Cisco’s configuration.
<extension name=“cisco”>
<condition field=“destination_number” expression=“^(200[0-9])”>
<action application=“set” data=“effective_caller_id_number=1000”/>
<action application=“bridge”
data=sofia/gateway/10.1.31.15/$1@10.1.31.1/>
</condition>
</extension>
These are the main files which need to be configured as far as FreeSwitch is
- 32 -
MINT 709 Capstone Project
concerned.
!
interface GigabitEthernet0/0
ip address 10.1.31.1 255.255.255.0
duplex auto
speed auto
!
I had to create DHCP services on both the Fast Ethernet interfaces. IP address of the
voice vlans were defined on the router.
!
no ip dhcp conflict logging
ip dhcp excluded-address 192.168.20.1 192.168.20.50
ip dhcp excluded-address 192.168.10.1 192.168.10.50
!
ip dhcp pool data
network 192.168.20.0 255.255.255.0
default-router 192.168.20.1
lease infinite
!
ip dhcp pool voice
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease infinite
- 33 -
MINT 709 Capstone Project
And the Vlans were also created to distinguish between the Voice and Data:
!
interface Vlan10
description voip vlan
ip address 192.168.10.1 255.255.255.0
!
interface Vlan20
description data vlan
ip address 192.168.20.1 255.255.255.0
!
Since, I was using two IP phones so both the Fast Ethernet interfaces have the same
configurations.
!
interface FastEthernet0/1/0
switchport mode trunk
switchport voice vlan 10
!
interface FastEthernet0/1/1
switchport mode trunk
switchport voice vlan 10
!
Switchport voice vlan is used to instruct the IP phone to forward all the voice traffic
through the VLAN and switchport mode trunk is used for letting VLAN
information pass between the interfaces.
This was the setup for IP phones and the Freeswitch. But the issue over here is that
since we are using Cisco IP phones on the router side which come with default
Skinny protocols and the Freeswitch is using SIP. We could have flashed the IP
phones with SIP files but that is not an easy thing to do and can be quiet tedious. So
- 34 -
MINT 709 Capstone Project
!
voice service voip
allow-connections h323 to h323
allow-connections h323 to sip
allow-connections sip to h323
allow-connections sip to sip
sip
!
These commands can be used to use Skinny protocol with SIP as Skinny is
interoperable with H.323.
Now we needed to define the patterns for outgoing calls. These are configured as
dial peers as shown below:
!
dial-peer voice 10 voip
destination-pattern 1000
no voice-class sip anat
session protocol sipv2
session target ipv4:10.1.31.15
session transport udp
dtmf-relay rtp-nte
codec g711ulaw
no vad
!
Destination pattern has only 1000 mentioned here because I was using only one
extension which happened to be 1000 (as shown in the screenshot of the SIP
communicator), though this is not right thing to do.
- 35 -
MINT 709 Capstone Project
!
sip-ua
authentication username 1000 password 7 091D1C5A4D
retry invite 3
retry register 10
timers connect 100
registrar ipv6:[2001:db8:c18:1::2] expires 3600
sip-server ipv4:10.1.31.15
!
Username and password mentioned above, are already in XML we created by the
name of 00_internal.xml in Freeswitch. The password is not shown by default, even
though it can be changed as and when required.
!
telephony-service
em logout 0:0 0:0 0:0
max-ephones 15
max-dn 24
ip source-address 192.168.10.1 port 2000
load 7941 usbflash0:SCCP41.8-5-2SR1S
max-conferences 8 gain -6
transfer-system full-consult
create cnf-files version-stamp 7960 Nov 26 2009 13:09:38
- 36 -
MINT 709 Capstone Project
!
!
ephone-dn 1
number 2001
name Talwar,V
!
!
ephone-dn 2
number 2002
name MINT
!
!
ephone 1
device-security-mode none
mac-address 001B.D512.4E3A
type 7941
button 1:1
!
!
!
ephone 2
device-security-mode none
mac-address 001B.D512.3D35
type 7941
button 1:2
!
This finishes our configuration for the devices used in the network.
- 37 -
MINT 709 Capstone Project
Chapter 5 Conclusion
Even though, the world sooner or later would speed up the transition from IPv4 to
IPv6 and thus, the VoIP systems too. But as mentioned before there are still many
issues that are being faced while transitioning from IPv4 to IPv6. After reaching the
end of this project I did faced various issues which are as follows:
• There are many operating systems which already provide support for IPv6 but
communication hardware and software providers have been less enthusiastic
and have done nothing to very less to provide support for IPv6. An example
for that would be Asterisk, they still have no known IPv6 support for there
softswitch.
• There is not many open source softphones available which have IPv6 support.
I tried Linphone, X-lite and kphone. They all had some or the other issue with
IPv6 support.
• Even though I was able to make calls using Freeswitch but it had its own
issues. Firstly it is primarily dependent on IPv4, if someone is using a pure
IPv6 based network, Freeswitch becomes ineffective.
• Since there are not many open source softwares available thus this results in
huge costs and complexities as well, to upgrade their existing systems. In
which, not all organizations would have an interest, considering that the world
economy is still on recovery path.
- 38 -
MINT 709 Capstone Project
Appendix
Here are the complete FreeSwitch configurations:
****conf/dialplan/default.xml****
This context is usually accessed via authenticated callers on the sip profile on port 5060
or transfered callers from the public context which arrived via the sip profile on port 5080.
Authenticated users will use the user_context variable on the user to determine what context
they can access. You can also add a user in the directory with the cidr= attribute acl.conf.xml
will build the domains ACL using this value.
-->
<!-- http://wiki.freeswitch.org/wiki/Dialplan_XML -->
<include>
<context name="default">
<extension name="cisco">
<condition field="destination_number" expression="^(200[0-9])">
<action application="set" data="effective_caller_id_number=1000"/>
<action application="bridge" data="sofia/gateway/10.1.31.15/$1@10.1.31.1"/>
</condition>
</extension>
<extension name="unloop">
<condition field="${unroll_loops}" expression="^true$"/>
<condition field="${sip_looped_call}" expression="^true$">
<action application="deflect" data="${destination_number}"/>
</condition>
</extension>
- 39 -
MINT 709 Capstone Project
Example:
<condition minute-of-day="540-1080"> (9am to 6pm EVERY day)
do something ...
</condition>
-->
<extension name="tod_example" continue="true">
<condition wday="2-6" hour="9-18">
<action application="set" data="open=true"/>
</condition>
</extension>
This example covers all US Federal holidays except for inauguration day.
-->
- 40 -
MINT 709 Capstone Project
</condition>
<condition wday="2" mweek="3" mon="2">
<!-- president's day is the 3rd monday in february -->
<action application="set" data="open=false"/>
</condition>
<condition wday="2" mon="5" mday="25-31">
<!-- memorial day is the last monday in may (the only monday between the 25th and the 31st)
-->
<action application="set" data="open=false"/>
</condition>
<condition mday="4" mon="7">
<!-- independence day -->
<action application="set" data="open=false"/>
</condition>
<condition wday="2" mweek="1" mon="9">
<!-- labor day is the 1st monday in september -->
<action application="set" data="open=false"/>
</condition>
<condition wday="2" mweek="2" mon="10">
<!-- columbus day is the 2st monday in october -->
<action application="set" data="open=false"/>
</condition>
<condition mday="11" mon="11">
<!-- veteran's day -->
<action application="set" data="open=false"/>
</condition>
<condition wday="5-6" mweek="4" mon="11">
<!-- thanksgiving is the 4th thursday in november and usually there's an extension for black
friday -->
<action application="set" data="open=false"/>
</condition>
<condition mday="25" mon="12">
<!-- Christmas -->
<action application="set" data="open=false"/>
</condition>
</extension>
<extension name="global-intercept">
- 41 -
MINT 709 Capstone Project
<extension name="group-intercept">
<condition field="destination_number" expression="^\*8$">
<action application="answer"/>
<action application="intercept" data="${hash(select/${domain_name}-
last_dial/${callgroup})}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
<extension name="intercept-ext">
<condition field="destination_number" expression="^\*\*(\d+)$">
<action application="answer"/>
<action application="intercept" data="${hash(select/${domain_name}-last_dial_ext/$1)}"/>
<action application="sleep" data="2000"/>
</condition>
</extension>
<extension name="redial">
<condition field="destination_number" expression="^870$">
<action application="transfer" data="${hash(select/${domain_name}-
last_dial/${caller_id_number})}"/>
</condition>
</extension>
- 42 -
MINT 709 Capstone Project
-->
<!--
<condition field="${switch_r_sdp}" expression="a=rtpmap:(\d+)\stelephone-event/8000"
break="never">
<action application="set" data="rtp_payload_number=$1"/>
<anti-action application="start_dtmf"/>
</condition>
-->
<condition field="${sip_has_crypto}"
expression="^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$"
break="never">
<action application="set" data="sip_secure_media=true"/>
<!-- Offer SRTP on outbound legs if we have it on inbound. -->
<!-- <action application="export" data="sip_secure_media=true"/> -->
</condition>
<condition>
<action application="hash" data="insert/${domain_name}-
spymap/${caller_id_number}/${uuid}"/>
<action application="hash" data="insert/${domain_name}-
last_dial/${caller_id_number}/${destination_number}"/>
<action application="hash" data="insert/${domain_name}-last_dial/global/${uuid}"/>
</condition>
</extension>
<!-- If sip_req_host is not a local domain then this has to be an external sip uri -->
<!--
Snom button demo, call 9000 to make button 2 mapped to transfer the current call to a
conference
- 43 -
MINT 709 Capstone Project
-->
<extension name="snom-demo-2">
<condition field="destination_number" expression="^9001$">
<action application="eval" data="${snom_bind_key(2 off DND ${sip_from_user}
${sip_from_host} ${sofia_profile_name} message notused)}"/>
<action application="transfer" data="3000"/>
</condition>
</extension>
<extension name="snom-demo-1">
<condition field="destination_number" expression="^9000$">
<!--<key> <light> <label> <user> <host> <profile> <action_name> <action>-->
<action application="eval" data="${snom_bind_key(2 on DND ${sip_from_user}
${sip_from_host} ${sofia_profile_name} message api+uuid_transfer ${uuid} 9001)}"/>
<action application="playback" data="$${hold_music}"/>
</condition>
</extension>
<extension name="eavesdrop">
<condition field="destination_number" expression="^88(.*)$|^\*0(.*)$">
<action application="answer"/>
<action application="eavesdrop" data="${hash(select/${domain_name}-spymap/$1)}"/>
</condition>
</extension>
<extension name="eavesdrop">
<condition field="destination_number" expression="^779$">
<action application="answer"/>
<action application="set" data="eavesdrop_indicate_failed=tone_stream://%(500, 0, 320)"/>
<action application="set" data="eavesdrop_indicate_new=tone_stream://%(500, 0, 620)"/>
<action application="set" data="eavesdrop_indicate_idle=tone_stream://%(250, 0, 920)"/>
<action application="eavesdrop" data="all"/>
</condition>
</extension>
<extension name="call_return">
<condition field="destination_number" expression="^\*69$|^869$|^lcr$">
- 44 -
MINT 709 Capstone Project
<extension name="del-group">
<condition field="destination_number" expression="^80(\d{2})$">
<action application="answer"/>
<action application="group"
data="delete:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}"/
>
<action application="gentones" data="%(1000, 0, 320)"/>
</condition>
</extension>
<extension name="add-group">
<condition field="destination_number" expression="^81(\d{2})$">
<action application="answer"/>
<action application="group"
data="insert:$1@${domain_name}:${sofia_contact(${sip_from_user}@${domain_name})}"/>
<action application="gentones" data="%(1000, 0, 640)"/>
</condition>
</extension>
<extension name="call-group-simo">
<condition field="destination_number" expression="^82(\d{2})$">
<action application="bridge"
data="{leg_timeout=15,ignore_early_media=true}${group(call:$1@${domain_name})}"/>
</condition>
</extension>
<extension name="call-group-order">
<condition field="destination_number" expression="^83(\d{2})$">
<action application="bridge"
data="{leg_timeout=15,ignore_early_media=true}${group(call:$1@${domain_name}:order)}"
/>
</condition>
</extension>
- 45 -
MINT 709 Capstone Project
<extension name="extension-intercom">
<condition field="destination_number" expression="^8(10[01][0-9])$">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="sip_auto_answer=true"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
</condition>
</extension>
<!--
dial the extension (1000-1019) for 30 seconds and go to voicemail if the
call fails (continue_on_fail=true), otherwise hang up after a successful
bridge (hangup_after-bridge=true)
-->
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="set" data="dialed_extension=$1"/>
<action application="export" data="dialed_extension=$1"/>
<!-- bind_meta_app can have these args <key> [a|b|ab] [a|b|o|s] <app> -->
<action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/>
<action application="bind_meta_app" data="2 b s
record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-
%M-%S)}.wav"/>
<action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/>
<action application="set" data="ringback=${us-ring}"/>
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="set" data="call_timeout=30"/>
<!-- <action application="set" data="sip_exclude_contact=${network_addr}"/> -->
<action application="set" data="hangup_after_bridge=true"/>
<!--<action application="set"
data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,USER_BUSY,NO_ANSWER,
TIMEOUT,NO_ROUTE_DESTINATION"/> -->
<action application="set" data="continue_on_fail=true"/>
<action application="hash" data="insert/${domain_name}-
call_return/${dialed_extension}/${caller_id_number}"/>
<action application="hash" data="insert/${domain_name}-
last_dial_ext/${dialed_extension}/${uuid}"/>
- 46 -
MINT 709 Capstone Project
<action application="set"
data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var
callgroup)}"/>
<!--<action application="export"
data="nolocal:sip_secure_media=${user_data(${dialed_extension}@${domain_name} var
sip_secure_media)}"/>-->
<action application="hash" data="insert/${domain_name}-
last_dial/${called_party_callgroup}/${uuid}"/>
<action application="bridge" data="user/${dialed_extension}@${domain_name}"/>
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
</condition>
</extension>
<extension name="group_dial_sales">
<condition field="destination_number" expression="^2000$">
<action application="bridge" data="${group_call(sales@${domain_name})}"/>
</condition>
</extension>
<extension name="group_dial_support">
<condition field="destination_number" expression="^2001$">
<action application="bridge" data="group/support@${domain_name}"/>
</condition>
</extension>
<extension name="group_dial_billing">
<condition field="destination_number" expression="^2002$">
<action application="bridge" data="group/billing@${domain_name}"/>
</condition>
</extension>
- 47 -
MINT 709 Capstone Project
</condition>
</extension>
<!--
This extension is used by mod_portaudio so you can pa call sip:someone@example.com
mod_portaudio will pass the entire string to the dialplan for routing.
-->
<extension name="sip_uri">
<condition field="destination_number" expression="^sip:(.*)$">
<action application="bridge" data="sofia/${use_profile}/$1"/>
</condition>
</extension>
<!--
start a dynamic conference with the settings of the "default" conference profile in
conference.conf.xml
-->
<extension name="nb_conferences">
<condition field="destination_number" expression="^(30\d{2})$">
<action application="answer"/>
<action application="conference" data="$1-${domain_name}@default"/>
</condition>
</extension>
<extension name="wb_conferences">
<condition field="destination_number" expression="^(31\d{2})$">
<action application="answer"/>
<action application="conference" data="$1-${domain_name}@wideband"/>
</condition>
- 48 -
MINT 709 Capstone Project
</extension>
<extension name="uwb_conferences">
<condition field="destination_number" expression="^(32\d{2})$">
<action application="answer"/>
<action application="conference" data="$1-${domain_name}@ultrawideband"/>
</condition>
</extension>
<!-- MONO 48kHz conferences -->
<extension name="cdquality_conferences">
<condition field="destination_number" expression="^(33\d{2})$">
<action application="answer"/>
<action application="conference" data="$1-${domain_name}@cdquality"/>
</condition>
</extension>
<!--
This extension will start a conference and invite a group.
At anytime the participant can dial *2 to bridge directly to the boss.
All other callers are then hung up on.
- 49 -
MINT 709 Capstone Project
-->
<extension name="mad_boss_intercom">
<condition field="destination_number" expression="^0911$">
<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss1"/>
<action application="set" data="conference_auto_outcall_caller_id_number=0911"/>
<action application="set" data="conference_auto_outcall_timeout=60"/>
<action application="set" data="conference_auto_outcall_flags=mute"/>
<action application="set"
data="conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer='bind_meta
_app 2 a s1 transfer::intercept:${uuid} inline'}"/>
<action application="set" data="sip_exclude_contact=${network_addr}"/>
<action application="conference_set_auto_outcall" data="${group_call(sales)}"/>
<action application="conference"
data="madboss_intercom1@default+flags{endconf|deaf}"/>
</condition>
</extension>
<!--
This extension will start a conference and invite a few of people.
At anytime the participant can dial *2 to bridge directly to the boss.
All other callers are then hung up on.
-->
<extension name="mad_boss_intercom">
<condition field="destination_number" expression="^0912$">
<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss2"/>
<action application="set" data="conference_auto_outcall_caller_id_number=0912"/>
<action application="set" data="conference_auto_outcall_timeout=60"/>
<action application="set" data="conference_auto_outcall_flags=mute"/>
<action application="set"
data="conference_auto_outcall_prefix={sip_auto_answer=true,execute_on_answer='bind_meta
_app 2 a s1 transfer::intercept:${uuid} inline'}"/>
<action application="set" data="sip_exclude_contact=${network_addr}"/>
<action application="conference_set_auto_outcall" data="loopback/9999"/>
<action application="conference"
data="madboss_intercom2@default+flags{endconf|deaf}"/>
</condition>
</extension>
- 50 -
MINT 709 Capstone Project
<!--This extension will start a conference and invite several people upon entering -->
<extension name="mad_boss">
<condition field="destination_number" expression="^0913$">
<!--These params effect the outcalls made once you join-->
<action application="set" data="conference_auto_outcall_caller_id_name=Mad Boss"/>
<action application="set" data="conference_auto_outcall_caller_id_number=0911"/>
<action application="set" data="conference_auto_outcall_timeout=60"/>
<action application="set" data="conference_auto_outcall_flags=none"/>
<!--<action application="set" data="conference_auto_outcall_announce=say:You have been
called into an emergency conference"/>-->
<!--Add as many of these as you need, These are the people you are going to call-->
<action application="conference_set_auto_outcall" data="loopback/9999"/>
<action application="conference" data="madboss3@default"/>
</condition>
</extension>
<!-- Create a conference on the fly and pull someone in at the same time. -->
<extension name="dynamic_conference">
<condition field="destination_number" expression="^5001$">
<action application="conference"
data="bridge:mydynaconf:sofia/${use_profile}/1234@conference.freeswitch.org"/>
</condition>
</extension>
<extension name="rtp_multicast_page">
<condition field="destination_number" expression="^pagegroup$|^7243$">
<action application="answer"/>
<action application="esf_page_group"/>
</condition>
- 51 -
MINT 709 Capstone Project
</extension>
<!--
Parking extensions... transferring calls to 5900 will park them in a queue.
-->
<extension name="park">
<condition field="destination_number" expression="^5900$">
<action application="set" data="fifo_music=$${hold_music}"/>
<action application="fifo" data="5900@${domain_name} in"/>
</condition>
</extension>
<!--
Parking pickup extension. Calling 5901 will pickup the call.
-->
<extension name="unpark">
<condition field="destination_number" expression="^5901$">
<action application="answer"/>
<action application="fifo" data="5900@${domain_name} out nowait"/>
</condition>
</extension>
<!--
Valet park retrieval, works with valet_park extension below.
Retrieve a valet parked call by dialing 6000 + park number + #
-->
<extension name="valet_park">
<condition field="destination_number" expression="^(6000)$">
<action application="answer"/>
<action application="valet_park" data="valet_parking_lot ask 1 11 10000 ivr/ivr-
enter_ext_pound.wav"/>
</condition>
</extension>
<!--
Valet park 6001-6099. Blind x-fer to 6001, 6002, etc. to valet park the call.
Dial 6001, 6002, etc. to retrieve a call that is already valet parked.
After call is retrieved, park extension is free for another call.
- 52 -
MINT 709 Capstone Project
-->
<extension name="valet_park">
<condition field="destination_number" expression="^(60\d[1-9])$">
<action application="answer"/>
<action application="valet_park" data="valet_parking_lot $1"/>
</condition>
</extension>
<!--
This extension is used with Snom phones.
<!--
This extension is used with Linksys phones.
- 53 -
MINT 709 Capstone Project
Set a Phone tab option Call Park Serv to yes. You can park and
pickup using soft keys "park" and "unpark" found during
active call when moving navigation button. The other option
is to use phone's star codes (defaults to *38 and *39).
-->
<extension name="park">
<condition field="source" expression="mod_sofia"/>
<condition field="destination_number" expression="callpark"/>
<condition field="${sip_refer_to}">
<expression><![CDATA[<sip:callpark@${domain_name};orbit=(\d+)>]]></expression>
<action application="fifo" data="$1@${domain_name} in undef $${hold_music}"/>
</condition>
</extension>
<!--
This extension is used with Linksys phones.
<!--
Here are some examples of how to override the ringback heard by the
far end. You have two variables that you can use to override this.
- 54 -
MINT 709 Capstone Project
<extension name="fax_receive">
<condition field="destination_number" expression="^9978$">
<action application="answer" />
<action application="playback" data="silence_stream://2000"/>
<action application="rxfax" data="/tmp/rxfax.tif"/>
<action application="hangup"/>
</condition>
</extension>
<extension name="fax_transmit">
<condition field="destination_number" expression="^9979$">
<action application="txfax" data="/tmp/txfax.tif"/>
<action application="hangup"/>
</condition>
</extension>
<!-- Send a 180 and let the far end generate ringback. -->
<extension name="ringback_180">
<condition field="destination_number" expression="^9980$">
<action application="ring_ready"/>
<action application="sleep" data="20000"/>
<action application="answer"/>
<action application="sleep" data="1000"/>
<action application="playback" data="voicemail/vm-goodbye.wav"/>
<action application="hangup"/>
</condition>
- 55 -
MINT 709 Capstone Project
</extension>
<!-- Send a 183 and send uk-ring as the ringtone. (early media) -->
<extension name="ringback_183_uk_ring">
<condition field="destination_number" expression="^9981$">
<action application="set" data="ringback=$${uk-ring}"/>
<action application="bridge" data="loopback/wait"/>
</condition>
</extension>
<!-- Send a 183 and use music as the ringtone. (early media) -->
<extension name="ringback_183_music_ring">
<condition field="destination_number" expression="^9982$">
<action application="set" data="ringback=$${hold_music}"/>
<action application="bridge" data="loopback/wait"/>
</condition>
</extension>
<!-- Answer the call and use music as the ringtone. (post answer) -->
<extension name="ringback_post_answer_uk_ring">
<condition field="destination_number" expression="^9983$">
<action application="set" data="transfer_ringback=$${uk-ring}"/>
<action application="answer"/>
<action application="bridge" data="loopback/wait"/>
</condition>
</extension>
<!-- Answer the call and use music as the ringtone. (post answer) -->
<extension name="ringback_post_answer_music">
<condition field="destination_number" expression="^9984$">
<action application="set" data="transfer_ringback=$${hold_music}"/>
<action application="answer"/>
<action application="bridge" data="loopback/wait"/>
</condition>
</extension>
<extension name="ClueCon">
<condition field="destination_number" expression="^9991$">
- 56 -
MINT 709 Capstone Project
<extension name="show_info">
<condition field="destination_number" expression="^9992$">
<action application="answer"/>
<action application="info"/>
<action application="sleep" data="250"/>
<action application="hangup"/>
</condition>
</extension>
<extension name="video_record">
<condition field="destination_number" expression="^9993$">
<action application="answer"/>
<action application="record_fsv" data="/tmp/testrecord.fsv"/>
</condition>
</extension>
<extension name="video_playback">
<condition field="destination_number" expression="^9994$">
<action application="answer"/>
<action application="play_fsv" data="/tmp/testrecord.fsv"/>
</condition>
</extension>
<extension name="delay_echo">
<condition field="destination_number" expression="^9995$">
<action application="answer"/>
<action application="delay_echo" data="5000"/>
</condition>
</extension>
<extension name="echo">
<condition field="destination_number" expression="^9996$">
<action application="answer"/>
- 57 -
MINT 709 Capstone Project
<action application="echo"/>
</condition>
</extension>
<extension name="milliwatt">
<condition field="destination_number" expression="^9997$">
<action application="answer"/>
<action application="playback" data="tone_stream://%(251,0,1004);loops=-1"/>
</condition>
</extension>
<extension name="tone_stream">
<condition field="destination_number" expression="^9998$">
<action application="answer"/>
<action application="playback"
data="tone_stream://path=${base_dir}/conf/tetris.ttml;loops=10"/>
</condition>
</extension>
<!--
You will no longer hear the bong tone. The wav file is playing stating the call is secure.
The file will not play unless you have both TLS and SRTP active.
-->
<extension name="hold_music">
<condition field="destination_number" expression="^9999$"/>
<condition field="${sip_has_crypto}"
expression="^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$">
<action application="answer"/>
<action application="execute_extension" data="is_secure XML features"/>
- 58 -
MINT 709 Capstone Project
<!--
You can place files in the default directory to get included.
-->
<X-PRE-PROCESS cmd="include" data="default/*.xml"/>
<!--
WARNING WARNING WARNING WARNING WARNING WARNING WARNING
WARNING WARNING WARNING WARNING
Anything you put below this line will usually get ignored due to the file in
default/99999_enum.xml as it will transfer the call to the enum dialplan.
<!--
<extension name="refer">
<condition field="${sip_refer_to}">
<expression><![CDATA[<sip:${destination_number}@${domain_name}>]]></expression>
</condition>
<condition field="${sip_refer_to}">
<expression><![CDATA[<sip:(.*)@(.*)>]]></expression>
<action application="set" data="refer_user=$1"/>
<action application="set" data="refer_domain=$2"/>
<action application="info"/>
<action application="bridge" data="sofia/${use_profile}/${refer_user}@${refer_domain}"/>
</condition>
</extension>
- 59 -
MINT 709 Capstone Project
-->
<!--
This is an example of how to override the RURI on an outgoing invite to a registered contact.
-->
<!--
<extension name="ruri">
<condition field="destination_number" expression="^ruri$">
<action application="bridge"
data="sofia/${ruri_profile}/${ruri_user}${regex(${sofia_contact(${ruri_contact})}|^[^\@]+(.*)
|%1)}"/>
</condition>
</extension>
<extension name="7004">
<condition field="destination_number" expression="^7004$">
<action application="set" data="ruri_profile=default"/>
<action application="set" data="ruri_user=2000"/>
<action application="set" data="ruri_contact=1001@${domain_name}"/>
<action application="execute_extension" data="ruri"/>
</condition>
</extension>
-->
<!-- SEE WARNING ABOVE IF YOU ARE TRYING TO ADD EXTENSIONS HERE! -->
</context>
</include>
****conf/sip_profiles/internal/00_internal.xml****
<include>
<gateway name="10.1.31.15">
<!--/// account username *required* ///-->
<param name="username" value="1000"/>
<!--/// auth realm: *optional* same as gateway name, if blank ///-->
<!--<param name="realm" value="asterlink.com"/>-->
<!--/// username to use in from: *optional* same as username, if blank ///-->
- 60 -
MINT 709 Capstone Project
****conf/sip_profiles/internal.xml****
<profile name="internal">
<!--
This is a sofia sip profile/user agent. This will service exactly one ip and port.
In FreeSWITCH you can run multiple sip user agents on their own ip and port.
When you hear someone say "sofia profile" this is what they are talking about.
-->
- 61 -
MINT 709 Capstone Project
<domains>
<!-- indicator to parse the directory for domains with parse="true" to get gateways-->
<!--<domain name="$${domain}" parse="true"/>-->
<!-- indicator to parse the directory for domains with parse="true" to get gateways and alias
every domain to this profile -->
<!--<domain name="all" alias="true" parse="true"/>-->
<domain name="all" alias="true" parse="false"/>
</domains>
<settings>
<!--
When calls are in no media this will bring them back to media
when you press the hold button.
-->
<!--<param name="media-option" value="resume-media-on-hold"/> -->
<!--
This will allow a call after an attended transfer go back to
bypass media after an attended transfer.
-->
<!--<param name="media-option" value="bypass-media-after-att-xfer"/>-->
<!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> -->
<param name="debug" value="0"/>
<!-- If you want FreeSWITCH to shutdown if this profile fails to load, uncomment the next
line. -->
<!-- <param name="shutdown-on-fail" value="true"/> -->
- 62 -
MINT 709 Capstone Project
- 63 -
MINT 709 Capstone Project
- 64 -
MINT 709 Capstone Project
<!-- turn on auto-flush during bridge (skip timer sleep when the socket already has data)
(reduces delay on latent connections default true, must be disabled explicitly)-->
<!--<param name="rtp-autoflush-during-bridge" value="false"/>-->
<!--If you don't want to pass through timestamps from 1 RTP call to another (on a per call
basis with rtp_rewrite_timestamps chanvar)-->
<!--<param name="rtp-rewrite-timestamps" value="true"/>-->
<!--<param name="pass-rfc2833" value="true"/>-->
<!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
<!--Uncomment to let calls hit the dialplan *before* you decide if the codec is ok-->
<!--<param name="inbound-late-negotiation" value="true"/>-->
<!-- accept any authentication without actually checking (not a good feature for most people)
-->
<!-- <param name="accept-blind-auth" value="true"/> -->
<!-- suppress CNG on this profile or per call with the 'suppress_cng' variable -->
<!-- <param name="suppress-cng" value="true"/> -->
- 65 -
MINT 709 Capstone Project
<!-- external_sip_ip
Used as the public IP address for SDP.
Can be an one of:
ip address - "12.34.56.78"
a stun server lookup - "stun:stun.server.com"
a DNS name - "host:host.server.com"
auto - Use guessed ip.
auto-nat - Use ip learned from NAT-PMP or UPNP
-->
<param name="ext-rtp-ip" value="10.1.31.15"/>
<param name="ext-sip-ip" value="10.1.31.15"/>
- 66 -
MINT 709 Capstone Project
These are enabled to make the default config work better out of the box.
If you need more than ONE domain you'll need to not use these options.
-->
<!--all inbound reg will look in this domain for the users -->
<param name="force-register-domain" value="$${domain}"/>
<!--force the domain in subscriptions to this value -->
<param name="force-subscription-domain" value="$${domain}"/>
<!--all inbound reg will stored in the db using this domain -->
<param name="force-register-db-domain" value="$${domain}"/>
<!--force suscription expires to a lower value than requested-->
<!--<param name="force-subscription-expires" value="60"/>-->
<!-- disable register and transfer which may be undesirable in a public switch -->
<!--<param name="disable-transfer" value="true"/>-->
<!--<param name="disable-register" value="true"/>-->
<!--
enable-3pcc can be set to either 'true' or 'proxy', true accepts the call
right away, proxy waits until the call has been answered then sends accepts
-->
<!--<param name="enable-3pcc" value="true"/>-->
<!-- use at your own risk or if you know what this does.-->
<!--<param name="NDLB-force-rport" value="true"/>-->
<!--
Choose the realm challenge key. Default is auto_to if not set.
auto_from - uses the from field as the value for the sip realm.
auto_to - uses the to field as the value for the sip realm.
<anyvalue> - you can input any value to use for the sip realm.
If you want URL dialing to work you'll want to set this to auto_from.
If you use any other value besides auto_to or auto_from you'll loose
the ability to do multiple domains.
- 67 -
MINT 709 Capstone Project
-->
<param name="challenge-realm" value="auto_from"/>
<!--<param name="disable-rtp-auto-adjust" value="true"/>-->
<!-- on inbound calls make the uuid of the session equal to the sip call id of that call -->
<!--<param name="inbound-use-callid-as-uuid" value="true"/>-->
<!-- on outbound calls set the callid to match the uuid of the session -->
<!--<param name="outbound-use-uuid-as-callid" value="true"/>-->
<!-- set to false disable this feature -->
<!--<param name="rtp-autofix-timing" value="false"/>-->
<!-- set this param to false if your gateway for some reason hates X- headers that it is
supposed to ignore-->
<!--<param name="pass-callee-id" value="false"/>-->
<!-- clear clears them all or supply the name to add or the name prefixed with ~ to remove
valid values:
clear
CISCO_SKIP_MARK_BIT_2833
SONUS_SEND_INVALID_TIMESTAMP_2833
-->
<!--<param name="auto-rtp-bugs" data="clear"/>-->
<!-- the following can be used as workaround with bogus SRV/NAPTR records -->
<!--<param name="disable-srv" value="false" />-->
<!--<param name="disable-naptr" value="false" />-->
<!-- The following can be used to fine-tune timers within sofia's transport layer
Those settings are for advanced users and can safely be left as-is -->
- 68 -
MINT 709 Capstone Project
Set the T1x64 timeout value used by the SIP transaction engine.
The T1x64 is duration used for timers B, F, H, and J (UDP) by the SIP transaction
engine.
The timeout value T1x64 can be adjusted separately from the initial retransmission
interval T1. -->
<!-- <param name="timer-T1X64" value="32000" /> -->
<!--
Transaction lifetime (in milliseconds).
Set the lifetime for completed transactions used by the SIP transaction engine.
A completed transaction is kept around for the duration of T4 in order to catch late
responses.
The T4 is the maximum duration for the messages to stay in the network and the
duration of SIP timer K. -->
<!-- <param name="timer-T4" value="4000" /> -->
</settings>
</profile>
****conf/sip_profiles/internal-ipv6.xml****
<profile name="internal-ipv6">
<!--
This is an example of a sofia profile setup to listen on IPv6.
-->
<!-- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files -->
- 69 -
MINT 709 Capstone Project
<!--aliases are other names that will work as a valid profile name for this profile-->
<settings>
<!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> -->
<param name="debug" value="0"/>
<param name="sip-trace" value="no"/>
<param name="context" value="public"/>
<param name="rfc2833-pt" value="101"/>
<!-- port to bind to for sip traffic -->
<param name="sip-port" value="$${internal_sip_port}"/>
<param name="dialplan" value="XML"/>
<param name="dtmf-duration" value="100"/>
<param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
<param name="outbound-codec-prefs" value="$${global_codec_prefs}"/>
<param name="use-rtp-timer" value="true"/>
<param name="rtp-timer-name" value="soft"/>
<!-- ip address to use for rtp -->
<param name="rtp-ip" value="2001:db8:c18:1::2"/>
<!-- ip address to bind to -->
<param name="sip-ip" value="2001:db8:c18:1::2"/>
<param name="hold-music" value="$${hold_music}"/>
<!--<param name="enable-100rel" value="false"/>-->
<param name="apply-inbound-acl" value="domains"/>
<!--<param name="apply-register-acl" value="domains"/>-->
<!--<param name="dtmf-type" value="info"/>-->
<param name="record-template"
value="$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-
%S)}.wav"/>
<!--enable to use presence and mwi -->
<param name="manage-presence" value="true"/>
<!-- This setting is for AAL2 bitpacking on G726 -->
<!-- <param name="bitpacking" value="aal2"/> -->
<!--max number of open dialogs in proceeding -->
<!--<param name="max-proceeding" value="1000"/>-->
<!--session timers for all call to expire after the specified seconds -->
<!--<param name="session-timeout" value="120"/>-->
<!--<param name="multiple-registrations" value="true"/>-->
- 70 -
MINT 709 Capstone Project
<!--set to 'greedy' if you want your codec list to take precedence -->
<param name="inbound-codec-negotiation" value="generous"/>
<!-- if you want to send any special bind params of your own -->
<!--<param name="bind-params" value="transport=udp"/>-->
<!--<param name="unregister-on-options-fail" value="true"/>-->
<!--If you don't want to pass through timestampes from 1 RTP call to another (on a per call
basis with rtp_rewrite_timestamps chanvar)-->
<!--<param name="rtp-rewrite-timestamps" value="true"/>-->
<!--<param name="pass-rfc2833" value="true"/>-->
<!--If you have ODBC support and a working dsn you can use it instead of SQLite-->
<!--<param name="odbc-dsn" value="dsn:user:pass"/>-->
<!--Uncomment to let calls hit the dialplan *before* you decide if the codec is ok-->
<!--<param name="inbound-late-negotiation" value="true"/>-->
- 71 -
MINT 709 Capstone Project
<!-- accept any authentication without actually checking (not a good feature for most people)
-->
<!-- <param name="accept-blind-auth" value="true"/> -->
<!-- suppress CNG on this profile or per call with the 'suppress_cng' variable -->
<!-- <param name="suppress-cng" value="true"/> -->
-->
<!--all inbound reg will look in this domain for the users -->
<param name="force-register-domain" value="$${domain}"/>
- 72 -
MINT 709 Capstone Project
<!--all inbound reg will stored in the db using this domain -->
<param name="force-register-db-domain" value="$${domain}"/>
<!-- disable register and transfer which may be undesirable in a public switch -->
<!--<param name="disable-transfer" value="true"/>-->
<!--<param name="disable-register" value="true"/>-->
<!--<param name="enable-3pcc" value="true"/>-->
<!-- use stun when specified (default is true) -->
<!--<param name="stun-enabled" value="true"/>-->
<!-- use stun when specified (default is true) -->
<!-- set to true to have the profile determine stun is not useful and turn it off globally-->
<!--<param name="stun-auto-disable" value="true"/>-->
<!-- the following can be used as workaround with bogus SRV/NAPTR records -->
<!--<param name="disable-srv" value="false" />-->
<!--<param name="disable-naptr" value="false" />-->
</settings>
</profile>
Below you will find the configurations of the Cisco 2821 router:
Router#sh running-config
Building configuration...
- 73 -
MINT 709 Capstone Project
boot-start-marker
boot-end-marker
!
logging message-counter syslog
!
no aaa new-model
memory-size iomem 10
!
dot11 syslog
no ip source-route
!
!
ip cef
no ip dhcp conflict logging
ip dhcp excluded-address 192.168.20.1 192.168.20.50
ip dhcp excluded-address 192.168.10.1 192.168.10.50
!
ip dhcp pool data
network 192.168.20.0 255.255.255.0
default-router 192.168.20.1
lease infinite
!
ip dhcp pool voice
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1
lease infinite
!
!
no ipv6 cef
!
multilink bundle-name authenticated
!
!
!
!
!
!
!
- 74 -
MINT 709 Capstone Project
- 75 -
MINT 709 Capstone Project
match cos 5
!
!
policy-map voice
class voip
set ip dscp ef
priority percent 60
!
!
!
!
!
interface GigabitEthernet0/0
ip address 10.1.31.1 255.255.255.0
duplex auto
speed auto
!
interface GigabitEthernet0/1
no ip address
shutdown
duplex auto
speed auto
!
interface FastEthernet0/1/0
switchport mode trunk
switchport voice vlan 10
!
interface FastEthernet0/1/1
switchport mode trunk
switchport voice vlan 10
!
interface FastEthernet0/1/2
!
interface FastEthernet0/1/3
!
interface Serial0/0/0
no ip address
shutdown
- 76 -
MINT 709 Capstone Project
no fair-queue
clock rate 2000000
!
interface Vlan1
no ip address
!
interface Vlan10
description voip vlan
ip address 192.168.10.1 255.255.255.0
!
interface Vlan20
description data vlan
ip address 192.168.20.1 255.255.255.0
!
ip forward-protocol nd
no ip http server
no ip http secure-server
!
!
!
!
!
!
!
!
!
!
control-plane
!
!
!
ccm-manager fax protocol cisco
!
mgcp fax t38 ecm
!
!
!
dial-peer voice 10 voip
- 77 -
MINT 709 Capstone Project
destination-pattern 1000
no voice-class sip anat
session protocol sipv2
session target ipv4:10.1.31.15
session transport udp
dtmf-relay rtp-nte
codec g711ulaw
no vad
!
!
sip-ua
authentication username 1000 password 7 091D1C5A4D
retry invite 3
retry register 10
timers connect 100
registrar ipv6:[2001:db8:c18:1::2] expires 3600
sip-server ipv4:10.1.31.15
protocol mode dual-stack
!
!
!
telephony-service
em logout 0:0 0:0 0:0
max-ephones 15
max-dn 24
ip source-address 192.168.10.1 port 2000
load 7941 usbflash0:SCCP41.8-5-2SR1S
max-conferences 8 gain -6
transfer-system full-consult
create cnf-files version-stamp 7960 Nov 26 2009 13:09:38
!
!
ephone-dn 1
number 2001
name Talwar,V
!
!
ephone-dn 2
- 78 -
MINT 709 Capstone Project
number 2002
name MINT
!
!
ephone 1
device-security-mode none
mac-address 001B.D512.4E3A
type 7941
button 1:1
!
!
!
ephone 2
device-security-mode none
mac-address 001B.D512.3D35
type 7941
button 1:2
!
!
!
line con 0
line aux 0
line vty 0 4
login
!
scheduler allocate 20000 1000
end
Router#
- 79 -
MINT 709 Capstone Project
References
- 80 -