先从函数开始:
Channelpadding.c包含以下函数实现:
STATIC int channelpadding_get_netflow_inactive_timeout_ms(constchannel_t *chan)
函数功能说明:
该函数会生成一个随机的不活动网络流生存周期,以毫秒为单位,其范围由一致性参数,协商结果,配置或默认值决定。一致性参数强制指定随机范围下界,以避免过度频繁地进行填充,该范围必须要设得足够低,以保证路由器不会仅因连接空闲则发送一个新的网络流的记录。特定的用于主要路由器器的超时值在Proposal 251里面被指出,没有主流路由会在设置不活动超时值在10s以下,因此我们设置默认值低于该值,因为我们能缩减填充规模(在填充过多的情况下)。
返回值:返回本次填充后的下一超时周期(ms),填充被禁用时返回0。
实现解析:
该函数通过预设的一致性静态全局变量consensus_nf_ito_low和consensus_nf_ito_high确定当前是否被设置为填充禁用,若被设置为禁止填充,则返回0。若channel的padding_timeout_low_ms与padding_timeout_high_ms非空,则取一致性参数与该部分字段的较大值确定实际超时上界和下界。若得到的上界与下界相等,则返回值为下界。若得到的上界下界不相等,则需做随机化处理。(下界加上上界与下界差的范围内的两次伪随机的较大值)
void channelpadding_new_consensus_param(networkstatus_t*ns)
函数功能说明:
该函数会在每次一致性更新时被调用,用于缓存一致性参数。允许我们沿着关键路径搜索一致性参数,以便不需要每个连接,每秒均要进行估计。
实现解析
该函数进行一致性参数的计算,主要使用的函数为networkstatus_get_param(constnetworkstatus_t* ns,const char *param_name,int32_T default_val,int32_tmin_val,int32_t max_val)
从网络状态关键字ns返回一个param_name的整型值,若ns为空,尝试加载本地最近的一致性参数,若无最近的一致性参数,或没有参数名为param_name,则返回default_val。从一致性参数解析出的值在范围[min_val,max_val]内。
这个函数体内部预定义了一些计算一致性参数所需的默认值和一些默认的中继和客户端的参数
void channelpadding_reduce_padding_on_channel(channel_t*cha