GENWiki

Premier IT Outsourcing and Support Services within the UK

User Tools

Site Tools


rfc:rfc1134

Network Working Group D. Perkins Request for Comments: 1134 CMU

                                                         November 1989
     The Point-to-Point Protocol: A Proposal for Multi-Protocol
        Transmission of Datagrams Over Point-to-Point Links
                         Table of Contents
 Status of this Memo ...................................    2
 Abstract ..............................................    2
 1. Introduction .......................................    2
 1.1 Motivation ........................................    2
 1.2 Overview of PPP ...................................    3
 1.3 Organization of the document ......................    4
 2. Physical Layer Requirements ........................    4
 3. The Data Link Layer ................................    4
 3.1 Frame Format ......................................    5
 4. The PPP Link Control Protocol (LCP) ................    8
 4.1 The LCP Automaton .................................    9
 4.1.1 Overview ........................................    9
 4.1.2 State Diagram ...................................   10
 4.1.3 State Transition Table ..........................   12
 4.1.4 Events ..........................................   12
 4.1.5 Actions .........................................   14
 4.1.6 States ..........................................   16
 4.2 Loop Avoidance ....................................   19
 4.3 Packet Format .....................................   19
 4.3.1 Configure-Request ...............................   21
 4.3.2 Configure-Ack ...................................   21
 4.3.3 Configure-Nak ...................................   22
 4.3.4 Configure-Reject ................................   24
 4.3.5 Terminate-Request and Terminate-Ack .............   25
 4.3.6 Code-Reject .....................................   26
 4.3.7 Protocol-Reject .................................   27
 4.3.8 Echo-Request and Echo-Reply .....................   28
 4.3.9 Discard-Request .................................   29
 4.4 Configuration Options .............................   30
 4.4.1 Format ..........................................   31
 5. A PPP Network Control Protocol (NCP) for IP ........   32
 5.1 Sending IP Datagrams ..............................   33
 APPENDICES ............................................   33
 A. Asynchronous HDLC ..................................   33
 B. Fast Frame Check Sequence (FCS) Implementation .....   35
 B.1 FCS Computation Method ............................   35
 B.2 Fast FCS table generator ..........................   36

Perkins [Page 1] RFC 1134 PPP November 1989

 REFERENCES ............................................   37
 AUTHOR'S ADDRESS ......................................   38

Status of this Memo

 This memo defines a proposed protocol for the Internet community.
 This proposal is the product of the Point-to-Point Protocol Working
 Group of the Internet Engineering Task Force (IETF).  Comments on this
 memo should be submitted to the IETF Point-to-Point Protocol Working
 Group chair by January 15, 1990.  Comments will be reviewed at the
 February 1990 IETF meeting, with the goal of advancing PPP to draft
 standard status.  Distribution of this memo is unlimited.

Abstract

 The Point-to-Point Protocol (PPP) provides a method for transmitting
 datagrams over serial point-to-point links.  PPP is composed of three
 parts:
    1. A method for encapsulating datagrams over serial links.
    2. An extensible Link Control Protocol (LCP).
    3. A family of Network Control Protocols (NCP) for establishing
       and configuring different network-layer protocols.
 This document defines the encapsulation scheme, the basic LCP, and an
 NCP for establishing and configuring the Internet Protocol (IP)
 (called the IP Control Protocol, IPCP).
 The options and facilities used by the LCP and the IPCP are defined
 in separate documents.  Control protocols for configuring and
 utilizing other network-layer protocols besides IP (e.g., DECNET,
 OSI) are expected to be developed as needed.

1. Introduction

1.1. Motivation

 In the last few years, the Internet has seen explosive growth in the
 number of hosts supporting TCP/IP.  The vast majority of these hosts
 are connected to Local Area Networks (LANs) of various types,
 Ethernet being the most common.  Most of the other hosts are
 connected through Wide Area Networks (WANs) such as X.25 style Public
 Data Networks (PDNs).  Relatively few of these hosts are connected
 with simple point-to-point (i.e., serial) links.  Yet, point-to-point
 links are among the oldest methods of data communications and almost

Perkins [Page 2] RFC 1134 PPP November 1989

 every host supports point-to-point connections.  For example,
 asynchronous RS-232-C [1] interfaces are essentially ubiquitous.
 One reason for the small number of point-to-point IP links is the
 lack of a standard encapsulation protocol.  There are plenty of non-
 standard (and at least one defacto standard) encapsulation protocols
 available, but there is not one which has been agreed upon as an
 Internet Standard.  By contrast, standard encapsulation schemes do
 exist for the transmission of datagrams over most popular LANs.
 One purpose of this memo is to remedy this problem.  But even more
 importantly, the Point-to-Point Protocol proposes more than just an
 encapsulation scheme.  Point-to-Point links tend to exacerbate many
 problems with the current family of network protocols.  For instance,
 assignment and management of IP addresses, which is a problem even in
 LAN environments, is especially difficult over switched point-to-
 point circuits (e.g., dialups).
 Some additional issues addressed by PPP include asynchronous
 (start/stop) and bit-oriented synchronous encapsulation, network
 protocol multiplexing, link configuration, link quality testing,
 error detection, and option negotiation for such capabilities as
 network-layer address negotiation and data compression negotiation.
 PPP addresses these issues by providing an extensible Link Control
 Protocol (LCP) and a family of Network Control Protocols (NCP) to
 negotiate optional configuration parameters and facilities.

1.2. Overview of PPP

 PPP has three main components:
    1. A method for encapsulating datagrams over serial links.  PPP
       uses HDLC as a basis for encapsulating datagrams over point-
       to-point links.
    2. An extensible Link Control Protocol (LCP) to establish,
       configure, and test the data-link connection.
    3. A family of Network Control Protocols (NCP) for establishing
       and configuring different network-layer protocols.  PPP is
       designed to allow the simultaneous use of multiple network-
       layer protocols.
 In order to establish communications over a point-to-point link, the
 originating PPP would first send LCP packets to configure and test
 the data link.  After the link has been establish and optional
 facilities have been negotiated as needed by the LCP, the originating

Perkins [Page 3] RFC 1134 PPP November 1989

 PPP would send NCP packets to choose and configure one or more
 network-layer protocols.  Once each of the chosen network-layer
 protocols has been configured, datagrams from each network-layer
 protocol can be sent over the link.
 The link will remain configured for communications until explicit LCP
 or NCP packets close the link down, or until some external event
 occurs (e.g., inactivity timer expires or user intervention).

1.3. Organization of the document

 This memo is divided into several sections.  Section 2 discusses the
 physical-layer requirements of PPP.  Section 3 describes the Data
 Link Layer including the PPP frame format and data link encapsulation
 scheme.  Section 4 specifies the LCP including the connection
 establishment and option negotiation procedures.  Section 5 specifies
 the IP Control Protocol (IPCP), which is the NCP for the Internet
 Protocol, and describes the encapsulation of IP datagrams within PPP
 packets.  Appendix A summarizes important features of asynchronous
 HDLC, and Appendix B describes an efficient table-lookup algorithm
 for fast Frame Check Sequence (FCS) computation.

2. Physical Layer Requirements

 The Point-to-Point Protocol is capable of operating across any
 DTE/DCE interface (e.g., EIA RS-232-C, EIA RS-422, EIA RS-423 and
 CCITT V.35).  The only absolute requirement imposed by PPP is the
 provision of a duplex circuit, either dedicated or switched, which
 can operate in either an asynchronous (start/stop) or synchronous
 bit-serial mode, transparent to PPP Data Link Layer frames.  PPP does
 not impose any restrictions regarding transmission rate, other than
 those imposed by the particular DTE/DCE interface in use.
 PPP does not require the use of modem control signals, such as
 Request To Send (RTS), Clear To Send (CTS), Data Carrier Detect
 (DCD), and Data Terminal Ready (DTR).  However, using such signals
 when available can allow greater functionality and performance.

3. The Data Link Layer

 The Point-to-Point Protocol uses the principles, terminology, and
 frame structure of the International Organization For
 Standardization's (ISO) High-level Data Link Control (HDLC)
 procedures (ISO 3309-1979 [2]), as modified by ISO 3309:1984/PDAD1
 "Addendum 1: Start/stop transmission" [5].  ISO 3309-1979 specifies
 the HDLC frame structure for use in synchronous environments.  ISO
 3309:1984/PDAD1 specifies proposed modifications to ISO 3309-1979 to
 allow its use in asynchronous environments.

Perkins [Page 4] RFC 1134 PPP November 1989

 The PPP control procedures use the definitions and Control field
 encodings standardized in ISO 4335-1979 [3] and ISO 4335-
 1979/Addendum 1-1979 [4].  The PPP frame structure is also consistent
 with CCITT Recommendation X.25 LAPB [6], since that too is based on
 HDLC.
    Note: ISO 3309:1984/PDAD1 is a Proposed Draft standard.  At
    present, it seems that ISO 3309:1984/PDAD1 is stable and likely to
    become an International Standard.  Therefore, we feel comfortable
    about using it before it becomes an International Standard.  The
    progress of this proposal should be tracked and encouraged by the
    Internet community.
 The purpose of this memo is not to document what is already
 standardized in ISO 3309.  We assume that the reader is already
 familiar with HDLC, or has access to a copy of [2] or [6].  Instead,
 this paper attempts to give a concise summary and point out specific
 options and features used by PPP.  Since "Addendum 1: Start/stop
 transmission", is not yet standardized and widely available, it is
 summarized in Appendix A.

3.1. Frame Format

 A summary of the standard PPP frame structure is shown below.  The
 fields are transmitted from left to right.
    +----------+---------+---------+----------+------------
    |   Flag   | Address | Control | Protocol | Information
    | 01111110 | 1111111 | 0000011 | 16 bits  |      *
    +----------+---------+---------+----------+------------
            ---+---------+----------+
               |   FCS   |   Flag   |
               | 16 bits | 01111110 |
            ---+---------+----------+
 This figure does not include start/stop bits (for asynchronous links)
 or any bits or octets inserted for transparency.  When asynchronous
 links are used, all octets are transmitted with one start bit, eight
 bits of data, and one stop bit.  There is no provision in either PPP
 or ISO 3309:1984/PDAD1 for seven bit asynchronous links.
 To remain consistent with standard Internet practice, and avoid
 confusion for people used to reading RFCs, all binary numbers in the
 following descriptions are in Most Significant Bit to Least
 Significant Bit order, reading from left to right, unless otherwise
 indicated.  Note that this is contrary to standard ISO and CCITT
 practice which orders bits as transmitted (i.e., network bit order).
 Keep this in mind when comparing this document with the international

Perkins [Page 5] RFC 1134 PPP November 1989

 standards documents.
 Flag Sequence
    The Flag Sequence is a single octet and indicates the beginning or
    end of a frame.  The Flag Sequence consists of the binary sequence
    01111110 (hexadecimal 0x7e).
 Address Field
    The Address field is a single octet and contains the binary
    sequence 11111111 (hexadecimal 0xff), the All-Stations address.
    PPP does not assign individual station addresses.  The All-
    Stations address should always be recognized and received.  Frames
    with other Addresses should be silently discarded.
 Control Field
    The Control field is a single octet and contains the binary
    sequence 00000011 (hexadecimal 0x03), the Unnumbered Information
    (UI) command with the P/F bit is set to zero.  Frames with other
    Control field values should be silently discarded.
 Protocol Field
    The Protocol field is two octets and its value identifies the
    protocol encapsulated in the Information field of the frame.  The
    most up-to-date values of the Protocol field are specified in the
    most recent "Assigned Numbers" RFC [11].  Initial values are also
    listed below.
    Protocol field values in the "cxxx" range identify datagrams as
    belonging to the Link Control Protocol (LCP) or associated
    protocols.  Values in the "8xxx" range identify datagrams belonging
    to the family of Network Control Protocols (NCP).  Values in the
    "0xxx" range identify the network protocol of specific datagrams.
    This Protocol field is defined by PPP and is not a field defined
    by HDLC.  However, the Protocol field is consistent with the ISO
    3309 extension mechanism for Address fields.  All Protocols MUST be
    odd; the least significant bit of the least significant octet MUST
    equal "1".  Also, all Protocols MUST be assigned such that the
    least significant bit of the most significant octet equals "0".
    Frames received which don't comply with these rules should be
    considered as having an unrecognized Protocol, and should be
    handled as specified by the LCP.  The Protocol field is
    transmitted and received most significant octet first.

Perkins [Page 6] RFC 1134 PPP November 1989

    The Protocol field is initially assigned as follows:
       Value (in hex)          Protocol
       0001 to 001f            reserved (transparency inefficient)
       0021                    Internet Protocol
       0023                  * ISO CLNP
       0025                  * Xerox NS IDP
       0027                  * DECnet Phase IV
       0029                  * Appletalk
       002b                  * Novell IPX
       002d                  * Van Jacobson Compressed TCP/IP 1
       002f                  * Van Jacobson Compressed TCP/IP 2
       8021                    Internet Protocol Control Protocol
       8023                  * ISO CLNP Control Protocol
       8025                  * Xerox NS IDP Control Protocol
       8027                  * DECnet Phase IV Control Protocol
       8029                  * Appletalk Control Protocol
       802b                  * Novell IPX Control Protocol
       802d                  * Reserved
       802f                  * Reserved
       c021                    Link Control Protocol
       c023                  * User/Password Authentication Protocol
  • Reserved for future use; not described in this document.
 Information Field
    The Information field is zero or more octets.  The Information
    field contains the datagram for the protocol specified in the
    Protocol field.  The end of the Information field is found by
    locating the closing Flag Sequence and allowing two octets for the
    Frame Check Sequence field.  The default maximum length of the
    Information field is 1500 octets.  By prior agreement, consenting
    PPP implementations may use other values for the maximum
    Information field length.
    On transmission, the Information field may be padded with an
    arbitrary number of octets up to the maximum length.  It is the
    responsibility of each protocol to disambiguate padding characters
    from real information.
 Frame Check Sequence (FCS) Field
    The Frame Check Sequence field is normally 16 bits (two octets).
    By prior agreement, consenting PPP implementations may use a 32-

Perkins [Page 7] RFC 1134 PPP November 1989

    bit (four-octet) FCS for improved error detection.
    The FCS field is calculated over all bits of the Address, Control,
    Protocol and Information fields not including any start and stop
    bits (asynchronous) and any bits (synchronous) or octets
    (asynchronous) inserted for transparency.  This does not include
    the Flag Sequences or FCS field.  The FCS is transmitted with the
    coefficient of the highest term first.
    For more information on the specification of the FCS, see ISO 3309
    or CCITT X.25.
       Note: A fast, table-driven implementation of the 16-bit FCS
       algorithm is shown in Appendix B.  This implementation is based
       on [7] and [8].
 Modifications to the Basic Frame Format
    The Link Control Protocol can negotiate modifications to the
    standard PPP frame structure.  However, modified frames will
    always be clearly distinguishable from standard frames.

4. The PPP Link Control Protocol (LCP)

 The Link Control Protocol (LCP) provides a method of establishing,
 configuring, maintaining and terminating the point-to-point
 connection.  LCP goes through four distinct phases:
 Phase 1: Link Establishment and Configuration Negotiation
    Before any network-layer datagrams (e.g., IP) may be exchanged,
    LCP must first open the connection through an exchange of
    Configure packets.  This exchange is complete, and the Open state
    entered, once a Configure-Ack packet (described below) has been
    both sent and received.  Any non-LCP packets received before this
    exchange is complete are silently discarded.
    It is important to note that LCP handles configuration only of the
    link; LCP does not handle configuration of individual network-
    layer protocols.  In particular, all Configuration Parameters
    which are independent of particular network-layer protocols are
    configured by LCP.  All Configuration Options are assumed to be at
    default values unless altered by the configuration exchange.
 Phase 2: Link Quality Determination
    LCP allows an optional Link Quality Determination phase following
    transition to the LCP Open state.  In this phase, the link is

