SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

net-snmpについて

net-snmpについて(独自監視項目の追加) - 前編

net-snmpによる拡張MIBの設定方法について(前編)

  • X ポスト
  • このエントリーをはてなブックマークに追加

ソースコードの生成

7.5 ソースコードの生成

 MIBファイルから拡張MIB対応のソースコードを自動生成します。mib2cコマンドを利用します。

 mib2cコマンドはソースファイルを自動生成しますが、変数共有型もしくはイベント駆動型、テーブル、Trap送信用それぞれのプログラムをC言語形式で単体で出力します。しかし各関数はsnmpdから単体で呼ばれるため、変数を静的に確保した方が便利です。

mib2c実行
% mkdir ~/agent_sample
% cd ~/agent_sample
% export MIBS=ALL; mib2c matsutest
・・・
You requested mib2c to be run on the following part of the MIB tree:
  OID:                              matsutest
  numeric translation:              .1.3.6.1.4.1.12345
  number of scalars within:         4
  number of tables within:          0
  number of notifications within:   2

First, do you want to generate code that is compatible with the
ucd-snmp 4.X line of code, or code for the newer Net-SNMP 5.X code
base (which provides a much greater choice of APIs to pick from):

  1) ucd-snmp style code
  2) Net-SNMP style code

Select your choice : 2 ← "2"と入力

 ucd-snmpスタイルはucd-snmpの時代と互換性のあるコードで、イベント駆動型のコードを出力します。net-snmpスタイルは変数共有型とイベント駆動型のコード出力を選択できます。

 今回はnet-snmpスタイルでイベント駆動型を選択します。

mib2c実行
************************************************************
                 GENERATING CODE FOR SCALAR OBJECTS:
**************************************************************

  It looks like you have some scalars in the mib you requested, so I
  will now generate code for them if you wish.  You have two choices
  for scalar API styles currently.  Pick between them, or choose not
  to generate any code for the scalars:

  1) If you're writing code for some generic scalars
     (by hand use: "mib2c -c mib2c.scalar.conf matsutest")

  2) If you want to magically "tie" integer variables to integer
     scalars
     (by hand use: "mib2c -c mib2c.int_watch.conf matsutest")

  3) Don't generate any code for the scalars

Select your choice:1 ← "1"と入力     
    using the mib2c.scalar.conf configuration file to generate your code.
writing to matsutest.h
writing to matsutest.c

************************************************************
                 GENERATING CODE FOR NOTIFICATIONS:
************************************************************

Would you like to generate code for sending notifications from within
the agent?

"y" or "n":

 拡張MIBにTrap送信用コードを含めるかを聞いています。ここで"y"を押すとTrap送信用コードだけを作ってしまうのでここでは作りません。"n"を押下しますが、後でもう一度mib2cを実行し、その際にここで"y"を押下します。

mib2c実行
"y" or "n": n
#  GENERATING HEADER FILE DEFINITIONS
#
#    To generate just a header with a define for each column number in
#    your table:
#
#      mib2c -c mib2c.column_defines.conf matsutest
#
#    To generate just a header with a define for each enum for any
#    column containing enums:
#
#      mib2c -c mib2c.column_enums.conf matsutest

**********************************************************************
* NOTE WELL: The code generated by mib2c is only a template.  *YOU*  *
* must fill in the code before it'll work most of the time.  In many *
* cases, spots that MUST be edited within the files are marked with  *
* /* XXX */ or /* TODO */ comments.                                  *
**********************************************************************
running indent on matsutest.c
running indent on matsutest.h
% 
% rm -fr *~
% mv
*.c matsu_object.c
% mv
*.h matsu_object.h
%

 同様の方法でTrap用のソースコードも作成します。

mib2c実行
% export MIBS=ALL; mib2c matsutest
Select your choice : 2
Select your choice: 1
"y" or "n": y <- Trap用のソースファイル作成
%
% rm
-fr *~
% mv
*.c matsu_trap.c
% mv
*.h matsu_trap.h
%

 「matsu_object.h」を見ると、初期化関数と4つのOIが呼ばれたときに呼ばれる関数、全部で5つの関数ができています。初期化関数(init_matsutest)はエージェントデーモンが起動する時にだけ、一回しか呼ばれません。

 何らかの初期起動ファイルを参照する場合などは初期化関数にコードを記述し静的変数に確保するなどに利用します。それ以外の関数は、呼ばれたときに適切に情報を取得・編集し、応答する値を引数に設定します。

 「matsu_trap.h」を見ると、こちらは関数が2つだけ。どちらもTrapを送信する関数です。具体的にどんな値を返すのか編集する必要があります。

 mib2cによって生成されたソースファイルは、それだけでは使用はおろか、Makeも通りません。get-requestに対してどんな情報を出力するか、set-requestに対して、どんなチェックをして、どんな値の時に何をするか、仕様を決めてプログラムに落とし込む必要があります。

 次回は今回生成したソースファイルの編集ポイント、そしてソースファイルをsnmpdに組み込み、独自監視項目を操作する方法などについて説明する予定です。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
net-snmpについて連載記事一覧

もっと読む

この記事の著者

赤松 エイト(エイト)

(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2938 2008/09/22 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング