内核基于netlink的内核态与用户态异步并发消息处理模型

chrome ie内核  时间:2021-01-25  阅读:()

基于 tlink的内核态与用户态异步并发消息处理模型

用户态采用sl c模型初始化时建立多个  linksocket,绑定完成之后,向内核发送握手消息,这样内核可以将已经建立的连接记住,以便后续选择可用的连接发送数据。初始化和握手完成之后,由内核主动向用户态发送数据,用户态主线程在各个so cet句柄上面等待读事件的到来,当检测到读事件时,向线程池提交数据读取和处理任务。这样模拟一个连接池和事件分发模型,保证内核数据及时被读取到用户态程序并处理,能做到并发。

而内核态的etlink在接收数据时本身就是以系统调用的方式提供给业务层的发送接口,因此本身就是异步的,性能不是问题。内核态收到数据时,只需要提交给一个内核线程去处理即可。

原型代码如下:共用头文件

#dfneE TLINK_TET  

#efineAX_D AA_LEN(76  #defn 

AX_PROCSS_COUNT 10#efie MAX_PYL

D1024

d ineAX_PID_CUNT MAX_PROSSCOUN

#dfine MAX_R_DALEN 102deine S

TIC_PEOD 1 24*5 0#e ine MSG_CO

1000#d ine TRE 1用户态

#include

#incl e

nlude

#ncld e

#iclue

#in ude

#iclud

#inlude asm/tpe  .h

#include

#include

  lu de

inc ude

#include "conf.h"struct ndpo it

{unsigned nt pi;

 trct socka r_l s c_add ;stru c  sockadd_nl d  taddr;int ok_f 

st   t mgd mg;

} *endoits=N; nt  is  en_s  (voi);

nt handwitknl(vid)it lose_u er   id);int doslect st uct timeal wai  );

oid* hreadPoc(oid*ed);v  * sendTreadProc(vid*arg);void fluhcount  n ln)void stt  csut(void);vi  tart  dThread oi);

 tat   ntaf =0

 tati  fd_set r  et;

 ta  c strct t evl tout;unsined ch readbffer;sta ic struct time l tno;s  ti   r   timevl oldtimes a ic lon  ccunt =   ptheadmute_tmtex;sta i  long  abtes= 0;stat  c lo  radnum0;static long  endby e  0;int main(in rgc,chr*arg[]

  po    = struc  endpoi  *)mlloc

sizeof(   ruct ndpoint) *AXPD_CNT);reabfer (unsiged har*)mallo c(AX_E_DATA_LEN ; / rate an netlink ocet andbnd.listenuser( if(thred_utex_n t(&mut ,NUL)  =0)

pr ntf   Init mtu err \");r  rn -1 ;

} /  en a han hae msg o thenl. let the knl to  ee       int.

 ndwit l( ; /   eep(6) // art SenThead   ; get  imef y(&oldtime,NUL)tmou .t_sec=1 

m t.tv_usec=0

/ ait or v t fom th knl to d  ach.

h  e (1)

{

o s le ct(tmout);  f(  ab

tes>STATIC_PROID)

{stti   ut );

} //  le (2);

} /close the soc   .

lo _u ser(return 0;

}int lis  en_ser(void)

{int pidont;

 truct edp nt*ed =NULL;

 t uct lmgdr*  hNLL;unsign  int pid =  tpid ); o  idcunt=   pi d unt MAX_PD_CONT i dcut+)

{

  endpoits+ i dont;memst((vo  d* e,   sizef(str t edoin )); d-> ckd =socket(AF_NETLIN,SOC_RW,TLIN_TST);e-id=    +pid unt;i  (0=ed->  d)

{pi = ++ed->pid;

} e d->sr c_ddr.lfamil y

AF_NE TINK;e d->sr c_addr.nl_groups =  ;ed->src_addr.l_p  ed->pid; /

TDO my e th srcddr.nl_i i  alredyin used, te bid w  l eturn a onzr vau .b d(ed->so ckfd, (struc  s kad  )&ed->sr _adr, si o(ed-> r_ddr ;ed->de stdr.l_fm y AFE TINK;e->dest_a r.lp d= 0;ed>dest_dd  l_goups=  ;

/ F ll in the netlink messge pyload /ed>msg.msg_name= (voi *)  ->dest_ddr

ed->m . _namlen s  eof( d>estad  ; printf("  it the  cket%d o p d%d s  ces   l.\n" ed->soc_ded->pid)u l ep(10000);

} retrn 0 }int ha w thknl vo  d{it pdont;st  ct ndpoint*ed=NULs  ruct nlsghdr l NU; or(idcont=0;pi dcount ! AX_P _CTpidcount++)

{

   endoits+ idcount;

d>msg.mg_iovle =1 ;ed>msg.msgiv=mllo (sizef(strutio c )

d->mg.msg_iov->ov_base= mal o(NLMS G_SPAE MAX_PAYLOA));nlh (  truct nlms gdr*e-m .ms giov->iovas ;

lh->nlmsg_le =LMS_SPA(A_PAY LO AD);nl-nl mg_p  =e d->pi;

lh->nlms g_flag 0;e->g.msg_ ov->iov_ln=nlh->nlmsg_ en;

snprintf( chr)NM S_T(lh ,MAX_PAYO AD 1, "ell kl! Thi  i s%d!"ed->pid);   printf "  ning messaero.  . .\n", d>pi  ;se msg(ed>sok_f,&ed->ms,0); f (e>soc_d>mxfd)

{

xfde-sock_d;

} F D_SE T ed->oc_fd &set);//  hrea_t  i

   f(0 =pthr ea dcrae(&ti,NLL &th aProc, (void*)    )

// {

// rint("cre ate  thrad % successfl or th  d: %. n",  id,ed->pid);

// 

 e urn  ;

}in l  e_user vid

nt picout; for(idcount  0;pidot  =MAXP OUN; icont++)

{

 o e(enpoits  id  nt]. ok_f);

} r etr  

 int o e  et(struc   ie   it)

{int picunt;int selcount0;stru  ed it*e d NL;

 trut lmshdr*nlh =NLL;  l cout=se  ct(mxd+1,&  t NLL,NLL, &wai ) if se  count=0)

{ret n 0

}els if sel on   

{printf("se  eted error!\n");re urn-1 

}e  se

{for(p d u  =  ; pid  nt !=

Hostodo:4款便宜美国vps七折优惠低至$13/年;NVMe阵列1Gbps带宽,免费DirectAdmin授权

hostodo怎么样?快到了7月4日美国独立日,hostodo现在推出了VPS大促销活动,提供4款Hostodo美国独立日活动便宜VPS,相当于7折,低至$13/年,续费同价。Hostodo美国独立日活动结束时间不定,活动机售完即止。Hostodo商家支持加密数字货币、信用卡、PayPal、支付宝、银联等付款。Hostodo美国独立日活动VPS基于KVM虚拟,NVMe阵列,1Gbps带宽,自带一个...

wordpress简洁英文主题 wordpress简洁通用型高级外贸主题

wordpress简洁英文主题,wordpress简洁通用大气的网站风格设计 + 更适于欧美国外用户操作体验,完善的外贸企业建站功能模块 + 更好的移动设备特色模块支持,更高效实用的后台自定义设置 + 标准高效的代码程序功能结构,更利于Goolge等国际搜索引擎的SEO搜索优化和站点收录排名。点击进入:wordpress简洁通用型高级外贸主题主题价格:¥3980 特 惠 价:¥1280安装环境:运...

NameCheap黑色星期五和网络礼拜一

如果我们较早关注NameCheap商家的朋友应该记得前几年商家黑色星期五和网络星期一的时候大促采用的闪购活动,每一个小时轮番变化一次促销活动而且限量的。那时候会导致拥挤官网打不开迟缓的问题。从去年开始,包括今年,NameCheap商家比较直接的告诉你黑色星期五和网络星期一为期6天的活动。没有给你限量的活动,只有限时六天,这个是到11月29日。如果我们有需要新注册、转入域名的可以参加,优惠力度还是比...

chrome ie内核为你推荐
江门旅游景点哪个好玩的地方江门有哪些旅游景点,江门哪里好玩机械表和石英表哪个好手表中,石英表和机械表的区别和优缺点宝来和朗逸哪个好宝来和朗逸哪个好扣扣空间登录如何设置QQ空间快速登陆qq空间登录不上为什么我登不进去QQ空间辽宁联通营业厅辽宁移动网上营业厅进入办法dns服务器未响应dns 服务器未响应 怎么解决360云盘同步版360云盘和360云盘同步版有甚么区分同步版占用电脑空间?360云盘官网360云盘手机下载官网下载安装到手360云查杀360手机安全卫士的云查杀功能是否可靠?
武汉域名注册 n点虚拟主机管理系统 godaddy优惠码 宕机监控 eq2 中国电信测速112 域名转向 699美元 什么是服务器托管 河南移动网 安徽双线服务器 空间租赁 沈阳主机托管 我的世界服务器ip 阿里云免费邮箱 日本代理ip atom处理器 国外代理服务器 ncp是什么 优惠服务器 更多