0

実行中のカーネルの途中で、proc ファイル /proc/sys/net/ipv6/route/gc_interval の値を編集したいと考えています。この proc ファイルの値を別の値と比較して編集したいと考えています。

ファイル net/ipv6/ndisc.c の関数 ndisc_router_discovery の有効期間の値によると、gc_intervel の値を 1 から 30 の間で切り替えたいと考えています。Google で検索しましたが、新しい proc エントリを作成することしか見つかりません。しかし、このファイルはすでに存在しています。このファイルの値をその場で変更する方法を教えてください。

編集:カーネルコードを編集してこれを行いたいです。ライフタイムに応じて gc_interval 値を変更する追加のコードを ndisc.c に追加したい

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、jiffy から秒への変換が行われます (変数は 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 に答える