Contents

Introduction

Prerequisites

Requirements

Components Used

FXS/FXOFundamentals

PortFundamentals

Basic Call Flow

Loop Start Signaling

VPM Signaling for Outbound Call

VPM Signaling for Inbound Call

Troubleshoot FXS and FXO Ports

Commands to Troubleshoot

Show Commands

Voice Port Test Commands

Loopback Function Tests

Tone Injection Tests

Relay-Related Function Tests

Fax/Voice Mode Tests

Common Issues Found

FXO Power Denial Detected

Other Problems

Introduction

This document describes FXS and FXO ports and their functions, call setup and teardown, configuration components, and troubleshooting tips.

Prerequisites

Requirements

Cisco recommends that you have knowledge of the Analog Interface Basics.

Components Used

The information in this document is based on these hardware and software versions:

- ISR4451-X/K9

- NIM-2FXSP

- NIM-2FXO

- Cisco IOS® XE Version 16.8.2

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.

FXS/FXO Fundamentals

Port Fundamentals

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.

Basic Call Flow

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

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.

VPM Signaling for Outbound Call

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

VPM Signaling for Inbound Call

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

Troubleshoot FXS and FXO Ports

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.

Commands to Troubleshoot

Show Commands

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

Voice Port Test Commands

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.

Loopback Function Tests

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.

Tone Injection Tests

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.

Relay-Related Function Tests

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.

Fax/Voice Mode Tests

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.

Common Issues Found

As mentioned, this document covers some common issues found when you troubleshoot FXO and FXS.

FXO Power Denial Detected

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.

- If the problem is related to the line, get the cables checked up to the telco demark. Engage telco for assistance.

- If the problem is related to the port, then it is likely a faulty port. Further troubleshooting can confirm this.

Other Problems

- Disconnect supervision- Review the specific section on how to disconnect supervision is handled on analog ports.

- Wiring- Wiring must be two-wire, straight-through, from FXS to FXO. If you fail to get a dial tone with a wiring issue, you usually hear absolutely no audio on the line. If the cable is connected properly, you can hear a slight increase in the noise floor when you go off-hook.

- Bad port- Ports can go bad, and fail to give dial tone, detect ringing voltage, and so on. Troubleshoot to isolate the port from the VoIP side and from the cable side.

- DSP issues- The port must use a DSP in order to identify events on the port. Hence, voice ports allocate DSPs to signal at boot, even if the port is not in use and is shut down. When you make changes to analog voice ports, shut/no shut the port before you test again.

- Long/poor runs, impedance issues- Since it is analog audio transmitted, the health of Electromagnetic Interference (EMI) in the environment is important since it can impact audio quality. For example, when you run your analog lines over a fluorescent light (or near a blender/motor/and so on), this can cause excessive noise on the line. Long runs in general cause attenuation and impedance mismatch. Proper impedance must be set for the run length.

- Excessive gain to compensate for attenuation- When you apply high amounts of input gain, this can exacerbate echo issues since it causes low echo return loss (ERL). Try to avoid this when possible.

- Digit delivery- Digits are not sent from the telco to an FXO port. You must use  connection plar <extension> in order to route the call from the port to either a receptionist or an IVR/AA.

- Outgoing call failure -If the circuit is FXOGS and you have it configured for FXOLS, incoming calls work, but outbound fails. Also, polarity is important for outgoing calls with GS.