⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppppacket.c

📁 在串口上PPP拨号上网的源程序(实现PPP协议栈)
💻 C
字号:
#include "PPP.h"
#include "UART.h"
extern BYTE InBuffer [PPP_BUFFER_SIZE + 1];	//PPP数据输入缓冲
extern BYTE OutBuffer[PPP_BUFFER_SIZE + 1];	//PPP数据输出缓冲
/////////////////////////////////////////////////////////////
/*
LCP的协商最大传送单元
*/
/////////////////////////////////////////////////////////////
void LCPREQPacket (WORD MRU)                  
{
	BYTE MRUp[2];
	MRUp[0]=MRU>>8;
	MRUp[1]=MRU;
    OutBuffer [0] = PPP_ADD;                //地址域
    OutBuffer [1] = PPP_COMTROL;            //控制域
    OutBuffer [2] = 0xC0;                   //协议域
    OutBuffer [3] = 0x21;
	OutBuffer [4] = LCP_CONFIG_REQUEST;     //代码域
    OutBuffer [5] = 0x01;                   //标识域
    OutBuffer [6] = 0x00;                   //长度
    OutBuffer [7] = 0x14;                   
    OutBuffer [8] = LCP_OPT_MRU;            //类型
    OutBuffer [9] = 0x04;                   //长度
    OutBuffer [10] = MRUp[0];               //数据
    OutBuffer [11] = MRUp[1];   
	OutBuffer [12] = LCP_OPT_ASYNC_MAP;      //类型
    OutBuffer [13] = 0x06;                   //长度
    OutBuffer [14] = 0x00;     //数据
    OutBuffer [15] = 0x00; 
    OutBuffer [16] = 0x00;
    OutBuffer [17] = 0x00;
    OutBuffer [18]  = LCP_OPT_MAGIC;          //类型
    OutBuffer [19]  = 0x06;                   //长度
    OutBuffer [20] = local_magic_num[0];    //数据
    OutBuffer [21] = local_magic_num[1]; 
    OutBuffer [22] = local_magic_num[2];
    OutBuffer [23] = local_magic_num[3];
    ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
}
/////////////////////////////////////////////////////////////
/*
LCP的协商魔术字
*/
/////////////////////////////////////////////////////////////
void MagicNumPacket (void) 
{
    OutBuffer [0] = PPP_ADD;                //地址域
    OutBuffer [1] = PPP_COMTROL;            //控制域
    OutBuffer [2] = 0xC0;                   //协议域
    OutBuffer [3] = 0x21;
    OutBuffer [4] = LCP_CONFIG_REQUEST;     //代码域
    OutBuffer [5] = 0x01;                   //标识域
    OutBuffer [6] = 0x00;                   //长度
    OutBuffer [7] = 0x0A;                   
    OutBuffer [8] = LCP_OPT_MAGIC;          //类型
    OutBuffer [9] = 0x06;                   //长度
    OutBuffer [10] = local_magic_num[0];    //数据
    OutBuffer [11] = local_magic_num[1]; 
    OutBuffer [12] = local_magic_num[2];
    OutBuffer [13] = local_magic_num[3];
    ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
}
/////////////////////////////////////////////////////////////
/*
LCP的协议拒绝
*/
/////////////////////////////////////////////////////////////
void RejectProtocol (BYTE *InBuffer) 
{
	OutBuffer [0] = PPP_ADD;                   //地址域
	OutBuffer [1] = PPP_COMTROL;               //控制域
	OutBuffer [2] = 0xC0;
	OutBuffer [3] = 0x21;
	OutBuffer [4] = LCP_PROTOCOL_REJECT;       //代码域
	OutBuffer [5] = 20;                        //标识域
	OutBuffer [6] = 0;                         //长度
	OutBuffer [7] = InBuffer[7] + 6;
	Move (&InBuffer[2], &OutBuffer[8], InBuffer [7] + 2);
	ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
}
/////////////////////////////////////////////////////////////
/*
IPCP的IP地址分配请求
*/
/////////////////////////////////////////////////////////////
void IPAssignPacket (void) 
{
    OutBuffer [0] = PPP_ADD;                //地址域
    OutBuffer [1] = PPP_COMTROL;            //控制域
    OutBuffer [2] = 0x80;                   //协议域
    OutBuffer [3] = 0x21;
    OutBuffer [4] = IPCP_CONFIG_REQUEST;    //代码域
    OutBuffer [5] = 0x01;                   //标识域
    OutBuffer [6] = 0x00;               
    OutBuffer [7] = 0x0A;                   //长度
    OutBuffer [8] = 0x03;                   //类型
    OutBuffer [9] = 0x06;                   //长度
    OutBuffer [10] = 0x00;                  //数据
    OutBuffer [11] = 0x00; 
    OutBuffer [12] = 0x00;
    OutBuffer [13] = 0x00;
    ProcPPPSend ((BYTE *)OutBuffer, OutBuffer[7] + 6);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -