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  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

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

__packed_struct _PppPacket
 LCP/NCP packet header. More...
 
uint8_t identifier
 
uint16_t length
 
uint8_t data []
 
typedef __packed_struct
 Configure-Request, Configure-Ack, Configure-Nak and Configure-Reject packets. More...
 
uint8_t options []
 
 PppConfigurePacket
 
 PppTerminatePacket
 
uint8_t rejectedPacket []
 
 PppCodeRejPacket
 
uint16_t rejectedProtocol
 
uint8_t rejectedInfo []
 
 PppProtocolRejPacket
 
uint32_t magicNumber
 
 PppEchoPacket
 
 PppDiscardReqPacket
 
 PppOption
 
systime_t pppTickCounter
 

Detailed Description

PPP (Point-to-Point Protocol)

License

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

Copyright (C) 2010-2024 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.4.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 376 of file ppp.h.

◆ PppRandCallback

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

Random data generation callback function.

Definition at line 369 of file ppp.h.

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 1305 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 1220 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 1248 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 283 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 744 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 475 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 1148 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 909 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 394 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 330 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 1035 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 236 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 864 of file ppp.c.

Variable Documentation

◆ __packed_struct

typedef __packed_struct
Initial value:
{
uint8_t code

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

LCP/NCP option.

PPP Discard-Request packet.

Echo-Request and Echo-Reply packet.

Protocol-Reject packet.

Code-Reject packet.

Terminate-Request and Terminate-Ack packet.

Definition at line 268 of file ppp.h.

◆ _PppPacket

__packed_struct _PppPacket
Initial value:
{
uint8_t code

LCP/NCP packet header.

Definition at line 255 of file ppp.h.

◆ data

uint8_t data[]

Definition at line 260 of file ppp.h.

◆ identifier

uint8_t identifier

Definition at line 258 of file ppp.h.

◆ length

uint8_t length

Definition at line 259 of file ppp.h.

◆ magicNumber

uint32_t magicNumber

Definition at line 326 of file ppp.h.

◆ options

uint8_t options[]

Definition at line 273 of file ppp.h.

◆ PppCodeRejPacket

PppCodeRejPacket

Definition at line 300 of file ppp.h.

◆ PppConfigurePacket

PppConfigurePacket

Definition at line 274 of file ppp.h.

◆ PppDiscardReqPacket

PppDiscardReqPacket

Definition at line 342 of file ppp.h.

◆ PppEchoPacket

PppEchoPacket

Definition at line 328 of file ppp.h.

◆ PppOption

PppOption

Definition at line 354 of file ppp.h.

◆ PppProtocolRejPacket

PppProtocolRejPacket

Definition at line 314 of file ppp.h.

◆ PppTerminatePacket

PppTerminatePacket

Definition at line 287 of file ppp.h.

◆ pppTickCounter

systime_t pppTickCounter
extern

Definition at line 53 of file ppp.c.

◆ rejectedInfo

uint8_t rejectedInfo[]

Definition at line 313 of file ppp.h.

◆ rejectedPacket

uint8_t rejectedPacket[]

Definition at line 299 of file ppp.h.

◆ rejectedProtocol

uint16_t rejectedProtocol

Definition at line 312 of file ppp.h.

uint8_t code
Definition: coap_common.h:179