This post is about frame-relay. Knowing frame-relay is core knowledge
for the CCIE exam. We need to have our layer 2 functioning to be able
to move on to routing and other tasks. While I do have an OK understanding
of frame-relay I wanted to take it one step further and really know all
of my options and a little more about the inner workings like LMI.

We will be using the topology below.

The picture below is the setup in GNS3, the cloud in the diagram above
is the R5 router in GNS3. We could have just used used a frame-relay
switch in GNS3 but where is the fun in that? Also, frame-relay switching
may or may not be a part of your lab in either the troubleshooting
section or the config section.

We start by configuring the frame-relay switch.

frame-relay switching
!
interface Serial0/0
description Connected to R1
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 102 interface Serial0/1 201
frame-relay route 104 interface Serial0/3 401
frame-relay route 103 interface Serial0/2 301
no shutdown

The config is pretty self explanatory but here is how it works.
If we receive a frame with DLCI 102 route it to interface Serial0/1
PVC 201. The interface is set to DCE just as if this was a service
provider frame switch. DCE side needs to set clock rate and we
have a bit rate of 64 kbit/s. The encapsulation is of course
frame relay.

Then we repeat the config for the other interfaces.

interface Serial0/1
description Connected to R2
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 201 interface Serial0/0 102
no shutdown
!
interface Serial0/2
description Connected to R3
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 301 interface Serial0/0 103
frame-relay route 304 interface Serial0/3 403
no shutdown
!
interface Serial0/3
description Connected to R4
no ip address
encapsulation frame-relay
clockrate 64000
frame-relay intf-type dce
frame-relay route 401 interface Serial0/0 104
frame-relay route 403 interface Serial0/2 304
no shutdown

We now have the frame switch configured, it is time to configure the
routers.

R3 and R4 will be using multi-point subinterfaces, R1 will use its
physical interface and R2 will use a point-to-point subinterface.
These three interfaces are the different interfaces that are
available in frame-relay. A physical interface is a multi-point
interface. Physical interfaces are special in that they will use
all PVCs by default which they learn via LMI. Below is a debug
output from the LMI conversation between R1 and the frame switch.
First the debug is turned on.

R1#debug frame-relay lmi
Frame Relay LMI debugging is on
Displaying all Frame Relay LMI data

Put the right encapsulation in and unshut the interface.

R1(config)#int s0/0
R1(config-if)#encapsulation frame-relay
R1(config-if)#no sh
R1(config-if)#^Z

Now lets look at LMI.