Perkins [Page 8] RFC 1134 PPP November 1989

    tested to determine if the link quality is sufficient to bring up
    network-layer protocols.  This phase is completely optional.  LCP
    may delay transmission of network-layer protocol information until
    this phase is completed.
    The procedure for Link Quality Determination is unspecified and
    may vary from implementation to implementation, or because of
    user-configured parameters, but only so long as the procedure
    doesn't violate other aspects of LCP.  One suggested method is to
    use LCP Echo-Request and Echo-Reply packets.
    What is important is that this phase may persist for any length of
    time.  Therefore, implementations should avoid fixed timeouts when
    waiting for their peers to advance to phase 3.
 Phase 3: Network-Layer Protocol Configuration Negotiation
    Once LCP has finished the Link Quality Determination phase,
    network-layer protocols may be separately configured by the
    appropriate Network Control Protocols (NCP), and may be brought up
    and taken down at any time.  If LCP closes the link, it informs
    the network-layer protocols so that they may take appropriate
    action.
 Phase 4: Link Termination
    LCP may terminate the link at any time.  This will usually be done
    at the request of a human user, but may happen because of a
    physical event such as the loss of carrier, or the expiration of
    an idle-period timer.

4.1. The LCP Automation

4.1.1. Overview

 LCP is specified by a number of packet formats and a finite-state
 automation.  This section presents an overview of the LCP automation,
 followed by a representation of it as both a state diagram and a
 state transition table.
 There are three classes of LCP packets:
    1. Link Establishment packets used to establish and configure a
       link, (e.g., Configure-Request, Configure-Ack, Configure-Nak
       and Configure-Reject)
    2. Link Termination packets used to terminate a link, (e.g.,
       Terminate-Request and Terminate-Ack)

Perkins [Page 9] RFC 1134 PPP November 1989

    3. Link Maintenance packets used to manage and debug a link,
       (e.g., Code-Reject, Protocol-Reject, Echo-Request, Echo-Reply
       and Discard-Request)
 The finite-state automation is defined by events, state transitions
 and actions.  Events include receipt of external commands such as
 Open and Close, expiration of the Restart timer, and receipt of
 packets from a LCP peer.  Actions include the starting of the Restart
 timer and transmission of packets.

4.1.2. State Diagram

 The state diagram which follows describes the sequence of events for
 reaching agreement on Configuration Options (opening the PPP
 connection) and for later closing of the connection.  The state
 machine is initially in the Closed state (1).  Once the Open state
 (6) has been reached, both ends of the link have met the requirement
 of having both sent and received a Configure-Ack packet.
 In the state diagram, events are shown above horizontal lines.
 Actions are shown below horizontal lines.  Two types of LCP packets -
 Configure-Naks and Configure-Rejects - are not differentiated in the
 state diagram.  As will be described later, these packets do indeed
 serve different, though similar, functions.  However, at the level of
 detail of this state diagram, they always cause the same transition.
 Since a more detailed specification of the LCP automation is given in
 a state transition table in the following section, implementation
 should be done by consulting it rather than this state diagram.

Perkins [Page 10] RFC 1134 PPP November 1989

                                  +------------------------------+
                                  |                              |
                                  V                              |
      +---2---+           PO +---1---+        RTA +---7---+      |
      |       |<-------------|       |<-----------|       |      |
      |Listen |              |Closed |            |Closing|      |
  RCR |       | C            |       | PLD        |       |      |
 +----|       |----->+------>|       |<---Any     |       |<--+  |
 |scr +-------+      ^       +-------+    State   +-------+   |  |
 |                   |     AO  |                    ^   | TO  |  |
 |       +-----------+     --- |                    |   +---->+  |
 |       |                 SCR |     C              |     str ^  |
 |    C  |   RCN/TO            |   +----------------+         |  |
 |    -- | +-------->+<--------+   | str                      |  |
 |       | | scr     |             |                          |  |
 |    +---3---+      V   TO  +---4---+            +-------+   |  |
 |    |       |<-----+<------|       |<-----------|       |   |  |
 |    | Req-  |          scr | Ack-  |        scn | Good  |   |  |
 |    | Sent  | RCA          | Rcvd  | RCR        | Req?  |   |  |
 |    |       |------------->|       |----------->|       |   |  |
 |    +-------+              +-------+            +-------+   |  |
 |       | ^                                         |        |  |
 |   RCR | +<--------+                               |        |  |
 |   --- | |         |     TO        RCN         --- |        |  |
 |       | | ---     +---------+   +-----+       sca |        |  |
 |       V | scn           scr |   | scr |           V        |  |
 |    +-------+              +---5---+   |        +---6---+ C |  |
 +--->|       |------------->|       |<--+        |       |---+  |
      | Good  | sca          | Ack-  |            | Open  | str  |
      | Req?  |          RCR | Sent  | RCA        |       |      |
      |       |<-------------|       |----------->|       |      |
      +-------+              +-------+            +-------+      |
            ^                                       |   |        |
            |                                   RCR |   | RTR    |
            +---------------------------------------+   +--------+
                                                scr       sta
 Events                                  Actions
 RCR - Receive-Configure-Request         scr - Send Configure-Request
 RCA - Receive-Configure-Ack             sca - Send Configure-Ack
 RCN - Receive-Configure-Nak or Reject   scn - Send Configure-Nak or
 RTR - Receive-Terminate-Req                   Reject
 RTA - Receive-Terminate-Ack             str - Send Terminate-Req
 AO  - Active-Open                       sta - Sent Terminate-Ack
 PO  - Passive-Open
 C   - Close
 TO  - Timeout
 PLD - Physical-Layer-Down

Perkins [Page 11] RFC 1134 PPP November 1989

4.1.3. State Transition Table

 The complete state transition table follows.  States are indicated
 horizontally, and events are read vertically.  State transitions and
 actions are represented in the form action/new-state.  Two actions
 caused by the same event are represented as action1&action2.
       | State
       |   1       2        3        4        5        6        7
 Events| Closed  Listen  Req-Sent Ack-Rcvd Ack-Sent  Open    Closing
 ------+-------------------------------------------------------------
   AO  | scr/3   scr/3      3        4        5        6      scr/3
   PO  |   2       2        2*       4        5        6      sta/3*
   C   |   1       1        1*       1      str/7    str/7      7
   TO  |   1       2      scr/3    scr/3    scr/3      6      str/7*
  PLD  |   1       1        1        1        1        1        1
  RCR+ | sta/1 scr&sca/5  sca/5    sca/6    sca/5  scr&sca/5    7
  RCR- | sta/1 scr&scn/3  scn/3    scn/4    scn/3  scr&scn/3    7
  RCA  | sta/1   sta/2      4      scr/3      6      scr/3      7
  RCN  | sta/1   sta/2    scr/3    scr/3    scr/5    scr/3      7
  RTR  | sta/1   sta/2    sta/3    sta/3    sta/3    sta/1    sta/7
  RTA  |   1       2        3        3        3        1        1
  RCJ  |   1       2        1        1        1        1        1
  RUC  | scj/1   scj/1    scj/1    scj/1    scj/1    scj/1  1 scj/1
  RER  | sta/1   sta/2      3        4        5      ser/1      7
 Notes:
     RCR+ - Receive-Configure-Request (Good)
     RCR- - Receive-Configure-Request (Bad)
     RCJ  - Receive-Code-Reject
     RUC  - Receive-Unknown-Code
     RER  - Receive-Echo-Request
     scj  - Send-Code-Reject
     ser  - Send-Echo-Reply
      *   - Special attention necessary, see detailed text

4.1.4. Events

 Transitions and actions in the LCP state machine are caused by
 events.  Some events are caused by commands executed at the local end
 (e.g., Active-Open, Passive-Open, and Close), others are caused by
 the receipt of packets from the remote end (e.g., Receive- Configure-
 Request, Receive-Configure-Ack, Receive-Configure-Nak, Receive-
 Terminate-Request and Receive-Terminate-Ack), and still others are
 caused by the expiration of the Restart timer started as the result
 of other events (e.g., Timeout).
 Following is a list of LCP events.

