PPP (Point-to-Point Protocol) More...

#include "core/net.h"
#include "ppp/pap.h"
#include "ppp/chap.h"

Go to the source code of this file.

Data Structures

struct  _PppPacket
 LCP/NCP packet header. More...
 
struct  PppSettings
 PPP settings. More...
 
struct  PppFsm
 PPP finite state machine. More...
 
struct  PppConfig
 PPP configuration options. More...
 
struct  _PppContext
 PPP context. More...
 

Macros

#define PppPacket   struct _PppPacket
 
#define PppContext   struct _PppContext
 
#define PPP_SUPPORT   DISABLED
 
#define PPP_TX_BUFFER_SIZE   4096
 
#define PPP_RX_BUFFER_SIZE   8192
 
#define PPP_MAX_USERNAME_LEN   31
 
#define PPP_MAX_PASSWORD_LEN   31
 
#define PPP_TICK_INTERVAL   500
 
#define PPP_POLLING_INTERVAL   50
 
#define PPP_RESTART_TIMER   3000
 
#define PPP_MAX_CONFIGURE   10
 
#define PPP_MAX_TERMINATE   2
 
#define PPP_MAX_FAILURE   5
 
#define PPP_MASK_CHAR   0x20
 
#define PPP_ESC_CHAR   0x7D
 
#define PPP_FLAG_CHAR   0x7E
 
#define PPP_DEFAULT_MRU   1500
 
#define PPP_DEFAULT_ACCM   0xFFFFFFFF
 
#define PPP_DEFAULT_MAGIC_NUMBER   0
 
#define PPP_MIN_MRU   32
 
#define PPP_MAX_MRU   1500
 
#define PPP_MAX_CONF_REQ_SIZE   128
 
#define PPP_FRAME_HEADER_SIZE   4
 
#define PPP_FCS_SIZE   2
 
#define PPP_MAX_FRAME_SIZE   (PPP_FRAME_HEADER_SIZE + PPP_MAX_MRU + PPP_FCS_SIZE)
 
#define PPP_ADDR_FIELD   0xFF
 
#define PPP_CTRL_FIELD   0x03
 PPP Control field. More...
 

Typedefs

struct {
   char_t   type
 
   uint32_t   dataStart
 
   uint32_t   dataLength
 
   uint8_t   nameLength
 
   char_t   name []
 
   uint8_t   tokenLen: 4
 
   uint8_t   type: 2
 
   uint8_t   version: 2
 
   uint8_t   code
 
   uint16_t   mid
 
   uint8_t   token []
 
   union {
      uint8_t   b [6]
 
      uint16_t   w [3]
 
   } 
 
   uint16_t   srcPort
 
   uint16_t   destPort
 
   uint32_t   seqNum
 
   uint32_t   ackNum
 
   uint8_t   reserved1: 4
 
   uint8_t   dataOffset: 4
 
   uint8_t   flags: 6
 
   uint8_t   reserved2: 2
 
   uint16_t   window
 
   uint16_t   checksum
 
   uint16_t   urgentPointer
 
   uint8_t   options []
 
   uint16_t   length
 
   uint8_t   data []
 
   uint8_t   op
 
   uint8_t   htype
 
   uint8_t   hlen
 
   uint8_t   hops
 
   uint32_t   xid
 
   uint16_t   secs
 
   uint16_t   flags
 
   Ipv4Addr   ciaddr
 
   Ipv4Addr   yiaddr
 
   Ipv4Addr   siaddr
 
   Ipv4Addr   giaddr
 
   MacAddr   chaddr
 
   uint8_t   unused [10]
 
   uint8_t   sname [64]
 
   uint8_t   file [128]
 
   uint32_t   magicCookie
 
   uint16_t   type
 
   uint16_t   hardwareType
 
   uint32_t   time
 
   MacAddr   linkLayerAddr
 
   uint16_t   id
 
   uint8_t   rd: 1
 
   uint8_t   tc: 1
 
   uint8_t   aa: 1
 
   uint8_t   opcode: 4
 
   uint8_t   qr: 1
 
   uint8_t   rcode: 4
 
   uint8_t   z: 3
 
   uint8_t   ra: 1
 
   uint16_t   qdcount
 
   uint16_t   ancount
 
   uint16_t   nscount
 
   uint16_t   arcount
 
   uint8_t   questions []
 
   uint16_t   controlWord
 
   uint16_t   byteCount
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   bcdUsb
 
   uint8_t   bDeviceClass
 
   uint8_t   bDeviceSubClass
 
   uint8_t   bDeviceProtocol
 
   uint8_t   bMaxPacketSize0
 
   uint16_t   idVendor
 
   uint16_t   idProduct
 
   uint16_t   bcdDevice
 
   uint8_t   iManufacturer
 
   uint8_t   iProduct
 
   uint8_t   iSerialNumber
 
   uint8_t   bNumConfigurations
 
   uint8_t   maxRespTime
 
   Ipv4Addr   groupAddr
 
