无线上网无法正常计费问题的解决.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
无线上网无法正常计费问题的解决

无线上网无法正常计费问题的解决 摘要 本文分析了使用RS4200板卡的IAG无线上网无法正常进行Radius计费的故障,找出了原因,并通过修改程序源码得以解决。 关键词 IAG、Radius、计费、无线上网 无线上网概述: 无线上网采用数据汇接方式,如图: 所有的PIAFS数据经由接入网关旁路后,以ISDN PRI接入到汇接网关,汇接网关通过PRI接口将数据传输到iAG上,iAG支持TCP/IP协议,将对PIAFS数据进行TCP/IP协议打包,然后根据ISP的接入服务号码接入到相应的ISP上,实现PIAFS拨号上网业务。 IAG为1台插入UTS_RS4200插卡设备的PC工控机,使用的操作系统为Red Hat Linux 6.2,IAG的软件版本为2.1.6。iAG终结来自PAS用户的PIAFS数据呼叫。iAG还终结PPP业务。采用Radius方式进行认证和计费。 iAG功能模块 IAG软件的核心是pppd程序,是厂家在原来的标准的pppd程序基础修改而成的。pppd程序具有可扩展性,它使用了具有radius客户端的插件(plugin),文件名为libpsr.so,厂家增加了在Radius包中增加主叫、被叫号码的插件,文件名为ariel_party_info.so。 故障现象: 在进行无线上网的测试中,发现:如果用户在拨号网络中正常挂断,能够正常计费;如果非正常挂断,如直接在手机上挂断,或由于信号问题掉线,则计费不能中止,时间会一直走下去。 询问其他本地网,发现使用RS-4200插卡设备的IAG均存在这个问题。 原有设备提供商已经破产,无法升级,必须通过更换为其他厂家设备才能解决。这样,原有的设备就会报废。 故障分析: 在IAG(客户端)被设置使用RADIUS协议后,任何通过IAG上网的PS用户都需要向这个IAG提供认证信息(包括用户名、密码),一旦IAG收到此类信息,它会选择使用RADIUS协议进行认证。之后,IAG创建一个“接入请求(Access- Request)”数据包,此包包含了诸如像用户名、、、-Reject)” 如果所有的条件被满足RADIUS验证服务器会传输一个“接入允许(Access-Accept)”响应。IAG从IP POOL中分配一个IP地址给PS用户。 然后IAG产生“记账请求(Accounting-Request)”,RADIUS计费服务器收到记帐请求,如果服务器能够成功的记录下记帐包的话,必须马上发送一个记帐响应应答;如果记录记帐包失败,不得发送任何应答。 记账回应(Accounting-Response) 是由RADIUS记帐服务器发给客户端的,用来通知客户端记帐请求已被接收,并且成功的记录下来。 通过故障现象,估计是在异常终止连接时没有向RADIUS记帐服务器发送“记账请求(Accounting-Request)”。为了证实这一猜测,抓取IAG与RADIUS包之间的IP包。运行“tcpdump –n dst host radius-server-ip”,然后拨号,正常挂断,再拨号,异常挂断。查看IP包,发现正常挂断后有“记账请求”发给RADIUS记账服务器,而异常挂断后没有包发送。 比较系统log文件/var/log/messages,发现异常挂断后增加了“party_info[calling]: failed ioctl (Input/output error)”的错误。 由于程序带有源码,可以进一步定位发生错误的具体位置,在源码所在的目录下“grep party_info `find . -name *.c `”,portslave-ariel/ppp-2.4.0-radius/pppd/plugins/ariel_party_info.c文件中有类似的内容,这是厂家开发的插件文件,用于在Radius包中增加主叫、被叫号码。从代码上可以推断出,异常挂断时,程序没有正常获取主叫号码,发生错误,转入错误处理。 正常挂断时,能够发送计费停止包,说明能够通过驱动程序获取主、被叫号码。异常挂断时,由于所有的底层连接信息都已经提前释放,因此无法获得号码。 故障解决: 在一次接续中,主叫、被叫号码都是不变的,因此,可以从呼叫开始时就把主叫、被叫号码保存起来,然后再接续中断过程中使用。 具体思路是:程序中增加保存主叫、被叫号码的静态数组,在程序执行过程中如果不手工清除,数据是一直保存着的。程序用到radius数据包,可以根据数据包的内容来判断流程所处的阶段,如果为鉴权或计费开始,则按照原来的过程处理。如果为计费结束,则使用保存在静态数组中的数据填充数据包。 新增一个函数check_pkt_type(RADPKT *pkt),用于判断流程所处阶段。已将程序编译好,只要进行如下操作即可完成: 把附件中

文档评论(0)

xingkongwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档