Radius模块详细设计v20打印版.docx

上传人:b****6 文档编号:8099261 上传时间:2023-05-12 格式:DOCX 页数:39 大小:116.52KB
下载 相关 举报
Radius模块详细设计v20打印版.docx_第1页
第1页 / 共39页
Radius模块详细设计v20打印版.docx_第2页
第2页 / 共39页
Radius模块详细设计v20打印版.docx_第3页
第3页 / 共39页
Radius模块详细设计v20打印版.docx_第4页
第4页 / 共39页
Radius模块详细设计v20打印版.docx_第5页
第5页 / 共39页
Radius模块详细设计v20打印版.docx_第6页
第6页 / 共39页
Radius模块详细设计v20打印版.docx_第7页
第7页 / 共39页
Radius模块详细设计v20打印版.docx_第8页
第8页 / 共39页
Radius模块详细设计v20打印版.docx_第9页
第9页 / 共39页
Radius模块详细设计v20打印版.docx_第10页
第10页 / 共39页
Radius模块详细设计v20打印版.docx_第11页
第11页 / 共39页
Radius模块详细设计v20打印版.docx_第12页
第12页 / 共39页
Radius模块详细设计v20打印版.docx_第13页
第13页 / 共39页
Radius模块详细设计v20打印版.docx_第14页
第14页 / 共39页
Radius模块详细设计v20打印版.docx_第15页
第15页 / 共39页
Radius模块详细设计v20打印版.docx_第16页
第16页 / 共39页
Radius模块详细设计v20打印版.docx_第17页
第17页 / 共39页
Radius模块详细设计v20打印版.docx_第18页
第18页 / 共39页
Radius模块详细设计v20打印版.docx_第19页
第19页 / 共39页
Radius模块详细设计v20打印版.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Radius模块详细设计v20打印版.docx

《Radius模块详细设计v20打印版.docx》由会员分享,可在线阅读,更多相关《Radius模块详细设计v20打印版.docx(39页珍藏版)》请在冰点文库上搜索。

Radius模块详细设计v20打印版.docx

Radius模块详细设计v20打印版

【RadiusClient模块开发文档】

 

 

 

编写人:

部门:

完成日期:

修订日期

修订描述

修订人

初次编写改文档

合并pppauth.c和lib1x.c两文件中原来关于Radius模块的部分为一个文件interface.c,同时修改了console_radius.h文件中的网管命令函数

1总体介绍4

1.1开发平台描述4

1.2本模块在系统中的位置及功能描述4

1.2.1本模块在系统中的位置4

1.2.2模块的主要功能4

1.3本模块使用的源文件和头文件介绍5

1.4本模块与其他模块的接口7

1.4.1向下层模块提供的接口函数7

1.4.2调用下层模块提供的接口函数7

1.4.3使用其他模块的全局变量7

1.5关键词.............8

2详细介绍9

2.1模块中定义的数据结构和宏9

2.1.1模块中定义的数据结构9

2.1.2模块中定义的宏11

2.1.3模块中定义的全局变量17

2.2模块设计介绍18

2.2.1模块结构图18

2.2.2各级子模块主程序流程18

1

总体介绍

1.1关键词

RADIUS:

远程认证拨号用户服务(RemoteAuthenticationDialinUserService)

CHAP:

质询握手认证协议(ChallengeHandshakeAuthenticationProtocol)

PAP:

密码认证协议(PasswordAuthenticationProtocol)

PPPoE:

以太网上的点对点协议(PointtoPointProtocolonEthernet)

802.1x:

基于端口的认证协议。

BAS:

宽带网路接入服务器

1.2开发平台描述

开发出来的BAS盘主要用在ADSL的AN2200设备上,开发平台主要涉及到的有:

硬件:

PC机两台,HUB一个,BAS盘一个,48v直流电源一台,1-2米平行线3根,对绞线1根。

软件:

VxWorks操作系统,Window2k,Tornado

1.3本模块在系统中的位置及功能描述

本模块在系统中的位置

RADIUS模块主要完成BAS盘的认证功能,在用户拨号接入后,只有认证通过才会给用户访问网络的权限,所以在整个BAS盘系统开发中,Radius模块是位于其他模块之上的,如图1所示:

图1:

Radius模块在系统中的位置

模块的主要功能

Radius模块主要完成802.1x模块和PPPoE模块中接入用户的认证功能,在802.1x模块中主要实现CHAP认证,在PPPoE模块中主要实现PAP认证和CHAP认证。

设计中,主要实现的是Radius认证的客户端,服务器的开发不属于此项目的范围,实现中已经将Radius的功能进行了简化,主要是向服务器发起认证请求,然后根据服务器的响应给802.1x和PPPoE模块以相应的回应。

当有用户发起请求时,Radius模块应该能够及时发起认证请求包,在收到服务器的响应之后,Radius客户端应能根据MD5算法检验此数据包是否所需要的认证响应包,并且能够根据包的类型,作出下一步的决定,如果返回的是拒绝包,则通知802.1x模块或者PPPoE模块,认证失败;如果正确,则通知两个模块认证成功,同时发起计费请求;与此同时,Radius模块也应该能够根据响应包的超时或者失败次数,自动给802.1x或PPPoE模块提示认证或者计费请求失败。

整个模块的功能有标准协议RFC2865和RFC2866文档可参考,也应该严格按照协议来实现,提高Radius模块的兼容性和通用性。

1.4本模块使用的源文件和头文件介绍

在模块设计中,所有文件可以放置于一个目录下,因为它是一个比较独立的模块。

源文件放置于D:

\pppoe_bas_project\code\PPPOE_BAS\radius目录下,头文件放置于D:

\pppoe_bas_project\code\PPPOE_BAS\radius\h下。

主要用到的源文件有:

表一:

Radius模块中的源文件和其中对应的函数

文件名

函数名

函数功能

radiusLib.c

rwos_run_instance()

任务发起的主函数

radiusLibInit()

Lib初始化,主要用来发起任务

Radius_task.c

radius_task_initialize()

配置Radius服务器信息

Radius_timer.c

radius_timer()

Radius定时器,每秒钟执行一次

check_outstanding_radius_request_ages()

判断发送出去的请求数据包是否超时,如果超时,将重发。

radius_timer_check_client_socket_events

从socket端口接收数据包,每一个tick执行一次,每执行一次,扫描socket端口4次

Radius_tx.c

update_delay_time_for_retransmission

更新计费请求包中的延时属性

resend_radius_packet

重新发送radius数据包

send_radius_udp_packet

发送radius数据包

Radius_rx.c

radius_process_received_packet

对收到的数据包进行处理

receive_radius_packet

接收数据包

Radius_Initialize.c

initialize_radius()

初始化radius全局变量中的参数值

radius_initialize_timer()

初始化radius定时器,并将定时器事件加入事件队列

initialize_radius_socket_interface

初始化radiussocket描述符,并将socket事件加入事件队列

radius_get_next_available_packet_identifier_per_server

得到radius包中下一个可用的ID标识符

radius_free_packet_identifier_per_server

释放ID标识符

Radius_authorize.c

verify_radius_response_authenticator

验证radius服务器返回的Authenticator是否正确

radius_accounting_fill_in_request_authenticator

填充计费请求中的Authenticator属性值。

interface.c

ppp_radius_acct_fake_response

ppp模式下radius计费响应回调函数

ppp_radius_acct_fake_error_callback

ppp模式下Radius计费错误回调函数

ppp_radius_fake_response

ppp模式下Radius认证响应回调函数

ppp_radius_fake_error_callback

ppp模式下Radius认证错误回调函数

ppp_radius_pap_auth

ppp模式下RadiusPAP认证

ppp_radius_auth

ppp模式下RadiusCHAP认证

ppp_radius_accounting_request

ppp模式下Radius计费请求

Ix_radius_acct_fake_response

8021x模式下radius计费响应回调函数

Ix_radius_acct_fake_error_callback

8021x模式下Radius计费错误回调函数

Ix_radius_fake_response

8021x模式下Radius认证响应回调函数

Ix_radius_fake_error_callback

8021x模式下Radius认证错误回调函数

lib1x_Radius_Auth

802.1x模式下RadiusCHAP认证

lib1x_radius_accounting_request

802.1x模式下Radius计费请求

表二:

Radius模块中的头文件

头文件名

定义结构/说明函数原型

结构功能说明

console_radius.h

说明set_radius_auth_server(),

et_radius_auth_server_info(),

set_radius_account_server(),

get_radius_account_server_info(),

get_radius_stats(),get_radius(),set_radius()

主要对一些函数原型进行说明,这些函数主要是用在命令行中设置或者获取radiusserver信息的。

radius.h

主要是包含了在Radius模块中需要用到的头文件。

radius_attribute_structures.h

RADIUS_MESSAGE_ATTRIBUTE_HEADERRADIUS_ATTRIBUTE_ENTRYRADIUS_ATTRIBUTE_ENTRY_IN_PACKET

定义了radius数据包中的属性特征的结构,包含type,Length,Value.

radius_constants.h

定义了radius服务中需要用到的一些相关常量

radius_globals.h

定义了radius模块中唯一一个全局变量radius

radius_interface.h