   uint16_t   hrd
 
   uint16_t   pro
 
   uint8_t   hln
 
   uint8_t   pln
 
   uint16_t   op
 
   MacAddr   sha
 
   Ipv4Addr   spa
 
   MacAddr   tha
 
   Ipv4Addr   tpa
 
   uint8_t   length
 
   uint8_t   value []
 
   uint16_t   first
 
   uint16_t   last
 
   uint16_t   next
 
   union {
      uint8_t   b [16]
 
      uint16_t   w [8]
 
      uint32_t   dw [4]
 
   } 
 
   uint16_t   maxRespDelay
 
   uint16_t   reserved
 
   Ipv6Addr   multicastAddr
 
   uint32_t   reserved
 
   uint16_t   pvid
 
   uint8_t   autoNegSupportStatus
 
   uint16_t   pmdAutoNegAdvCap
 
   uint16_t   operationalMauType
 
   uint16_t   capabilities
 
   uint8_t   deviceType
 
   uint8_t   lengthH: 1
 
   uint8_t   lengthL
 
   uint8_t   t: 1
 
   uint8_t   c: 1
 
   union {
      int32_t   integer
 
      uint8_t   octetString [1]
 
      uint8_t   oid [1]
 
      uint8_t   ipAddr [4]
 
      uint32_t   counter32
 
      uint32_t   gauge32
 
      uint32_t   unsigned32
 
      uint32_t   timeTicks
 
      uint64_t   counter64
 
   } 
 
   uint16_t   transactionId
 
   uint16_t   protocolId
 
   uint8_t   unitId
 
   uint8_t   pdu []
 
   uint8_t   retain: 1
 
   uint8_t   qos: 2
 
   uint8_t   dup: 1
 
   union {
      uint8_t   all
 
      struct {
         uint8_t   topicIdType: 2
 
         uint8_t   cleanSession: 1
 
         uint8_t   will: 1
 
         uint8_t   retain: 1
 
         uint8_t   qos: 2
 
         uint8_t   dup: 1
 
      } 
 
   } 
 
   uint8_t   b: 1
 
   uint8_t   identifier
 
   uint8_t   valueSize
 
   Ipv4Addr   srcIpAddr
 
   Ipv4Addr   destIpAddr
 
   Eui64   interfaceId
 
   uint16_t   mru
 
   uint8_t   peerIdLength
 
   uint8_t   peerId []
 
   uint32_t   seconds
 
   uint32_t   fraction
 
   uint16_t   opcode
 
   char_t   filename []
 
   uint8_t   reserved: 3
 
   uint8_t   fin: 1
 
   uint8_t   payloadLen: 7
 
   uint8_t   mask: 1
 
   uint8_t   extPayloadLen []
 
   uint32_t   length
 
   uint8_t   payload []
 
   uint8_t   protocolVersionId
 
   uint8_t   bpduType
 
   StpBridgeId   rootId
 
   uint32_t   rootPathCost
 
   StpBridgeId   bridgeId
 
   uint16_t   portId
 
   uint16_t   messageAge
 
   uint16_t   maxAge
 
   uint16_t   helloTime
 
   uint16_t   forwardDelay
 
   uint8_t   version1Length
 
   uint16_t   priority
 
   MacAddr   addr
 
PppConfigurePacket
 Configure-Request, Configure-Ack, Configure-Nak and Configure-Reject packets. More...
 
struct {
   char_t   type
 
   uint32_t   dataStart
 
   uint32_t   dataLength
 
   uint8_t   nameLength
 
   uint8_t   length: 4
 
   uint8_t   delta: 4
 
   union {
      uint8_t   b [8]
 
      uint16_t   w [4]
 
      uint32_t   dw [2]
 
   } 
 
   uint8_t   kind
 
   uint8_t   value []
 
   uint8_t   code
 
   uint16_t   type
 
   uint32_t   enterpriseNumber
 
   uint8_t   identifier []
 
   uint16_t   qtype
 
   uint16_t   qclass
 
   uint16_t   statusWord
 
   uint16_t   byteCount
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   wTotalLength
 
   uint8_t   bNumInterfaces
 
   uint8_t   bConfigurationValue
 
   uint8_t   iConfiguration
 
   uint8_t   bmAttributes
 
   uint8_t   bMaxPower
 
   uint8_t   type
 
   uint16_t   checksum
 
   uint8_t   parameter
 
   uint8_t   unused [3]
 
   uint8_t   data []
 
   uint32_t   parameter
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   options []
 
   uint8_t   curHopLimit
 
   uint8_t   reserved: 2
 
   uint8_t   p: 1
 
   uint8_t   prf: 2
 
   uint8_t   h: 1
 
   uint8_t   o: 1
 
   uint8_t   m: 1
 
   uint16_t   routerLifetime
 
   uint32_t   reachableTime
 
   uint32_t   retransTimer
 
   uint8_t   flags
 
   uint16_t   ppvid
 
