Introduction
Pseudowires(PW) are used to provide end-to-end services across an MPLS network. They are the basic building blocks that can provide a point-to-point service as well as a multipoint service such as VPLS, which is practically a mesh of PWs used to create the bridge domain across which the packets flow.
Edited by: Kumar Sridhar
Prerequisites
Readers of this document should be knowledgeable of the following:
Components Used
The information in this document is based on The Cisco® Carrier Packet Transport (CPT) Product Family and in particular CPT50.
Pseudowire Concept
Pseudowires conceptually look as follows:
The end-to-end service is composed of 2 parts. The Attachment Circuit (AC) part and the Pseudowire part. The whole circuit end-to-end is still referred to as Pseudowire in Cisco Trasnport Controller(CTC), but bear in mind the two part distinction exhibited here for the troubleshooting that follows.
Also remember that a tunnel must have been created to house the Pseudowire service that is configured above. The tunnel may be protected (as depicted here) or unprotected.
Pseudowire part practically starts and stops at the tunnel end points (if you exclude the MPLS encapsulation block shown here).
The AC part starts from the tunnel end point all the way toward the client facing interface, where the Ethernet Flow Point (EFP) is defined, to identify the specific client traffic that is being transported through this Pseudowire. There are 2 ACs; one on each end.
The AC carries the customer traffic in its native form, i.e. Ethernet frames with or without VLAN tagging depending on whether we are creating a VLAN based Pseudowire or Ethernet Based Pseudowire (AC Type box in the PW creation wizard). The MPLS labels for the specific PW service as well as for the tunnel over which it is riding are then added. Packets are then sent across the Pseudowire part of the circuit into the MPLS cloud. This process is called Label Imposition in MPLS terminology. On the far end, the reverse process occurs, i.e. the labels are removed or the Label Disposition occurs, and the packets, which are now back to native Ethernet frames, are then delivered to the other end through the far end AC part of the Pseudowire circuit.
Troubleshooting a Pseudowire
For the Pseudowire service to work end to end, the Pseudowire part and the 2 AC parts have to work together. Troubleshooting the circuit involves each part, where each of the AC-PW-AC parts are debugged separately to identify where the problem is.
In the following troubleshooting discussion, it is assumed that the PW has been configured correctly, and all Layer 1 or physical layer issues have already been debugged and ruled out.
First, debugging the PW part is easy. Start by identifying the circuit through the command “show mpls l2 vc” run in IOS window on an end node. Note the Virtual Circuit Identifier(VCID) as well as the Destination node address of the connection.
10.88.130.201#show mpls l2 vc
Local intf Local circuit Dest address VC ID Status
------------- -------------------------- --------------- ---------- ----------
Gi36/2 Eth VLAN 200 202.202.202.202 12 UP
VFI vfi::1 VFI 202.202.202.202 124 UP
VFI vfi::1 VFI 204.204.204.204 124 UP
Here, the PW of interest is the first PW which was configured as VLAN 200 based on interface Gi36/2. Ensure the interface Status is UP.
show mpls l2 vc 12 detail command gives you a lot of information on the PW. Highlighted below are the important fields such as tunnel id, remote node id, label stack, PWID number and statistics.
10.88.130.201#show mpls l2 vc 12 detail
Local interface: Gi36/2 up, line protocol up, Eth VLAN 200 up
Destination address: 202.202.202.202, VC ID: 12, VC status: up
Output interface: Tp102, imposed label stack {16 19}
Preferred path: Tunnel-tp102, active
Default path: ready
Next hop: point2point
Create time: 00:32:52, last status change time: 00:05:42
Signaling protocol: Manual
Status TLV support (local/remote) : enabled/N/A
LDP route watch : enabled
Label/status state machine : established, LruRru
Last local dataplane status rcvd: No fault
Last BFD dataplane status rcvd: Not sent
Last local SSS circuit status rcvd: No fault
Last local SSS circuit status sent: No fault
Last local LDP TLV status sent: No fault
Last remote LDP TLV status rcvd: No fault
Last remote LDP ADJ status rcvd: No fault
MPLS VC labels: local 18, remote 19
PWID: 7
Group ID: local 0, remote 0
MTU: local 1500, remote 1500 <---- The local and remote values must match
Sequencing: receive disabled, send disabled
Control Word: On
SSO Descriptor: 202.202.202.202/12, local label: 18
SSM segment/switch IDs: 20513/12320 (used), PWID: 7
VC statistics:
transit packet totals: receive 10, send 0
transit byte totals: receive 1320, send 0
transit packet drops: receive 0, seq error 0, send 0
If the PW is down, then ensure the tunnel (here tunnel 102) is in good shape, and if not, then troubleshoot the tunnel issue. Troubleshooting the tunnel is beyond the scope of this article.
Ensure the labels in the stack are defined as shown above, i.e. they are not blank. Make sure the PW is programmed in the hardware by executing the command show platform mpls pseudowire pwid using the appropriate PWID number.
10.88.130.201#show platform mpls pseudowire pwid 7
PW Id: 7
PW VC Key: 7
PW AC Key: 786434
Is PW bind receive in HW: yes
Is PW setup in HW: yes
Is currently standby: no
---------------------------------------------
--AC data --
Is AC Setup in HW:yes
AC interface : GigabitEthernet36/2
AC circuit id : 2
AC- Inner VLAN: 0
AC- Outer VLAN: 200
AC- MPLS Port Id: 0x1800000A
AC- Port Id: 31
AC- Mod Id: 36
AC- Is efp: yes
AC- Encap: Single Tag
AC- Ing RW Oper: none
AC- Egress RW Oper: none
AC- Ing RW TPID: 0
AC- Ing RW VLAN: 0
AC- Ing RW Flag: 0x0
---------------------------------------------
--ATOM Data--
Interworking type: Vlan
Peer Requested Vlan id for type 4 PW 4091
MPLS Port Id: 0x1800000B
SD tag enabled : yes
Control Word enabled : yes
---------------------------------------------
--Imposition data--
---------------------------------------------
Remote VC label : 19
Outgoing int Num: 9
BCM port: 28
BCM ModId: 4
Tunnel egress object : 100008
Failover Id : 1
Failover Tunnel egress object : 100009
Failover BCM port: 0
Failover BCMModId: 0
---------------------------------------------
--Disposition data--
---------------------------------------------
Local label: 18
IF Num: 12
Is this MSPW : No
---------------------------------------------
-- IMPOSITION SIDE --
Entry for VlanId 200 not found in VLAN_XLATE table
SOURCE_VP[10]
dvp: 11
ING_DVP_TABLE[11]
nh_index: 411
ING_L3_NEXT_HOP[411]
vlan_id: 4095
port_num: 28
module_id: 4
drop: 0
EGR_L3_NEXT_HOP[411]
mac_da_profile_index: 1
vc_and_swap_index: 4099
intf_num: 22
dvp: 11
EGR_MAC_DA_PROFILE[1]
DA Mac: 1 80.C20 .0 0
EGR_MPLS_VC_AND_SWAP_LABEL_TABLE[4099]
mpls_label(VC Label): 19
EGR_L3_INTF[22]
SA Mac: 4055.3958.E0E1
MPLS_TUNNEL_INDEX: 4
EGR_IP_TUNNEL_MPLS[4]
(lsp) MPLS_LABEL0
(lsp) MPLS_LABEL1
(lsp) MPLS_LABEL2
(lsp) MPLS_LABEL3
-- DISPOSITION SIDE --
MPLS_ENTRY[1592]
Label: 18
source_vp: 11
nh_index: 11
SOURCE_VP[11]
DVP: 10
ING_DVP_TABLE[10]
nh_index: 410
ING_L3_NEXT_HOP[410]
Port_num: 31
module_id: 36
drop: 0
EGR_L3_NEXT_HOP[410]
SD_TAG:VINTF_CTR_IDX: 134
SD_TAG:RESERVED_3: 0
SD_TAG:SD_TAG_DOT1P_MAPPING_PTR: 0
SD_TAG:NEW_PRI: 0
SD_TAG:NEW_CFI: 0
SD_TAG:SD_TAG_DOT1P_PRI_SELECT: 0
SD_TAG:RESERVED_2: 0
SD_TAG:SD_TAG_TPID_INDEX: 0
SD_TAG:SD_TAG_ACTION_IF_NOT_PRESENT: 0
SD_TAG:SD_TAG_ACTION_IF_PRESENT: 3
SD_TAG:HG_L3_OVERRIDE: 0
SD_TAG:HG_LEARN_OVERRIDE: 1
SD_TAG:HG_MC_DST_PORT_NUM: 0
SD_TAG:HG_MODIFY_ENABLE: 0
SD_TAG:DVP_IS_NETWORK_PORT: 0
SD_TAG:DVP: 10
SD_TAG:SD_TAG_VID: 0
ENTRY_TYPE: 2
Error: Entry not found in EGR_VLAN_XLATE table!
EGR_VLAN_XLATE[-1]
soc_mem_read: invalid index -1 for memory EGR_VLAN_XLATE
The logs indicate that the PW is bound and setup in the hardware, with the correct VLAN and labels, in agreement with what was seen before.
If any data point does not match or is missing, then the issue is in the driver, which did not setup and bind the PW in hardware. This points to a software or hardware defect.
If so far all is well, then you can try to ping the PW part internally by using the IOS command “ping mpls pseudowire 202.202.202.202 12 reply mode control-channel”. Note again that this pings the PW part only from one tunnel end point to the other and does not touch to the AC part of the circuit.
10.88.130.201#ping mpls pseudowire 202.202.202.202 12 reply mode control-channel
Sending 5, 100-byte MPLS Echos to 202.202.202.202,
timeout is 2 seconds, send interval is 0 msec:
Codes: '!' - success, 'Q' - request not sent, '.' - timeout,
'L' - labeled output interface, 'B' - unlabeled output interface,
'D' - DS Map mismatch, 'F' - no FEC mapping, 'f' - FEC mismatch,
'M' - malformed request, 'm' - unsupported tlvs, 'N' - no label entry,
'P' - no rx intf label prot, 'p' - premature termination of LSP,
'R' - transit router, 'I' - unknown upstream index,
'l' - Label switched with FEC change, 'd' - see DDMAP for return code,
'X' - unknown return code, 'x' - return code 0
Type escape sequence to abort.
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Now check the statistics on the PW as we have done before:
10.88.130.201#show mpls l2 vc 12 det | beg statistics
VC statistics:
transit packet totals: receive 5, send 0
transit byte totals: receive 650, send 0
transit packet drops: receive 0, seq error 0, send 0
Note that the ping was successful and that the 5 ping echo packets are recorded as received. Also, note that the ping request packets are not recorded as sent. It seems the echo request/reply packets are sent by the CPU into the stream post the counter, and thus are not recorded.
If the pings do not work, then we should step back and debug the tunnel to ensure it is operational.
If the PW part still looks good, then focus on the AC part on each end. This is the difficult part since there is not much debug support for it, and the AC path may include several cards and interfaces as in the case with Cisco CPT50.
But there are few things that can be checked.
You can send a pattern from a tester or do a ping from the client side equipment and watch for the packets being received by the client facing interface on the CPT box. This would be easy to do for a port based PW, but not for a VLAN based PW since the interface does not display packets per VLAN. In any case the command “show int …” for the client facing interface should show packet count incrementing at least as a sign that packets are ingressing properly and if no other VLAN based circuits are active.
Bear in mind that these packets ingressing through the AC, are supposed to be MPLS labeled, and then sent across the PW to the other side. Thus, they should show in the statistics of the PW part as packets sent. So look for them in the command” show mpls l2 vc 12 detail | beg statistics”
10.88.130.201#show mpls l2 vc 12 detail | beg statistic
VC statistics:
transit packet totals: receive 0, send 232495
transit byte totals: receive 0, send 356647330
transit packet drops: receive 0, seq error 0, send 0
And they should show as packets "receive" in the same command on the far end. So the send PW packets on this end and the receive PW packets on the far end should match the number of packets sent from the client equipment. Using the same command ” show mpls l2 vc 12 detail | beg statistics” on the far end shows:
10.88.130.202#show mpls l2 vc 12 detail | beg statis
VC statistics:
transit packet totals: receive 232495, send 0
transit byte totals: receive 356647330, send 0
transit packet drops: receive 0, seq error 0, send 0
You can see the match in the packets between the send on one end and receive on the other.
In case you need to clear the MPLS counters, use the command “clear mpls counters”.
Another way to check the statistics is to use the SPAN feature to replicate the incoming EFP traffic to a spare port on the CPT node and then look for the statistics on this port to monitor the packets received from the customer interface.
And finally you can run BCM shell commands on the different fabric and line cards to track the packets internally, but that is beyond the scope of this article.