FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 引数の説明 | ノード値のタイプ | ルートノードの作成 | sysctl 文字列の作成 | 不透明な sysctl の作成 | カスタム sysctl の作成 | 静的な sysctl の作成 | 動的な sysctl の作成 | 制御フラグ | 使用例 | SYSCTL の名前付け | 関連項目 | 歴史 | 作者 | セキュリティの考察
SYSCTL(9)              FreeBSD カーネル開発者マニュアル              SYSCTL(9)

名称
     SYSCTL_DECL, SYSCTL_ADD_INT, SYSCTL_ADD_LONG, SYSCTL_ADD_NODE,
     SYSCTL_ADD_NODE_WITH_LABEL, SYSCTL_ADD_OPAQUE, SYSCTL_ADD_PROC,
     SYSCTL_ADD_QUAD, SYSCTL_ADD_ROOT_NODE, SYSCTL_ADD_S8, SYSCTL_ADD_S16,
     SYSCTL_ADD_S32, SYSCTL_ADD_S64, SYSCTL_ADD_STRING,
     SYSCTL_ADD_CONST_STRING, SYSCTL_ADD_STRUCT, SYSCTL_ADD_TIMEVAL_SEC,
     SYSCTL_ADD_U8, SYSCTL_ADD_U16, SYSCTL_ADD_U32, SYSCTL_ADD_U64,
     SYSCTL_ADD_UAUTO, SYSCTL_ADD_UINT, SYSCTL_ADD_ULONG, SYSCTL_ADD_UQUAD,
     SYSCTL_CHILDREN, SYSCTL_STATIC_CHILDREN, SYSCTL_NODE_CHILDREN,
     SYSCTL_PARENT, SYSCTL_INT, SYSCTL_INT_WITH_LABEL, SYSCTL_LONG,
     sysctl_msec_to_ticks, SYSCTL_NODE, SYSCTL_NODE_WITH_LABEL, SYSCTL_OPAQUE,
     SYSCTL_PROC, SYSCTL_QUAD, SYSCTL_ROOT_NODE, SYSCTL_S8, SYSCTL_S16,
     SYSCTL_S32, SYSCTL_S64, SYSCTL_STRING, SYSCTL_CONST_STRING,
     SYSCTL_STRUCT, SYSCTL_TIMEVAL_SEC, SYSCTL_U8, SYSCTL_U16, SYSCTL_U32,
     SYSCTL_U64, SYSCTL_UINT, SYSCTL_ULONG, SYSCTL_UQUAD -- 動的で静的な
     sysctl MIB 作成関数

書式
     #include <sys/param.h>
     #include <sys/sysctl.h>

     SYSCTL_DECL(name);

     struct sysctl_oid *
     SYSCTL_ADD_INT(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int *ptr, int val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_LONG(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, long *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_NODE(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int (*handler)(SYSCTL_HANDLER_ARGS),
         const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_NODE_WITH_LABEL(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int (*handler)(SYSCTL_HANDLER_ARGS), const char *descr,
         const char *label);

     struct sysctl_oid *
     SYSCTL_ADD_OPAQUE(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, void *ptr, intptr_t len, const char *format,
         const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_PROC(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, void *arg1, intptr_t arg2,
         int (*handler) (SYSCTL_HANDLER_ARGS), const char *format,
         const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_QUAD(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int64_t *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_ROOT_NODE(struct sysctl_ctx_list *ctx, int number,
         const char *name, int ctlflags, int (*handler)(SYSCTL_HANDLER_ARGS),
         const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_S8(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int8_t *ptr, int8_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_S16(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int16_t *ptr, int16_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_S32(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int32_t *ptr, int32_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_S64(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, int64_t *ptr, int64_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_STRING(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, char *ptr, intptr_t len, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_CONST_STRING(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, const char *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_STRUCT(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, void *ptr, struct_type, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_TIMEVAL_SEC(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, struct timeval *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_U8(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, uint8_t *ptr, uint8_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_U16(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, uint16_t *ptr, uint16_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_U32(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, uint32_t *ptr, uint32_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_U64(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, uint64_t *ptr, uint64_t val, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_UINT(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, unsigned int *ptr, unsigned int val,
         const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_ULONG(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, unsigned long *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_UQUAD(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, uint64_t *ptr, const char *descr);

     struct sysctl_oid *
     SYSCTL_ADD_UAUTO(struct sysctl_ctx_list *ctx,
         struct sysctl_oid_list *parent, int number, const char *name,
         int ctlflags, void *ptr, const char *descr);

     struct sysctl_oid_list *
     SYSCTL_CHILDREN(struct sysctl_oid *oidp);

     struct sysctl_oid_list *
     SYSCTL_STATIC_CHILDREN(struct sysctl_oid_list OID_NAME);

     struct sysctl_oid_list *
     SYSCTL_NODE_CHILDREN(parent, name);

     struct sysctl_oid *
     SYSCTL_PARENT(struct sysctl_oid *oid);

     SYSCTL_INT(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_INT_WITH_LABEL(parent, number, name, ctlflags, ptr, val, descr,
         label);

     SYSCTL_LONG(parent, number, name, ctlflags, ptr, val, descr);

     int
     sysctl_msec_to_ticks(SYSCTL_HANDLER_ARGS);

     SYSCTL_NODE(parent, number, name, ctlflags, handler, descr);

     SYSCTL_NODE_WITH_LABEL(parent, number, name, ctlflags, handler, descr,
         label);

     SYSCTL_OPAQUE(parent, number, name, ctlflags, ptr, len, format, descr);

     SYSCTL_PROC(parent, number, name, ctlflags, arg1, arg2, handler, format,
         descr);

     SYSCTL_QUAD(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_ROOT_NODE(number, name, ctlflags, handler, descr);

     SYSCTL_S8(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_S16(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_S32(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_S64(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_STRING(parent, number, name, ctlflags, arg, len, descr);

     SYSCTL_CONST_STRING(parent, number, name, ctlflags, arg, descr);

     SYSCTL_STRUCT(parent, number, name, ctlflags, ptr, struct_type, descr);

     SYSCTL_TIMEVAL_SEC(parent, number, name, ctlflags, ptr, descr);

     SYSCTL_U8(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_U16(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_U32(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_U64(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_UINT(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_ULONG(parent, number, name, ctlflags, ptr, val, descr);

     SYSCTL_UQUAD(parent, number, name, ctlflags, ptr, val, descr);

解説
     SYSCTL カーネルインタフェースは、sysctl(8) MIB エントリの動的または静的な
     生成を許可します。すべての静的な sysctl は、それらが部分であるモジュール
     がアンロードされるとき、自動的に破壊されます。ほとんどのトップのレベルの
     カテゴリは、静的に作成され、すべてのカーネルコードとそのモジュールに利用
     可能です。

引数の説明
     ctx       sysctl コンテキストへのポインタ、またはコンテキストがないなら、
               NULL です。新しい sysctl のコンテキストを作成する方法について
               は、sysctl_ctx_init(9) を参照してください。プログラマは、コンテ
               キストが破壊されるとき、属している sysctl がすべて同様に破壊さ
               れるので、それらが作成する動的な OID を組織化するためにコンテキ
               ストを使用するように強く勧められます。これは、sysctl クリーン
               アップコードをより単純にします。そうでなければ、すべての作成さ
               れた OID の削除は、アンロードされるモジュールで必要とされます。

     parent    子プロセスの親のリストのヘッドである、struct sysctl_oid_list へ
               のポインタ。このポインタは、静的な sysctl のための
               SYSCTL_STATIC_CHILDREN() マクロを、動的な sysctl のための
               SYSCTL_CHILDREN() マクロを使用して検索されます。OID の親を取得
               するために SYSCTL_PARENT() マクロを使用することができます。親が
               ないなら、マクロは、NULL を返します。

     number    この OID に割り当てられる OID 番号。ほとんどすべての場合に、こ
               れは、次に利用可能な OID 番号の割り当ての結果となる、OID_AUTO
               に設定されるべきです。

     name      OID の名前。新しく作成された OID は、名前のコピーを含みます。

     ctlflags  sysctl 制御フラグのビットマスク。すべての制御フラグについて下記
               の記述のセクションを参照してください。

     arg1      手続き sysctl のための最初のコールバック引数。

     arg2      手続き sysctl のための 2 番目のコールバック引数。

     len       ptr 引数によって指されるデータの長さ。文字列のタイプ OID につい
               て、0 の長さは、OID への各アクセスで文字列の長さを取得するため
               に、strlen(3) が使用されることを意味します。

     ptr       sysctl 変数または文字列データへのポインタ。sysctl 値のために、
               ポインタは、OID が読み込み専用であることを意味する
               SYSCTL_NULL_XXX_PTR を指定することができ、返される値は、val 引
               数から取られるべきです。

     val       ptr 引数が SYSCTL_NULL_XXX_PTR であるなら、この OID によって返
               される定数値を与えます。そうでなければ、この引数は、使用されま
               せん。

     struct_type
               構造タイプの名前。

     handler   この OID への読み込みと書き込みの要求を操作するために責任がある
               関数へのポインタは、ノード、整数、文字列と不透明な (サイズと形
               がわからない) オブジェクトでの操作をサポートするいくつかの標準
               のハンドラがあります。SYSCTL_PROC() マクロまたは
               SYSCTL_ADD_PROC() 関数を使用して、カスタムハンドラを定義するこ
               とは可能です、

     format    シンボリックな方法で OID の書式を指定する文字列へのポインタ。こ
               の書式は、表示の目的のために適切なデータの書式化に適用するため
               に sysctl(8) によってヒントとして使用されます。

               現在の形式:
                     N       node
                     A       char *
                     I       int
                     IK[n]   ケルビン単位のの温度、10 のスケールファクタのオプ
                             ションの単一の数字のべき乗を乗じる: 1 (デフォル
                             ト) deciKelvin を与える、0 Kelvin を与える、3
                             milliKelvin を与える
                     IU      unsigned int
                     L       long
                     LU      unsigned long
                     Q       quad_t
                     QU      u_quad_t
                     S,TYPE  struct TYPE 構造体

     descr     OID のテキスト形式の記述へのポインタ。

     label     OID のこの構成要素のための集合体ラベルへのポインタ。ラベル (例
               えば、Prometheus) を通して集合体をサポートする監視システムのた
               めの sysctl データをエクスポートすることをより容易にするため
               に、ラベル名を OID にアタッチするために、この引数を使用すること
               ができます。ラベルは、この構成要素の名前がメトリック名の一部で
               あるべきでないというヒントとして動作しますが、代わりにラベルと
               してメトリックにアタッチされます。

               ラベルは、構造的に似ている兄弟のみに適用されるべきで、同じタイ
               プの値をエンコードし、そうでなければ、集合体として使用されませ
               ん。

ノード値のタイプ
     マクロと関数のほとんどは、タイプが、ノード値のタイプと一致する読み込み専
     用の定数、または、カーネル内変数をエクスポートする sysctl ノードを作成す
     るために使用されます。例えば、SYSCTL_INT() は、タイプ int の関連する変数
     の生の値を報告します。しかしながら、また、ノードは、内部の表現の変換であ
     る値をエクスポートします。

     ミリ秒の時間の間隔をエクスポートするために、SYSCTL_PROC() または
     SYSCTL_ADD_PROC() で sysctl_msec_to_ticks() ハンドラを使用することができ
     ます。このハンドラを使用するとき、arg2 パラメータは、tsleep(9) のような関
     数を使用するために適切なチック (tick) カウントを供給するタイプ int のカー
     ネル内変数を指します。sysctl_msec_to_ticks() 関数は、ノードの値を報告する
     とき、この値をミリ秒に変換します。同様に、sysctl_msec_to_ticks() は、ミリ
     秒単位で新しい値を受け付け、チック (tick) 単位の同等の値を *arg2 に格納し
     ます。

     SYSCTL_ADD_TIMEVAL_SEC() 関数と SYSCTL_TIMEVAL_SEC() マクロは、タイプ
     struct timeval のカーネル内変数をエクスポートするノードを作成します。これ
     らのノードは、関連する構造の全体の値いをエクスポートしません。代わりに、
     それらは、関連する変数の tv_sec フィールドに格納される簡単な整数として秒
     単位のカウントをエクスポートします。この関数とマクロは、絶対的な時間では
     なく、負でない間隔を格納する変数で使用されることを目的としています。結果
     として、それらは、負の値を格納する試みを拒否します。

ルートノードの作成
     sysctl MIB または OID は、階層的なツリーで作成されます。ツリーの下端の
     ノードは、ルートノードと呼ばれ、親の OID がありません。下端のノードを作成
     するために、SYSCTL_ROOT_NODE() マクロ、または SYSCTL_ADD_ROOT_NODE() 関数
     が、使用される必要があります。デフォルトで、すべての静的な sysctl ノード
     の OID は、グローバルで、一般的にいわゆるヘッダファイルのそれらの
     SYSCTL_NODE() 定義文より前に SYSCTL_DECL() 文を必要とします。

sysctl 文字列の作成
     0 で終了する文字列の sysctl は、SYSCTL_STRING() マクロまたは
     SYSCTL_ADD_STRING() 関数のいずれかを使用して作成されます。len 引数が 0 で
     あるなら、文字列の長さは、strlen(3) を使用して OID へのすべてのアクセスで
     計算されます。定数の文字列のための sysctl を追加するために、
     SYSCTL_CONST_STRING() マクロまたは SYSCTL_ADD_CONST_STRING() 関数を使用し
     ます。

不透明な sysctl の作成
     SYSCTL_OPAQUE() または SYSCTL_STRUCT() マクロまたは SYSCTL_ADD_OPAQUE()
     または SYSCTL_ADD_STRUCT() 関数は、len 引数によって指定されたサイズのデー
     タのあらゆるチャンクと ptr 引数によって指されたデータを扱う、OID を作成し
     ます、構造バージョンを使用するとき、タイプは、作成された sysctl の一部と
     してエンコードされます。

カスタム sysctl の作成
     SYSCTL_PROC() マクロと SYSCTL_ADD_PROC() 関数は、指定された handler 関数
     で OID を作成します。ハンドラは、OID へのすべての読み込みと書き込み要求に
     対して責任があります。この OID のタイプは、カーネルデータが容易にアクセス
     可能でないか、エクスポートの前に処理される必要があるなら、特に役に立ちま
     す。

静的な sysctl の作成
     静的な sysctl は、SYSCTL_INT(), SYSCTL_INT_WITH_LABEL(), SYSCTL_LONG(),
     SYSCTL_NODE(), SYSCTL_NODE_WITH_LABEL(), SYSCTL_OPAQUE(), SYSCTL_PROC(),
     SYSCTL_QUAD(), SYSCTL_ROOT_NODE(), SYSCTL_S8(), SYSCTL_S16(),
     SYSCTL_S32(), SYSCTL_S64(), SYSCTL_STRING(), SYSCTL_CONST_STRING(),
     SYSCTL_STRUCT(), SYSCTL_TIMEVAL_SEC(), SYSCTL_U8(), SYSCTL_U16(),
     SYSCTL_U32(), SYSCTL_U64(), SYSCTL_UINT(), SYSCTL_ULONG() または
     SYSCTL_UQUAD() マクロの 1 つを使用して宣言されます。

動的な sysctl の作成
     動的なノードは、SYSCTL_ADD_INT(), SYSCTL_ADD_LONG(), SYSCTL_ADD_NODE(),
     SYSCTL_ADD_NODE_WITH_LABEL(), SYSCTL_ADD_OPAQUE(), SYSCTL_ADD_PROC(),
     SYSCTL_ADD_QUAD(), SYSCTL_ADD_ROOT_NODE(), SYSCTL_ADD_S8(),
     SYSCTL_ADD_S16(), SYSCTL_ADD_S32(), SYSCTL_ADD_S64(),
     SYSCTL_ADD_STRING(), SYSCTL_ADD_CONST_STRING(), SYSCTL_ADD_STRUCT(),
     SYSCTL_ADD_TIMEVAL_SEC(), SYSCTL_ADD_U8(), SYSCTL_ADD_U16(),
     SYSCTL_ADD_U32(), SYSCTL_ADD_U64(), SYSCTL_ADD_UAUTO(),
     SYSCTL_ADD_UINT(), SYSCTL_ADD_ULONG() または SYSCTL_UQUAD() 関数の 1 つを
     使用して作成されます。動的に作成された OID を破壊する方法に関する詳細につ
     いては、sysctl_remove_oid(9) または sysctl_ctx_free(9) を参照してくださ
     い。

制御フラグ
     ほとんどの上記の関数とマクロについて、アクセスフラグの一部としてタイプを
     宣言することは、必要ではありません -- しかしながら、関数によって実装され
     た sysctl を宣言するとき、アクセスマスクにタイプを含むことは、必要です:

     CTLTYPE_NODE     これは、他のノードのための親となるノードです。

     CTLTYPE_INT      これは、符号付き整数です。

     CTLTYPE_STRING   これは、文字の配列に格納されたヌル文字で終了する文字列で
                      す。

     CTLTYPE_S8       これは、8 ビット符号付き整数です。

     CTLTYPE_S16      これは、16 ビット符号付き整数です。

     CTLTYPE_S32      これは、32 ビット符号付き整数です。

     CTLTYPE_S64      これは、64 ビットの符号付き整数です。

     CTLTYPE_OPAQUE   これは、不透明な (サイズと形がわからない) データ構造で
                      す。

     CTLTYPE_STRUCT   CTLTYPE_OPAQUE の別名。

     CTLTYPE_U8       これは、8 ビット符号なし整数です。

     CTLTYPE_U16      これは、16 ビット符号なし整数です。

     CTLTYPE_U32      これは、32 ビット符号なし整数です。

     CTLTYPE_U64      これは、64 ビット符号なし整数です。

     CTLTYPE_UINT     これは、符号なし整数です。

     CTLTYPE_LONG     これは、符号付き long です。

     CTLTYPE_ULONG    これは、符号なし long です。

     新しいノード宣言以外のすべての sysctl タイプは、sysctl の読み込み書き込み
     処理を示すように設定される次のフラグの 1 つを必要とします:

     CTLFLAG_RD       これは、読み込み専用 sysctl です。

     CTLFLAG_RDTUN    これは、モジュールのロードまたはシステムのブートの間にシ
                      ステムの環境からいったん取って来られることを試みられる読
                      み込み専用の sysctl と調整変数です。

     CTLFLAG_WR       これは、書き込み可能な sysctl です。

     CTLFLAG_RW       この sysctl は、読み込み可能で書き込み可能です。

     CTLFLAG_RWTUN    これは、読み込み可能または書き込み可能な sysctl でモ
                      ジュールがロードされるか、またはシステムのブートの間に初
                      期にシステム環境からいったん取って来られることを試みる調
                      整変数です。

     CTLFLAG_NOFETCH  ノードが CTLFLAG_[XX]TUN を使用する調整変数としてマーク
                      される場合に、このフラグは、システム環境から初期値を取っ
                      て来ることを防ぎます。一般的に、このフラグは、共通のドラ
                      イバとモジュールによってではなく、たいへん早く低レベルの
                      システムのセットアップのコードのためにのみ使用されるべき
                      です。

     CTLFLAG_MPSAFE   この sysctl(9) ハンドラは、MP セーフです。このハンドラへ
                      の呼び出しのまわりの Giant をつかみません。これは、
                      SYSCTL_PROC() エントリのためにのみ使用されるベきです。

     さらに、次のオプションのフラグのいずれかも、指定されます:

     CTLFLAG_ANYBODY  あらゆるユーザまたはプロセスは、この sysctl に書き込むこ
                      とができます。

     CTLFLAG_CAPRD    ケーパビリティモードのプロセスは、この sysctl から読み込
                      むことができます。

     CTLFLAG_CAPWR    ケーパビリティモードのプロセスは、この sysctl に書き込む
                      ことができます。

     CTLFLAG_SECURE   プロセスの有効なセキュリティレベル (securelevel) が <= 0
                      である場合のみ、この sysctl を書き込むことができます。

     CTLFLAG_PRISON   jail(2) のプロセスによって、この sysctl を書き込むことが
                      できます。

     CTLFLAG_SKIP     sysctl 名前空間を繰り返すとき、この sysctl をリストしま
                      せん。

     CTLFLAG_TUN      また、システム調整変数がこの変数のために存在するアドバイ
                      ザリ (advisory) フラグ。初期の sysctl 値は、モジュールの
                      ロードまたはシステムのブートの間に初期にシステム環境から
                      いったん取って来ることを試みられます。

     CTLFLAG_DYN      動的に作成された OID は、自動的に、このフラグの設定を取
                      得します。

     CTLFLAG_VNET     OID は、VIMAGE 有効にされた変数を参照します。

使用例
     新しいノードによって使用される security sysctl ツリーを宣言するための
     SYSCTL_DECL() の使用の例:

           SYSCTL_DECL(_security);

     整数、不透明、文字列と手続き sysctl の例は、次の通りです:

           /*
            * 定数整数値の例. 制御フラグは, CTLFLAG_RD で, 可変ポインタは,
            * SYSCTL_NULL_INT_PTR で, そして, 値は, 宣言されることに注意
            * してください.
            */
           SYSCTL_INT(_debug_sizeof, OID_AUTO, bio, CTLFLAG_RD, SYSCTL_NULL_INT_PTR,
               sizeof(struct bio), "sizeof(struct bio)");

           /*
            * 変数整数値の例, 制御フラグは, CTLFLAG_RW, 可変ポインタは,
            * 設定され, そして, 値は, 0 であることに注意してくだい.
            */
           static int      doingcache = 1;         /* 1 => キャッシュを有効
                                                           にする */
           SYSCTL_INT(_debug, OID_AUTO, vfscache, CTLFLAG_RW, &doingcache, 0,
               "Enable name cache");

           /*
            * 可変文字列値の例, 制御フラグは, CTLFLAG_RW, 可変ポインタと文字列
            * サイズが設定されることに注意してください, 新しい sysctl と違って,
            * このより古い sysctl は, 静的な OID 番号を使用します.
            */
           char kernelname[MAXPATHLEN] = "/kernel";        /* XXX bloat */
           SYSCTL_STRING(_kern, KERN_BOOTFILE, bootfile, CTLFLAG_RW,
               kernelname, sizeof(kernelname), "Name of kernel file booted");

           /*
            * sysctl によってエクスポートされた不透明なデータタイプの例.
            * 可変ポインタとサイズは, sysctl(8) のための書式化文字列と
            * 同様に提供されることに注意してください.
            */
           static l_fp pps_freq;   /* スケーリングされた周波数オフセット
                                      (ns/s) */
           SYSCTL_OPAQUE(_kern_ntp_pll, OID_AUTO, pps_freq, CTLFLAG_RD,
               &pps_freq, sizeof(pps_freq), "I", "");

           /*
            * sysctl のエクスポートされた文字列情報に基づく手続きの例.
            * データタイプが宣言され, NULL の可変ポインタと 0 サイズ,
            * 関数ポインタと sysctl(8) のための書式化文字列であることに
            * 注意してください.
            */
           SYSCTL_PROC(_kern_timecounter, OID_AUTO, hardware, CTLTYPE_STRING |
               CTLFLAG_RW, NULL, 0, sysctl_kern_timecounter_hardware, "A",
               "");

     下記は、新しいトップレベルのカテゴリを作成する方法、と既存の静的なノード
     への別のサブツリーを取り付ける方法の例です。この例は、それらが後で解放す
     る必要があるように、すべての中間の OID のつまらない管理の結果となる、コン
     テキストを使用しません。

           #include <sys/sysctl.h>
            ...
           /*
            * 後でそれらを解放することができるように, 新しく作成された
            * サブツリーへのポインタを保存する必要はありません:
            */
           static struct sysctl_oid *root1;
           static struct sysctl_oid *root2;
           static struct sysctl_oid *oidp;
           static int a_int;
           static char *string = "dynamic sysctl";
            ...

           root1 = SYSCTL_ADD_ROOT_NODE(NULL,
                   OID_AUTO, "newtree", CTLFLAG_RW, 0, "new top level tree");
           oidp = SYSCTL_ADD_INT(NULL, SYSCTL_CHILDREN(root1),
                   OID_AUTO, "newint", CTLFLAG_RW, &a_int, 0, "new int leaf");
            ...
           root2 = SYSCTL_ADD_NODE(NULL, SYSCTL_STATIC_CHILDREN(_debug),
                   OID_AUTO, "newtree", CTLFLAG_RW, 0, "new tree under debug");
           oidp = SYSCTL_ADD_STRING(NULL, SYSCTL_CHILDREN(root2),
                   OID_AUTO, "newstring", CTLFLAG_RD, string, 0, "new string leaf");

     この例は、次のサブツリーを作成します:

           debug.newtree.newstring
           newtree.newint

     いったん、それらがもはや必要でなければ、すべての OID を解放するために注意
     するべきです!

SYSCTL の名前付け
     sysctl 名を追加するか、変更するか、または削除するとき、これらのインタ
     フェースがユーザ、ライブラリ、アプリケーション、または (発行された本のよ
     うな) 文書によって使用され、暗黙のうちに発行されたアプリケーションインタ
     フェースであることを承知していることは重要です。他のアプリケーションイン
     タフェースのように、既存のアプリケーションを壊さずに、将来依存するかもし
     れないインタフェースの名前を変更するか、または削除する必要性を避けるため
     に新しい名前空間の今後の使用について考えることに注意しなければなりませ
     ん。

     新しい sysctl のために選ばれたセマンティックは、できるだけ明確であるべき
     で、sysctl の名前は、密接にそのセマンティック (意味論) を反映しなければな
     りません。したがって、sysctl 名は、かなり検討する価値があります。それは、
     短くて、それでもやはり sysctl 意味を代表しているべきです。名前がいくつか
     の単語から成るなら、それらは、compute_summary_at_mount のように下線文字に
     よって区切られるべきです。下線文字は、bootfile のように、それぞれ 4 文字
     より長くない、名前が 2 つ以上でない単語から成る場合にだけ、省略されます。
     ブール値の sysctl について、負の論理は、完全に避けられるべきです。すなわ
     ち、no_foobar または foobar_disable のような名前を使用しません。それら
     は、混乱させて、設定エラーを導きます。代わりに正の論理を使用します:
     foobar, foobar_enable。

     頼りににされるべきでない一時的な sysctl ノードの OID は、その名前を下線文
     字で先導するように指定されなければなりません。例えば: _dirty_hack関連項目
     sysctl(3), sysctl(8), sysctl_add_oid(9), sysctl_ctx_free(9),
     sysctl_ctx_init(9), sysctl_remove_oid(9)

歴史
     sysctl(8) ユーティリティは、4.4BSD ではじめて登場しました。

作者
     最初の BSD にある sysctl の実装は、MIB ノードの名前検索、名前空間の繰り返
     し、と動的な追加のサポートを追加するために Poul-Henning Kamp によって広範
     囲にわたって書き直されました。

     このマニュアルページは、Robert N. M. Watson によって書かれました。

セキュリティの考察
     新しい sysctl を作成するとき、作成されるモニタまたは管理インタフェースの
     セキュリティ関係に慎重な注意が向けらるべきです。カーネルに存在するほとん
     どの sysctl は、スーパユーザによってのみ、読み込み専用か、または書き込み
     可能です。システムデータ構造と操作、特に手続きを使用して実装されたもの
     で、広範囲の情報をエクスポートする sysctl は、他のプロセス、ネットワーク
     接続などに関する情報の望まれない公開を制限するためのアクセスコントロール
     を実装したいでしょう。

     次のトップレベルの sysctl の名前空間は、次のように共通に使用されます:

     compat      互換性の層 (レイヤ) 情報。

     debug       デバッグ情報。debug の下に存在する様々な名前空間。

     hw          ハードウェアとデバイスドライバ情報。

     kern        カーネルの振る舞いのチューニング。一般的に、より特有の名前空
                 間を支持して推奨されません。

     machdep     マシン依存の設定パラメータ。

     net         ネットワークサブシステム。様々なプロトコルには、net の下に名
                 前空間があります。

     regression  復帰テストの設定と情報。

     security    セキュリティとセキュリティポリシの設定と情報。

     sysctl      sysctl の実装のために予約された名前空間。

     user        ユーザアプリケーションの振る舞いに関係する設定。一般的に、
                 カーネル sysctl を使用するアプリケーションを設定することはお
                 勧めできません。

     vfs         仮想ファイルシステムの設定と情報。

     vm          仮想メモリサブシステムの設定と情報。

FreeBSD 12.2                     June 11, 2019                    FreeBSD 12.2

Table of Contents

FreeBSD マニュアル検索