   uint8_t   mdiPowerSupport
 
   uint8_t   psePowerPair
 
   uint8_t   powerClass
 
   uint8_t   appType
 
   uint8_t   vlanIdH: 5
 
   uint8_t   x: 1
 
   uint8_t   t: 1
 
   uint8_t   u: 1
 
   uint8_t   l2PriorityH: 1
 
   uint8_t   vlanIdL: 7
 
   uint8_t   dscpValue: 6
 
   uint8_t   l2PriorityL: 2
 
   uint8_t   chassisIdSubtype
 
   uint8_t   chassisId []
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfCoils
 
   uint16_t   length
 
   uint8_t   msgType
 
   uint16_t   flags
 
   Ipv4Addr   addr
 
   uint8_t   valueSize
 
   uint16_t   protocol
 
   uint32_t   accm
 
   uint8_t   msgLength
 
   uint8_t   message []
 
   uint8_t   mode: 3
 
   uint8_t   vn: 3
 
   uint8_t   li: 2
 
   uint8_t   stratum
 
   uint8_t   poll
 
   int8_t   precision
 
   uint32_t   rootDelay
 
   uint32_t   rootDispersion
 
   uint32_t   referenceId
 
   NtpTimestamp   referenceTimestamp
 
   NtpTimestamp   originateTimestamp
 
   NtpTimestamp   receiveTimestamp
 
   NtpTimestamp   transmitTimestamp
 
   uint16_t   opcode
 
   char_t   filename []
 
   uint16_t   value []
 
   uint16_t   group
 
   uint8_t   keyExchange []
 
   uint32_t   id
 
   uint32_t   dataLen
 
PppTerminatePacket
 Terminate-Request and Terminate-Ack packet. More...
 
struct {
   uint32_t   totalSize
 
   ResRootEntry   rootEntry
 
   MacAddr   destAddr
 
   MacAddr   srcAddr
 
   uint16_t   type
 
   uint8_t   data []
 
   uint16_t   hardwareType
 
   MacAddr   linkLayerAddr
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint8_t   rdata []
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bInterfaceNumber
 
   uint8_t   bAlternateSetting
 
   uint8_t   bNumEndpoints
 
   uint8_t   bInterfaceClass
 
   uint8_t   bInterfaceSubClass
 
   uint8_t   bInterfaceProtocol
 
   uint8_t   iInterface
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint32_t   unused
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   options []
 
   uint32_t   reserved
 
   Ipv6Addr   targetAddr
 
   uint16_t   vlanId
 
   uint8_t   vlanNameLen
 
   char_t   vlanName []
 
   uint8_t   aggregationStatus
 
   uint32_t   aggregatedPortId
 
   uint8_t   locationDataFormat
 
   uint8_t   locationId []
 
   uint8_t   portIdSubtype
 
   uint8_t   portId []
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint8_t   coilStatus []
 
   uint8_t   prefix
 
   uint16_t   length
 
   uint8_t   msgType
 
   uint8_t   identifier
 
   uint8_t   message []
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint16_t   protocol
 
   uint8_t   msgLength
 
   uint8_t   rejectedPacket []
 
   uint32_t   keyId
 
   uint8_t   messageDigest [16]
 
   uint16_t   opcode
 
   uint16_t   block
 
   uint16_t   value []
 
   uint8_t   value []
 
PppCodeRejPacket
 Code-Reject packet. More...
 
struct {
   uint8_t   dsap
 
   uint8_t   ssap
 
   uint8_t   control
 
   uint8_t   msgType
 
   uint8_t   transactionId [3]
 
   uint8_t   options []
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint8_t   rdata [4]
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bEndpointAddress
 
   uint8_t   bmAttributes
 
   uint16_t   wMaxPacketSize
 
   uint8_t   bInterval
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint32_t   unused
 
   uint8_t   data []
 
   uint32_t   mtu
 
   uint8_t   nextHeader
 
   uint8_t   hdrExtLen
 
   uint8_t   routingType
 
   uint8_t   segmentsLeft
 
   uint32_t   reserved
 
   Ipv6Addr   address []
 
   uint8_t   reserved1: 5
 
   uint8_t   o: 1
 
   uint8_t   s: 1
 
   uint8_t   r: 1
 
   uint8_t   reserved2 [3]
 
   Ipv6Addr   targetAddr
 
   uint8_t   protocolIdLen
 
   uint8_t   protocolId []
 
   uint16_t   maxFrameSize
 
   uint8_t   powerPriority: 4
 
   uint8_t   powerSource: 2
 
   uint8_t   powerType: 2
 
   uint16_t   powerValue
 
   uint16_t   ttl
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfInputs
 
   uint8_t   gwId
 
   uint16_t   duration
 
   uint8_t   identifier
 
   uint16_t   length
 
   uint8_t   message []
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint16_t   protocol
 
   uint16_t   rejectedProtocol
 
   uint8_t   rejectedInfo []
 
   uint16_t   opcode
 
