Radius模块详细设计v20打印版Word格式.docx
- 文档编号:8682494
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:39
- 大小:116.52KB
Radius模块详细设计v20打印版Word格式.docx
《Radius模块详细设计v20打印版Word格式.docx》由会员分享,可在线阅读,更多相关《Radius模块详细设计v20打印版Word格式.docx(39页珍藏版)》请在冰点文库上搜索。
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)
unsignedcharppp_radius_auth(USHORTreal_port_number)
unsignedcharppp_radius_accounting_request(ULONG_ENUM(RADIUS_ACCOUNTING_STATUS_TYPES)rad_acct_status_type,USHORTreal_port_number)
unsignedcharlib1x_Radius_Auth(Auth_Pae*auth_pae)
802.1x模式下Radius认证请求
unsignedcharlib1x_radius_accounting_request(ULONG_ENUM(RADIUS_ACCOUNTING_STATUS_TYPES)rad_acct_status_type,
调用下层模块提供的接口函数
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模块使用其他模块的全局变量
全局变量名
变量定义
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
Charvalue[VARIABLE_NUMBER_OF_BYTES];
}RADIUS_ATTRIBUTE_ENTRY;
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;
2.属性域的长度,包含类型和长度域的长度值
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Radius 模块 详细 设计 v20 打印