Perkins [Page 12] RFC 1134 PPP November 1989

 Active-Open (AO)
    The Active-Open event indicates the local execution of an Active-
    Open command by the network administrator (human or program).
    When this event occurs, LCP should immediately attempt to open the
    connection by exchanging configuration packets with the LCP peer.
 Passive-Open (PO)
    The Passive-Open event is similar to the Active-Open event.
    However, instead of immediately exchanging configuration packets,
    LCP should wait for the peer to send the first packet.  This will
    only happen after an Active-Open event in the LCP peer.
 Close (C)
    The Close event indicates the local execution of a Close command.
    When this event occurs, LCP should immediately attempt to close
    the connection.
 Timeout (TO)
    The Timeout event indicates the expiration of the LCP Restart
    timer.  The LCP Restart timer is started as the result of other
    LCP events.
    The Restart timer is used to time out transmissions of Configure-
    Request and Terminate-Request packets.  Expiration of the Restart
    timer causes a Timeout event, which triggers the corresponding
    Configure-Request or Terminate-Request packet to be retransmitted.
    The Restart timer MUST be configurable, but should default to
    three (3) seconds.
 Receive-Configure-Request (RCR)
    The Receive-Configure-Request event occurs when a Configure-
    Request packet is received from the LCP peer.  The Configure-
    Request packet indicates the desire to open a LCP connection and
    may specify Configuration Options.  The Configure-Request packet
    is more fully described in a later section.
 Receive-Configure-Ack (RCA)
    The Receive-Configure-Ack event occurs when a valid Configure-Ack
    packet is received from the LCP peer.  The Configure-Ack packet is
    a positive response to a Configure-Request packet.

Perkins [Page 13] RFC 1134 PPP November 1989

 Receive-Configure-Nak (RCN)
    The Receive-Configure-Nak event occurs when a valid Configure-Nak
    or Configure-Reject packet is received from the LCP peer.  The
    Configure-Nak and Configure-Reject packets are negative responses
    to a Configure-Request packet.
 Receive-Terminate-Request (RTR)
    The Receive-Terminate-Request event occurs when a Terminate-
    Request packet is received from the LCP peer.  The Terminate-
    Request packet indicates the desire to close the LCP connection.
 Receive-Terminate-Ack (RTA)
    The Receive-Terminate-Ack event occurs when a Terminate-Ack packet
    is received from the LCP peer.  The Terminate-Ack packet is a
    response to a Terminate-Request packet.
 Receive-Code-Reject (RCJ)
    The Receive-Code-Reject event occurs when a Code-Reject packet is
    received from the LCP peer.  The Code-Reject packet communicates
    an error that immediately closes the connection.
 Receive-Unknown-Code (RUC)
    The Receive-Unknown-Code event occurs when an un-interpretable
    packet is received from the LCP peer.  The Code-Reject packet is a
    response to an unknown packet.
 Receive-Echo-Request (RER)
    The Receive-Echo-Request event occurs when a Echo-Request, Echo-
    Reply, or Discard-Request packet is received from the LCP peer.
    The Echo-Reply packet is a response to a Echo-Request packet.
    There is no reply to a Discard-Request.
 Physical-Layer-Down (PLD)
    The Physical-Layer-Down event occurs when the Physical Layer
    indicates that it is down.

4.1.5. Actions

 Actions in the LCP state machine are caused by events and typically
 indicate the transmission of packets and/or the starting or stopping
 of the Restart timer.  Following is a list of LCP actions.

Perkins [Page 14] RFC 1134 PPP November 1989

 Send-Configure-Request (scr)
    The Send-Configure-Request action transmits a Configure-Request
    packet.  This indicates the desire to open a LCP connection with a
    specified set of Configuration Options.  The Restart timer is
    started after the Configure-Request packet is transmitted, to
    guard against packet loss.
 Send-Configure-Ack (sca)
    The Send-Configure-Ack action transmits a Configure-Ack packet.
    This acknowledges the receipt of a Configure-Request packet with
    an acceptable set of Configuration Options.
 Send-Configure-Nak (scn)
    The Send-Configure-Nak action transmits a Configure-Nak or
    Configure-Reject packet, as appropriate.  This negative response
    reports the receipt of a Configure-Request packet with an
    unacceptable set of Configuration Options.  Configure-Nak packets
    are used to refuse a Configuration Option value, and to suggest a
    new, acceptable value.  Configure-Reject packets are used to
    refuse all negotiation about a Configuration Option, typically
    because it is not recognized or implemented.  The use of
    Configure-Nak vs. Configure-Reject is more fully described in the
    section on LCP Packet Formats.
 Send-Terminate-Req (str)
    The Send-Terminate-Request action transmits a Terminate-Request
    packet.  This indicates the desire to close a LCP connection.  The
    Restart timer is started after the Terminate-Request packet is
    transmitted, to guard against packet loss.
 Send-Terminate-Ack (sta)
    The Send-Terminate-Request action transmits a Terminate-Ack
    packet.  This acknowledges the receipt of a Terminate-Request
    packet or otherwise confirms the belief that a LCP connection is
    Closed.
 Send-Code-Reject (scj)
    The Send-Code-Reject action transmits a Code-Reject packet.  This
    indicates the receipt of an unknown type of packet.  This is an
    unrecoverable error which causes immediate transitions to the
    Closed state on both ends of the link.

Perkins [Page 15] RFC 1134 PPP November 1989

 Send-Echo-Reply (ser)
    The Send-Echo-Reply action transmits an Echo-Reply packet.  This
    acknowledges the receipt of an Echo-Request packet.

4.1.6. States

 Following is a more detailed description of each LCP state.
 Closed (1)
    The initial and final state is the Closed state.  In the Closed
    state the connection is down and there is no attempt to open it;
    all connection requests from peers are rejected.  Physical-Layer-
    Down events always cause an immediate transition to the Closed
    state.
    There are two events which cause a transition out of the Closed
    state, Active-Open and Passive-Open.  Upon an Active-Open event, a
    Configure-Request is transmitted, the Restart timer is started,
    and the Request-Sent state is entered.  Upon a Passive-Open event,
    the Listen state is entered immediately.  Upon receipt of any
    packet, with the exception of a Terminate-Ack, a Terminate-Ack is
    sent.  Terminate-Acks are silently discarded to avoid creating a
    loop.
    The Restart timer is not running in the Closed state.
    The Physical Layer connection may be disconnected at any time when
    in the LCP Closed state.
 Listen (2)
    The Listen state is similar to the Closed state in that the
    connection is down and there is no attempt to open it.  However,
    peer connection requests are no longer rejected.
    Upon receipt of a Configure-Request, a Configure-Request is
    immediately transmitted and the Restart timer is started.  The
    received Configuration Options are examined and the proper
    response is sent.  If a Configure-Ack is sent, the Ack-Sent state
    is entered.  Otherwise, if a Configure-Nak or Configure-Reject is
    sent, the Request-Sent state is entered.  In either case, LCP
    exits its passive state, and begins to actively open the
    connection.  Terminate-Ack packets are sent in response to either
    Configure-Ack or Configure-Nak packets,
    The Restart timer is not running in the Listen state.

