仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 624|回复: 9
打印 上一主题 下一主题

[其他Linux] 来看看:内核打印限速函数net_ratelimit()利用先容

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 12:23:49 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
1)net_ratelimit()用于回护内核收集调试信息的打印,当它前往(TRUE)时则能够打印调试信息,前往零则克制信息打印.它的特征为当"极快地"挪用net_ratelimit()时,它最多只同意一连打印前10条信息,后继信息每隔5秒同意打印一次.如许可避免打击者使内核不休发生调试信息来使体系过载的回绝服务打击.2)net_ratelimit()界说了一个工夫计数器变量(toks),它跟着体系时钟计数线性增加,但不超时50秒时钟计数(net_msg_burst).当计时器的值年夜于或即是5秒时钟计数(net_msg_cost)时,则同意打印信息.每同意打印一条信息,计时器就减往5秒计数,当计时器的值小于5秒时,就不同意打印信息了.;net/core/utils.c:
  intnet_msg_cost=5*HZ;/*在堵塞时,每条收集动静纪录所距离的工夫*/
  intnet_msg_burst=10*5*HZ;/*一连纪录收集突发动静的距离(最多一连纪录10条动静)*/
  /*
  *Thisenforcesaratelimit:notmorethanonekernelmessage
  *every5secstomakeadenial-of-serviceattackimpossible.
  *
  *Allwarningprintk()sshouldbeguardedbythisfunction.
  */
  intnet_ratelimit(void)
  {
  staticspinlock_tratelimit_lock=SPIN_LOCK_UNLOCKED;
  staticunsignedlongtoks=10*5*HZ;/*50秒量程的计时器,每打印一条动静,计时器减5秒工夫*/
  staticunsignedlonglast_msg;/*上一次挪用net_ratelimit()的时戳*/
  staticintmissed;/*两次net_ratelimit()挪用之间所抛弃的信息数目*/
  unsignedlongflags;
  unsignedlongnow=jiffies;/*取以后时戳*/
  spin_lock_irqsave(&ratelimit_lock,flags);
  toks+=now-last_msg;
  /*计时器加上两次net_ratelimit()挪用的工夫差,体现为计不时间的线性增加*/
  last_msg=now;
  if(toks>net_msg_burst)/*计时器积累工夫超时50秒时*/
  toks=net_msg_burst;/*设置计时下限*/
  if(toks>=net_msg_cost){/*当计时年夜于或即是5秒时能够打印信息*/
  intlost=missed;
  missed=0;
  toks-=net_msg_cost;/*减往5秒工夫*/
  spin_unlock_irqrestore(&ratelimit_lock,flags);
  if(lost)
  printk(KERN_WARNING"NET:%dmessagessuppressed.
",lost);
  return1;
  }
  missed++;
  spin_unlock_irqrestore(&ratelimit_lock,flags);
  return0;
  }
  /*linux2.6内核间接挪用__printk_ratelimit()*/
  intnet_ratelimit(void)
  {
  return__printk_ratelimit(net_msg_cost,net_msg_burst);
  }
  kernel/printk.c
  /*
  *printkratelimiting,liftedfromthenetworkingsubsystem.
  *
  *Thisenforcesaratelimit:notmorethanonekernelmessage
  *everyprintk_ratelimit_jiffiestomakeadenial-of-service
  *attackimpossible.
  */
  int__printk_ratelimit(intratelimit_jiffies,intratelimit_burst)
  {
  staticDEFINE_SPINLOCK(ratelimit_lock);
  staticunsignedlongtoks=10*5*HZ;
  staticunsignedlonglast_msg;
  staticintmissed;
  unsignedlongflags;
  unsignedlongnow=jiffies;
  spin_lock_irqsave(&ratelimit_lock,flags);
  toks+=now-last_msg;
  last_msg=now;
  if(toks>(ratelimit_burst*ratelimit_jiffies))
  toks=ratelimit_burst*ratelimit_jiffies;
  if(toks>=ratelimit_jiffies){
  intlost=mis
12下一页


对于linux命令,一定要学会用man和info去查他们的解释;
10#
发表于 2015-3-24 23:44:14 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
谁可相欹 该用户已被删除
9#
发表于 2015-3-17 20:09:26 | 只看该作者
在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。
只想知道 该用户已被删除
8#
发表于 2015-3-11 03:19:16 | 只看该作者
我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
小女巫 该用户已被删除
7#
发表于 2015-3-2 04:51:19 | 只看该作者
通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
再现理想 该用户已被删除
6#
发表于 2015-2-11 08:27:17 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-5 08:26:46 | 只看该作者
学习Linux半年了~个人认为不会的多在网上找资料网上有很多资料可以搜索到,LS那位说放手去搞。
admin 该用户已被删除
地板
发表于 2015-1-27 08:12:40 | 只看该作者
再次,Linux是用C语言编写的,我们有学习C语言的基础,读程序和编写代码方面存在的困难小一点,也是我们能较快掌握的原因之一。?
爱飞 该用户已被删除
板凳
发表于 2015-1-18 15:36:10 | 只看该作者
其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。
蒙在股里 该用户已被删除
沙发
 楼主| 发表于 2015-1-16 12:31:12 | 只看该作者

来看看:内核打印限速函数net_ratelimit()利用先容

系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;
sed;</P>  missed=0;
  toks-=ratelimit_jiffies;
  spin_unlock_irqrestore(&ratelimit_lock,flags);
  if(lost)
  printk(KERN_WARNING"printk:%dmessagessuppressed.\n",lost);
  return1;
  }
  missed++;
  spin_unlock_irqrestore(&ratelimit_lock,flags);
  return0;
  }
</p>
上一页12


写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-11 08:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表