このコールバックでは、proto 引数のみ呼び出し元によって指定されます。この時点では、有意なイベント名もフック名も指定できません。この例の関数では、IPv4 プロトコルの登録を通知するイベントのみ検索されます。
この関数では、次に、net_protocol_notify_register() インタフェースを使用して mynewevent() 関数を登録することによって IPv4 プロトコルにイベントが追加されたことを検出します。
static int mynewproto(hook_notify_cmd_t cmd, void *arg, const char *proto, const char *event, const char *hook) { mytype_t *ctx = arg; if (strcmp(proto, NHF_INET) != 0) return (0); switch (cmd) { case HN_REGISTER : ctx->inet = net_protocol_lookup(s->id, proto); net_protocol_notify_register(s->inet, mynewevent, ctx); break; case HN_UNREGISTER : case HN_NONE : break; } return (0); }
次の表に、mynewproto() コールバックで使用されることがある 3 つのプロトコルを示します。今後、新しいプロトコルが追加される可能性があるので、不明なプロトコルは確実にエラー (戻り値 0) にしてください。
プログラミング記号 |
プロトコル |
---|---|
NHF_INET |
IPv4 |
NHF_INET6 |
IPv6 |
NHF_ARP |
ARP |