Perkins [Page 16] RFC 1134 PPP November 1989

 Request-Sent (3)
    In the Request-Sent state an active attempt is made to open the
    connection.  A Configure-Request has been sent and the Restart
    timer is running, but a Configure-Ack has not yet been received
    nor has one been sent.
    Upon receipt of a Configure-Ack, the Ack-Received state is
    immediately entered.  Upon receipt of a Configure-Nak or
    Configure-Reject, the Configure-Request Configuration Options are
    adjusted appropriately, a new Configure-Request is transmitted,
    and the Restart timer is restarted.  Similarly, upon the
    expiration of the Restart timer, a new Configure-Request is
    transmitted and the Restart timer is restarted.  Upon receipt of a
    Configure-Request, the Configuration Options are examined and if
    acceptable, a Configure-Ack is sent and the Ack-Sent state is
    entered.  If the Configuration Options are unacceptable, a
    Configure-Nak or Configure-Reject is sent as appropriate.
    Since there is an outstanding Configure-Request in the Request-
    Sent state, special care must be taken to implement the Passive-
    Open and Close events; otherwise, it is possible for the LCP peer
    to think the connection is open.  Processing of either event
    should be postponed until there is reasonable assurance that the
    peer is not open.  In particular, the Restart timer should be
    allowed to expire.
 Ack-Received (4)
    In the Ack-Received state, a Configure-Request has been sent and a
    Configure-Ack has been received.  The Restart timer is still
    running since a Configure-Ack has not yet been transmitted.
    Upon receipt of a Configure-Request with acceptable Configuration
    Options, a Configure-Ack is transmitted, the Restart timer is
    stopped and the Open state is entered.  If the Configuration
    Options are unacceptable, a Configure-Nak or Configure-Reject is
    sent as appropriate.  Upon the expiration of the Restart timer, a
    new Configure-Request is transmitted, the Restart timer is
    restarted, and the state machine returns to the Request-Sent
    state.
 Ack-Sent (5)
    In the Ack-Sent state, a Configure-Ack and a Configure-Request
    have been sent but a Configure-Ack has not yet been received.  The
    Restart timer is always running in the Ack-Sent state.

Perkins [Page 17] RFC 1134 PPP November 1989

    Upon receipt of a Configure-Ack, the Restart timer is stopped and
    the Open state is entered.  Upon receipt of a Configure-Nak or
    Configure-Reject, the Configure-Request Configuration Options are
    adjusted appropriately, a new Configure-Request is transmitted,
    and the Restart timer is restarted.  Upon the expiration of the
    Restart timer, a new Configure-Request is transmitted, the Restart
    timer is restarted, and the state machine returns to the Request-
    Sent state.
 Open (6)
    In the Open state, a connection exists and data may be
    communicated over the link.  The Restart timer is not running in
    the Open state.
    In normal operation, only two events cause transitions out of the
    Open state.  Upon receipt of a Close command, a Terminate-Request
    is transmitted, the Restart timer is started, and the Closing
    state is entered.  Upon receipt of a Terminate-Request, a
    Terminate-Ack is transmitted and the Closed state is entered.
    Upon receipt of an Echo-Request, an Echo-Reply is transmitted.
    Similarly, Echo-Reply and Discard-Request packets are silently
    discarded or processed as expected.  All other events cause
    immediate transitions out of the Open state and should be handled
    as if the state machine were in the Listen state.
 Closing (7)
    In the Closing state, an active attempt is made to close the
    connection.  A Terminate-Request has been sent and the Restart
    timer is running, but a Terminate-Ack has not yet been received.
    Upon receipt of a Terminate-Ack, the Closed state is immediately
    entered.  Upon the expiration of the Restart timer, a new
    Terminate-Request is transmitted and the Restart timer is
    restarted.  After the Restart timer has expired Max-Restart times,
    this action may be skipped, and the Closed state may be entered.
    Max-Restart MUST be a configurable parameter.
    Since there is an outstanding Terminate-Request in the Closing
    state, special care must be taken to implement the Passive-Open
    event; otherwise, it is possible for the LCP peer to think the
    connection is open.  Processing of the Passive-Open event should
    be postponed until there is reasonable assurance that the peer is
    not open.  In particular, the implementation should wait until the
    state machine would normally transition to the Closed state
    because of a Receive-Terminate-Ack event or Max-Restart Timeout
    events.

Perkins [Page 18] RFC 1134 PPP November 1989

4.2. Loop Avoidance

 Note that the protocol makes a reasonable attempt at avoiding
 Configuration Option negotiation loops.  However, the protocol does
 NOT guarantee that loops will not happen.  As with any negotiation,
 it is possible to configure two PPP implementations with conflicting
 policies that will never converge.  It is also possible to configure
 policies which do converge, but which take significant time to do so.
 Implementors should keep this in mind and should implement loop
 detection mechanisms or higher level timeouts.  If a timeout is
 implemented, it MUST be configurable.
 For example, implementations could take care to avoid Configure-
 Request or Terminate-Request livelocks by using a Max-Retries
 counter.  A Configure-Request livelock could occur when an
 originating PPP sends and re-sends a C-R without receiving a reply
 (e.g., the receiving PPP entity may have died).  A Terminate-Request
 livelock could occur when the originating PPP sends and re-sends a
 T-R without receiving a Terminate-Ack (e.g., the T-A may have been
 lost, but the remote PPP may have already terminated).  Max-Retries
 indicates the number of packet retransmissions that are allowed
 before there is reasonable assurance that a livelock situation
 exists.  Max-Retries MUST also be configurable, but should default to
 ten (10) retransmissions.

4.3 Packet Format

 Exactly one Link Control Protocol packet is encapsulated in the
 Information field of PPP Data Link Layer frames where the Protocol
 field indicates type hex c021 (Link Control Protocol).
 A summary of the Link Control Protocol packet format is shown below.
 The fields are transmitted from left to right.
     0                   1                   2                   3
     0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     Code      |  Identifier   |            Length             |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Data ...
    +-+-+-+-+
 Code
    The Code field is one octet and identifies the kind of LCP packet.
    LCP Codes are assigned as follows:

Perkins [Page 19] RFC 1134 PPP November 1989

       1       Configure-Request
       2       Configure-Ack
       3       Configure-Nak
       4       Configure-Reject
       5       Terminate-Request
       6       Terminate-Ack
       7       Code-Reject
       8       Protocol-Reject
       9       Echo-Request
       10      Echo-Reply
       11      Discard-Request
 Identifier
    The Identifier field is one octet and aids in matching requests
    and replies.
 Length
    The Length field is two octets and indicates the length of the LCP
    packet including the Code, Identifier, Length and Data fields.
    Octets outside the range of the Length field should be treated as
    Data Link Layer padding and should be ignored on reception.
 Data
    The Data field is zero or more octets as indicated by the Length
    field.  The format of the Data field is determined by the Code
    field.
 Regardless of which Configuration Options are enabled, all LCP
 packets are always sent in the full, standard form, as if no
 Configuration Options were enabled.  This ensures that LCP
 Configure-Request packets are always recognizable even when one end
 of the link mistakenly believes the link to be Open.
 This document describes Version 1 of the Link Control Protocol.  In
 the interest of simplicity, there is no version field in the LCP
 packet.  If a new version of LCP is necessary in the future, the
 intention is that a new Data Link Layer Protocol field value should
 be used to differentiate Version 1 LCP from all other versions.  A
 correctly functioning Version 1 LCP implementation will always
 respond to unknown Protocols (including other versions) with an
 easily recognizable Version 1 packet, thus providing a deterministic
 fallback mechanism for implementations of other versions.

Perkins [Page 20] RFC 1134 PPP November 1989

4.3.1. Configure-Request

 Description
    A LCP implementation wishing to open a connection MUST transmit a
    LCP packet with the Code field set to 1 (Configure-Request) and
    the Options field filled with any desired changes to the default
    link Configuration Options.
    Upon reception of a Configure-Request, an appropriate reply MUST
    be transmitted.
 A summary of the Configure-Request packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Options ...
 +-+-+-+-+
 Code
    1 for Configure-Request.
 Identifier
    The Identifier field should be changed on each transmission.  On
    reception, the Identifier field should be copied into the
    Identifier field of the appropriate reply packet.
 Options
    The options field is variable in length and contains the list of
    zero or more Configuration Options that the sender desires to
    negotiate.  All Configuration Options are always negotiated
    simultaneously.  The format of Configuration Options is further
    described in a later section.