   uint16_t   block
 
   uint16_t   version
 
   uint16_t   epoch
 
   DtlsSequenceNumber   seqNum
 
   uint8_t   hash
 
   uint8_t   signature
 
   uint8_t   value []
 
PppProtocolRejPacket
 Protocol-Reject packet. More...
 
struct {
   uint16_t   tci
 
   uint16_t   type
 
   uint8_t   msgType
 
   uint8_t   hopCount
 
   Ipv6Addr   linkAddress
 
   Ipv6Addr   peerAddress
 
   uint8_t   options []
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint8_t   rdata [16]
 
   uint8_t   bLength
 
   uint8_t   bDescriptorType
 
   uint16_t   bString []
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint8_t   pointer
 
   uint8_t   unused [3]
 
   uint8_t   data []
 
   uint32_t   unused
 
   uint8_t   nextHeader
 
   uint8_t   payloadLen
 
   uint16_t   reserved
 
   uint32_t   securityParamIndex
 
   uint32_t   sequenceNumber
 
   uint8_t   authData []
 
   uint32_t   reserved
 
   Ipv6Addr   targetAddr
 
   Ipv6Addr   destAddr
 
   uint8_t   measurements [20]
 
   uint16_t   psePowerPriceIndex
 
   uint16_t   supportedCap
 
   uint16_t   enabledCap
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint8_t   inputStatus []
 
   uint8_t   radius
 
   uint8_t   length
 
   Ipv4Addr   ipAddr
 
   uint32_t   magicNumber
 
   uint8_t   identifier
 
   uint16_t   length
 
   uint16_t   opcode
 
   uint16_t   errorCode
 
   char_t   errorMsg []
 
   uint16_t   msgSeq
 
   uint8_t   fragOffset [3]
 
   uint8_t   fragLength [3]
 
   TlsSignHashAlgo   value []
 
   uint8_t   value []
 
PppEchoPacket
 Echo-Request and Echo-Reply packet. More...
 
struct {
   uint16_t   code
 
   uint16_t   length
 
   uint8_t   value []
 
   uint16_t   rtype
 
   uint16_t   rclass
 
   uint32_t   ttl
 
   uint16_t   rdlength
 
   uint16_t   priority
 
   uint16_t   weight
 
   uint16_t   port
 
   uint8_t   target []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint16_t   bcdCdc
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint16_t   identifier
 
   uint16_t   sequenceNumber
 
   uint8_t   data []
 
   uint32_t   pointer
 
   uint32_t   securityParamIndex
 
   uint32_t   sequenceNumber
 
   uint8_t   payloadData []
 
   uint8_t   length
 
   uint8_t   powerPriority: 2
 
   uint8_t   pd4pid: 1
 
   uint8_t   reserved: 1
 
   uint8_t   powerSource: 2
 
   uint8_t   powerType: 2
 
   uint16_t   pdRequestedPower
 
   uint16_t   pseAllocatedPower
 
   uint8_t   mgmtAddrLen
 
   uint8_t   mgmtAddrSubtype
 
   uint8_t   mgmtAddr []
 
   uint8_t   functionCode
 
   uint16_t   startingAddr
 
   uint16_t   quantityOfRegs
 
   uint8_t   gwId
 
   uint8_t   gwAdd []
 
   Ipv4Addr   ipAddr
 
   uint8_t   identifier
 
   uint32_t   magicNumber
 
   uint16_t   serverVersion
 
   uint8_t   cookieLength
 
   uint8_t   cookie []
 
PppDiscardReqPacket
 PPP Discard-Request packet. More...
 
struct {
   uint32_t   iaId
 
   uint32_t   t1
 
   uint32_t   t2
 
   uint8_t   options []
 
   uint8_t   bFunctionLength
 
   uint8_t   bDescriptorType
 
   uint8_t   bDescriptorSubtype
 
   uint8_t   bmCapabilities
 
   uint8_t   bDataInterface
 
   uint8_t   type
 
   uint8_t   code
 
   uint16_t   checksum
 
   uint16_t   identifier
 
   uint16_t   sequenceNumber
 
   uint8_t   data []
 
   uint8_t   length
 
   MacAddr   linkLayerAddr
 
   uint16_t   pdRequestedPowerA
 
   uint16_t   pdRequestedPowerB
 
   uint16_t   pseAllocatedPowerA
 
   uint16_t   pseAllocatedPowerB
 
   uint16_t   powerStatus
 
   uint8_t   systemSetup
 
   uint16_t   pseMaxAvailablePower
 
   uint8_t   autoclass
 
   uint8_t   powerDown [3]
 
   uint8_t   ifNumSubtype
 
   uint32_t   ifNum
 
   uint8_t   oidLen
 
   uint8_t   oid []
 
   uint8_t   functionCode
 
   uint8_t   byteCount
 
   uint16_t   regValue []
 
   MqttSnFlags   flags
 
   uint8_t   protocolId
 
   uint16_t   duration
 
   char_t   clientId []
 
