计费模块概要设计上海寰创通信科技有限公司封页2文档更新记录日期更新人版本备注2012-1-5张晓波只供内部使用封页3目录1引言...........................................................................................................................................41.1编写目的.........................................................................................................................41.2预期读者和阅读建议.....................................................................................................41.3参考资料.........................................................................................................................41.4缩写术语.........................................................................................................................42概述...........................................................................................................................................43整体结构...................................................................................................................................44数据结构...................................................................................................................................44.1用户计费统计结构.........................................................................................................54.2计费终端结构.................................................................................................................55主要算法及流程.......................................................................................................................65.1操作算法.........................................................................................................................65.2计费执行流程.................................................................................................................65.3实时断开用户网络流程.................................................................................................76状态机设计...............................................................................................................................87接口设计...................................................................................................................................87.1外部接口设计.................................................................................................................87.1.1接收消息接口......................................................................................................87.1.2DM报文接收接口...............................................................................................87.1.3计费报文接收函数..............................................................................................97.2内部接口说明.................................................................................................................97.2.1消息处理函数......................................................................................................9上海寰创通信科技有限公司【内部文档】第4页共9页1引言1.1编写目的1.2预期读者和阅读建议1.3参考资料【1】《rfc2865》【2】《rfc2866》1.4缩写术语缩写英文中文2概述当用户认证接入AP成功之后,AC会开启对该终端的计费任务,平台模块会通知计费模块计费任务开始。计费可以分为三个阶段:计费开始,实时计费和计费结束。1)计费开始是在用户认证接入成功之后,计费模块会发送一个计费请求报文到radius服务器。2)计费模块收到radius回复的计费相应报文之后进入实时计费状态。在用户上网过程中,为了保护用户计费信息,每隔一段时间AC就向RADIUS服务器报一个实时计费信息,包括当前用户上网总时长,以及用户总流量信息。3)当AC收到下线请求时,向RADIUS服务器发计费结束报文。3整体结构计费模块的主要相关模块是平台,同时还需要利用socket接口与radius服务器之间进行报文的交互。计费模块需要从平台模块获取相关的配置信息,用用户接入/下线之后平台还会通知计费模块开始/结束计费。4数据结构上海寰创通信科技有限公司【内部文档】第5页共9页4.1用户计费统计结构structaccount_user_stats{u32rx_packets;/*接收包数*/u32tx_packets;/*发送包数*/u32rx_gigawords;/*接收字节数,单位:2^32B*/u32rx_bytes;/*接收字节数,单位:1B*/u32tx_gigawords;/*发送字节数,单位:2^32B*/u32tx_bytes;/*发送字节数,单位:1B*/};用途:保存用户的计费统计信息;个成员注解:rx_packets:接收包数tx_packets:发送包数rx_gigawords:接收字节数,单位:2^32Brx_bytes:接收字节数,单位:1Btx_gigawords:发送字节数,单位:2^32Btx_bytes:发送字节数,单位:1B4.2计费终端结构structsta_info{u8user_name[256];u8user_ip[4];u8user_mac[6];u8ap_mac[6];u8ap_ssid[32];u8nas_ip[4];u8nas_identifier[256];u32acct_session_id_hi;u32acct_session_id_lo;time_tacct_session_start;intacct_session_started;intacct_terminate_cause;/*Acct-Terminate-Cause*/intacct_interim_interval;/*Acct-Interim-Interval*/time_tacct_next_interim;structradius_attr_datauser_class;u32session_timeout;u32nas_port_id;structaccount_user_statsacct_stats;/*终端当前IP对应流量*/structaccount_user_statsacct_stats_old;/*终端历史IP对应总流量及主备AC切换时对应总流量*/u32sub_acct_time;u8radius_ip[4];void*ctx;上海寰创通信科技有限公司【内部文档】第6页共9页structsta_info*next;};用途:保存需要计费的终端的信息;个成员注解:略;5主要算法及流程5.1操作算法当一个AC客户端被配置成采用RADIUS计费协议时,在开始提供服务的时候它会生成一个计费开始报文,报文描述了服务类型以及被服务的用户的信息,该报文被发送到RADIUS计费服务器。计费服务器会返回应答,表示计费报文已经收到。服务终止时,客户端会产生一个计费结束报文,该报文描述了服务类型以及一些可选的统计数据,譬如,服务总时长、输入和输出的字节数或者输入和输出报文数。该报文被发送到RADIUS计费服务器,计费服务器会返回应答,表示计费报文已经收到。计费请求(不管是计费开始报文还是计费结束报文)通过网络发送给RADIUS计费服务器。推荐客户端应该反复发送计费请求,直到收到回应消息为止。如果在一段时间内没有收到回应消息,计费请求就会被重发几次。如果主服务器宕机或者是无法到达,客户端也可以向备用服务器转发计费请求消息,可以在对主服务器重试失败一定的次数之后客户端将计费消息转发到备用服务器上,也可以采用循环方式将计费消息转发到备用服务器上。如果RADIUS计费服务器不能成功的记录计费报文,服务器一定不能(MUSTNOT)给客户端发送计费回应报文。5.2计费执行流程终端认证通过之后,AC平台模块会通知计费模块开始对该终端进行计费。计费模块执行以下计费流程:1)AC计费模块发起计费开始请求给RADIUS计费服务器。2)RADIUS回应计费开始响应报文,并将响应信息返回给AC。用户上线完毕,开始上网。3)在用户上网过程中,为了保护用户计费信息,每隔一段时间AC就向RADIUS计费服务器报一个实时计费信息,包括当前用户上网总时长,以及用户总流量信息。4)RADIUS计费服务器回应实时计费确认报文给AC。5)