*Mar 1 00:09:07.791: %SYS-5-CONFIG_I: Configured from console by console
*Mar 1 00:09:08.931: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
*Mar 1 00:09:08.935: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:09:08.935: datagramstart = 0x7DFFD34, datagramsize = 14
*Mar 1 00:09:08.935: FR encap = 0x00010308
*Mar 1 00:09:08.939: 00 75 95 01 01 00 03 02 01 00
*Mar 1 00:09:08.943:
*Mar 1 00:09:08.943: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:09:08.943: datagramstart = 0x7DFFE74, datagramsize = 13
*Mar 1 00:09:08.943: FR encap = 0x00010308
*Mar 1 00:09:08.943: 00 75 51 01 00 53 02 01 00
*Mar 1 00:09:08.947:
*Mar 1 00:09:08.947: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:09:08.951: datagramstart = 0x7DFFFB4, datagramsize = 13
R1#
*Mar 1 00:09:08.951: FR encap = 0xFCF10309
*Mar 1 00:09:08.951: 00 75 01 01 00 03 02 01 00
*Mar 1 00:09:08.955:
*Mar 1 00:09:08.971: Serial0/0(in): Status, myseq 1, pak size 37
*Mar 1 00:09:08.971: RT IE 1, length 1, type 0
*Mar 1 00:09:08.971: KA IE 3, length 2, yourseq 1 , myseq 1
*Mar 1 00:09:08.975: PVC IE 0x7 , length 0x6 , dlci 102, status 0x0 , bw 0
*Mar 1 00:09:08.975: PVC IE 0x7 , length 0x6 , dlci 103, status 0x0 , bw 0
*Mar 1 00:09:08.979: PVC IE 0x7 , length 0x6 , dlci 104, status 0x0 , bw 0
R1#
*Mar 1 00:09:18.931: Serial0/0(out): StEnq, myseq 2, yourseen 1, DTE up
*Mar 1 00:09:18.931: datagramstart = 0x7E00234, datagramsize = 13
*Mar 1 00:09:18.931: FR encap = 0xFCF10309
*Mar 1 00:09:18.931: 00 75 01 01 01 03 02 02 01
*Mar 1 00:09:18.935:
*Mar 1 00:09:18.995: Serial0/0(in): Status, myseq 2, pak size 37
*Mar 1 00:09:18.995: RT IE 1, length 1, type 0
*Mar 1 00:09:18.995: KA IE 3, length 2, yourseq 2 , myseq 2
*Mar 1 00:09:18.995: PVC IE 0x7 , length 0x6 , dlci 102, status 0x0 , bw 0
*Mar 1 00:09:18.999: PVC IE 0x7 , length 0x6 , dlci 103, status 0x0 , bw 0
*Mar 1 00:09:18.999: PVC IE 0x7 , length 0x6 , dlci 104, status 0x0 , bw 0
*Mar 1 00:09:19.931: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
R1#
*Mar 1 00:09:28.931: Serial0/0(out): StEnq, myseq 3, yourseen 2, DTE up
*Mar 1 00:09:28.931: datagramstart = 0x7E004B4, datagramsize = 13
*Mar 1 00:09:28.931: FR encap = 0xFCF10309
*Mar 1 00:09:28.931: 00 75 01 01 01 03 02 03 02
*Mar 1 00:09:28.935:
*Mar 1 00:09:28.979: Serial0/0(in): Status, myseq 3, pak size 13
*Mar 1 00:09:28.979: RT IE 1, length 1, type 1
*Mar 1 00:09:28.979: KA IE 3, length 2, yourseq 3 , myseq 3

You can see that we have learned PVC 102, 103 and 104 from the
frame switch and we didn’t have to do a single thing! Lets
confirm with show frame pvc.

R1#show frame pvc
PVC Statistics for interface Serial0/0 (Frame Relay DTE)
Active Inactive Deleted Static
Local 0 0 0 0
Switched 0 0 0 0
Unused 0 3 0 0
DLCI = 102, DLCI USAGE = UNUSED, PVC STATUS = INACTIVE, INTERFACE = Serial0/0
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:00:30, last time pvc status changed 00:00:30
DLCI = 103, DLCI USAGE = UNUSED, PVC STATUS = INACTIVE, INTERFACE = Serial0/0
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:00:32, last time pvc status changed 00:00:32
DLCI = 104, DLCI USAGE = UNUSED, PVC STATUS = INACTIVE, INTERFACE = Serial0/0
input pkts 0 output pkts 0 in bytes 0
out bytes 0 dropped pkts 0 in pkts dropped 0
out pkts dropped 0 out bytes dropped 0
in FECN pkts 0 in BECN pkts 0 out FECN pkts 0
out BECN pkts 0 in DE pkts 0 out DE pkts 0
out bcast pkts 0 out bcast bytes 0
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
pvc create time 00:00:32, last time pvc status changed 00:00:32

We see all DLCI’s, they have a status of inactive since the other side
is not yet up. If a PVC was missing in the frame switch the status
would be deleted.

We will now enable frame-relay on R2 and debug LMI there.

R2(config)#int s0/0
R2(config-if)#encap frame-relay
R2(config-if)#exit
R2(config)#int s0/0.201 point-to-point
R2(config-subif)#^Z
R2#debug frame-relay lmi
Frame Relay LMI debugging is on
Displaying all Frame Relay LMI data
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int s0/0
R2(config-if)#no sh

Look at the LMI output below.

