对路由缓存的更新,可采用一种类似于LFU(LeastFrequently Used)的算法。为此引入一个计数器,跟踪当前条目被使用的情况,定义MAX_CA_COUNT表示已经过期,O~MAX_CA_COUNT之间的数字表示当前计数值,同时每隔一段时间增加这个计数值。当这个计数值增至MAx_CA_COUNT时,认为这个条目已经过时。同时在插入条目时,可利用这个计数器,总是选用这个数值最大的条目作为被替换对象(LFU算法)。 考虑到LWIP是个小型协议栈,不应设置过于复杂的数据结构及针对此种数据结构的操作,把路由缓存的数据结构定义为结构体数组。数组的条目也不宜过多,以免占用过多资源;另外作为终端设备,在一小段既定的时间内,与其通信的对端具有一定的确定性,一般来说比较少,重定向的条目也比较少,这也为使用较小的数组提供了一个理由。
4 实 现 对ICMP层改进的实现代码主要集中于3处。 第一处位于ICMP模块的icmp_input()函数,针对ICMP的消息处理机制,增加了路由重定向的处理。整个函数的处理流程如图3所示。其中虚线框起来的部分为我们增加的功能。首先检查是不是重定向包,然后检验包的完整性和有效性。在这三脚电感些检查都通过以后,判断缓大电流电感存功能是否启用。启用与否由一个全局变量控制,默认是关闭的。如果没有启用缓存,则对重定向包进行计数,当达到上限后,启用缓存功能。重定向计数器应当定时归零,这样在一段时间内没有收到足够的重定向包,缓存功能仍然不会开启。这可以把这个重定向计数电感生产器加入其他需要定时执行的函数中来实现(比如arp_timer()函数)。开启缓存后,初始化缓存表,将每个条目的老化计数器置为最大,表示已过期,即所有条目都是空闲可用状态。然后启用定时老化功能。LWIP提供sys_timeout(interval,func_handler,arg)函数,用于每隔interval时间后,执行函数func_handler(arg)。定向老化功能可以将函数实现后,向这个sys_timeout()注册来实现。如果缓存已经开启,那么缓存这个收到的重定向包,总是把它插入老化计数器最大的条目,以实现LFU算法。 第二处改进仍然位于ICMP模块,但添加了一个函数rou_cache_timer()。它是一个定时老化路由缓存的函数,用于老化、清理缓存条目,并再次向sy大电流电感s_timeout()注册自己。其函数流程如图4所示。 在所有缓存条目都已过图4定时老化、清理路由缓存期后,应当关闭缓存功能,同时注销定时老化函数。这些功能由rou_cache_timer()来完成。 第三处改进位于数据链路层的etharp_output()函数内。这个函数负责将下一跳的IP地址对应的MAC地址填入。 显然,路由缓存的使用正在于此。在它使用默认网关地址前,应当查询一下缓存中是否已将此路由重定向了。如果确实重定向了,那么在此下一跳IP被使用前,应该替换已重定向的IP。整个函数的流程如图5所示。虚线框起来的部分是加入的功能。
结 语 本设计针对LWIP在多网关情况下不处理重定向IC—MP消息而作出了改进。这种改进包括接收这个ICMP消息并缓存路由信息,为此加入了自适应路由缓存的功能,即只在有重定向消息的时候自动开启缓存,在缓存全部老化后又自动关闭缓存。路由缓存在比较完整的TCP/IP协议栈上都得到实现,但复杂度较高。这里使用一种较简单的路由缓存结构以降低代码量及资源使用开销。本文提出的思路不仅适用于LWIP,在其他的小型协电感厂家议栈上也适用。
1
通常LNA的输入端要求匹配到50欧姆的实数阻抗。为了满足这一要求,CMOS低噪声放大器的输入级常用结构主要有四种:1)具有并联电阻输入的共源放大器;2)串并联电阻反馈放大器;3)源极 XY·CN总线是一种低成本的、一点对多点的现场总线通信系统,该系统的优势之一是其无与伦比的节电优势,要发挥该优势,就要注意各部分的电源设计方法。总线电压在12~36 V范围系统均能正常工作,对不同的应 目前.射频集成屯路中片上电感的实现方式主要有:有源电感、键台线电感和金属互连线电感三种。其中,金属互连线电感是片上电感研究和使用的主要对象。有潺电碴,在低频段时,可以通过
上一篇: FPGA嵌入式系统 开发过程中的XBD文件设计
下一篇:功率电感器
2/2 首页 上一页 1 2 |