APP下载

基于netlink的linux服务器集群统一外设事件监听机制

2016-05-25汪敏

电子设计工程 2016年23期
关键词:外设服务器端监听

汪敏

(江苏科技大学 计算机科学与工程学院,江苏 镇江 212003)

基于netlink的linux服务器集群统一外设事件监听机制

汪敏

(江苏科技大学 计算机科学与工程学院,江苏 镇江 212003)

针对大型分布式服务器集群系统中缺乏对于外设事件统一的监听机制,设计了一种对于未经允许的可拔插事件、未经允许的外部存储设备分区事件等外设事件的统一监听机制,首先在被监控服务器端启动过程中加载外设事件接收模块和服务进程,然后由外设事件处理进程监听netlink多播组,最终由外设事件处理进程将外设事件通过网络发送给服务器端监控进程。通过本监听机制的设计,提高了服务器集群系统的整体安全性。

计算机网络;服务器集群;netlink;事件监听

在linux服务器集群中,通常存在多台服务器终端,而在大型的服务器架构中,许多服务器终端是分布在不同的地理位置的,在服务器运行过程中,对于像未经允许的可拔插设备访问事件、未经允许的外部存储设备分区挂载事件等外设异步事件缺乏有效而又实时的监听方法。文中设计了一种基于netlink通讯的服务器集群统一外设事件监听方法,提高了服务器集群的安全性。

1 服务器集群安全现状

目前,现有技术中还不存在一种在linux服务器集群内部统一的外设事件监听方法。而且,对于单个的服务器内部的外设事件监听而言,主要依靠用户空间的设备文件系统守护进程udevd[1-5]来搜集外设事件来动态的改变设备文件系统目录/dev下的设备节点信息,不存在其他的、单独的外设事件用户空间接收程序,而设备文件系统守护进程udevd可定制性较差,难以实现通过改变现有的udevd守护进程来统一的监听服务器集群内部的所有的外设事件的方法。

实现对于内核空间消息的监听以及内核空间与用户空间的信息传递有很多种方法,但是相比较于增加系统调用[6-10]去实现外设事件监听接口,采用netlink去实现通讯接口,有很多优点,比如说不需要增加内核代码,不需要重复编译内核,只需要在启动系统的时候动态加载的相应的内核模块,而且netlink协议本身实现了事件的异步通知,所以能够保证内核事件接收的实时性。

2 系统设计简介

一种基于netlink的linux服务器集群统一外设事件监听方法,包括以下步骤:

1)被监控服务器端在系统启动过程中加载外设事件内核接收模块,同时开启监控进程远程服务进程,等待多个监控服务器端监控进程发来登录请求;

2)监控服务器端的监控进程向被监控服务器端的远程服务进程发送登录请求;

3)被监控服务器端远程服务进程接收登录请求并利用fork()系统调用函数创建子进程,用于验证登陆帐户信息,并由父进程继续监控端口,查看是否有新的登录请求;

4)被监控服务器端服务进程接收到登录请求后,创建子进程,子进程开启外设事件处理进程,利用外设事件处理进程监听相关的netlink多播组,其中子进程与外设事件处理进程通过共享内存实现全双工通讯;

5)外设事件内核接收模块通过内核线程统一接收相关外设事件,并按照外设事件先后顺序以及优先级发送给相关的netlink多播组;

6)外设事件处理进程将外设事件通过子进程发送给父进程进而通过网络发送给监控服务器端监控进程。

图1显示了系统的总体架构以及相关的工作流程。

图1 系统架构图

3 关键模块设计

在图1中,监控进程远程服务模块有两个子进程,用以处理登录请求,并且这两个子进程分别关注不同的外设事件处理程序。图1中两个不同的外设事件处理程序,用以监听相同的netlink多播组,能够实现对于相同的外设事件有多个不同外设事件处理程序去处理的实用功能。

内核空间的外设事件内核接收模块用于解决最为关键的外设事件的统一接收问题,如图2所示,文中的外设事件内核接收模块主要提供两部分功能:一是实现hw_event_send(int priority,struct mxc_hw_event new_event)函数对于驱动外设事件按照发生顺序以及优先级向内核线程传递的功能;二是实现kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)内核线程对于外设事件的接收以及按照它的发生顺序向用户空间广播的过程。

图2 被监控端服务器架构

对于第一部分功能,文中主要是通过EXPORT_SYMBOL(hw_event_send)将hw_event_send()函数导出符号,可以在各个外设的驱动中使用该函数,将外设事件按照它的优先级和发生顺序发送给内核线程。设备驱动在使用该函数的时候分了两种情况,如图3设备驱动1在使用该函数传递外设事件的时候处于中断上下文,而设备驱动2和设备驱动3在使用该函数传递外设事件的时候处在非中断上下文中,通过对于in_interrupt()的返回值判断,能够知道当前使用该函数的驱动是否处在中断上下文中;通过对于中断上下文的判断,如果事件是在中断上下文中触发的,则先直接通过函数netlink_broadcast去广播;如果广播失败的话,就挂入内核线程处理队列,使用wake_up()函数唤醒内核线程。

图3显示了上述过程在Ubuntu Server端中的关键执行代码。

图3 关键代码

在函数hw_event_send(int priority,struct mxc_hw_event new_event)中包含两个参数:一个是外设事件的优先级,另外一个是外设事件形式参数的定义。在hw_event_send()函数中包含着两层判断,一层是上面已经提到的关于中断上下文的判断,一层则是对于外设事件优先级的判断。如果是高优先级的外设事件,同样的,需要首先通过函数netlink_broadcast去广播到用户空间。对于普通优先级并且是非中断上下文触发的外设事件,则是由内核线程

kernel_thread(hw_event_thread,NULL,CLONE_KERNEL)负责接收的,当在外设事件发送函数hw_event_send()中有外设事件需要传递给内核线程的时候,总是会调用wake_up()唤醒函数,去唤醒等待队列,这主要是由于在内核线程等待外设事件的时候,总是会 wait_event_interruptible()改变当前的内核线程运行状态为可中断睡眠状态。

如图2所示,文中将多播组设置成#define HW_EVENT_ GROUP 2,在内核模块中通过NETLINK_CB(skb).dst_group =HW_EVENT_GROUP初始化多播组为2,这样在用户空间就可以设置多个外设事件处理进程来监听该多播组,就可以实现多个监控服务器端去监听特定的内核事件的功能[11-16]。

如图4显示了当没有拔插事件在被监控服务器端发生的时候,登录的三号服务器没有异常的事件发生,和图4对比的是当有拔插事件发生的时候,图5显示了当前有西部数据的存储设备插入了被监控服务器端。同时显示了插入的存储设备具体信息。

图4 无拔插事件的被监控服务器端

图5 有拔插事件的被监控端服务器

4 结束语

文中的目的在于解决大型服务器集群中出现的未经授权外设事件接入所引起的安全问题,进而提出了的一种基于netlink的linux服务器集群统一外设事件监听方法,用以实现对于linux集群内部重要的外设事件的监听,具有多终端同时监听、统一和实时接收服务器内部外设事件且编程方法简单易实现等优点。

[1]李坤丽,张大方,关洪涛,等.虚拟路由器管控平面的设计与实现[J].计算机工程,2014(5):94-98,102.

[2]宋婉贞,田洪涛.基于Profibus实现netLINK网关与PLC的通讯[J].电子工业专用设备,2012,41(2):50-53.

[3]尹家生,周健,辜丽川,等.基于Linux的高速网络流量采集与分析模型研究[J].计算机工程与应用,2006,42(10):151-154.

[4]李惠娟,王汝传,任勋益,等.基于Netfilter的数据包捕获技术研究[J].计算机科学,2007,34(6):81-83.

[5]章晓明,杜春燕,陆建德,等.IPsec VPN中Netlink消息通信机制的研究和设计 [J].计算机工程与应用,2006,42(34): 139-141.

[6]李惠娟,王汝传,任勋益,等.基于Netfilter的数据包捕获技术研究[J].计算机科学,2007,34(6):81-83.

[7]杜飞,刘心松,邱元杰,等.netlink套接字在系统通信中的应用研究[J].微计算机信息,2006,22(9):95-97,233.

[8]郑子辉,杨东升,尹震宇,等.数控现场总线NCSF监测分析系统的设计与实现[J].组合机床与自动化加工技术,2011(5):46-50,55.

[9]董昱,马鑫.基于netlink机制内核空间与用户空间通信的分析[J].测控技术,2007,26(9):57-58,60.

[10]周莉,柯健,顾小晶,等.Netlink套接字在Linux系统通信中的应用研究[J].计算机与现代化,2007(3):109-111.

[11]陈浩.Linux下用户态和内核态内存共享的实现[J].电脑编程技巧与维护,2011(4):25-27.

[12]刘斌,朱程荣.Linux内核与用户空间通信机制研究[J].电脑知识与技术,2012,8(16):3816-3817,3849.

[13]刘文峰,李程远,李善平,等.嵌入式Linux操作系统的研究[J].浙江大学学报(工学版),2004,38(4):447-452.

[14]周莉,黄宪,陆建德,等.Linux 2.6内核IPSec支持机构的研究与分析[J].计算机技术与发展,2007,17(5):191-194,198.

[15]郭全生,舒继武,毛希平,等.基于LVS系统的负载动态平衡设计与实现[J].计算机研究与发展,2004,41(6):923-929.

[16]林闯,李寅,万剑雄.计算机网络服务质量优化方法研究综述[J].计算机学报,2011(1):1-14.

Unified monitoring mechanism of peripheral events based on netlink of Linux server clusters

WANG Min
(College of Computer Science and Engineering,Jiangsu Science and Technology University,Zhenjiang 212003,China)

The large-scale distributed server clusters system are lack of the unified monitoring mechanism of peripheral events .The unpermitted external storage partition and plug events are included in the mechanism.Firstly,peripheral events process and the service process are started by the monitoring server in its starting progress.And then the handling process of peripheral events monitor the netlink communication.At the end,peripheral events handling process send the peripheral events to the monitoring process through the network.The safety of whole large-scale distributed linux server clusters are promoted after the design of this mechanism.

computer network;server cluster;netlink;event monitor

TN91

A

1674-6236(2016)23-0076-03

2015-11-30稿件编号:201511297

汪 敏(1990—),男,江苏扬州人,硕士。研究方向:信息安全。

猜你喜欢

外设服务器端监听
英国风真无线监听耳机新贵 Cambridge Audio(剑桥)Melomania Touch
Linux环境下基于Socket的数据传输软件设计
千元监听风格Hi-Fi箱新选择 Summer audio A-401
网络监听的防范措施
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
应召反潜时无人机监听航路的规划
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
外设天地行情
外设天地行情