*Mar 1 00:20:40.951: %LINK-3-UPDOWN: Interface Serial0/0, changed state to up
*Mar 1 00:20:40.955: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:20:40.955: datagramstart = 0x7A00714, datagramsize = 14
*Mar 1 00:20:40.955: FR encap = 0x00010308
*Mar 1 00:20:40.959: 00 75 95 01 01 00 03 02 01 00
*Mar 1 00:20:40.963:
*Mar 1 00:20:40.963: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:20:40.963: datagramstart = 0x7A00854, datagramsize = 13
*Mar 1 00:20:40.963: FR encap = 0x00010308
*Mar 1 00:20:40.963: 00 75 51 01 00 53 02 01 00
*Mar 1 00:20:40.967:
*Mar 1 00:20:40.967: Serial0/0(out): StEnq, myseq 1, yourseen 0, DTE up
*Mar 1 00:20:40.971: datagramstart = 0x7A00994, datagramsize = 13
*Mar 1 00:20:40.971: FR encap = 0xFCF10309
*Mar 1 00:20:40.971: 00 75 01 01 00 03 02 01 00
*Mar 1 00:20:40.975:
*Mar 1 00:20:41.091: Serial0/0(in): Status, myseq 1, pak size 21
*Mar 1 00:20:41.091: RT IE 1, length 1, type 0
*Mar 1 00:20:41.091: KA IE 3, length 2, yourseq 1 , myseq 1
*Mar 1 00:20:41.091: PVC IE 0x7 , length 0x6 , dlci 201, status 0x2 , bw 0
*Mar 1 00:20:50.951: Serial0/0(out): StEnq, myseq 2, yourseen 1, DTE up
*Mar 1 00:20:50.951: datagramstart = 0x7DFF6F4, datagramsize = 13
*Mar 1 00:20:50.951: FR encap = 0xFCF10309
*Mar 1 00:20:50.951: 00 75 01 01 01 03 02 02 01
*Mar 1 00:20:50.955:
*Mar 1 00:20:50.991: Serial0/0(in): Status, myseq 2, pak size 21
*Mar 1 00:20:50.991: RT IE 1, length 1, type 0
*Mar 1 00:20:50.991: KA IE 3, length 2, yourseq 2 , myseq 2
*Mar 1 00:20:50.995: PVC IE 0x7 , length 0x6 , dlci 201, status 0x2 , bw 0
*Mar 1 00:20:51.951: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial0/0, changed state to up
*Mar 1 00:21:00.951: Serial0/0(out): StEnq, myseq 3, yourseen 2, DTE up
*Mar 1 00:21:00.951: datagramstart = 0x7A00AD4, datagramsize = 13
*Mar 1 00:21:00.951: FR encap = 0xFCF10309
*Mar 1 00:21:00.951: 00 75 01 01 01 03 02 03 02
*Mar 1 00:21:00.955:
*Mar 1 00:21:01.011: Serial0/0(in): Status, myseq 3, pak size 13
*Mar 1 00:21:01.011: RT IE 1, length 1, type 1
*Mar 1 00:21:01.011: KA IE 3, length 2, yourseq 3 , myseq 3

The DLCI 201 is assigned to the physical interface Serial0/0 but
we want to use it on the point-to-point interface.

R2(config-subif)#frame-relay interface-dlci 201
R2(config-subif)#ip add 132.16.0.2 255.255.255.0
R2(config-subif)#^Z

The frame-relay interface-dlci tells the interface which DLCI it should use.
There is no need to run inverse ARP on point-to-point interfaces since
there is only one way out. However the interface will still reply to
inverse ARP requests. Look at the output below.

T*Mar 1 04:14:17.846: Serial0/0.201: FR ARP input
*Mar 1 04:14:17.846: Serial0/0.201: inarp received on 201
*Mar 1 04:14:17.846: datagramstart = 0x7A0138E, datagramsize = 34
*Mar 1 04:14:17.850: FR encap = 0x30910300
*Mar 1 04:14:17.850: 80 00 00 00 08 06 00 0F 08 00 02 04 00 08 00 00
*Mar 1 04:14:17.854: 84 10 00 01 18 61 00 00 00 00 01 02 00 00
*Mar 1 04:14:17.858:

