0

我想在正在运行的内核中间编辑 proc 文件 /proc/sys/net/ipv6/route/gc_interval 的值。我想编辑这个 proc 文件值相对于另一个值的值。

根据文件 net/ipv6/ndisc.c 中函数 ndisc_router_discovery 的生命周期值,我想在 1 到 30 之间切换 gc_intervel 的值。我在 google 中搜索但只能找到创建一个新的 proc 条目。但是这个文件已经存在。请告诉我如何即时更改此文件的值。

编辑:我想通过编辑内核代码来做到这一点。我想在 ndisc.c 中添加一些额外的代码,根据生命周期更改 gc_interval 值

4

3 回答 3

2

proc 条目sys/net/ipv6/route/gc_interval定义在net/ipv6/route.c

{
    .procname   =   "gc_interval",
    .data       =   &init_net.ipv6.sysctl.ip6_rt_gc_interval,
    .maxlen     =   sizeof(int),
    .mode       =   0644,
    .proc_handler   =   proc_dointvec_jiffies,
}

因此,该gc_interval文件是整数变量的用户级表示, init_net.ipv6.sysctl.ip6_rt_gc_interval具有 jiffies 到秒的转换(变量存储在 jiffies 中,而 proc 条目以秒为单位处理值)

如果您需要以编程方式更改内核中的该值,则只需更改该变量:

...
init_net.ipv6.sysctl.ip6_rt_gc_interval = new_gc_interval_sec * HZ;
...

笔记:

  • 内核参考基于 Linux 3.4.5 源
  • <net/net_namespace.h> 应包含在访问 init_net 结构中
于 2012-07-18T07:46:39.980 回答
1

使用 sysctl 命令sudo sysctl -w net.ipv6.route.gc_interval=20

如果您想将此值永久附加net.ipv6.route.gc_interval=20/etc/sysctl.conf文件

于 2012-07-18T07:20:42.093 回答
0

要不就:

echo 20 > /proc/sys/net/ipv6/route/gc_interval

/etc/sysctl.conf 允许在系统启动时执行此操作。

于 2012-07-18T08:28:25.903 回答