RADIUS_CODERADIUS_ERROR_CALLBACK_CODERADIUS_ATTRIBUTE_TYPERADIUS_SERVICE_TYPESRADIUS_FRAMED_PROTOCOLSRADIUS_FRAMED_ROUTING_METHODSRADIUS_FRAMED_COMPRESSION_METHODSRADIUS_TERMINATION_ACTIONSRADIUS_LOGIN_SERVICE_TYPESRADIUS_ACCOUNTING_STATUS_TYPESRADIUS_ACCOUNTING_AUTHENTIC_TYPESRADIUS_ACCOUNTING_TERMINATE_CAUSERADIUS_NAS_PORT_TYPESRADIUS_TUNNEL_TYPESRADIUS_TUNNEL_MEDIUM_TYPESRADIUS_SERVER_TYPE

将radius模块跟PPPoE或者802.1x模块接口中需要用到的关于radius数据包中的各种属性定义为各个枚举

radius_packet_structures.h

RADIUS_PACKET_HEADERRADIUS_PACKET

定义了Radius数据包的结构体

radius_structures.h

RADIUS_REQUEST_ENTRYRADIUS_POOL_ID_CONFIG_INFORADIUS_CONFIG_SERVER_INFORADIUS_TIME_STAMPRADIUS_DISPATCH_LISTRADIUS_CLASS

定义了radius模块中的关于收发radius数据包数等的全局变量,以及radius请求包的相关结构体

radius_task.h

voidradius_task_initialize()

说明此函数原型

radius_utils.h

inlineboolradius_util_deserialize_ulong(BYTE*buffer,ULONG*p_converted_ulong)

说明了此内联函数原型。

注:

此函数在radius模块中好像没有用到。

1.5本模块与其他模块的接口

向下层模块提供的接口函数

本模块向下层模块主要提供了一个初始化的功能,如表三所示:

表三:

Radius模块向下层模块提供的接口函数:

函数原型

所在文件

函数功能

STATUSradiusLibInit(void)

RadiusLib.c

Radius模块的初始化

unsignedcharppp_radius_pap_auth(USHORTreal_port_number)

interface.c

ppp模式下RadiusPAP认证

unsignedcharppp_radius_auth(USHORTreal_port_number)

interface.c

ppp模式下RadiusCHAP认证

unsignedcharppp_radius_accounting_request(ULONG_ENUM(RADIUS_ACCOUNTING_STATUS_TYPES)rad_acct_status_type,USHORTreal_port_number)

interface.c

ppp模式下Radius计费请求

unsignedcharlib1x_Radius_Auth(Auth_Pae*auth_pae)

interface.c

802.1x模式下Radius认证请求

unsignedcharlib1x_radius_accounting_request(ULONG_ENUM(RADIUS_ACCOUNTING_STATUS_TYPES)rad_acct_status_type,

interface.c

802.1x模式下Radius计费请求

调用下层模块提供的接口函数

Radius模块跟802.1x模块和PPPoE模块的接口处,主要是调用了下面两个模块提供的认证失败或者错误时的回调函数,如下表所示:

表四:

Radius模块调用下层模块提供的接口函数:

接口功能模块

函数原型

函数功能

PPPoE模块

voidchap_authentication_succese_recall(ushortreal_port_number)

CHAP认证成功回调函数

voidchap_authentication_fail_recall(ushortreal_port_number)

CHAP认证失败时的回调函数

voidpap_authentication_succese_recall(ushortreal_port_number)

PAP认证成功回调函数

voidpap_authentication_fail_recall(ushortreal_port_number)

PAP认证失败时的回调函数

802.1x模块

lib1x_auth_failure(auth_pae_addr,error_code)

Radius认证失败时的处理函数

lib1x_auth_TimeOut(auth_pae_addr)

认证超时处理函数

lib1x_auth_success(auth_pae_addr)

认证成功时的处理函数

socket

intsendto(ints,caddr_tbuf,intbufLen,intflags,structsockaddr*to,inttolen)

发送指定的消息到Socket端口

intrecvfrom(ints,char*buf,intbufLen,intflags,structsockaddr*from,int*pFromLen)

从指定socket端口接收消息

intsocket(intdomain,inttype,intprotocol)

打开一个socket端口

intioctl(intfd,intfunction,intarg)

对指定的设备进行I/O控制

STATUSbind(ints,structsockaddr*name,intnamelen)

将一个网络地址跟指定的socket绑定

使用其他模块的全局变量

Radius模块实现中只需要PPPoE模块的ppp全局变量,如下表所示:

表五:

Radius模块使用其他模块的全局变量

接口功能模块

全局变量名

变量定义

PPPoE模块

Ppp

PPP_CLASS*ppp

 

2

详细介绍

2.1模块中定义的数据结构和宏

模块中定义的数据结构

在Radius模块的设计中,定义了关于Radius属性和数据包的一些数据结构,具体的结构参数如表六所示:

(表中关于结构对象元素的说明中,序号对应结构定义中元素的序号。

表六:

Radius模块中定义的数据结构:

数据结构定义

结构对象元素说明

typedefstructRADIUS_MESSAGE_ATTRIBUTE_HEADER

{enumRADIUS_ATTRIBUTE_TYPEtype;

UINTlength_of_attribute_value;

}RADIUS_MESSAGE_ATTRIBUTE_HEADER;

1.radius属性类型

2.属性值长度

typedefstructRADIUS_ATTRIBUTE_ENTRY

{enumRADIUS_ATTRIBUTE_TYPEtype;

UINTlength_of_attribute_value;

Charvalue[VARIABLE_NUMBER_OF_BYTES];

}RADIUS_ATTRIBUTE_ENTRY;

1.radius属性类型

2.属性值的长度

3.属性值

typedefstructRADIUS_ATTRIBUTE_ENTRY_IN_PACKET

{BYTE_ENUM(RADIUS_ATTRIBUTE_TYPE)type;

charlength;/*includestypeandlengthfields*/

charvalue[VARIABLE_NUMBER_OF_BYTES];

}RADIUS_ATTRIBUTE_ENTRY_IN_PACKET;

1.radius属性类型

2.属性域的长度,包含类型和长度域的长度值

3.属性值

typedefstructRADIUS_PACKET_HEADER

{BYTE_ENUM(RADIUS_CODE)code;

charidentifier;

USHORTlength;

USHORTauthenticator[8];

}RADIUS_PACKET_HEADER;

1.radius数据包头中的code域

2.数据包头中的ID域

3.长度域

4.认证

typedefstructRADIUS_PACKET

{RADIUS_PACKET_HEADERheader;

chardata;

}RADIUS_PACKET;

1.radius数据包头

2.radius数据包其余内容

typedefstructRADIUS_REQUEST_ENTRY

{RADIUS_PACKET*sptr_packet;

RADIUS_PACKET_HEADERpacket_header;

UINTrequest_time;

UINTrequest_timestamp;

UINTrequest_retry_count;

RADIUS_SERVER_HANDLEserver_handle;

ULONGauth_pae_addr;

USHORTreal_port_number;

}RADIUS_REQUEST_ENTRY;

1.radius请求数据包

2.radius数据包包头

3.访问请求定时器计数

4.定时器时长

5.重发计数

6.指向RADIUS_CONFIG_SERVER_INFO的地址

7.回调时802.1x状态机地址

8.回调时PPPoE模块中的端口号

typedefstructRADIUS_POOL_ID_CONFIG_INFO

{boolpacket_pool_id;

RADIUS_REQUEST_ENTRY*request_entry;

}RADIUS_POOL_ID_CONFIG_INFO;

1.表示该id是否使用,true表示空闲,false表示已经使用

2.radius访问请求包

typedefstructRADIUS_CONFIG_SERVER_INFO

{IP_ADDRESSip_address;

UINTport;

charsecret[RADIUS_MAX_SECRET_LENGTH];

UINTmax_retransmit_count;

UINTretransmission_interval;

enumRADIUS_SERVER_TYPEtype;

intsocket_descriptor;

UINTsecret_length;/*excludingNULL*/

intuser_count;

UINTpacket_identifier_count;

RADIUS_POOL_ID_CONFIG_INFOpool_id_config[MAXIMUM_NUMBER_OF_OUTSTANDING_REQUESTS];

void(*fptr_radius_normal_callback)(enumRADIUS_CODEcode,USHORTreal_port_number);

void(*fptr_radius_error_callback)(USHORTreal_port_number);

}RADIUS_CONFIG_SERVER_INFO;

1.服务器IP地址

2.端口号(1812或者1813)

3.共享密钥

4.最大请求次数

5.服务器类型

6.Socket号

7.共享密钥长度

8.总共用户数

9.前一次发包使用的id值

10.处理正常响应的回调函数

11.发送过程中出错的回调函数

typedefstructRADIUS_TIME_STAMP

{UINTlast_imprint;

UINTduration;

}RADIUS_TIME_STAMP;

1.上次轮询更新时间,以tick计数

2.定时器时长,以tick计数,将配置的秒或者毫秒转换为tick

typedefstructRADIUS_DISPATCH_LIST

{structRADIUS_DISPATCH_LIST*next;

intsocket_descriptor;

FPTR_DISPATCHER_HANDLERfptr_idle_timer_handler;

RADIUS_TIME_STAMPtime_stamp;

}RADIUS_DISPATCH_LIST;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2