R2 responded to R1s ARP request. We can now communicate between R1 and R2.

R1#ping 132.16.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 132.16.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/99/352 ms

Now we configure R3 and R4 as multipoint interfaces.

R3(config)#int s0/0.301
R3(config-subif)#frame-relay interface-dlci 301
R3(config-fr-dlci)#frame-relay interface-dlci 304
R3(config-fr-dlci)#^Z

R3 will send inverse ARP requests to find out which remote layer 3 address
that maps to the local DLCI. Look at output from R1.

R1#debug frame events
Frame Relay events debugging is on
R1#
*Mar 1 04:22:04.934: Serial0/0: FR ARP input
*Mar 1 04:22:04.938: Serial0/0: inarp received on 103
*Mar 1 04:22:04.938: datagramstart = 0x7A00E8E, datagramsize = 34
*Mar 1 04:22:04.938: FR encap = 0x18710300
*Mar 1 04:22:04.938: 80 00 00 00 08 06 00 0F 08 00 02 04 00 08 00 00
*Mar 1 04:22:04.946: 84 10 00 03 48 D1 00 00 00 00 01 02 00 00
*Mar 1 04:22:04.950:
R1#
*Mar 1 04:23:38.974: Serial0/0: preparing IP inarp on 104
*Mar 1 04:23:39.062: Serial0/0: FR ARP input
*Mar 1 04:23:39.066: Serial0/0: inarp received on 104
*Mar 1 04:23:39.066: datagramstart = 0x7DFF6EE, datagramsize = 34
*Mar 1 04:23:39.066: FR encap = 0x18810300
*Mar 1 04:23:39.066: 80 00 00 00 08 06 00 0F 08 00 02 04 00 09 00 00
*Mar 1 04:23:39.074: 84 10 00 04 18 81 84 10 00 01 01 02 00 00
*Mar 1 04:23:39.078:

R1 responds to the ARP requests and we now have full communication.
If we are not allowed to use inverse ARP this will not work. To
disable inverse ARP we use the command no frame-relay inverse-arp.
When disabling inverse ARP we are disabling requests but not replies.
So how do we map if we cannot use inverse ARP? Then we need to use
the frame-relay map statements. We will reconfigure R3 to use map
statements instead.

R3(config)#int s0/0.301
R3(config-subif)#no frame-relay interface-dlci 301
R3(config-subif)#no frame-relay interface-dlci 304
R3(config-subif)#frame-relay map ip 132.16.0.1 301
R3(config-subif)#frame-relay map ip 132.16.0.4 304
R3(config-subif)#^Z
R3#sh frame map
Serial0/0.301 (up): ip 132.16.0.1 dlci 301(0x12D,0x48D0), static,
CISCO, status defined, active
Serial0/0.301 (up): ip 132.16.0.4 dlci 304(0x130,0x4C00), static,
CISCO, status defined, active
R3#ping 132.16.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 132.16.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/62/152 ms
R3#ping 132.16.0.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 132.16.0.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/55/96 ms
R3#

This post should give you a better understanding of frame-relay. If you
are interested in running this lab you can find the GNS3 topology
and final configs here.

Understanding frame-relay
Tagged on:         

2 thoughts on “Understanding frame-relay

  • July 9, 2013 at 11:05 am
    Permalink

    wow man.. thanks a ton fro this lab.. i ws struggling with gns3 and the frame-relay switch in it..this lab really helped me understand the cocnepts on how a frame relay switch advertises pvc status and configuration to the DTE nodes via LMI status messages and how this infrmation can be used with debug command to check if ISP is sending the correct DLCI’s to us..just started with CCIE studies and this has been a super lab for me… thanks again.. and will keep u in the RSS feed.

    Reply
  • Pingback: Point to point Frame Relay help

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: