Cisco HDLC
# Cisco HDLC

Cisco HDLC (cHDLC) is an extension to the High-Level Data Link Control (HDLC) network protocol, and was created by Cisco Systems, Inc. HDLC is a bit-oriented synchronous data link layer protocol that was originally developed by the International Organization for Standardization (ISO). Often described as being a proprietary extension, the details of cHDLC have been widely distributed and the protocol has been implemented by many network equipment vendors. cHDLC extends HDLC with multi-protocol support.

## Framing

Cisco HDLC frames uses an alternative framing structure to the standard ISO HDLC. To support multiple protocols encapsulation, cHDLC frames contain a field for identifying the network protocol.

## Structure

### cHDLC frame structure

The following table describes the structure of a cHDLC frame on the wire.

| Address | Control | Protocol Code | Information | Frame Check Sequence (FCS) | Flag |
| - | - | - | - | - | - |
| 8 bits | 8 bits | 16 bits | Variable length, 0 or more bits, in multiples of 8 | 16 bits | 8 bits |

* The Address field is used to specify the type of packet contained in the cHDLC frame; 0x0F for Unicast and 0x8F for Broadcast packets.
* The Control field is always set to zero (0x00).
* The Protocol Code field is used to specify the protocol type encapsulated within the cHDLC frame (e.g. 0x0800 for Internet Protocol).

### SLARP address request–response frame structure

The Serial Line Address Resolution Protocol (SLARP) frame is designated by a specific cHDLC protocol code field value of 0x8035.

Three types of SLARP frame are defined: address requests (0x00), address replies (0x01), and keep-alive frames (0x02).

The following table shows the structure of a SLARP cHDLC address request–response frame.

| Address | Control | Protocol Code | SLARP Op-Code | Address | Mask | Reserved | Frame Check Sequence (FCS) | Flag |
| - | - | - | - | - | - | - | - | - |
| 8 bits | 8 bits | 16 bits (0x8035) | 32 bits | 32 bits | 32 bits | 16 bits | 16 bits | 8 bits |

* The op-code will be 0x00 for address requests and 0x01 for address responses.
* The Address and Mask fields are used to contain a four-octet IP address and mask. These are 0 for address requests.
* The two-byte Reserved field is currently unused and undefined.

### SLARP Keep-Alive frame structure

The following table shows the structure of a SLARP cHDLC keep-alive frame.

| Address | Control | Protocol Code | SLARP Op-Code | Sequence Number (Sender) | Sequence Number (Last Received) | Reliability | Frame Check Sequence (FCS) | Flag |
| - | - | - | - | - | - | - | - | - |
| 8 bits | 8 bits | 16 bits (0x8035) | 32 bits | 32 bits | 32 bits | 16 bits | 16 bits | 8 bits |

* The op-code is 0x02 for keep-alives.
* The sender sequence number increments with each keep-alive sent by this sender.
* The received sequence number is the last sequence number received by this sender.
* The two-byte Reliability field is required to be set to 0xFFFF.
