内核基于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 !=

青果网络-618阿里云,腾讯云特惠优惠折上折!

官方网站:点击访问青果云官方网站活动方案:—————————–活动规则—————————1、选购活动产品并下单(先不要支付)2、联系我司在线客服修改价格或领取赠送时间3、确认价格已按活动政策修改正确后,支付订单,到此产品开设成功4、本活动产品可以升级,升级所需费用按产品原价计算若发生退款,按资源实际使用情况折算为产品原价再退还剩余余额! 美国洛杉矶CN2_GIACPU内存系统盘流量宽带i...

老周互联24小时无理由退款,香港原生IP,28元起

老周互联怎么样?老周互联隶属于老周网络科技部旗下,创立于2019年12月份,是一家具有代表性的国人商家。目前主营的产品有云服务器,裸金属服务器。创办一年多以来,我们一直坚持以口碑至上,服务宗旨为理念,为用户提供7*24小时的轮班服务,目前已有上千多家中小型站长选择我们!服务宗旨:老周互联提供7*24小时轮流值班客服,用户24小时内咨询问题可提交工单,我们会在30分钟内为您快速解答!另免费部署服务器...

Megalayer美国服务器CN2优化线路30M带宽3独立IP限时月299元

Megalayer 商家算是比较新晋的国内主机商,主要方向是美国、香港、菲律宾等机房的独立服务器为主,以及站群服务器和显卡服务器。同时也有新增价格并不是特别优惠的VPS云服务器。上午的时候有网友问问有没有CN2线路的美国独立服务器的,这里我推荐他选择Megalayer看看,目前也是有活动截止到月底的。Megalayer 商家创办2年左右时间,如果我们初次使用建议月付体验。目前在进行且可能截止到6月...

chrome ie内核为你推荐
美女桌面背景图片最漂亮的美女电脑壁纸哪里有?锦天城和君合哪个好记忆棉和乳胶哪个好小说软件哪个好用免费什么软件看小说全免费三国游戏哪个好玩三国类的游戏哪些好玩点ps软件哪个好哪个PS软件最好用(适合初学者用)?电陶炉和电磁炉哪个好电磁炉与电陶炉有啥区别,哪个更好些?车险哪个好汽车保险买哪个公司的好播放器哪个好什么手机视频播放器比较好用?如何增加百度收录如何快速提高百度收录量YunOSyunos是什么手机
免费虚拟空间 免费linux主机 外贸主机 rackspace 国外bt gitcafe qq数据库 免费网站申请 免费个人空间 北京双线 nerds 129邮箱 adroit 电信虚拟主机 网购分享 wordpress中文主题 atom处理器 阿里云邮箱申请 博客域名 小夜博客 更多