4.3.2. Configure-Ack

 Description
    If every Configuration Option received in a Configure-Request is
    both recognizable and acceptable, then a LCP implementation should
    transmit a LCP packet with the Code field set to 2 (Configure-

Perkins [Page 21] RFC 1134 PPP November 1989

    Ack), the Identifier field copied from the received Configure-
    Request, and the Options field copied from the received
    Configure-Request.  The acknowledged Configuration Options MUST
    NOT be reordered or modified in any way.
    On reception of a Configure-Ack, the Identifier field must match
    that of the last transmitted Configure-Request, or the packet is
    invalid.  Additionally, the Configuration Options in a Configure-
    Ack must match those of the last transmitted Configure-Request, or
    the packet is invalid.  Invalid packets should be silently
    discarded.
    Reception of a valid Configure-Ack indicates that all
    Configuration Options sent in the last Configure-Request are
    acceptable.
 A summary of the Configure-Ack packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Options ...
 +-+-+-+-+
 Code
    2 for Configure-Ack.
 Identifier
    The Identifier field is a copy of the Identifier field of the
    Configure-Request which caused this Configure-Ack.
 Options
    The Options field is variable in length and contains the list of
    zero or more Configuration Options that the sender is
    acknowledging.  All Configuration Options are always acknowledged
    simultaneously.

4.3.3. Configure-Nak

 Description
    If every element of the received Configuration Options is

Perkins [Page 22] RFC 1134 PPP November 1989

    recognizable but some are not acceptable, then a LCP
    implementation should transmit a LCP packet with the Code field
    set to 3 (Configure-Nak), the Identifier field copied from the
    received Configure-Request, and the Options field filled with only
    the unacceptable Configuration Options from the Configure-Request.
    All acceptable Configuration Options should be filtered out of the
    Configure-Nak, but otherwise the Configuration Options from the
    Configure-Request MUST NOT be reordered.  Each of the nak'd
    Configuration Options MUST be modified to a value acceptable to
    the Configure-Nak sender.  Finally, an implementation may be
    configured to require the negotiation of a specific option.  If
    that option is not listed, then that option may be appended to the
    list of nak'd Configuration Options in order to request the remote
    end to list that option in its next Configure-Request packet.  The
    appended option must include a value acceptable to the Configure-
    Nak sender.
    On reception of a Configure-Nak, the Identifier field must match
    that of the last transmitted Configure-Request, or the packet is
    invalid and should be silently discarded.
    Reception of a valid Configure-Nak indicates that a new
    Configure-Request should be sent with the Configuration Options
    modified as specified in the Configure-Nak.
 A summary of the Configure-Nak packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Options ...
 +-+-+-+-+
 Code
    3 for Configure-Nak.
 Identifier
    The Identifier field is a copy of the Identifier field of the
    Configure-Request which caused this Configure-Nak.
 Options
    The Options field is variable in length and contains the list of

Perkins [Page 23] RFC 1134 PPP November 1989

    zero or more Configuration Options that the sender is nak'ing.
    All Configuration Options are always nak'd simultaneously.

4.3.4. Configure-Reject

 Description
    If some Configuration Options received in a Configure-Request are
    not recognizable or are not acceptable for negotiation (as
    configured by a network manager), then a LCP implementation should
    transmit a LCP packet with the Code field set to 4 (Configure-
    Reject), the Identifier field copied from the received Configure-
    Request, and the Options field filled with only the unrecognized
    Configuration Options from the Configure-Request.  All
    recognizable and negotiable Configuration Options must be filtered
    out of the Configure-Reject, but otherwise the Configuration
    Options MUST not be reordered.
    On reception of a Configure-Reject, the Identifier field must
    match that of the last transmitted Configure-Request, or the
    packet is invalid.  Additionally, the Configuration Options in a
    Configure-Reject must be a proper subset of those in the last
    transmitted Configure-Request, or the packet is invalid.  Invalid
    packets should be silently discarded.
    Reception of a Configure-Reject indicates that a new Configure-
    Request should be sent which does not include any of the
    Configuration Options listed in the Configure-Reject.
 A summary of the Configure-Reject packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Options ...
 +-+-+-+-+
 Code
    4 for Configure-Reject.
 Identifier
    The Identifier field is a copy of the Identifier field of the
    Configure-Request which caused this Configure-Reject.

Perkins [Page 24] RFC 1134 PPP November 1989

 Options
    The Options field is variable in length and contains the list of
    zero or more Configuration Options that the sender is rejecting.
    All Configuration Options are always rejected simultaneously.

4.3.5. Terminate-Request and Terminate-Ack

 Description
    LCP includes Terminate-Request and Terminate-Ack Codes in order to
    provide a mechanism for closing a connection.
    A LCP implementation wishing to close a connection should transmit
    a LCP packet with the Code field set to 5 (Terminate-Request) and
    the Data field filled with any desired data.  Terminate-Request
    packets should continue to be sent until Terminate-Ack is
    received, the Physical Layer indicates that it has gone down, or a
    sufficiently large number have been transmitted such that the
    remote end is down with reasonable certainty.
    Upon reception of a Terminate-Request, a LCP packet MUST be
    transmitted with the Code field set to 6 (Terminate-Ack), the
    Identifier field copied from the Terminate-Request packet, and the
    Data field filled with any desired data.
    Reception of an unelicited Terminate-Ack indicates that the
    connection has been closed.
 A summary of the Terminate-Request and Terminate-Ack packet formats
 is shown below.  The fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |    Data ...
 +-+-+-+-+
 Code
    5 for Terminate-Request;
    6 for Terminate-Ack.

Perkins [Page 25] RFC 1134 PPP November 1989

 Identifier
    The Identifier field is one octet and aids in matching requests
    and replies.
 Data
    The Data field is zero or more octets and contains uninterpreted
    data for use by the sender.  The data may consist of any binary
    value and may be of any length from zero to the established value
    for the peer's MRU.

4.3.6. Code-Reject

 Description
    Reception of a LCP packet with an unknown Code indicates that one
    of the communicating LCP implementations is faulty or incomplete.
    This error MUST be reported back to the sender of the unknown Code
    by transmitting a LCP packet with the Code field set to 7 (Code-
    Reject), and the inducing packet copied to the Rejected-Packet
    field.
    Upon reception of a Code-Reject, a LCP implementation should make
    an immediate transition to the Closed state, and should report the
    error, since it is unlikely that the situation can be rectified
    automatically.
 A summary of the Code-Reject packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 | Rejected-Packet ...
 +-+-+-+-+-+-+-+-+
 Code
    7 for Code-Reject.
 Identifier
    The Identifier field is one octet and is for use by the
    transmitter.

Perkins [Page 26] RFC 1134 PPP November 1989

 Rejected-Packet
    The Rejected-Packet field contains a copy of the LCP packet which
    is being rejected.  It begins with the rejected Code field; it
    does not include any PPP Data Link Layer headers.  The Rejected-
    Packet should be truncated to comply with the established value of
    the peer's MRU.

4.3.7. Protocol-Reject

 Description
    Reception of a PPP frame with an unknown Data Link Layer Protocol
    indicates that the remote end is attempting to use a protocol
    which is unsupported at the local end.  This typically occurs when
    the remote end attempts to configure a new, but unsupported
    protocol.  If the LCP state machine is in the Open state, then
    this error MUST be reported back to the sender of the unknown
    protocol by transmitting a LCP packet with the Code field set to 8
    (Protocol-Reject), the Rejected-Protocol field set to the received
    Protocol, and the Data field filled with any desired data.
    Upon reception of a Protocol-Reject, a LCP implementation should
    stop transmitting frames of the indicated protocol.
    Protocol-Reject packets may only be sent in the LCP Open state.
    Protocol-Reject packets received in any state other than the LCP
    Open state should be discarded and no further action should be
    taken.
 A summary of the Protocol-Reject packet format is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |       Rejected-Protocol       |      Rejected-Information ...
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 Code
    8 for Protocol-Reject.
 Identifier
    The Identifier field is one octet and is for use by the

Perkins [Page 27] RFC 1134 PPP November 1989

    transmitter.
 Rejected-Protocol
    The Rejected-Protocol field is two octets and contains the
    Protocol of the Data Link Layer frame which is being rejected.
 Rejected-Information
    The Rejected-Information field contains a copy from the frame
    which is being rejected.  It begins with the Information field,
    and does not include any PPP Data Link Layer headers or the FCS.
    The Rejected-Information field should be truncated to comply with
    the established value of the peer's MRU.

