The documentation set for this product strives to use bias-free language. For the purposes of this documentation set, bias-free is defined as language that does not imply discrimination based on age, disability, gender, racial identity, ethnic identity, sexual orientation, socioeconomic status, and intersectionality. Exceptions may be present in the documentation due to language that is hardcoded in the user interfaces of the product software, language used based on RFP documentation, or language that is used by a referenced third-party product. Learn more about how Cisco is using Inclusive Language.
This document describes FXS and FXO ports and their functions, call setup and teardown, configuration components, and troubleshooting tips.
Cisco recommends that you have knowledge of the Analog Interface Basics.
The information in this document is based on these hardware and software versions:
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, ensure that you understand the potential impact of any command.
Foreign Exchange Station (FXS)/Foreign Exchange Office (FXO) is the typical analog circuit used to deliver a single analog phone line to your house.
An FXOport (or device) is the port that connects to the circuit, which has the ability to go on/off the hook and transmit digits when off-hook to initiate a call. It employs a relay that when the port is off-hook, the circuit is closed, and when the port is considered on-hook, the circuit is open. It interconnects to an FXS on the other side.
As FXO ports terminate lines from your carrier, you can also think of these as your analog handset or Fax Machine/Modem.
An FXS port is the device that connects to the circuit and provides dial tone and ringing voltage to an FXO device. An FXS port connects a gateway to equipment such as telephones, fax machines, and modems. An FXS port utilizes only two wires (Tip and Ring) for the signaling and audio path on a given call. This two-wire pair can supply the ring, voltage, and dial tone to the station.
In order to better understand how to troubleshoot these two pot types, you must first look at how a call sets up on them. This section shows the process of an analog call from the time both endpoints are on the hook, to the point at which there is two-way audio.
As with all calls, the FXS port starts in an On-hook state while the two endpoints are not in use:
When one of the phones goes Off-hook, the circuit gets closed and a dial tone is provided by the FXS port to the FXO device.
Once the device that has initiated the call is Off-hook, it starts to dial the number by either Pulses or Tones.
Once the number has been dialed, the device that handles this call routes it accordingly. Once the call has been routed, while the far end device is alerted of the call that it received, the device the call originates from is played Ring Back Tone.
Once the far-end device has picked the call up, its circuit is closed as well and it is at this point that the call is connected with two-way audio:
The earlier example is a basic flow of what happens from the start to the end of a call. However, there is more that goes on behind the scenes for that FXS port to signal to the phone about each of its call states. The next section covers the two most common signaling methods used with FXS ports on Cisco Analog Gateways.
Loop Start Signaling is the most common technique for access signaling in a standard Public Switch Telephone Network (PSTN), or analog port that connects a number of devices to your network. Most residential telephones are analog loop-start telephones, based on the concept of the local loop seen previously. The loop is an electrical communication path that consists of two wires, one to transmit and one to receive voice signals.
The two-wire circuit is still referred to as the tip and ring, with the tip tied to the ground and the ring tied to the negative side of the battery. When the phone handset is picked up (goes off-hook), this action closes the circuit and establishes a loop between the FXS port and the phone. Current is drawn from the battery of the analog port, which indicates a change in status. This change in status signals the current detector in the analog port to provide a dial tone.
An incoming call is signaled to the handset by a standard on/off pattern, which causes the telephone to ring.
In order to better understand what the logs look like for a successful outbound call on an FXS Port, these logs have been annotated so that you can clearly identify each portion of the call.
007578: Jul 2 09:15:50.655: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): GOING OFF HOOK 007579: Jul 2 09:15:51.903: htsp_dsp_message: SEND_SIG_STATUS: state=0xC timestamp=62909 systime=6970515 007580: Jul 2 09:15:51.903: htsp_process_event: [0/3/0, FXSLS_ONHOOK, E_DSP_SIG_1100]fxsls_onhook_offhook htsp_setup_ind 007581: Jul 2 09:15:51.903: [0/3/0] get_local_station_id calling num= calling name= calling time=07/02 09:15 orig called= 007582: Jul 2 09:15:51.904: htsp_process_event: [0/3/0, FXSLS_WAIT_SETUP_ACK, E_HTSP_SETUP_ACK]fxsls_check_auto_call 007583: Jul 2 09:16:00.879: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): DIALING 2002 007584: Jul 2 09:16:02.261: htsp_digit_ready(0/3/0): digit = 2 007585: Jul 2 09:16:02.734: htsp_digit_ready(0/3/0): digit = 0 007586: Jul 2 09:16:03.005: htsp_digit_ready(0/3/0): digit = 0 007587: Jul 2 09:16:03.438: htsp_digit_ready(0/3/0): digit = 2 007588: Jul 2 09:16:03.439: htsp_process_event: [0/3/0, FXSLS_OFFHOOK, E_HTSP_PROCEEDING]htsp_alert_notify 007589: Jul 2 09:16:08.241: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): RING BACK 007590: Jul 2 09:16:10.621: htsp_call_bridged invoked 007591: Jul 2 09:16:10.665: htsp_process_event: [0/3/0, FXSLS_OFFHOOK, E_HTSP_CONNECT]fxsls_offhook_connect 007592: Jul 2 09:16:10.665: [0/3/0] nim_set_sig_state: ABCD=6, timestamp=0, sys_time=6972391 007593: Jul 2 09:16:10.665: [0/3/0] set signal state = 0x6 timestamp = 0 007594: Jul 2 09:16:10.667: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_HTSP_VOICE_CUT_THROUGH]fxsls_voice_cut_thru 007595: Jul 2 09:16:20.815: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): TWO WAY AUDIO 007596: Jul 2 09:16:37.503: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): HANGING UP 007597: Jul 2 09:16:39.794: htsp_dsp_message: SEND_SIG_STATUS: state=0x4 timestamp=45260 systime=6975304 007598: Jul 2 09:16:39.794: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_DSP_SIG_0100]fxsls_offhook_onhook, HF duration Max=1000, HF duration Min=150 007599: Jul 2 09:16:39.794: htsp_timer - 1000 msec 007600: Jul 2 09:16:40.795: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_HTSP_EVENT_TIMER]fxsls_connect_wait_release_req 007601: Jul 2 09:16:40.795: htsp_timer_stop 007602: Jul 2 09:16:40.796: htsp_timer_stop3 007603: Jul 2 09:16:40.878: htsp_process_event: [0/3/0, FXSLS_WAIT_RELEASE_REQ, E_HTSP_RELEASE_REQ]fxsls_waitrls_req_rls 007604: Jul 2 09:16:40.878: [0/3/0] nim_set_sig_state: ABCD=4, timestamp=0, sys_time=6975412 007605: Jul 2 09:16:40.878: [0/3/0] set signal state = 0x4 timestamp = 0 007606: Jul 2 09:16:40.878: [0/3/0] nim_set_sig_state: ABCD=4, timestamp=0, sys_time=6975412 007607: Jul 2 09:16:40.878: [0/3/0] set signal state = 0x4 timestamp = 0 007608: Jul 2 09:16:40.898: htsp_dsp_message: RESP_SIG_STATUS: state=0x4 timestamp=0 systime=6975414 007609: Jul 2 09:16:40.898: htsp_process_event: [0/3/0, FXSLS_ONHOOK, E_DSP_SIG_0100]fxsls_onhook_onhook
This document also includes what the signaling looks like for an inbound call as well. The logs have been annotated to understand each step in the process with ease.
008109: Jul 2 10:54:34.424: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): PHONE IS IN IDLE & ON HOOK. THEN IT STARTS TELLING PHONE TO RING. 008110: Jul 2 10:54:42.225: htsp_timer_stop3 htsp_setup_req 008111: Jul 2 10:54:42.225: Orig called num:88777 008112: Jul 2 10:54:42.225: htsp_process_event: [0/3/0, FXSLS_ONHOOK, E_HTSP_SETUP_REQ]fxsls_onhook_setuphtsp_alert 008113: Jul 2 10:54:42.225: [0/3/0] nim_set_sig_state: ABCD=0, timestamp=0, sys_time=7563547 008114: Jul 2 10:54:42.225: [0/3/0] set signal state = 0x0 timestamp = 0 008115: Jul 2 10:54:42.226: htsp_call_bridged invoked 008116: Jul 2 10:54:42.227: htsp_process_event: [0/3/0, FXSLS_WAIT_OFFHOOK, E_HTSP_VOICE_CUT_THROUGH]fxsls_waitoff_voice 008117: Jul 2 10:54:52.960: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): PHONE GOES OFF HOOK 008118: Jul 2 10:54:55.431: htsp_dsp_message: SEND_SIG_STATUS: state=0xC timestamp=42727 systime=7564868 008119: Jul 2 10:54:55.431: htsp_process_event: [0/3/0, FXSLS_WAIT_OFFHOOK, E_DSP_SIG_1100]fxsls_waitoff_offhook 008120: Jul 2 10:54:55.431: [0/3/0] nim_set_sig_state: ABCD=4, timestamp=0, sys_time=7564868 008121: Jul 2 10:54:55.432: [0/3/0] set signal state = 0x4 timestamp = 0 008122: Jul 2 10:54:55.432: [0/3/0] nim_set_sig_state: ABCD=6, timestamp=200, sys_time=7564868 008123: Jul 2 10:54:55.432: [0/3/0] set signal state = 0x6 timestamp = 200 008124: Jul 2 10:54:55.432: htsp_timer2 - 200 msec 008125: Jul 2 10:54:55.631: htsp_process_event: [0/3/0, FXSLS_WAIT_OFFHOOK, E_HTSP_EVENT_TIMER2]fxsls_offhook_dial htsp_dial 008126: Jul 2 10:54:55.632: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_DSP_DIALING_DONE]fxsls_conn_dial_done 008127: Jul 2 10:54:55.640: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_HTSP_VOICE_CUT_THROUGH]fxsls_voice_cut_thru 008128: Jul 2 10:55:08.864: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): TWO WAY AUDIO 008129: Jul 2 10:55:27.232: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): PHONE IS NOW DISCONNECTED FORM FAR END 008130: Jul 2 10:55:29.798: htsp_timer_stop3 008131: Jul 2 10:55:29.843: htsp_process_event: [0/3/0, FXSLS_CONNECT, E_HTSP_RELEASE_REQ]fxsls_connect_disc 008132: Jul 2 10:55:29.843: htsp_timer_stop 008133: Jul 2 10:55:29.843: [0/3/0] nim_set_sig_state: ABCD=12, timestamp=0, sys_time=7568309 008134: Jul 2 10:55:29.843: [0/3/0] set signal state = 0xC timestamp = 0 008135: Jul 2 10:55:29.843: [0/3/0] nim_set_sig_state: ABCD=4, timestamp=750, sys_time=7568309 008136: Jul 2 10:55:29.843: [0/3/0] set signal state = 0x4 timestamp = 750 008137: Jul 2 10:55:29.843: htsp_timer - 950 msecfxsls_simulate_onhook 008138: Jul 2 10:55:30.793: htsp_process_event: [0/3/0, FXSLS_CPC, E_HTSP_EVENT_TIMER]fxsls_cpc_timer 008139: Jul 2 10:55:30.793: htsp_timer - 60000 msec 008140: Jul 2 10:55:30.808: htsp_dsp_message: RESP_SIG_STATUS: state=0xC timestamp=0 systime=7568405 008141: Jul 2 10:55:30.808: htsp_process_event: [0/3/0, FXSLS_WAIT_ONHOOK, E_DSP_SIG_1100]fxsls_waitonhook_offhook 008142: Jul 2 10:55:37.525: htsp_dsp_message: SEND_SIG_STATUS: state=0x4 timestamp=19285 systime=7569077 008143: Jul 2 10:55:37.525: htsp_process_event: [0/3/0, FXSLS_WAIT_ONHOOK, E_DSP_SIG_0100]fxsls_waitonhook_onhook 008144: Jul 2 10:55:37.525: htsp_timer_stop htsp_report_onhook_sig 008145: Jul 2 10:55:48.351: %SYS-7-USERLOG_DEBUG: Message from tty867(user id: ): PHONE IS ON HOOK
This document looks at the different ways to troubleshoot the analog ports once the basics of their different states and a perfect call scenario have been covered. More specifically, it looks at some show commands and common failure scenarios.
In order to help troubleshoot what state the port is in, you can use commands like show voice port summary
and show voice call summary
. These commands show the different states such as when the call is on the hook and not in use, to when the port is off the hook and there is an active call. This image shows some of the different states.
On Hook:
ISR4451#show voice port sum IN OUT PORT CH SIG-TYPE ADMIN OPER STATUS STATUS EC =============== == ============ ===== ==== ======== ======== == 0/3/0 -- fxs-ls up dorm on-hook idle y 0/3/1 -- fxs-ls up dorm on-hook idle y ISR4451#show voice call sum PORT CODEC VAD VTSP STATE VPM STATE ============== ========= === ===================== ===================== 0/3/0 - - - FXSLS_ONHOOK 0/3/1 - - - FXSLS_ONHOOK
The phone is alerted:
ISR4451#show voice port sum IN OUT PORT CH SIG-TYPE ADMIN OPER STATUS STATUS EC =============== == ============ ===== ==== ======== ======== == 0/3/0 -- fxs-ls up up on-hook ringing y 0/3/1 -- fxs-ls up dorm on-hook idle y ISR4451#show voice call sum PORT CODEC VAD VTSP STATE VPM STATE ============== ========= === ===================== ===================== 0/3/0 g711ulaw n S_SETUP_REQ_PROC FXSLS_WAIT_OFFHOOK 0/3/1 - - - FXSLS_ONHOOK
Call Is connected:
ISR4451#show voice port sum IN OUT PORT CH SIG-TYPE ADMIN OPER STATUS STATUS EC =============== == ============ ===== ==== ======== ======== == 0/3/0 -- fxs-ls up up off-hook idle y 0/3/1 -- fxs-ls up dorm on-hook idle y ISR4451#show voice call sum PORT CODEC VAD VTSP STATE VPM STATE ============== ========= === ===================== ===================== 0/3/0 g711ulaw n S_CONNECT FXSLS_CONNECT 0/3/1 - - - FXSLS_ONHOOK
Among the earlier two show commands, these can potentially be helpful to you in the future:
show call active voice brief
show voice call status
show voice dsp active
show voice dsp error
show voice dsp group all
Detector-Related Function Tests
With the test voice port detector command, you are able to force a particular detector into an on or off state, perform tests on the detector, and then return the detector to its original state.
In order to configure this feature, enter these commands in privileged EXEC mode:
Command |
Purpose |
Router# test voice port slot/subunit/port detector {m-lead | battery-reversal | loop-current | ring | tip-ground | ring-ground | ring-trip} {on | off} |
Identifies the voice port you want to test. Enter a keyword for the detector under test and specify whether to force it to the on or off state. For each signaling type (E&M, FXO, FXS), only the applicable keywords are displayed. The disable keyword is displayed only when a detector is in the forced state. |
Router# test voice port slot/subunit/port detector {m-lead | battery-reversal | loop-current | ring | tip-ground | ring-ground | ring-trip} disable |
Identifies the voice port on which you want to end the test. Enter a keyword for the detector under test and the keyword disables to end the forced state. For each signaling type (E&M, FXO, FXS), only the applicable keywords are displayed. The disable keyword is displayed only when a detector is in the forced state. |
In order to establish loopbacks on a voice port, enter these commands in privileged EXEC mode:
Command |
Purpose |
Router# test voice port slot/subunit/port loopback {local | network} |
Identifies the voice port you want to test and enters a keyword for the loopback direction. A call must be established on the voice port under test. |
Router# test voice port slot/subunit/port loopback disable |
Identifies the voice port on which you want to end the test and enter the keyword disable to end the loopback. |
In order to inject a test tone into a voice port, enter these commands in privileged EXEC mode:
Command |
Purpose |
Router# test voice port slot/subunit/port inject-tone {local | network} {1000hz | 2000hz | 200hz | 3000hz | 300hz | 3200hz | 3400hz | 500hz | quiet} |
Identifies the voice port you want to test and enter keywords for the direction to send the test tone and for the frequency of the test tone. A call must be established on the voice port under test. |
Router# test voice port slot/subunit/port inject-tone disable |
Identifies the voice port on which you want to end the test and enter the keyword disable to end the test tone. The disable keyword is only available if a test condition is activated. |
In order to test relay-related functions on a voice port, enter these commands in privileged EXEC mode:
Command |
Purpose |
Router# test voice port slot/subunit/port relay {e-lead | loop | ring-ground | battery-reversal | power-denial | ring | tip-ground} {on|off} |
Identifies the voice port you want to test. Enter a keyword for the relay under test and specify whether to force it to the on or off state. For each signaling type (E&M, FXO, FXS), only the applicable keywords are displayed. The disable keyword is displayed only when a relay is in the forced state. |
Router# test voice port slot/subunit/port relay {e-lead | loop | ring-ground | battery-reversal | power-denial | ring | tip-ground} disable |
Identifies the voice port on which you want to end the test. Enter a keyword for the relay under test, and the keyword disable to end the forced state. For each signaling type (E&M, FXO, FXS), only the applicable keywords are displayed. The disable keyword is displayed only when a relay is in the forced state. |
The test voice port switch fax
command forces a voice port into fax mode in order to test. After you enter this command, you can use the show voice call
or show voice call summary
command to check whether the voice port is able to operate in fax mode. If no fax data is detected by the voice port, the voice port remains in fax mode for 30 seconds and then reverts automatically to voice mode.
The disable keyword ends the forced mode switch; however, the fax mode ends automatically after 30 seconds. The disable keyword is available only while the voice port is in fax mode.
In order to force a voice port into fax mode and return it to voice mode, and enter these commands in privileged EXEC mode:
Command |
Purpose |
Router# test voice port slot/subunit/port switch fax |
Identifies the voice port you want to test. Enter the keyword fax to force the voice port into fax mode. |
Router# test voice port slot/subunit/port switch disable |
Identifies the voice port on which you want to end the test. Enter the keyword disable in order to return the voice port to voice mode. |
As mentioned, this document covers some common issues found when you troubleshoot FXO and FXS.
The FXO is responsible to detect when power denial is done by the FXS so that it knows when to go on-hook for FXS-side disconnect scenarios.
005754: Nov 18 18:51:28.257: htsp_process_event: [0/2/3, FXOLS_ONHOOK, E_HTSP_SETUP_REQ]fxols_onhook_setup 005755: Nov 18 18:51:28.257: [0/2/3] set signal state = 0xC timestamp = 0 005756: Nov 18 18:51:28.257: htsp_timer - 500 msec 005782: Nov 18 18:51:28.509: htsp_process_event: [0/2/3, FXOLS_WAIT_DIAL_TONE, E_DSP_SIG_1100]fxols_power_denial_detected 005783: Nov 18 18:51:28.509: htsp_timer2 - 1000 msec 005784: Nov 18 18:51:28.509: htsp_timer_stop 005785: Nov 18 18:51:29.509: htsp_process_event: [0/2/3, FXOLS_WAIT_DIAL_TONE, E_HTSP_EVENT_TIMER2]fxols_power_den_disc 005786: Nov 18 18:51:29.509: htsp_timer_stop 005787: Nov 18 18:51:29.509: htsp_timer_stop2
The fxols_power_denial_detected
event is triggered when there is no loop current detected on the line. By default, there is a 750 msec timer started. If the DSP does not detect the current before the timer expires, it disconnects the call. The timer can be modified under the voice-port configuration mode with the timeouts power-denial <0-2500ms>
command. This timer must match what the FXS side has defined for their power denial duration.
This scenario indicates either a faulty cable, hardware, or wrong port type on the other side. Determine if the problem is related to the port or the line.
connection plar <extension>
in order to route the call from the port to either a receptionist or an IVR/AA.Revision | Publish Date | Comments |
---|---|---|
3.0 |
20-Aug-2024 |
Updated Article Description, Doc Type, and Formatting. |
1.0 |
25-Jul-2019 |
Initial Release |