kea1.7.9 中的 stat-lease6-get 返回可用地址总数问题
stat-lease6-get 挂钩 获取的数据中如果 v6地址前缀为64的话则 返回可用地址总数会变成-1 查看源码发现统计数据类型都是uint_64 虽然在函数sumPoolCapacity判断了如果 // Check if we can add it. If sum + x > uint64::max, then we would have overflown if we tried to add it. 但我不知道其实际意义在哪,因为数量值还是-1(因为地址总数超过了uint_64的范围) 现在我将sumPoolCapacity以及相关函数改为double类型的,但是在这种情况下,虽然stat-lease6-get获取的数量正常,但是有两个实质性问题 1、返回的是科学计数法,无法显示正常数目 2、如果分配地址后,再次重启kea提示配置文件加载失败(Error while processing command 'config-set':Invalid statistic type requested: float(1), but the actual type is integer(0))提示这一串报错,但是将租约文件删除后,就会正常启动,所以我想知道,启动加载配置时,哪里会出现判断数据类型的那一块。 我更改的源码内容如下: /kea-1.7.9/src/lib/dhcpsrv/subnet.cc 181行 214行 头文件同步修改 尝试修改了函数 getPoolCapacity ,sumPoolCapacity的类型从uint64_t到double /kea-1.7.9/src/lib/dhcpsrv/cfg_subnets4.cc updateStatistics函数中 getPoolCapacity的使用类型改为double 512行 /kea-1.7.9/src/lib/dhcpsrv/cfg_subnets6.cc updateStatistics函数中 getPoolCapacity的使用类型改为double 432行 /kea-1.7.9/src/lib/dhcpsrv/alloc_engine.cc getPoolCapacity函数赋值调用变成double 1006行 与之有关的都uint64_t到double /kea-1.7.9/src/lib/dhcpsrv/lease_mgr.h 修改LeaseStatsRow类中state_count类型为double /kea-1.7.9/src/hooks/dhcp/stat_cmds/stat_cmds.cc getSubnetStat函数类型由uint64_t到double
我对kea的源码过程了解还是很少,而且我的开发技术也不是很厉害,希望有大能能够帮助我一下。