IP Telephony
| Document revision: | 2.2 (Mon Apr 26 12:53:19 GMT 2004) |
| Applies to: | V2.8 |
General Information
Summary
The MikroTik RouterOS IP Telephony feature enables Voice over IP (VoIP) communications using routers equipped with the following voice port hardware:
- Quicknet LineJACK or PhoneJACK analog telephony cards
- ISDN cards
- Voicetronix OpenLine4 (was V4PCI) - 4 analog telephone lines cards
- Zaptel Wildcard X100P IP telephony card - 1 analog telephone line
Specifications
Packages required: telephonyLicense required: Level1
Submenu level: /ip telephony
Standards and Technologies: RTP
Hardware usage: Pentium MMX level processor recommended
Related Documents
Description
IP telephony, known as Voice over IP (VoIP), is the transmission of telephone calls over a data network like one of the many networks that make up the Internet. There are four ways that you might talk to someone using VoIP:
- Computer-to-computer - This is certainly the easiest way to use VoIP, and you don't have to pay for long-distance calls.
- Computer-to-telephone - This method allows you to call anyone (who has a phone) from your computer. Like computer-to-computer calling, it requires a software client. The software is typically free, but the calls may have a small per-minute charge.
- Telephone-to-computer - Allows a standard telephone user to initiate a call to a computer user.
- Telephone-to-telephone - Through the use of gateways, you can connect directly with any other standard telephone in the world.
Suppoted hardware:
-
Quicknet Technologies cards:
- Internet PhoneJACK (ISA or PCI) for connecting an analog telephone (FXS port)
- Internet LineJACK (ISA) for connecting an analog telephone line (FXO port) or a telephone (FXS port)
- ISDN client cards (PCI) for connecting an ISDN line. See Device Driver List for the list of supported PCI ISDN cards
- Voicetronix OpenLine4 card for connecting four (4) analog telephone lines (FXO ports)
- Zaptel Wildcard X100P IP telephony card (from Linux Support Services) for connecting one analog telephone line (FXO port)
Supported standards:
- MikroTik RouterOS supports IP Telephony in compliance with the International Telecommunications Union - Telecommunications (ITU-T) specification H.323v4. H.323 is a specification for transmitting multimedia (voice, video, and data) across an IP network. H.323v4 includes: H.245, H.225, Q.931, H.450.1, RTP(real-time protocol)
- The followong audio codecs are supported: G.711 (the 64 kbps Pulse code modulation (PCM) voice coding), G.723.1 (the 6.3 kbps compression technique that can be used for compressing audio signal at very low bit rate), GSM-06.10 (the 13.2 kbps coding), LPC-10 (the 2.5 kbps coding), G.729 and G.729a (the 8 kbps CS-ACELP software coding), G.728 (16 kbps coding technique, supported only on Quicknet LineJACK cards)
In PSTN lines there is a known delay of the signal caused by switching and signal compressing devices of the telephone network (so, it depends on the distance between the peers), which is generally rather low. The delay is also present in IP networks. The main difference between a PSTN and an IP network is that in IP networks that delay is more random. The actual packet delay may vary in order of magnutude in congested networks (if a network becomes congested, some packets may even be lost). Also packet reordering may take place. To prevent signal loss, caused by random jitter of IP networks and packet reordering, to corrupt audio signal, a jitter buffer is present in IP telephony devices. The jitter buffer is delaying the actual playback of a received packet forming The larger the jitter buffer, the larger the total delay, but fewer packets get lost due to timeout.
The total delay from the moment of recording the voice signal till its playback is the sum of following three delay times:
- delay time at the recording point (approx. 38ms)
- delay time of the IP network (1..5ms and up)
- delay time at the playback point (the jitter delay)
Notes
Each installed Quicknet card requires IO memory range in the following sequence: the first card occupies addresses 0x300-0x31f, the second card 0x320-0x33f, the third 0x340-0x35f, and so on. Make sure there is no conflict in these ranges with other devices, e.g., network interface cards, etc.
Use the telephony logging feature to debug your setup.
Additional Resources
IP Telephony OnlineGeneral Voice port settings
Submenu level: /ip telephony voice-portDescription
This submenu is used for managing all IP telephony voice ports (linejack, phonejack, isdn, voip, voicetronix, zaptel)
Property Description
name (name) - assigned name of the voice port type (read-only: phonejack | linejack | phonejack-lite | phonejack-pci | voip | isdn | voicetronix | zaptel) - type of the installed telephony voice port:linejack - Quicknet LineJACK (ISA)
phonejack-lite - Quicknet PhoneJACK Lite Linux Edition (ISA)
phonejack-pci - Quicknet PhoneJACK (PCI)
voip - generic Voice over IP port
isdn - ISDN cards
voicetronix - Voicetronix OpenLine4
zaptel - Zaptel Wildcard X100P
Notes
If autodial does not exactly match an item in /ip telephony numbers, there can be two possibilities:
- if autodial is incomplete, rest of the number is asked (local voice port) or incoming call is denied (VoIP)
- if autodial is invalid, line is hung up (PSTN line), busy tone is played (POTS) or incoming call is denied (VoIP)
Voicetronix Voice Ports
Submenu level: /ip telephony voice-port voicetronixProperty Description
name (name) - name given by the user or the default one autodial (integer; default: "") - phone number which will be dialed immediately after the handset has been lifted. If this number is incomplete, then the remaining part has to be dialed on the dial-pad. If the number is incorrect, the line is hung up. If the number is correct, then the appropriate number is dialed (the direct-call mode is used - the line is picked up only after the remote party answers the call) playback-volume (integer: -48..48; default: 0) - playback volume in dBCommand Description
test-balance - current balance-registers value is tested once. Result is placed in balance-status parameter. Balance can be tested only when line is off-hook. It won't work if line is on-hook or there is an established connectionunnamed (name) - port name to test balance of
unnamed (name) - port name to find best balance of
unnamed (name) - port name to clear call with
unnamed (name) - port name show statistics of Return Values
round-trip-delay (time) - maximal time of packet round trip
packets-sent (integer) - number of packets sent by this card (these packets are digitalized input of the voice port)
bytes-sent (integer) - number of bytes sent by this card (these packets are digitalized input of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets sent
packets-received (integer) - number of packets received by this card (these packets form analog output of the voice port)
bytes-received (integer) - number of bytes received by this card (these packets form analog output of the voice port)
received-time (text) - minimal/average/maximal intervals between packets received
average-jitter-delay (time) - approximate delay time from the moment of receiving an audio packet from the IP network till it is played back over the telephony voice port. The value shown is never less than 30ms, although the actual delay time could be less. If the shown value is >40ms, then it is close (+/-1ms) to the actual delay time.
unnamed (name) - port name to monitor Return Values
status (on-hook | off-hook | ring | connection | busy) - current state of the port:
directiopn (ip-to-port | port-to-ip) - direction of the call
phone-number (integer) - the phone number being dialed
remote-party-name (text) - name and IP address of the remote party
codec (name) - CODEC used for the audio connection
duration (time) - duration of the phone call
Notes
As some Voicetronix cards fail to detect loop drop correctly, with loop-drop-detection you can manage whether loop drop detection feature is enabled. The effect of not working loop-drop detection is call terminated at once when connection is established.
Some tips for testing balance registers:
- test is sensitive to noise from the phone, so it's recommended to cover mouth piece during it;
- find-best-balance can be interrupted by clear-call command;
- once best balance-registers value is known, it can be set manually to this best value for all voicetronix voice ports, which will use the same telephone line.
LineJack Voice Ports
Submenu level: /ip telephony voice-port linejackProperty Description
name (name) - name given by the user or the default one autodial (integer; default: "") - phone number which will be dialed immediately after the handset has been lifted. If this number is incomplete, then the remaining part has to be dialed on the dial-pad. If the number is incorrect, the line is hung up (FXO "line" port) or busy tone is played (FXS "phone" port). If the number is correct, then the appropriate number is dialed. If it is an incomming call from the PSTN line, then the direct-call mode is used - the line is picked up only after the remote party answers the call playback-volume (integer: -48..48; default: 0) - playback volume in dBCommand Description
blink - blink the LEDs of the specified voice port for five seconds after it is invoked. This command can be used to locate the respective card from several linejack cardsunnamed (name) - card name to blink the LED of
unnamed (name) - port name to clear call with
unnamed (name) - port name show statistics of Return Values
round-trip-delay (time) - maximal time of packet round trip
packets-sent (integer) - number of packets sent by this card (these packets are digitalized input of the voice port)
bytes-sent (integer) - number of bytes sent by this card (these packets are digitalized input of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets sent
packets-received (integer) - number of packets received by this card (these packets form analog output of the voice port)
bytes-sent (integer) - number of bytes received by this card (these packets form analog output of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets received
average-jitter-delay (time) - approximate delay time from the moment of receiving an audio packet from the IP network till it is played back over the telephony voice port. The value shown is never less than 30ms, although the actual delay time could be less. If the shown value is >40ms, then it is close (+/-1ms) to the actual delay time.
unnamed (name) - port name to monitor Return Values
status (on-hook | off-hook | ring | connection | busy) - current state of the port:
port (phone | line) - the active port of the card
directiopn (ip-to-port | port-to-ip) - direction of the call
line-status (plugged | unplugged) - state of the PSTN line
phone-number (integer) - the phone number being dialed
remote-party-name (text) - name and IP address of the remote party
codec (name) - CODEC used for the audio connection
duration (time) - duration of the phone call
Notes
When telephone line is connected to the 'line' port, green LED next to the port should be lit in some seconds. If telephone line disappear, the LED next to the 'line' port will change its state to red in an hour or when the line is activated (i.e. when somebody calls to/from it). When telephone line is plugged in the 'phone' port before the router is turned on, red LED next to the port will be lit. WARNING: do not plug telephone line into the 'phone' port when the router is running and green LED next to the port is lit - this might damage the card. The status of the 'phone' port is only detected on system startup.
PhoneJack Voice Ports
Submenu level: /ip telephony voice-port phonejackProperty Description
name (name) - name given by the user or the default one type (read-only: phonejack | phonejack-lite | phonejack-pci) - type of the card autodial (integer; default: "") - phone number which will be dialed immediately after the handset has been lifted. If this number is incomplete, then the remaining part has to be dialed on the dial-pad. If the number is incorrect, busy tone is played. If the number is correct, then the appropriate number is dialed playback-volume (integer: -48..48; default: 0) - playback volume in dBCommand Description
clear-call - terminate a current call established with the specified voice portunnamed (name) - port name to clear call with
unnamed (name) - port name show statistics of Return Values
round-trip-delay (time) - maximal time of packet round trip
packets-sent (integer) - number of packets sent by this card (these packets are digitalized input of the voice port)
bytes-sent (integer) - number of bytes sent by this card (these packets are digitalized input of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets sent
packets-received (integer) - number of packets received by this card (these packets form analog output of the voice port)
bytes-sent (integer) - number of bytes received by this card (these packets form analog output of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets received
average-jitter-delay (time) - approximate delay time from the moment of receiving an audio packet from the IP network till it is played back over the telephony voice port. The value shown is never less than 30ms, although the actual delay time could be less. If the shown value is >40ms, then it is close (+/-1ms) to the actual delay time.
unnamed (name) - port name to monitor Return Values
status (on-hook | off-hook | ring | connection | busy) - current state of the port:
port (phone | line) - the active port of the card
directiopn (ip-to-port | port-to-ip) - direction of the call
line-status (plugged | unplugged) - state of the PSTN line
phone-number (integer) - the phone number being dialed
remote-party-name (text) - name and IP address of the remote party
codec (name) - CODEC used for the audio connection
duration (time) - duration of the phone call
Zaptel Voice Ports
Submenu level: /ip telephony voice-port zaptelProperty Description
name (name) - name given by the user or the default one autodial (integer; default: "") - phone number which will be dialed immediately after the handset has been lifted. If this number is incomplete, then the remaining part has to be dialed on the dial-pad. If the number is incorrect, the line is hung up. If the number is correct, then the appropriate number is dialed (the direct-call mode is used - the line is picked up only after the remote party answers the call) playback-volume (integer: -48..48; default: 0) - playback volume in dBCommand Description
clear-call - terminate a current call established with the specified voice portunnamed (name) - port name to clear call with
unnamed (name) - port name show statistics of Return Values
round-trip-delay (time) - maximal time of packet round trip
packets-sent (integer) - number of packets sent by this card (these packets are digitalized input of the voice port)
bytes-sent (integer) - number of bytes sent by this card (these packets are digitalized input of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets sent
packets-received (integer) - number of packets received by this card (these packets form analog output of the voice port)
bytes-sent (integer) - number of bytes received by this card (these packets form analog output of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets received
average-jitter-delay (time) - approximate delay time from the moment of receiving an audio packet from the IP network till it is played back over the telephony voice port. The value shown is never less than 30ms, although the actual delay time could be less. If the shown value is >40ms, then it is close (+/-1ms) to the actual delay time.
unnamed (name) - port name to monitor Return Values
status (on-hook | off-hook | ring | connection | busy) - current state of the port:
directiopn (ip-to-port | port-to-ip) - direction of the call
line-status (plugged | unplugged) - state of the PSTN line
phone-number (integer) - the phone number being dialed
remote-party-name (text) - name and IP address of the remote party
codec (name) - CODEC used for the audio connection
duration (time) - duration of the phone call
ISDN Voice Ports
Submenu level: /ip telephony voice-port isdnProperty Description
name (name) - name given by the user or the default one msn (integer) - telephone number of the ISDN voice port (ISDN MSN number) lmsn (text) - msn pattern to listen on. It determines which calls from the ISDN line this voice port should answer. If left empty, msn is used autodial (integer; default: "") - phone number which will be dialed immediately on each incoming ISDN call. If this number contains 'm', then it will be replaced by originally called (ISDN) telephone number. If this number is incomplete, then the remaining part has to be dialed by the caller. If the number is incorrect, call is refused. If the number is correct, then the appropriate number is dialed. For that direct-call mode is used - the line is picked up only after the remote party answers the call playback-volume (integer: -48..48; default: 0) - playback volume in dBCommand Description
clear-call - terminate a current call established with the specified voice portunnamed (name) - port name to clear call with
unnamed (name) - port name show statistics of Return Values
round-trip-delay (time) - maximal time of packet round trip
packets-sent (integer) - number of packets sent by this card (these packets are input of the voice port)
bytes-sent (integer) - number of bytes sent by this card (these packets are input of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets sent
packets-received (integer) - number of packets received by this card (these packets form output of the voice port)
bytes-sent (integer) - number of bytes received by this card (these packets form output of the voice port)
sent-time (text) - minimal/average/maximal intervals between packets received
average-jitter-delay (time) - approximate delay time from the moment of receiving an audio packet from the IP network till it is played back over the telephony voice port. The value shown is never less than 30ms, although the actual delay time could be less. If the shown value is >40ms, then it is close (+/-1ms) to the actual delay time.
unnamed (name) - port name to monitor Return Values
status (on-hook | off-hook | ring | connection | busy) - current state of the port:
directiopn (ip-to-port | port-to-ip) - direction of the call
phone-number (integer) - the phone number being dialed
remote-party-name (text) - name and IP address of the remote party
codec (name) - CODEC used for the audio connection
duration (time) - duration of the phone call
Notes
In contrary to analog voice ports phonejack, linejack, voicetronix, zaptel), which are as many as the number of cards installed, the isdn ports can be added as many as desired.
There is a possibility to enter some special symbols in lmsn property. Meaning of the special symbols:
- ; - separates pattern entries (more than one pattern can be specified this way)
- ? - matches one character
- * - matches zero or more characters
- [ ] - matches any single character from the set in brackets
- [^ ] - matches any single character not from the set in brackets
Voice Port for Voice over IP (voip)
Submenu level: /ip telephony voice-port voipDescription
The voip voice ports are virtual ports, which designate a voip channel to another host over the IP network. You must have at least one voip voice port to be able to make calls to other H.323 devices over IP network.
Property Description
name (name) - name given by the user or the default one remote-address (IP address; default: 0.0.0.0) - IP address of the remote party (IP telephone or gateway) associated with this voice port. If the call has to be performed through this voice port, then the specified IP address is called. If there is an incoming call from the specified IP address, then the parameters of this voice port are used. If there is an incoming call from an IP address, which is not specified in any of the voip voice port records, then the default record is used. If there is no default record, then default values are usedNumbers
Description
This is the so-called "routing table" for voice calls. This table assigns numbers to the voice ports.The main function of the numbers routing table is to determine:
- to which voice port route the call
- what number to send over to the remote party
Property Description
dst-pattern (integer) - pattern of the telephone number. Symbol '.' designate any digit, symbol '_' (only as the last one) designate any symbols (i.e. any number of characters can follow, ended with '#' button) voice-port (name) - voice port to be used when calling the specified telephone number prefix (integer) - prefix, which will be used to substitute the known part of the dst-pattern, i.e., the part containing digits. The dst-pattern argument is used to determine which voice port to be used, whereas the prefix argument designates the number to dial over the voice port (be sent over to the remote party). If the remote party is an IP telephony gateway, then the number will be used for making the callNotes
More than one entry can be added with exactly the same dst-pattern. If first one of them is already busy, next one with the same dst-pattern is used. Telephony number entries can be moved, to select desired order.
Example
Let us consider the following example for the number table:
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 12345 XX
1 1111. YY
2 22... ZZ 333
3 ... QQ 55
[admin@MikroTik] ip telephony numbers>
We will analyze the Number Received (nr) - number dialed at the telephone, or received over the line, the Voice Port (vp) - voice port to be used for the call, and the Number to Call (nc) - number to be called over the Voice Port.
- If nr=55555, it does not match any of the destination patterns, therefore it is rejected
- If nr=123456, it does not match any of the destination patterns, therefore it is rejected
- If nr=1234, it does not match any of the destination patterns (incomplete for record #0), therefore it is rejected
- If nr=12345, it matches the record #0, therefore number "" is dialed over the voice port XX
- If nr=11111, it matches the record #1, therefore number "1" is dialed over the voice port YY
- If nr=22987, it matches the record #2, therefore number "333987" is dialed over the voice port ZZ
- If nr=22000, it matches the record #2, therefore number "333000" is dialed over the voice port ZZ
- If nr=444, it matches the record #3, therefore number "55444" is dialed over the voice port QQ
Let us add a few more records:
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 12345 XX
1 1111. YY
2 22... ZZ 333
3 ... QQ 55
4 222 KK 44444
5 3.. LL 553
[admin@MikroTik] ip telephony numbers>
- If nr=222 => the best match is the record #4 => nc=44444, vp=KK (note: the 'best match' means that it has the most coinciding digits between the nr and destination pattern).
- If nr=221 => incomplete record #2 => call is rejected
- If nr=321 => the best match is the record #5 => nc=55321, vp=LL
- If nr=421 => matches the record #3 => nc=55421, vp=QQ
- If nr=335 => the best match is the record #5 => nc=55321, vp=LL
Let us add a few more records:
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 12345 XX
1 1111. YY
2 22... ZZ 333
3 ... QQ 55
4 222 KK 44444
5 3.. LL 553
6 33... MM 33
7 11. NN 7711
[admin@MikroTik] ip telephony numbers>
- If nr=335 => incomplete record #6 => the call is rejected. The nr=335 fits perfectly both the record #3 and #5. The #5 is chosen as the 'best match' candidate at the moment. Furthermore, there is record #6, which has two matching digits (more than for #3 or #5). Therefore the #6 is chosen as the 'best match'. However, the record #6 requires five digits, but the nr has only three. Two digits are missing, therefore the number is incomplete. Two additional digits would be needed to be entered on the dialpad. If the number is sent over from the network, it is rejected.
- If nr=325 => matches the record #5 => nc=55325, vp=LL
- If nr=33123 => matches the record #6 => nc=33123, vp=MM
- If nr=123 => incomplete record #0 => call is rejected
- If nr=111 => incomplete record #1 => call is rejected
- If nr=112 => matches the record #7 => nc=77112, vp=NN
- If nr=121 => matches the record #3 => nc=55121, vp=QQ
It is impossible to add the following records:
# DST-PATTERN VOICE-PORT PREFIX
reason:
11 DD conflict with record # 1
and # 7
11.. DD conflict with record # 7
111 DD conflict with record # 1
22. DD conflict with record # 2
..... DD conflict with record # 3
Regional Settings
Submenu level: /ip telephony regionDescription
Regional settings are used to adjust the voice port properties to the PSTN system or the PBX. For example, to detect hang-up from line, there has to be correct regional setting (correct busy-tone-frequency and busy-tone-cadence). Without that, detect-cpt parameter the voice port has to be enabled.
Property Description
name (name) - name of the regional setting busy-tone-cadence (integer: 0..30000; default: 500,500) - busy tone cadence in msNotes
To generate a tone, frequency and cadence arguments are used. The dialtone always is continuous signal, therefore it does not have the cadence argument. In order to detect dialtone, it should be at least 100ms long.
There are 10 pre-defined regions, which can not be deleted (but may be changed)
Audio CODECs
Submenu level: /ip telephony codecDescription
CODECs are listed according to their priority of use. The highest priority is at the top. CODECs can be enabled, disabled and moved within the list. When connecting with other H.323 systems, the protocol will negotiate the CODEC which both of them support according to the priority order.
The hardware codecs (/hw) are built-in CODECs supported by some cards.
The choice of the CODEC type is based on the throughput and speed of the network. Better audio quality can be achieved by using CODEC requiring higher network throughput. The highest audio quality can be achieved by using the G.711-uLaw CODEC requiring 64kb/s throughput for each direction of the call. It is used mostly within a LAN. The G.723.1 CODEC is the most popular one to be used for audio connections over the Internet. It requires only 6.3kb/s throughput for each direction of the call.
Example
[admin@MikroTik] ip telephony codec> print
Flags: X - disabled
# NAME
0 G.723.1-6.3k/sw
1 G.728-16k/hw
2 G.711-ALaw-64k/hw
3 G.711-uLaw-64k/hw
4 G.711-uLaw-64k/sw
5 G.711-ALaw-64k/sw
6 G.729A-8k/sw
7 GSM-06.10-13.2k/sw
8 LPC-10-2.5k/sw
9 G.723.1-6.3k/hw
10 G.729-8k/sw
[admin@MikroTik] ip telephony codec>
AAA
Submenu level: /ip telephony aaaDescription
AAA (Authentication Authorization Accounting) can be used to configure the RADIUS accounting feature.
The contents of the CDR (Call Detail Record) are as follows:
- NAS-Identifier - router name (from /system identity print)
- NAS-IP-Address - router's local IP address which the connection was established to (if exist)
- NAS-Port-Type - always Async
- Event-Timestamp - data and time of the event
- Acct-Session-Time - current connection duration (only in INTERIM-UPDATE and STOP records)
- Acct-Output-Packets - sent RTP (Real-Time Transport Protocol) packet count (only in INTERIM-UPDATE and STOP records)
- Acct-Output-Packets - sent RTP (Real-Time Transport Protocol) packet count (only in INTERIM-UPDATE and STOP records)
- Acct-Input-Packets - received RTP (Real-Time Transport Protocol) packet count (only in INTERIM-UPDATE and STOP records)
- Acct-Output-Octets - sent byte count (only in INTERIM-UPDATE and STOP records)
- Acct-Input-Octets - received byte count (only in INTERIM-UPDATE and STOP records)
- Acct-Session-Id - unique session participient ID
- h323-disconnect-cause - session disconnect reason (only in STOP records):
- 0 - Local endpoint application cleared call
- 1 - Local endpoint did not accept call
- 2 - Local endpoint declined to answer call
- 3 - Remote endpoint application cleared call
- 4 - Remote endpoint refused call
- 5 - Remote endpoint did not answer in required time
- 6 - Remote endpoint stopped calling
- 7 - Transport error cleared call
- 8 - Transport connection failed to establish call
- 9 - Gatekeeper has cleared call
- 10 - Call failed as could not find user (in GK)
- 11 - Call failed as could not get enough bandwidth
- 12 - Could not find common capabilities
- 13 - Call was forwarded using FACILITY message
- 14 - Call failed a security check and was ended
- 15 - Local endpoint busy
- 16 - Local endpoint congested
- 17 - Remote endpoint busy
- 18 - Remote endpoint congested
- 19 - Could not reach the remote party
- 20 - The remote party is not running an endpoint
- 21 - The remote party host off line
- 22 - The remote failed temporarily app may retry
- h323-disconnect-time - session disconnect time (only in INTERIM-UPDATE and STOP records)
- h323-connect-time - session establish time (only in INTERIM-UPDATE and STOP records)
- h323-gw-id - name of gateway emitting message (should be equal to NAS-Identifier)
- h323-call-type - call leg type (should be VoIP)
- h323-call-origin - indicates origin of call relatively to the gateway (answer for calls from IP network, originate - to IP network)
- h323-setup-time - call setup time
- h323-conf-id - unique session ID
- h323-remote-address - the remote address of the session
- NAS-Port-Id - voice port ID
- Acct-Status-Type - record type (START when session is established; STOP when session is closed; INTERIM-UPDATE (ALIVE)session is alive). The time between the interim-update messages is defined by the interim-update-interval parameter (if it is set to 0s, there will be no such messages)
Property Description
use-radius-accounting (yes | no; default: no) - whether to use radius accounting or not interim-update (integer; default: 0) - defines time interval between communications with the router. If this time will exceed, RADIUS server will assume that this connection is down. This value is suggested not to be less than 3 minutesNotes
All the parameters, which names begin with h323, are CISCO vendor specific Radius attributes
Gatekeeper
Submenu level: /ip telephony gatekeeperDescription
For each H.323 endpoint gatekeeper stores its telephone numbers. So, gatekeeper knows all telephone numbers for all registered endpoints. And it knows which telephone number is handled by which endpoint. Mapping between endpoints and their telephone numbers is the main functionality of gatekeepers.
If endpoint is registered to endpoint, it does not have to know every single endpoint and every single telephone number, which can be called. Instead, every time some number is dialed, endpoint asks gatekeeper for destination endpoint to call by providing called telephone number to it.
MikroTik IP telephony package includes a very simple gatekeeper. This gatekeeper can be activated by setting gatekeeper parameter to local. In this case the local endpoint automatically is registered to the local gatekeeper. And any other endpoint can register to this gatekeeper too.
Registered endpoints are added to the /ip telephony voice-port voip table. Those entries are marked as dynamic and can not be removed or changed. If there already was an voip entry with the same IP address, it is marked as registred. Remote-address can not be changed for these entries too, but registered voip voice ports can be removed - they will stay as dynamic ones. If there already is a dynamic voip voice port and a static one with the same IP address is added, then instead of dynamic entry, registered will appear.
Dynamic entries disappear when corresponding endpoint unregisters itself from the gatekeeper. Registered entries are static and will stay even after that endpoint will be unregistered from this gatekeeper.
Registered telephone numbers are added to /ip telephony numbers table. Here is exactly the same idea behind dynamic and registered telephone numbers as it is with voip voice ports.
When an endpoint registers to the gatekeeper, it sends its own telephone numbers (aliases and prefixes) within this registration request. /ip telephony numbers entry is registered to the endpoint only if voice-port for that entry is local (not voip). If dst-pattern contains '.' or '_', it is sent as prefix, otherwise - as alias. The known part of the dst-pattern is sent as prefix. If there is no known part (dst-pattern is "_" or "...", for example), then this entry is not sent at all.
Property Description
gatekeeper (none | local | remote; default: none) - Gatekeeper type to uselocal - start and use local gatekeeper
remote - use some other gatekeeper
Example
In most simple case with one phonejack card and some remote gatekeeper, configuration can be as follows:
[admin@MikroTik] ip telephony voice-port> print
Flags: X - disabled
# NAME TYPE AUTODIAL
0 phonejack1 phonejack
1 voip1 voip
[admin@MikroTik] ip telephony voice-port voip> print
Flags: X - disabled, D - dynamic, R - registered
# NAME AUTODIAL REMOTE-ADDRESS JITTER-BUFFER PREFERED-CODEC SIL FAS
0 voip1 0.0.0.0 0s none no yes
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 11 phonejack1
1 _ voip1
[admin@MikroTik] ip telephony gatekeeper> print
gatekeeper: remote
remote-id: ""
remote-address: 10.0.0.98
registered: yes
registered-with: "MikroTik@10.0.0.98"
In this case this endpoint will register to gatkeeper with the IP address of 10.0.0.98 and telephone number 11. Every call to telephone number 11 will be transfered from gatekeeper to this endpoint. And this endpoint will route this call to phonejack1 voice port. On any other telephone number gatekeeper will be asked for real destination. From this endpoint it will be possible to call all the endpoints, which are registered to the same gatekeeper. If that gatekeeper has static entries about endpoints, which are not registered to gatekeeper, it still will be possible to call those endpoints by those statically defined telephone numbers at gatekeeper.
Example
For example, if numbers table is like this:
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 1. phonejack1
1 128 voip1 128
2 78 voip2 78
3 77 phonejack1
4 76 phonejack1 55
5 _ voip1
then entries 0, 3 and 4 will be sent to the gatekeeper, others are voip voice ports and are ignored. Entry 0 will be sent as prefix 1, entry 3 - as alias 77, and entry 4 - as alias 76.
If IP address of local endpoint is 10.0.0.100, then gatekeeper voip and numbers tables will look as follows:
[admin@MikroTik] ip telephony voice-port voip> print
Flags: X - disabled, D - dynamic, R - registered
# NAME AUTODIAL REMOTE-ADDRESS JITTER-BUFFER PREFERED-CODEC SIL FAS
0 tst-2.5 10.0.0.101 0s none no yes
1 D local 127.0.0.1 100ms none no yes
2 D 10.0.0... 10.0.0.100 100ms none no yes
[admin@MikroTik] ip telephony numbers> print
Flags: I - invalid, X - disabled, D - dynamic, R - registered
# DST-PATTERN VOICE-PORT PREFIX
0 78 linejack1
1 3... vctx1
2 33_ voip1
3 5.. voip1
4 XD 78 local 78
5 XD 3_ local 3
6 D 76 10.0.0.100 76
7 D 77 10.0.0.100 77
8 D 1_ 10.0.0.100 1
Here we can see how aliases and prefixes are added to numbers table. Entries 0..3 are static. Entries 4 and 5 are added by registering the local endpoint to the local gatekeeper. Entries 6..8 are added by registering endpoint (with IP address 10.0.0.100) to the local gatekeeper.
For prefixes, '_' is added at the end of dst-pattern to allow any additional digits to be added at the end.
Local endpoint is registered to the local gatekeeper too. So, local aliases and prefixes are added as dynamic numbers too. Only, as they are local and corresponding number entries already exist in the number table, then these dynamically added entries are disabled by default.
If any registered telephone number will conflict with some existing telephone numbers entry, it will be added as disabled and dynamic.
If in gatekeeper's numbers table there already exists exactly the same dst-pattern as some other endpoint is trying to register, this gatekeeper registration for that endpoint will fail.
Troubleshooting
Description
- The IP Telephony does not work after upgrading from 2.5.x version - You need to completely reinstall the router using any installation procedure. You may keep the configuration using either the installation program option or the backup file.
- The IP Telephony gateway does not detect the drop of the line when connected to some PBXs - Different regional setting should be used to match the parameters of the PBX. For example, try using uk for Meridian PBX.
- The IP Telephone does not call the gateway, but gives busy signal - Enable the logging of IP telephony events under /system logging facility. Use the monitoring function for voice ports to debug your setup while making calls.
- The IP telephony is working without NAT, but sound goes only in one direction - Disable H323 service port in firewall: /ip firewall service-port set h323 disabled=yes
- The IP Telephony does not work through NAT - Enable H323 service port in firewall: /ip firewall service-port set h323 disabled=no
A simple example
Description
The following describes examples of some useful IP telephony applications using MikroTik RouterOS.
Let us consider the following example of IP telephony gateway, one MikroTik IP telephone, and one Welltech LAN Phone 101 setup:

Setting up the MikroTik IP Telephone
If you pick up the handset, a dialtone should be heard.
The basic telephony configuration should be as follows:
-
Add a voip voice port to the /ip telephony voice-port voip for each of the devices you want to call, or want to receive calls from, i.e., (the IP telephony gateway 10.1.1.12 and the Welltech IP telephone 10.5.8.2):
[admin@Joe] ip telephony voice-port voip> add name=gw remote-address=10.1.1.12 [admin@Joe] ip telephony voice-port voip> add name=rob remote-address=10.5.8.2 [admin@Joe] ip telephony voice-port voip> print Flags: X - disabled, D - dynamic, R - registered # NAME AUTODIAL REMOTE-ADDRESS JITTER-BUFFER PREFERED-CODEC SIL FAS 0 gw 10.1.1.12 100ms none no yes 1 rob 10.5.8.2 100ms none no yes [admin@Joe] ip telephony voice-port voip>You should have three vioce ports now:
[admin@Joe] ip telephony voice-port> print Flags: X - disabled # NAME TYPE AUTODIAL 0 linejack1 linejack 1 gw voip 2 rob voip [admin@Joe] ip telephony voice-port> -
Add at least one unique number to the /ip telephony numbers for each voice port. This number will be used to call that port:
[admin@Joe] ip telephony numbers> add dst-pattern=31 voice-port=rob [admin@Joe] ip telephony numbers> add dst-pattern=33 voice-port=linejack1 [admin@Joe] ip telephony numbers> add dst-pattern=1. voice-port=gw prefix=1 [admin@Joe] ip telephony numbers> print Flags: I - invalid, X - disabled, D - dynamic, R - registered # DST-PATTERN VOICE-PORT PREFIX 0 31 rob 31 1 33 linejack1 2 1. gw 1 [admin@Joe] ip telephony numbers>Here, the dst-pattern=31 is to call the Welltech IP Telephone, if the number 31 is dialed on the dialpad. The dst-pattern=33 is to ring the local telephone, if a call for number 33 is received over the network. Anything starting with digit '1' would be sent over to the IP Telephony gateway.
Making calls from the IP telephone 10.0.0.224:
- To call the IP telephone 10.5.8.2, it is enough to lift the handset and dial the number 31
-
To call the PBX extension 13, it is enough to lift the handset and dial the number 13
After establishing the connection with 13, the voice port monitor shows:
[admin@Joe] ip telephony voice-port linejack> monitor linejack status: connection port: phone direction: port-to-ip line-status: unplugged phone-number: 13 remote-party-name: PBX_Line [10.1.1.12] codec: G.723.1-6.3k/hw duration: 16s [admin@Joe] ip telephony voice-port linejack>
Setting up the IP Telephony Gateway
The IP telephony gateway [voip_gw] requires the following configuration:
-
Set the regional setting to match our PBX. The mikrotik region will be used in thisn example:
[admin@voip_gw] ip telephony voice-port linejack> set linejack1 region=mikrotik [admin@voip_gw] ip telephony voice-port linejack> print Flags: X - disabled 0 name="linejack1" autodial="" region=mikrotik playback-volume=0 record-volume=0 ring-cadence="++-++--- ++-++---" agc-on-playback=no agc-on-record=no aec=yes aec-tail-length=short aec-nlp-threshold=low aec-attenuation-scaling=4 aec-attenuation-boost=0 software-aec=no detect-cpt=yes [admin@voip_gw] ip telephony voice-port linejack> -
Add a voip voice port to the /ip telephony voice-port voip for each of the devices you want to call, or want to receive calls from, i.e., (the IP telephone 10.0.0.224 and the Welltech IP telephone 10.5.8.2):
[admin@voip_gw] ip telephony voice-port voip> add name=joe \ \... remote-address=10.0.0.224 [admin@voip_gw] ip telephony voice-port voip> add name=rob \ \... remote-address=10.5.8.2 prefered-codec=G.723.1-6.3k/hw [admin@voip_gw] ip telephony voice-port voip> print Flags: X - disabled, D - dynamic, R - registered # NAME AUTODIAL REMOTE-ADDRESS JITTER-BUFFER PREFERED-CODEC SIL FAS 0 joe 10.0.0.224 100ms none no yes 1 rob 10.5.8.2 100ms G.723.1-6.3k/hw no yes [admin@voip_gw] ip telephony voice-port voip> -
Add number records to the /ip telephony numbers, so you are able to make calls:
[admin@voip_gw] ip telephony numbers> add dst-pattern=31 voice-port=rob prefix=31 [admin@voip_gw] ip telephony numbers> add dst-pattern=33 voice-port=joe prefix=33 [admin@voip_gw] ip telephony numbers> add dst-pattern=1. voice-port=linejack1 \ \... prefix=1 [admin@voip_gw] ip telephony numbers> print Flags: I - invalid, X - disabled, D - dynamic, R - registered # DST-PATTERN VOICE-PORT PREFIX 0 31 rob 31 1 33 joe 33 2 1. linejack1 1 [admin@voip_gw] ip telephony numbers>
Making calls through the IP telephony gateway:
-
To dial the IP telephone 10.0.0.224 from the office PBX line, the extension number 19 should be dialed, and, after the dial tone has been received, the number 33 should be entered. Thus, the telephone [Joe] is ringed.
After establishing the voice connection with '33' (the call has been answered), the voice port monitor shows:
[admin@voip_gw] ip telephony voice-port linejack> monitor linejack1 status: connection port: line direction: port-to-ip line-status: plugged phone-number: 33 remote-party-name: linejack1 [10.0.0.224] codec: G.723.1-6.3k/hw duration: 1m46s [admin@voip_gw] ip telephony voice-port linejack> - To dial the IP telephone 10.5.8.2 from the office PBX line, the extension number 19 should be dialed, and, after the dial tone has been received, the number 31 should be entered.
Setting up the Welltech IP Telephone
Please follow the documentation from www.welltech.com.tw on how to set up the Welltech LAN Phone 101. Here we give just brief recommendations:
-
We recommend to upgrade the Welltech LAN Phone 101 with the latest application software. Telnet to the phone and check what you have, for example:
usr/config$ rom -print Download Method : TFTP Server Address : 10.5.8.1 Hardware Ver. : 4.0 Boot Rom : nblp-boot.102a Application Rom : wtlp.108h DSP App : 48302ce3.127 DSP Kernel : 48302ck.127 DSP Test Code : 483cbit.bin Ringback Tone : wg-ringbacktone.100 Hold Tone : wg-holdtone10s.100 Ringing Tone1 : ringlow.bin Ringing Tone2 : ringmid.bin Ringing Tone3 : ringhi.bin usr/config$ -
Check if you have the codecs arranged in the desired order:
usr/config$ voice -print Voice codec setting relate information Sending packet size : G.723.1 : 30 ms G.711A : 20 ms G.711U : 20 ms G.729A : 20 ms G.729 : 20 ms Priority order codec : g7231 g711a g711u g729a g729 Volume levels : voice volume : 54 input gain : 26 dtmf volume : 23 Silence suppression & CNG: G.723.1 : Off Echo canceller : On JitterBuffer Min Delay : 90 JitterBuffer Max Delay : 150 usr/config$ -
Make sure you have set the H.323 operation mode to phone to phone (P2P), not gatekeeper (GK):
usr/config$ h323 -print H.323 stack relate information RAS mode : Non-GK mode Registered e164 : 31 Registered H323 ID : Rob RTP port : 16384 H.245 port : 16640 Allocated port range : start port : 1024 end port : 65535 Response timeOut : 5 Connect timeOut : 5000 usr/config$ -
Add the gateway's address to the phonebook:
usr/config$ pbook -add name gw ip 10.1.1.12 usr/config$ This may take a few seconds, please wait.... Commit to flash memory ok! usr/config$ pbook -print index Name IP E164 ====================================================================== 1 gw 10.1.1.12 ---------------------------------------------------------------------- usr/config$
Making calls from the IP telephone 10.5.8.2:
- Just lift the handset and dial '11', or '13' fo the PBX extensions.
-
Dial '33' for [Joe]. The call request will be sent to the gateway 10.1.1.12, where it will be forwarded to [Joe]. If you want to call [Joe] directly, add a phonebook record for it:
usr/config$ pbook -add name Joe ip 10.0.0.224 e164 33
Use the telephony logging feature on the gateway to debug your setup.
Setting up MikroTik Router and CISCO Router
Let's try a different example.
Here are some hints on how to get working configuration for telephony calls between CISCO and MikroTik router.
Configuration on the MikroTik side
-
G.729a codec MUST be disabled (otherwise connections are not possible at all!!!)
/ip telephony codec disable G.729A-8k/sw -
G.711-ALaw codec should not be used (in some cases there is no sound)
/ip telephony codec disable "G.711-ALaw-64k/sw G.711-ALaw-64k/hw" -
Fast start has to be used (otherwise no ring-back tone and problems with codec negotiation)
/ip telephony voice-port set cisco fast-start=yes -
Telephone number we want to call to must be sent to Cisco, for example
/ip telephony numbers add destination-pattern=101 voice-port=cisco prefix=101 -
Telephone number, cisco will call us, must be assigned to some voice port, for example,
/ip telephony numbers add destination-pattern=098 voice-port=linejack
Configuration on the CISCO side:
-
IP routing has to be enabled
ip routing -
Default values for fast start can be used:
voice service pots default h323 call start exit voice service voip default h323 call start exit -
Enable opening of RTP streams:
voice rtp send-recv -
Assign some E.164 number for local telephone, for example, 101 to port 0/0
dial-peer voice 1 pots destination-pattern 101 port 0/0 exit -
create preferred codec listing:
voice class codec codec_class_number codec preference 1 g711ulaw codec preference 2 g723r63 exitNOTE: g723r53 codec can be used, too
-
Tell, that some foreign E.164 telephone number can be reached by calling to some IP address, for example, 098 by calling to 10.0.0.98
dial-peer voice 11 voip destination-pattern 098 session target ipv4:10.0.0.98 voice-class codec codec_class_number exitNOTE: instead of codec class, one specified codec could be specified:
codec g711ulaw
For reference, following is an exported CISCO configuration, that works:
!
version 12.1
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname Router
!
logging rate-limit console 10 except errors
enable secret 5 $1$bTMC$nDGl9/n/pc3OMbtWxADMg1
enable password 123
!
memory-size iomem 25
ip subnet-zero
no ip finger
!
call rsvp-sync
voice rtp send-recv
!
voice class codec 1
codec preference 1 g711ulaw
codec preference 2 g723r63
!
interface FastEthernet0
ip address 10.0.0.101 255.255.255.0
no ip mroute-cache
speed auto
half-duplex
!
ip classless
ip route 0.0.0.0 0.0.0.0 10.0.0.1
no ip http server
!
dialer-list 1 protocol ip permit
dialer-list 1 protocol ipx permit
!
voice-port 0/0
!
voice-port 0/1
!
voice-port 2/0
!
voice-port 2/1
!
dial-peer voice 1 pots
destination-pattern 101
port 0/0
!
dial-peer voice 97 voip
destination-pattern 097
session target ipv4:10.0.0.97
codec g711ulaw
!
dial-peer voice 98 voip
destination-pattern 098
voice-class codec 1
session target ipv4:10.0.0.98
!
!
line con 0
transport input none
line aux 0
line vty 0 4
password 123
login
!
end
Setting up PBX to PBX Connection over an IP Network
To interconnect two telephone switchboards (PBX) over an IP network, two IP telephony gateways should be configured. The setup is shown in the following diagram:

We want to be able to use make calls from local telephones of one PBX to local telephones or external lines of the other PBX.
Assume that:
- The IP telephony gateway #1 has IP address 10.0.0.182, and the name of the Voicetronix first line is 'vctx1'.
- The IP telephony gateway #2 has IP address 10.0.0.183, and the name of the Voicetronix first line is 'vctx1'.
The IP telephony configuration should be as follows:
-
IP telephony gateway #1 should have:
/ip telephony voice-port voip add name=gw2 remote-address=10.0.0.183 /ip telephony numbers add dst-pattern=1.. voice-port=gw2 prefix=2 add dst-pattern=2.. voice-port=vctx1 prefix=1 -
IP telephony gateway #2 should have
/ip telephony voice-port voip add name=gw1 remote-address=10.0.0.182 /ip telephony numbers add dst-pattern=2.. voice-port=vctx1 prefix=1 add dst-pattern=1.. voice-port=gw1 prefix=2
The system works as follows:
To dial from the main office PBX#1 any extension of the remote office PBX#2, the extension with the connected gateway at PBX#1 should be dialed first. Then, after the dial tone of the gateway#1 is received, the remote extension number should be dialed.
To dial from the main office PBX#2 any extension of the remote office PBX#1, the actions are the same as in first situation.
