ppp驱动程序的基本原理

ppp驱动程序的基本原理

ID:33689695

大小:64.93 KB

页数:15页

时间:2019-02-27

ppp驱动程序的基本原理_第1页
ppp驱动程序的基本原理_第2页
ppp驱动程序的基本原理_第3页
ppp驱动程序的基本原理_第4页
ppp驱动程序的基本原理_第5页
资源描述:

《ppp驱动程序的基本原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ppp驱动程序的基木原理1)ppp设备是指在点对点的物理链路之间使用ppp帧进行分组交换的内核网络接口设备,由于Linux内核将串行设备作为终端设备來驱动,于是引入PPP终端规程來实现终端设备与PPP设备的接口.根据终端设备的物理传输特性的不同,PPP规程分为异步规程(N_PPP)和同步规程(N_SYNC_PPP)两种,对于普通串口设备使用异步PPP规程.2)在PPP驱动程序中,每一tty终端设备对应于一条PPP传输通道(chanell),每一ppp网络设备対应于一个PPP接口单元(unit).从终端设备上接收到的数据流通过PPP

2、传输通道解码后转换成PPP帧传递到PPP网络接口单元,PPP接口单元再将PPP帧转换为PPP设备的接收帧.反Z,当PPP设备发射数据帧时,发射帧通过PPP接口单元转换成PPP帧传递给PPP通道,PPP通道负责将PPP帧编码后写入终端设备.在配置了多链路PPP时(CONFIG_PPP_MULTILINK),多个PPP传输通道可连接到同一PPP接口单元.PPP接口单元将PPP帧分割成若干个片段传递给不同的PPP传输通道,反乙PPP传输通道接收到的PPP帧片段被PPP接口单元重组成完整的PPP帧.3)在Linux-2.4屮,应用程序可通

3、过字符设备/dev/ppp监控内核PPP驱动程序.用户可以用ioctl(PPPIOCATTACH)将文件绑定到PPP接口单元上,来读写PPP接口单元的输出帧,也可以用ioctl(PPPIOCATTCHAN)将文件绑定到PPP传输通道上,来读写PPP传输通道的输入帧.4)PPP传输通道用channel结构描述,系统屮所有打开的传输通道在all_channels链表屮.PPP接口单元用ppp结构描述,系统中所有建立的接口单元在all_ppp_units链表中.当终端设备的物理链路连接成功后,用户使用ioctl(TIOCSETD)将终端

4、切换到PPP规程.PPP规程初始化时,将建立终端设备的传输通道和通道驱动结构.对于界步PPP规程來说,通道驱动结构为asyncppp,它包含通道操作表async_ops.传输通道和接口单元各自包含自己的设备文件(/dev/ppp)参数结构(ppp.file).;drivers/char/tty_io.c:inttty_register_ldisc(intdisc,structttyjdisc*new_ldisc){if(disc

5、

6、disc>=NR_LDISCS)return-EINVAL;if(newjdisc){l

7、discsfdiscl=*new」disc;ldiscs[disc].flags

8、=LDISC_FLAG_DEFINED;ldiscs[disc].num=disc;}elsememset(&ldiscs[disc],0,sizeof(structttyjdisc));return0;inttty_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg){structtty_struct*tty,*real_tty;intretval;tty=(

9、structtty_struct*)file->private_data;if(tty_paranoia_check(tty,inode->i_rdev,ntty_ioctlu))return-EINVAL;real_tty=tty;if(tty->driver.type==TTY_DRIVER_TYPE_PTY&&tty->driver.subtype==PTY_TYPE_MASTER)real_tty=tty->link;switch(cmd){•••caseTIOCGETD:returnput_user(tty->ldisc

10、.num,(int*)arg);caseTIOCSETD:returntiocsetd(tty,(int*)arg);•••}if(tty->drive匚ioctl){intretval=(tty->driver.ioctl)(tty,file,cmd,arg);if(retval!=-ENOIOCTLCMD)returnretval;}if(tty->ldisc.ioctl){intretval=(tty->ldisc.ioctl)(tty,file,cmd,arg);讦(retval!=-ENOIOCTLCMD)returnr

11、etval;}return-EINVAL;staticinttiocsetd(structtty_struct*tty,int*arg){intretval,ldisc;retval=get_user(ldisc,arg);if(retval)re

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。