4.3.8. Echo-Request and Echo-Reply

 Description
    LCP includes Echo-Request and Echo-Reply Codes in order to provide
    a Data Link Layer loopback mechanism for use in exercising both
    directions of the link.  This is useful as an aid in debugging,
    link quality determination, performance testing, and for numerous
    other functions.
    An Echo-Request sender transmits a LCP packet with the Code field
    set to 9 (Echo-Request) and the Data field filled with any desired
    data, up to but not exceeding the receivers established MRU.
    Upon reception of an Echo-Request, a LCP packet MUST be
    transmitted with the Code field set to 10 (Echo-Reply), the
    Identifier field copied from the received Echo-Request, and the
    Data field copied from the Echo-Request, truncating as necessary
    to avoid exceeding the peer's established MRU.
    Echo-Request and Echo-Reply packets may only be sent in the LCP
    Open state.  Echo-Request and Echo-Reply packets received in any
    state other than the LCP Open state should be discarded and no
    further action should be taken.
 A summary of the Echo-Request and Echo-Reply packet formats is shown
 below.  The fields are transmitted from left to right.

Perkins [Page 28] RFC 1134 PPP November 1989

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                         Magic-Number                          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |    Data ...
 +-+-+-+-+
 Code
    9 for Echo-Request;
    10 for Echo-Reply.
 Identifier
    The Identifier field is one octet and aids in matching Echo-
    Requests and Echo-Replies.
 Magic-Number
    The Magic-Number field is four octets and aids in detecting
    loopbacked links.  Unless modified by a Configuration Option, the
    Magic-Number MUST always be transmitted as zero and MUST always be
    ignored on reception.  Further use of the Magic-Number is beyond
    the scope of this discussion.
 Data
    The Data field is zero or more octets and contains uninterpreted
    data for use by the sender.  The data may consist of any binary
    value and may be of any length from zero to the established value
    for the peer's MRU.

4.3.9. Discard-Request

 Description
    LCP includes a Discard-Request Code in order to provide a Data
    Link Layer data sink mechanism for use in exercising the local to
    remote direction of the link.  This is useful as an aid in
    debugging, performance testing, and and for numerous other
    functions.
    A discard sender transmits a LCP packet with the Code field set to
    11 (Discard-Request) and the Data field filled with any desired

Perkins [Page 29] RFC 1134 PPP November 1989

    data, up to but not exceeding the receivers established MRU.
    A discard receiver MUST simply throw away an Discard-Request that
    it receives.
    Discard-Request packets may only be sent in the LCP Open state.
 A summary of the Discard-Request packet formats is shown below.  The
 fields are transmitted from left to right.
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Code      |  Identifier   |            Length             |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                         Magic-Number                          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |    Data ...
 +-+-+-+-+
 Code
    11 for Discard-Request.
 Identifier
    The Identifier field is one octet and is for use by the Discard-
    Request transmitter.
 Magic-Number
    The Magic-Number field is four octets and aids in detecting
    loopbacked links.  Unless modified by a configuration option, the
    Magic-Number MUST always be transmitted as zero and MUST always be
    ignored on reception.  Further use of the Magic-Number is beyond
    the scope of this discussion.
 Data
    The Data field is zero or more octets and contains uninterpreted
    data for use by the sender.  The data may consist of any binary
    value and may be of any length from zero to the established value
    for the peer's MRU.

4.4. Configuration Options

 LCP Configuration Options allow modifications to the standard
 characteristics of a point-to-point link to be negotiated.

Perkins [Page 30] RFC 1134 PPP November 1989

 Negotiable modifications include such things as the maximum receive
 unit, async control character mapping, the link authentication
 method, the link encryption method, etc..  The Configuration Options
 themselves are described in separate documents.  If a Configuration
 Option is not included in a Configure-Request packet, the default
 value for that Configuration Option is assumed.
 The end of the list of Configuration Options is indicated by the end
 of the LCP packet.
 Unless otherwise specified, a specific Configuration Options should
 be listed no more than once in a Configuration Options list.
 Specific Configuration Options may override this general rule and may
 be listed more than once.  The effect of this is Configuration Option
 specific and is specified by each such Configuration Option.
 Also unless otherwise specified, all Configuration Options apply in a
 half-duplex fashion.  When negotiated, they apply to only one
 direction of the link, typically in the receive direction when
 interpreted from the point of view of the Configure-Request sender.

4.4.1. Format

 A summary of the Configuration Option format is shown below.  The
 fields are transmitted from left to right.
  0                   1
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |     Type      |    Length     |    Data ...
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 Type
    The Type field is one octet and indicates the type of
    Configuration Option.  The most up-to-date values of the Type
    field are specified in the most recent "Assigned Numbers" RFC
    [11].
 Length
    The Length field is one octet and indicates the length of this
    Configuration Option including the Type, Length and Data fields.
    If a negotiable Configuration Option is received in a Configure-
    Request but with an invalid Length, a Configure-Nak should be
    transmitted which includes the desired Configuration Option with
    an appropriate Length and Data.

Perkins [Page 31] RFC 1134 PPP November 1989

 Data
    The Data field is zero or more octets and indicates the value or
    other information for this Configuration Option.  The format and
    length of the Data field is determined by the Type and Length
    fields.

5. A PPP Network Control Protocol (NCP) for IP

 The IP Control Protocol (IPCP) is responsible for configuring,
 enabling, and disabling the IP protocol modules on both ends of the
 point-to-point link.  As with the Link Control Protocol, this is
 accomplished through an exchange of packets.  IPCP packets may not be
 exchanged until LCP has reached the network-layer Protocol
 Configuration Negotiation phase.  Likewise, IP datagrams may not be
 exchanged until IPCP has first opened the connection.
 The IP Control Protocol is exactly the same as the Link Control
 Protocol with the following exceptions:
 Data Link Layer Protocol Field
    Exactly one IP Control Protocol packet is encapsulated in the
    Information field of PPP Data Link Layer frames where the Protocol
    field indicates type hex 8021 (IP Control Protocol).
 Code field
    Only Codes 1 through 7 (Configure-Request, Configure-Ack,
    Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack
    and Code-Reject) are used.  Other Codes should be treated as
    unrecognized and should result in Code-Rejects.
 Timeouts
    IPCP packets may not be exchanged until the Link Control Protocol
    has reached the network-layer Protocol Configuration Negotiation
    phase.  An implementation should be prepared to wait for Link
    Quality testing to finish before timing out waiting for a
    Configure-Ack or other response.  It is suggested that an
    implementation give up only after user intervention or a
    configurable amount of time.
 Configuration Option Types
    The IPCP has a separate set of Configuration Options.  The most
    up-to-date values of the type field are specified in the most
    recent "Assigned Numbers" RFC [11].

Perkins [Page 32] RFC 1134 PPP November 1989

5.1. Sending IP Datagrams

 Before any IP packets may be communicated, both the Link Control
 Protocol and the IP Control Protocol must reach the Open state.
 Exactly one IP packet is encapsulated in the Information field of PPP
 Data Link Layer frames where the Protocol field indicates type hex
 0021 (Internet Protocol).
 The maximum length of an IP packet transmitted over a PPP link is the
 same as the maximum length of the Information field of a PPP data
 link layer frame.  Larger IP datagrams must be fragmented as
 necessary.  If a system wishes to avoid fragmentation and reassembly,
 it should use the TCP Maximum Segment Size option [12], or a similar
 mechanism, to discourage others from sending large datagrams.

