嵌入式PPPoE软件模块的设计与实现
3 PPPoE模块软件设计
应用于嵌入式系统的PPPoE软件模块主要通过系统中的以太网络驱动在链路层与访问集中器建立一个逻辑上点对点的通信链路,为上层TCP/IP协议栈服务。发送数据时,将上层IP分组封装成PPPoE协议帧发送出去。在接收数据时,将接收到的PPPoE协议帧解析后,交由上层模块处理,如图4所示。与访问集中器建立通信链路的过程是软件设计的核心部分。
PPPoE发现阶段流程如图5所示。发现阶段分为四个过程完成:发送PADI、接收PADO、发送PADR和接收PADS。在发送PADI和PADR时要分别定时和计数,在有限的时间内没有收到响应,就应重新发送;如果在重复发送若干次之后还没有相应,说明此时网络故障或者网络上没有能够响应请求的服务器。
PPPoE会话阶段是一个标准的PPP协商过程。整个协商过程分为三部分:LCP Negotiation、PAP Negotiation、IPCP Negotiation。
LCP阶段[2]主要通过交换数据包与访问集中器建立和配置链路,LCP流程如图6所示。由于ISP提供商可能会不同,所接收到的LCP_REQ中包含的选项也可能不同,但其中必然包括OPTION3,表示链路所用的认证协议(Authentication Protocol)。实践中根据与ISP的PPPoE过程的数据包分析,多数ISP采用PAP(Password Authentication Protocol)认证协议。也有的ISP采用CHAP(Challenge Handshake Authentication Protocol)认证协议,双方可以通过协商采用合适的认证协议,本文采用PAP。
PAP协商[3]过程比较简单,发送PAP请求数据包,其中包括账号和密码,ISP返回确认数据包,PAP协商过程结束。
IPCP阶段[4]的目的是获取ISP方提供的IP地址,流程如图7所示。所以在IPCP阶段的协商主要针对OPTION3进行。PPPoE模块首先接收服务器端一个IPCP_REQ,这个IPCP_REQ包括OPTION3(其IP地址值通常无效);接着PPPoE模块发送一个IPCP_ACK,ISP方会响应一个带有有效地址的IPCP_NAK;然后PPPoE模块就以这个地址再发一个IPCP_REQ,ISP服务器回应IPCP_ACK,IPCP结束。此时PPPoE模块得到了服务器分配的有效IP地址,随后就可以在PPPoE协议之上传送IP数据包。需要注意的是,在PPP协商过程结束后,服务器为了检验接入方链路的活动状态,会定期发出LCP Echo-Request请求,此时PPPoE模块需要发送LCP Echo-ACK作为应答。
嵌入式系统程序设计的特点是面向特定应用,由于资源有限,软件必须去除冗余。本PPPoE模块应用在以太电话中,在程序模块设计中针对性地实现PPPoE协议的主要功能,尽量使代码短小精悍,如省略掉了PPPoE发现阶段网络上有多个AC的情况,还省略了在会话阶段对于LCP OPTION3(认证协议)以外选项的协商和IPCP PTION3(IP地址)以外的选项的协商等情况。这些情况,PPPoE模块需要更多的代码来处理,而对于以太话机这种特定的应用,有些选项是不必要的。另外,在软件结构设计中,采用"超循环"结构来解决无操作系统问题,可以很好地实现以太话机中的任务调度功能。在代码编写上,采用C与汇编相结合的方法提高程序效率,同时采用流水操作、Inline、全局变量和共享内存等技术实现代码长度和数据空间的优化。测试表明,实现PPPoE软件所需的代码空间和数据空间都比PC机环境下PPPoE软件代码要小得多。
PPPoE协议是当今ADSL宽带接入Internet的主要技术之一,而嵌入式技术是如今IT技术发展的热点,广泛应用于信息家电和各种媒体通信终端设备。本文在对PPPoE协议深入分析的基础上,结合嵌入式系统的特点,提出了PPPoE在嵌入式系统上的具体实现方法,通过运用这些优化方法,使软件代码空间和数据空间大大减少。目前该软件模块已成功应用在笔者自己开发的以太话机中。实际运行表明,软件运行稳定、互通性好,所实现的PPPoE协议软件具有良好的应用价值。
- 基于Linux内核模式的PPPoE优化与实现(11-28)
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)