c-如何编辑proc文件



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

根据文件net/ipv6/ndisc.c中函数ndisc_router_discovery的生存期值,我想在1和30之间切换gc_intervel的值。我在谷歌上搜索过,但只能找到一个新的proc条目。但此文件已存在。请告诉我如何在飞行中更改此文件的值。

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

过程条目sys/net/ipv6/route/gc_intervalnet/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到seconds的转换(变量存储在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结构

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

如果要使该值永久化,请将net.ipv6.route.gc_interval=20附加到/etc/sysctl.conf文件

或者只是:

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

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

最新更新