A. Asynchronous HDLC

 This appendix summarizes the modifications to ISO 3309-1979 proposed
 in ISO 3309:1984/PDAD1.  These modifications allow HDLC to be used
 with 8-bit asynchronous links.
 Transmission Considerations
    Each octet is delimited by a start and a stop element.
 Flag Sequence
    The Flag Sequence is a single octet and indicates the beginning or
    end of a frame.  The Flag Sequence consists of the binary sequence
    01111110 (hexadecimal 0x7e).
 Transparency
    On asynchronous links, a character stuffing procedure is used.
    The Control Escape octet is defined as binary 01111101
    (hexadecimal 0x7d) where the bit positions are numbered 87654321
    (not 76543210, BEWARE).
    After FCS computation, the transmitter examines the entire frame
    between the two Flag Sequences.  Each Flag Sequence, Control
    Escape octet and octet with value less than hexadecimal 0x20 is
    replaced by a two character sequence consisting of the Control
    Escape octet and the original octet with bit 6 complemented (i.e.,
    exclusive-or'd with hexadecimal 0x20).
    Prior to FCS computation, the receiver examines the entire frame
    between the two Flag Sequences.  For each Control Escape octet,

Perkins [Page 33] RFC 1134 PPP November 1989

    that octet is removed and bit 6 of the following octet is
    complemented.  A Control Escape octet immediately preceding the
    closing Flag Sequence indicates an invalid frame.
       Note: The inclusion of all octets less than hexadecimal 0x20
       allows all ASCII control characters [10] excluding DEL (Delete)
       to be transparently communicated through almost all known data
       communications equipment.
    A few examples may make this more clear.  Packet data is
    transmitted on the link as follows:
       0x7e is encoded as 0x7d, 0x5e.
       0x7d is encoded as 0x7d, 0x5d.
       0x01 is encoded as 0x7d, 0x21.
 Aborting a Transmission
    On asynchronous links, frames may be aborted by transmitting a "0"
    stop bit where a "1" bit is expected (framing error) or by
    transmitting a Control Escape octet followed immediately by a
    closing Flag Sequence.
 Inter-frame Time Fill
    On asynchronous links, inter-octet and inter-frame time fill
    should be accomplished by transmitting continuous "1" bits (mark-
    hold state).
       Note: On asynchronous links, inter-frame time fill can be
       viewed as extended inter-octet time fill.  Doing so can save
       one octet for every frame, decreasing delay and increasing
       bandwidth.  This is possible since a Flag Sequence may serve as
       both a frame close and a frame begin.  After having received
       any frame, an idle receiver will always be in a frame begin
       state.
       Robust transmitters should avoid using this trick over-
       zealously since the price for decreased delay is decreased
       reliability.  Noisy links may cause the receiver to receive
       garbage characters and interpret them as part of an incoming
       frame.  If the transmitter does not transmit a new opening Flag
       Sequence before sending the next frame, then that frame will be
       appended to the noise characters causing an invalid frame (with
       high reliability).  Transmitters should avoid this by
       transmitting an open Flag Sequence whenever "appreciable time"
       has elapsed since the prior closing Flag Sequence.  It is
       suggested that implementations will achieve the best results by

Perkins [Page 34] RFC 1134 PPP November 1989

       always sending an opening Flag Sequence if the new frame is not
       back-to-back with the last.  The maximum value for "appreciable
       time" is likely to be no greater than the typing rate of a slow
       to average typist, say 1 second.

B. Fast Frame Check Sequence (FCS) Implementation

B.1. FCS Computation Method

 The following code provides a table lookup computation for
 calculating the Frame Check Sequence as data arrives at the
 interface.  The table is created by the code in section 2.
 /*
  * FCS lookup table as calculated by the table generator in section 2.
  */
 static unsigned short fcstab[256] = {
      0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
      0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
      0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
      0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
      0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
      0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
      0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
      0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
      0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
      0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
      0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
      0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
      0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
      0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
      0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
      0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
      0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
      0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
      0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
      0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
      0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
      0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
      0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
      0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
      0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
      0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
      0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
      0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
      0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
      0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
      0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,

Perkins [Page 35] RFC 1134 PPP November 1989

      0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
 };
 #define PPPINITFCS      0xffff  /* Initial FCS value */
 #define PPPGOODFCS      0xf0b8  /* Good final FCS value */
 /*
  * Calculate a new fcs given the current fcs and the new data.
  */
 unsigned short pppfcs(fcs, cp, len)
     register unsigned short fcs;
     register unsigned char *cp;
     register int len;
 {
     while (len--)
         fcs = (fcs >> 8) ^ fcstab[(fcs ^ *cp++) & 0xff];
     return (fcs);
 }

B.2. Fast FCS table generator

 The following code creates the lookup table used to calculate the
 FCS.
 /*
  * Generate a FCS table for the HDLC FCS.
  *
  * Drew D. Perkins at Carnegie Mellon University.
  *
  * Code liberally borrowed from Mohsen Banan and D. Hugh Redelmeier.
  */
 /*
  * The HDLC polynomial: x**0 + x**5 + x**12 + x**16 (0x8408).
  */
 #define P       0x8408
 main()
 {
     register unsigned int b, v;
     register int i;
     printf("static unsigned short fcstab[256] = {");
     for (b = 0; ; ) {
         if (b % 8 == 0)

Perkins [Page 36] RFC 1134 PPP November 1989

             printf("0);
         v = b;
         for (i = 8; i--; )
             v = v & 1 ? (v >> 1) ^ P : v >> 1;
         printf("0x%04x", v & 0xFFFF);
         if (++b == 256)
             break;
         printf(",");
     }
    printf("0;0);
 }

References

[1]  Electronic Industries Association, "Interface Between Data
     Terminal Equipment and Data Communications Equipment Employing
     Serial Binary Data Interchange", EIA Standard RS-232-C, August
     1969.
[2]  International Organization For Standardization, "Data
     Communication - High-level Data Link Control Procedures - Frame
     Structure", ISO Standard 3309-1979, 1979.
[3]  International Organization For Standardization, "Data
     Communication - High-level Data Link Control Procedures -
     Elements of Procedures", ISO Standard 4335-1979, 1979.
[4]  International Organization For Standardization, "Data
     Communication - High-Level Data Link Control Procedures -
     Elements of Procedures - Addendum 1", ISO Standard 4335-
     1979/Addendum 1, 1979.
[5]  International Organization For Standardization, "Information
     Processing Systems - Data Communication - High-level Data Link
     Control Procedures - Frame structure - Addendum 1: Start/stop
     Transmission", Proposed Draft International Standard ISO
     3309:1983/PDAD1, 1984.
[6]  International Telecommunication Union, CCITT Recommendation X.25,
     "Interface Between Data Terminal Equipment (DTE) and Data Circuit
     Terminating Equipment (DCE) for Terminals Operating in the Packet
     Mode on Public Data Networks", CCITT Red Book, Volume VIII,
     Fascicle VIII.3, Rec. X.25., October 1984.

Perkins [Page 37] RFC 1134 PPP November 1989

[7]  Perez, "Byte-wise CRC Calculations", IEEE Micro, June 1983.
     Morse, G., "Calculating CRC's by Bits and Bytes", Byte, September
     1986.
[8]  LeVan, J., "A Fast CRC", Byte, November 1987.
[9]  American National Standards Institute, "American National
     Standard Code for Information Interchange", ANSI X3.4-1977, 1977.

[10] Postel, J., "Internet Protocol", RFC 791, USC/Information

     Sciences Institute, September 1981.

[11] Reynolds, J.K., and J. Postel, "Assigned Numbers", RFC 1010,

     USC/Information Sciences Institute, May 1987.

[12] Postel, J., "The TCP Maximum Segment Size Option and Related

     Topics", RFC 879, USC/Information Sciences Institute, November
     1983.

Security Considerations

 Security issues are not addressed in this memo.

Author's Address

 This proposal is the product of the Point-to-Point Protocol Working
 Group of the Internet Engineering Task Force (IETF). The working
 group can be contacted via the chair:
 Russ Hobby
 UC Davis
 Computing Services
 Davis, CA 95616
 Phone: (916) 752-0236
 EMail: rdhobby@ucdavis.edu

Acknowledgments

 Many people spent significant time helping to develop the Point-to-
 Point Protocol.  The complete list of people is too numerous to list,
 but the following people deserve special thanks: Ken Adelman (TGV),
 Craig Fox (NSC), Phill Gross (NRI), Russ Hobby (UC Davis), David
 Kaufman (Proteon), John LoVerso (Xylogics), Bill Melohn (Sun
 Microsystems), Mike Patton (MIT), Drew Perkins (CMU), Greg Satz
 (cisco systems) and Asher Waldfogel (Wellfleet).

Perkins [Page 38]

/data/webs/external/dokuwiki/data/pages/rfc/rfc1134.txt · Last modified: 1989/11/29 23:52 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki