アラーム関係の関数について
7.6 アラーム関係の関数について
mib2cを使って生成されたソースファイルはほとんど完成してて、必要なのは値の設定と取得処理を付加するくらいですが、しかしそれだけでは実際のエージェント開発の現場では困る場合があります。
例えばアプリケーションが定期的に外部ファイルに必要な情報を出力するような場合、エージェント側はget-requestされた時にファイルにアクセスしていたのではレスポンスが遅くなってしまいます。それを防ぐために、定期的な間隔でファイルへのアクセスを行う必要があります。
net-snmpでは、マネージャからの要求が無くとも定期的に実行できるように、下記の関数を用意しています。
-
unsigned int snmp_alarm_register(
unsigned int seconds,
unsigned int flags,
SNMPAlarmCallback * callback,
void * clientarg );
callback(引数:clientarg)に設定した自前の関数を秒単位で定期的に呼ばれるよう設定する関数です。 -
unsigned int snmp_alarm_register_hr(
struct timeval t,
unsigned int flags,
SNMPAlarmCallback * callback,
void * clientarg );
動作はsnmp_alarm_registerと同じですが、呼ばれる間隔がマイクロ秒まで設定可能です。 -
void snmp_alarm_unregister(
unsigned int clientreg );
特定のアラーム処理を解除する関数です。 -
void snmp_alarm_unregister_all( void )
全てのアラーム処理を解除する関数です。
引数の詳細は下記の通りです。
-
callback
設定された間隔で定期的に呼ばれる関数、自前で用意する必要があります。 -
clientarg
定期的に呼ばれる関数への引数です。 -
seconds
呼ばれる間隔です。 -
flags
SA_REPEAT を設定すると、seconds の間隔で呼び、0 を設定すると、seconds 後に一回だけ呼ばれます。
-
t
秒とマイクロ秒を設定する構造体です。 -
clientreg
snmp_alarm_register およびsnmp_alarm_register_hr の戻り値です。
今回はhandle_mtuTimer関数内で set-request で呼ばれまた際に、入力された値によってsnmp_alarm_register/snmp_alarm_unregisterを呼んでいます。
snmp_alarm_register で登録された関数(timer_matsutest)では、30回呼ばれると(30秒間タイマーオフが呼ばれなかった場合)send_mtuTimerTrap_trapを呼んでTrapが発行され、snmp_alarm_unregisterを呼んでタイマーをオフします。
ソースファイルの編集は以上になります。以降は作成したソースファイルをnet-snmpから呼ばれるように設定する方法について述べます。