   Ipv4Addr   ipAddr
 
   uint16_t   length
 
   uint8_t   value []
 
PppOption
 LCP/NCP option. More...
 
typedef error_t(* PppRandCallback) (uint8_t *data, size_t length)
 Random data generation callback function. More...
 
typedef bool_t(* PppAuthCallback) (NetInterface *interface, const char_t *username)
 PPP authentication callback function. More...
 

Enumerations

enum  PppPhase {
  PPP_PHASE_DEAD = 0, PPP_PHASE_ESTABLISH = 1, PPP_PHASE_AUTHENTICATE = 2, PPP_PHASE_NETWORK = 3,
  PPP_PHASE_TERMINATE = 4
}
 PPP phases. More...
 
enum  PppState {
  PPP_STATE_0_INITIAL = 0, PPP_STATE_1_STARTING = 1, PPP_STATE_2_CLOSED = 2, PPP_STATE_3_STOPPED = 3,
  PPP_STATE_4_CLOSING = 4, PPP_STATE_5_STOPPING = 5, PPP_STATE_6_REQ_SENT = 6, PPP_STATE_7_ACK_RCVD = 7,
  PPP_STATE_8_ACK_SENT = 8, PPP_STATE_9_OPENED = 9
}
 LCP/NCP states. More...
 
enum  PppProtocol {
  PPP_PROTOCOL_IP = 0x0021, PPP_PROTOCOL_IPV6 = 0x0057, PPP_PROTOCOL_IPCP = 0x8021, PPP_PROTOCOL_IPV6CP = 0x8057,
  PPP_PROTOCOL_LCP = 0xC021, PPP_PROTOCOL_PAP = 0xC023, PPP_PROTOCOL_LQR = 0xC025, PPP_PROTOCOL_CHAP = 0xC223
}
 Protocol field values. More...
 
enum  PppCode {
  PPP_CODE_CONFIGURE_REQ = 1, PPP_CODE_CONFIGURE_ACK = 2, PPP_CODE_CONFIGURE_NAK = 3, PPP_CODE_CONFIGURE_REJ = 4,
  PPP_CODE_TERMINATE_REQ = 5, PPP_CODE_TERMINATE_ACK = 6, PPP_CODE_CODE_REJ = 7, PPP_CODE_PROTOCOL_REJ = 8,
  PPP_CODE_ECHO_REQ = 9, PPP_CODE_ECHO_REP = 10, PPP_CODE_DISCARD_REQ = 11
}
 Code field values. More...
 
enum  PppAuthProtocol { PPP_AUTH_PROTOCOL_PAP = 0x01, PPP_AUTH_PROTOCOL_CHAP_MD5 = 0x02, PPP_AUTH_PROTOCOL_MS_CHAP = 0x04, PPP_AUTH_PROTOCOL_MS_CHAP_2 = 0x08 }
 PPP authentication protocols. More...
 

Functions

void pppGetDefaultSettings (PppSettings *settings)
 Initialize settings with default values. More...
 
error_t pppInit (PppContext *context, const PppSettings *settings)
 PPP initialization. More...
 
error_t pppSetTimeout (NetInterface *interface, systime_t timeout)
 Set timeout value for blocking operations. More...
 
error_t pppSetAuthInfo (NetInterface *interface, const char_t *username, const char_t *password)
 Set PPP authentication information. More...
 
bool_t pppCheckPassword (NetInterface *interface, const char_t *password)
 Password verification. More...
 
error_t pppSendAtCommand (NetInterface *interface, const char_t *data)
 Send AT command. More...
 
error_t pppReceiveAtCommand (NetInterface *interface, char_t *data, size_t size)
 Wait for an incoming AT command. More...
 
error_t pppConnect (NetInterface *interface)
 Establish a PPP connection. More...
 
error_t pppClose (NetInterface *interface)
 Close a PPP connection. More...
 
void pppTick (NetInterface *interface)
 PPP timer handler. More...
 
void pppProcessFrame (NetInterface *interface, uint8_t *frame, size_t length, NetRxAncillary *ancillary)
 Process an incoming PPP frame. More...
 
error_t pppSendFrame (NetInterface *interface, NetBuffer *buffer, size_t offset, uint16_t protocol)
 Send a PPP frame. More...
 
size_t pppParseFrameHeader (const uint8_t *frame, size_t length, uint16_t *protocol)
 Parse PPP frame header. More...
 
uint16_t pppCalcFcs (const uint8_t *data, size_t length)
 FCS calculation. More...
 
uint16_t pppCalcFcsEx (const NetBuffer *buffer, size_t offset, size_t length)
 Calculate FCS over a multi-part buffer. More...
 
NetBufferpppAllocBuffer (size_t length, size_t *offset)
 Allocate a buffer to hold a PPP frame. More...
 

Variables

__start_packed struct _PppPacket __end_packed
 
systime_t pppTickCounter
 

Detailed Description

PPP (Point-to-Point Protocol)

License

SPDX-License-Identifier: GPL-2.0-or-later

Copyright (C) 2010-2023 Oryx Embedded SARL. All rights reserved.

This file is part of CycloneTCP Open.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Author
Oryx Embedded SARL (www.oryx-embedded.com)
Version
2.2.4

Definition in file ppp.h.

Macro Definition Documentation

◆ PPP_ADDR_FIELD

#define PPP_ADDR_FIELD   0xFF

Definition at line 150 of file ppp.h.

◆ PPP_CTRL_FIELD

#define PPP_CTRL_FIELD   0x03

PPP Control field.

Definition at line 152 of file ppp.h.

◆ PPP_DEFAULT_ACCM

#define PPP_DEFAULT_ACCM   0xFFFFFFFF

Definition at line 130 of file ppp.h.

◆ PPP_DEFAULT_MAGIC_NUMBER

#define PPP_DEFAULT_MAGIC_NUMBER   0

Definition at line 132 of file ppp.h.

◆ PPP_DEFAULT_MRU

#define PPP_DEFAULT_MRU   1500

Definition at line 128 of file ppp.h.

◆ PPP_ESC_CHAR

#define PPP_ESC_CHAR   0x7D

Definition at line 124 of file ppp.h.

◆ PPP_FCS_SIZE

#define PPP_FCS_SIZE   2

Definition at line 145 of file ppp.h.

◆ PPP_FLAG_CHAR

#define PPP_FLAG_CHAR   0x7E

Definition at line 125 of file ppp.h.

◆ PPP_FRAME_HEADER_SIZE

#define PPP_FRAME_HEADER_SIZE   4

Definition at line 143 of file ppp.h.

◆ PPP_MASK_CHAR

#define PPP_MASK_CHAR   0x20

Definition at line 123 of file ppp.h.

◆ PPP_MAX_CONF_REQ_SIZE

#define PPP_MAX_CONF_REQ_SIZE   128

Definition at line 140 of file ppp.h.

◆ PPP_MAX_CONFIGURE

#define PPP_MAX_CONFIGURE   10

Definition at line 103 of file ppp.h.

◆ PPP_MAX_FAILURE

#define PPP_MAX_FAILURE   5

Definition at line 117 of file ppp.h.

◆ PPP_MAX_FRAME_SIZE

#define PPP_MAX_FRAME_SIZE   (PPP_FRAME_HEADER_SIZE + PPP_MAX_MRU + PPP_FCS_SIZE)

Definition at line 147 of file ppp.h.

◆ PPP_MAX_MRU

#define PPP_MAX_MRU   1500

Definition at line 137 of file ppp.h.

◆ PPP_MAX_PASSWORD_LEN

#define PPP_MAX_PASSWORD_LEN   31

Definition at line 75 of file ppp.h.

◆ PPP_MAX_TERMINATE

#define PPP_MAX_TERMINATE   2

Definition at line 110 of file ppp.h.

◆ PPP_MAX_USERNAME_LEN

#define PPP_MAX_USERNAME_LEN   31

Definition at line 68 of file ppp.h.

◆ PPP_MIN_MRU

#define PPP_MIN_MRU   32

Definition at line 135 of file ppp.h.

◆ PPP_POLLING_INTERVAL

#define PPP_POLLING_INTERVAL   50

Definition at line 89 of file ppp.h.

◆ PPP_RESTART_TIMER

#define PPP_RESTART_TIMER   3000

Definition at line 96 of file ppp.h.

◆ PPP_RX_BUFFER_SIZE

#define PPP_RX_BUFFER_SIZE   8192

Definition at line 61 of file ppp.h.

◆ PPP_SUPPORT

#define PPP_SUPPORT   DISABLED

Definition at line 47 of file ppp.h.

◆ PPP_TICK_INTERVAL

#define PPP_TICK_INTERVAL   500

Definition at line 82 of file ppp.h.

◆ PPP_TX_BUFFER_SIZE

#define PPP_TX_BUFFER_SIZE   4096

Definition at line 54 of file ppp.h.

◆ PppContext

#define PppContext   struct _PppContext

Definition at line 38 of file ppp.h.

◆ PppPacket

#define PppPacket   struct _PppPacket

Definition at line 37 of file ppp.h.

Typedef Documentation

◆ PppAuthCallback

typedef bool_t(* PppAuthCallback) (NetInterface *interface, const char_t *username)

PPP authentication callback function.

Definition at line 372 of file ppp.h.

◆ PppCodeRejPacket

typedef { ... } PppCodeRejPacket

Code-Reject packet.

◆ PppConfigurePacket

typedef { ... } PppConfigurePacket

Configure-Request, Configure-Ack, Configure-Nak and Configure-Reject packets.

◆ PppDiscardReqPacket

typedef { ... } PppDiscardReqPacket

PPP Discard-Request packet.

◆ PppEchoPacket

typedef { ... } PppEchoPacket

Echo-Request and Echo-Reply packet.

◆ PppOption

typedef { ... } PppOption

LCP/NCP option.

◆ PppProtocolRejPacket

typedef { ... } PppProtocolRejPacket

Protocol-Reject packet.

◆ PppRandCallback

typedef error_t(* PppRandCallback) (uint8_t *data, size_t length)

Random data generation callback function.

Definition at line 365 of file ppp.h.

◆ PppTerminatePacket

typedef { ... } PppTerminatePacket

Terminate-Request and Terminate-Ack packet.

Enumeration Type Documentation

◆ PppAuthProtocol

PPP authentication protocols.

Enumerator
PPP_AUTH_PROTOCOL_PAP 
PPP_AUTH_PROTOCOL_CHAP_MD5 
PPP_AUTH_PROTOCOL_MS_CHAP 
PPP_AUTH_PROTOCOL_MS_CHAP_2 

Definition at line 234 of file ppp.h.

◆ PppCode

enum PppCode

Code field values.

Enumerator
PPP_CODE_CONFIGURE_REQ 

Configure-Request.

PPP_CODE_CONFIGURE_ACK 

Configure-Ack.

PPP_CODE_CONFIGURE_NAK 

Configure-Nak.

PPP_CODE_CONFIGURE_REJ 

Configure-Reject.

PPP_CODE_TERMINATE_REQ 

Terminate-Request.

PPP_CODE_TERMINATE_ACK 

Terminate-Ack.

PPP_CODE_CODE_REJ 

Code-Reject.

PPP_CODE_PROTOCOL_REJ 

Protocol-Reject.

PPP_CODE_ECHO_REQ 

Echo-Request.

PPP_CODE_ECHO_REP 

Echo-Reply.

PPP_CODE_DISCARD_REQ 

Discard-Request.

Definition at line 214 of file ppp.h.

◆ PppPhase

enum PppPhase

PPP phases.

Enumerator
PPP_PHASE_DEAD 

Link dead.

PPP_PHASE_ESTABLISH 

Link establishment phase.

PPP_PHASE_AUTHENTICATE 

Authentication phase.

PPP_PHASE_NETWORK 

Network-layer protocol phase.

PPP_PHASE_TERMINATE 

Link termination phase.

Definition at line 164 of file ppp.h.

◆ PppProtocol

Protocol field values.

Enumerator
PPP_PROTOCOL_IP 

Internet Protocol.

PPP_PROTOCOL_IPV6 

Internet Protocol version 6.

PPP_PROTOCOL_IPCP 

IP Control Protocol.

PPP_PROTOCOL_IPV6CP 

IPv6 Control Protocol.

PPP_PROTOCOL_LCP 

Link Control Protocol.

PPP_PROTOCOL_PAP 

Password Authentication Protocol.

PPP_PROTOCOL_LQR 

Link Quality Report.

PPP_PROTOCOL_CHAP 

Challenge Handshake Authentication Protocol.

Definition at line 197 of file ppp.h.

◆ PppState

enum PppState

LCP/NCP states.

Enumerator
PPP_STATE_0_INITIAL 
PPP_STATE_1_STARTING 
PPP_STATE_2_CLOSED 
PPP_STATE_3_STOPPED 
PPP_STATE_4_CLOSING 
PPP_STATE_5_STOPPING 
PPP_STATE_6_REQ_SENT 
PPP_STATE_7_ACK_RCVD 
PPP_STATE_8_ACK_SENT 
PPP_STATE_9_OPENED 

Definition at line 178 of file ppp.h.

Function Documentation

◆ pppAllocBuffer()

NetBuffer* pppAllocBuffer ( size_t  length,
size_t *  offset 
)

Allocate a buffer to hold a PPP frame.

Parameters
[in]lengthDesired payload length
[out]offsetOffset to the first byte of the payload
Returns
The function returns a pointer to the newly allocated buffer. If the system is out of resources, NULL is returned

Definition at line 1292 of file ppp.c.

◆ pppCalcFcs()

uint16_t pppCalcFcs ( const uint8_t *  data,
size_t  length 
)

FCS calculation.

Parameters
[in]dataPointer to the data over which to calculate the FCS
[in]lengthNumber of bytes to process
Returns
Resulting FCS value

Definition at line 1207 of file ppp.c.

◆ pppCalcFcsEx()

uint16_t pppCalcFcsEx ( const NetBuffer buffer,
size_t  offset,
size_t  length 
)

Calculate FCS over a multi-part buffer.

Parameters
[in]bufferPointer to the multi-part buffer
[in]offsetOffset from the beginning of the buffer
[in]lengthNumber of bytes to process
Returns
Resulting FCS value

Definition at line 1235 of file ppp.c.

◆ pppCheckPassword()

bool_t pppCheckPassword ( NetInterface interface,
const char_t password 
)

Password verification.

Parameters
[in]interfaceUnderlying network interface
[in]passwordNULL-terminated string containing the password to be checked
Returns
TRUE if the password is valid, else FALSE

Definition at line 273 of file ppp.c.

◆ pppClose()

error_t pppClose ( NetInterface interface)

Close a PPP connection.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 732 of file ppp.c.

◆ pppConnect()

error_t pppConnect ( NetInterface interface)

Establish a PPP connection.

Parameters
[in]interfaceUnderlying network interface
Returns
Error code

Definition at line 464 of file ppp.c.

◆ pppGetDefaultSettings()

void pppGetDefaultSettings ( PppSettings settings)

Initialize settings with default values.

Parameters
[out]settingsStructure that contains PPP settings

Definition at line 98 of file ppp.c.

◆ pppInit()

error_t pppInit ( PppContext context,
const PppSettings settings 
)

PPP initialization.

Parameters
[in]contextPointer to the PPP context
[in]settingsPPP specific settings
Returns
Error code

Definition at line 124 of file ppp.c.

◆ pppParseFrameHeader()

size_t pppParseFrameHeader ( const uint8_t *  frame,
size_t  length,
uint16_t *  protocol 
)

Parse PPP frame header.

Parameters
[in]framePointer to the PPP frame
[in]lengthLength of the frame, in bytes
[out]protocolValue of the Protocol field
Returns
If the PPP header was successfully parsed, the function returns the size of the PPP header, in bytes. If a parsing error occurred, zero is returned

Definition at line 1135 of file ppp.c.

◆ pppProcessFrame()

void pppProcessFrame ( NetInterface interface,
uint8_t *  frame,
size_t  length,
NetRxAncillary ancillary 
)

Process an incoming PPP frame.

Parameters
[in]interfaceUnderlying network interface
[in]frameIncoming PPP frame to process
[in]lengthTotal frame length
[in]ancillaryAdditional options passed to the stack along with the packet

Definition at line 896 of file ppp.c.

◆ pppReceiveAtCommand()

error_t pppReceiveAtCommand ( NetInterface interface,
char_t data,
size_t  size 
)

Wait for an incoming AT command.

Parameters
[in]interfaceUnderlying network interface
[out]dataBuffer where to store the incoming AT command
[in]sizeSize of the buffer, in bytes
Returns
Error code

Definition at line 383 of file ppp.c.

◆ pppSendAtCommand()

error_t pppSendAtCommand ( NetInterface interface,
const char_t data 
)

Send AT command.

Parameters
[in]interfaceUnderlying network interface
[in]dataNULL-terminated string that contains the AT command to be sent
Returns
Error code

Definition at line 320 of file ppp.c.

◆ pppSendFrame()

error_t pppSendFrame ( NetInterface interface,
NetBuffer buffer,
size_t  offset,
uint16_t  protocol 
)

Send a PPP frame.

Parameters
[in]interfaceUnderlying network interface
[in]bufferMulti-part buffer containing the data
[in]offsetOffset to the first data byte
[in]protocolProtocol field value
Returns
Error code

Definition at line 1022 of file ppp.c.

◆ pppSetAuthInfo()

error_t pppSetAuthInfo ( NetInterface interface,
const char_t username,
const char_t password 
)

Set PPP authentication information.

Parameters
[in]interfaceUnderlying network interface
[in]usernameNULL-terminated string containing the user name to be used
[in]passwordNULL-terminated string containing the password to be used
Returns
Error code

Definition at line 235 of file ppp.c.

◆ pppSetTimeout()

error_t pppSetTimeout ( NetInterface interface,
systime_t  timeout 
)

Set timeout value for blocking operations.

Parameters
[in]interfaceUnderlying network interface
[in]timeoutMaximum time to wait
Returns
Error code

Definition at line 199 of file ppp.c.

◆ pppTick()

void pppTick ( NetInterface interface)

PPP timer handler.

This routine must be periodically called by the TCP/IP stack to manage retransmissions

Parameters
[in]interfaceUnderlying network interface

Definition at line 851 of file ppp.c.

Variable Documentation

◆ __end_packed

__start_packed struct _PppPacket __end_packed

◆ code

uint8_t code

Definition at line 268 of file ppp.h.

◆ data

uint8_t data[]

Definition at line 284 of file ppp.h.

◆ identifier

uint8_t identifier

Definition at line 269 of file ppp.h.

◆ length

uint8_t length

Definition at line 270 of file ppp.h.

◆ magicNumber

uint32_t magicNumber

Definition at line 324 of file ppp.h.

◆ options

uint8_t options[]

Definition at line 271 of file ppp.h.

◆ pppTickCounter

systime_t pppTickCounter
extern

Definition at line 53 of file ppp.c.

◆ rejectedInfo

uint8_t rejectedInfo[]

Definition at line 311 of file ppp.h.

◆ rejectedPacket

uint8_t rejectedPacket[]

Definition at line 297 of file ppp.h.

◆ rejectedProtocol

uint16_t rejectedProtocol

Definition at line 310 of file ppp.h.

◆ type

uint8_t type

Definition at line 349 of file ppp.h.