【问题标题】:How to edit proc file?如何编辑proc文件?
【发布时间】:2012-07-18 06:05:32
【问题描述】:

我想在正在运行的内核中间编辑 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 值

【问题讨论】:

  • 只写(echo(1)write(2))给它。

标签: c linux network-programming linux-kernel proc


【解决方案1】:

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 结构

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      或者只是:

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

      /etc/sysctl.conf 允许在系统启动时这样做。

      【讨论】:

      • 你当然是对的。我们可以在 /etc/rc.local 中添加这一行,一切都完成了。但我的问题是我想在机器接收路由器广告时更改值。所以这种方法不适合我。无论如何,感谢您的参与 :-)
      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 2015-05-19
      • 2020-07-17
      • 2015-07-11
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多