PPP Driver. More...
Data Structures | |
struct | _PPPDCB |
PPP interface structure. More... | |
Defines | |
#define | PPP_PFC 0x01 |
#define | PPP_ACFC 0x02 |
#define | LCP_DEFOPT_ASYNCMAP 0x000A0000UL |
#define | LCP_OPEN 1 |
#define | LCP_CLOSE 2 |
#define | LCP_LOWERUP 3 |
#define | LCP_LOWERDOWN 4 |
Typedefs | |
typedef struct _PPPDCB | PPPDCB |
PPP interface type. | |
Functions | |
void | NutPppInput (NUTDEVICE *dev, NETBUF *nb) |
Handle incoming PPP frames. | |
int | NutPppOutput (NUTDEVICE *dev, uint16_t type, uint8_t *ha, NETBUF *nb) |
Send PPP frame. | |
void | NutPppSm (void *arg) |
PPP state machine timeout thread. | |
int | NutPppInitStateMachine (NUTDEVICE *dev) |
Initialize the PPP state machine. | |
void | LcpOpen (NUTDEVICE *dev) |
Trigger LCP open event. | |
void | LcpClose (NUTDEVICE *dev) |
Trigger LCP close event. | |
void | LcpLowerUp (NUTDEVICE *dev) |
Trigger LCP lower up event. | |
void | LcpLowerDown (NUTDEVICE *dev) |
Trigger LCP lower down event. | |
void | IpcpOpen (NUTDEVICE *dev) |
Trigger IPCP open event. | |
void | IpcpClose (NUTDEVICE *dev) |
Trigger IPCP close event. | |
void | IpcpLowerUp (NUTDEVICE *dev) |
void | IpcpLowerDown (NUTDEVICE *dev) |
Variables | |
NUTDEVICE | devPpp |
Device information structure. | |
uint32_t | new_magic = 0x12345678 |
IFNET | ifn_ppp |
Network interface information structure. | |
NUTDEVICE | devPpp |
Device information structure. |
PPP Driver.
#define PPP_PFC 0x01 |
#define PPP_ACFC 0x02 |
#define LCP_DEFOPT_ASYNCMAP 0x000A0000UL |
Referenced by LcpTxConfReq().
#define LCP_OPEN 1 |
#define LCP_CLOSE 2 |
#define LCP_LOWERUP 3 |
Referenced by AhdlcRx().
#define LCP_LOWERDOWN 4 |
Referenced by AhdlcRx().
Handle incoming PPP frames.
Splits the PPP frame into the data link and the network part. Then the frame is routed to the proper handler, based on the type field in the header.
dev | Identifies the device that received the frame. |
nb | Pointer to a network buffer structure containing the PPP frame. |
References __ppp_trf, __ppp_trs, ppp_header::address, AHDLC_ALLSTATIONS, _NUTDEVICE::dev_dcb, fputs(), LcpTxProtRej(), _NETBUF::nb_dl, _NETBUF::nb_nw, ntohs, NUTDEBUG, NutDumpPpp(), NutIpcpInput(), NutIpInput(), NutLcpInput(), NutNetBufFree(), NutPapInput(), NutSleep(), PAPCS_OPEN, PPP_CHAP, PPP_IP, PPP_IPCP, PPP_LCP, PPP_LQR, PPP_PAP, PPPS_OPENED, ppp_header::prot_type, _NBDATA::sz, and _NBDATA::vp.
Send PPP frame.
Send a PPP frame of a given type using the specified device.
dev | Identifies the network device to use. |
type | Type of this frame. |
ha | Hardware address of the destination, ignored with PPP. |
nb | Network buffer structure containing the packet to be sent. The structure must have been allocated by a previous call NutNetBufAlloc() and will be freed if this function returns with an error. |
References __ppp_trf, __ppp_trs, ppp_header::address, AHDLC_ALLSTATIONS, AHDLC_UI, ppp_header::control, _PPPDCB::dcb_fd, _NUTDEVICE::dev_dcb, _NUTDEVICE::dev_icb, fputs(), htons, ifnet::if_send, _NETBUF::nb_dl, NBAF_DATALINK, NutDumpPpp(), NutNetBufAlloc(), NutNetBufFree(), NutSleep(), ppp_header::prot_type, and _NBDATA::vp.
Referenced by NutIpcpOutput(), NutLcpOutput(), and NutPapOutput().
NutPppSm | ( | void * | arg | ) |
PPP state machine timeout thread.
Handles timeouts for LCP and IPCP.
References _PPPDCB::dcb_auth_state, _PPPDCB::dcb_ipcp_state, _PPPDCB::dcb_lcp_state, _PPPDCB::dcb_reqid, _PPPDCB::dcb_retries, _NUTDEVICE::dev_dcb, IpcpTxConfReq(), LcpTxConfReq(), new_magic, NutIpcpOutput(), NutLcpOutput(), NutSleep(), PAPCS_AUTHREQ, PapTxAuthReq(), PPPS_ACKSENT, PPPS_CLOSED, PPPS_CLOSING, PPPS_REQSENT, PPPS_STOPPED, PPPS_STOPPING, and XCP_TERMREQ.
Referenced by NutPppInitStateMachine().
int NutPppInitStateMachine | ( | NUTDEVICE * | dev | ) |
Initialize the PPP state machine.
Start the PPP timer thread, if not already running.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References NUT_THREAD_PPPSMSTACK, NUT_THREAD_STACK_ADD, NUT_THREAD_STACK_MULT, NutPppSm(), and NutThreadCreate().
void LcpOpen | ( | NUTDEVICE * | dev | ) |
Trigger LCP open event.
Enable the link to come up. Typically triggered by the upper layer, when it is enabled.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_lcp_state, _PPPDCB::dcb_reqid, _NUTDEVICE::dev_dcb, fputs(), LcpTxConfReq(), PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_REQSENT, PPPS_STARTING, and PPPS_STOPPING.
Referenced by IpcpOpen().
void LcpClose | ( | NUTDEVICE * | dev | ) |
Trigger LCP close event.
Disable the link.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_lcp_state, _PPPDCB::dcb_reqid, _NUTDEVICE::dev_dcb, fputs(), IpcpLowerDown(), NutLcpOutput(), PPPS_ACKRCVD, PPPS_ACKSENT, PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_OPENED, PPPS_REQSENT, PPPS_STARTING, PPPS_STOPPED, PPPS_STOPPING, and XCP_TERMREQ.
void LcpLowerUp | ( | NUTDEVICE * | dev | ) |
Trigger LCP lower up event.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_lcp_state, _PPPDCB::dcb_reqid, _NUTDEVICE::dev_dcb, fputs(), LcpTxConfReq(), PPPS_CLOSED, PPPS_INITIAL, PPPS_REQSENT, and PPPS_STARTING.
void LcpLowerDown | ( | NUTDEVICE * | dev | ) |
Trigger LCP lower down event.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_lcp_state, _NUTDEVICE::dev_dcb, fputs(), IpcpLowerDown(), PPPS_ACKRCVD, PPPS_ACKSENT, PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_OPENED, PPPS_REQSENT, PPPS_STARTING, PPPS_STOPPED, and PPPS_STOPPING.
void IpcpOpen | ( | NUTDEVICE * | dev | ) |
Trigger IPCP open event.
Link is allowed to come up.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_ipcp_state, _PPPDCB::dcb_reqid, _NUTDEVICE::dev_dcb, fputs(), IpcpTxConfReq(), LcpOpen(), PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_REQSENT, PPPS_STARTING, and PPPS_STOPPING.
void IpcpClose | ( | NUTDEVICE * | dev | ) |
Trigger IPCP close event.
Disable the link.
Cancel timeouts and either initiate close or possibly go directly to the PPPS_CLOSED state.
dev | Pointer to the NUTDEVICE structure of the PPP device. |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_ipcp_state, _PPPDCB::dcb_reqid, _PPPDCB::dcb_state_chg, _NUTDEVICE::dev_dcb, fputs(), NutEventPost(), NutIpcpOutput(), PPPS_ACKRCVD, PPPS_ACKSENT, PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_OPENED, PPPS_REQSENT, PPPS_STARTING, PPPS_STOPPED, PPPS_STOPPING, and XCP_TERMREQ.
void IpcpLowerUp | ( | NUTDEVICE * | dev | ) |
References __ppp_trf, __ppp_trs, _PPPDCB::dcb_ipcp_state, _PPPDCB::dcb_reqid, _NUTDEVICE::dev_dcb, fputs(), IpcpTxConfReq(), PPPS_CLOSED, PPPS_INITIAL, PPPS_REQSENT, and PPPS_STARTING.
Referenced by PapRxAuthAck().
void IpcpLowerDown | ( | NUTDEVICE * | dev | ) |
References __ppp_trf, __ppp_trs, _ioctl(), _PPPDCB::dcb_fd, _PPPDCB::dcb_ipcp_state, _PPPDCB::dcb_state_chg, _NUTDEVICE::dev_dcb, fputs(), HDLC_SETIFNET, NutEventPost(), PPPS_ACKRCVD, PPPS_ACKSENT, PPPS_CLOSED, PPPS_CLOSING, PPPS_INITIAL, PPPS_OPENED, PPPS_REQSENT, PPPS_STARTING, PPPS_STOPPED, and PPPS_STOPPING.
Referenced by IpcpRxConfAck(), IpcpRxConfReq(), IpcpRxProtRej(), IpcpRxTermAck(), IpcpRxTermReq(), LcpClose(), LcpLowerDown(), LcpRxProtRej(), and PapRxAuthNak().
Device information structure.
This is a virtual device driver has no underlying hardware and must not be registered. It will be initialized when the application calls NutNetIfConfig().
Referenced by NutPppSm().
{ IFT_PPP, 0, {0, 0, 0, 0, 0, 0} , 0, 0, 0, PPP_MRU, 0, 0, 0, NutPppInput, 0, NutPppOutput, NULL }
Network interface information structure.
{ 0, {'p', 'p', 'p', 0, 0, 0, 0, 0, 0} , IFTYP_NET, 0, 0, &ifn_ppp, &dcb_ppp, NutPppInit, NutPppIOCtl, NutPppRead, NutPppWrite, NutPppWrite_P, NutPppOpen, NutPppClose, 0 }
Device information structure.
This is a virtual device driver has no underlying hardware and must not be registered. It will be initialized when the application calls NutNetIfConfig().