1

netlink_kernel_create( net , ...) 関数を使用するネットワーク名前空間をサポートする現在の Unix カーネルで、 「 NETLINK_URELEASE 」などのイベント中に通知を処理するために使用された関数「netlink_register_notifier」または「netlink_unregister_notifier 」が見つかりませんでした。

    register_pernet_subsys

では、Netlink 通知を処理する方法は何ですか? NETLINK_URELEASE のような?

ユーザー空間プロセスが閉じるか終了すると、カーネルの netlink 通知機能が呼び出され、クリア クローズを処理できます。ネットワーク名前空間をサポートする現在の Linux カーネルでこれを処理する方法。

例えば:

static int my_notifier(struct notifier_block *this,
                          unsigned long event, void *ptr)
{
     /* NO CODE HERE other than return*/
     return NOTIFY_DONE;
}


static struct notifier_block nBlk =
{
     .notifier_call = my_notifier,
};

static int __net_init my_netlink_start(struct net *net)
{
    nlsk = kzalloc(sizeof(*nlsk), GFP_KERNEL);
    if (!nlsk)
        return -ENOMEM;

    netlink_register_notifier(&nBlk);
    nlsk->sk = netlink_kernel_create(net ...);
    ...
}

static void my_netlink_end(struct net *net)
{
    netlink_kernel_release(nlsk->sk);
    netlink_unregister_notifier(&nBlk);
}

さて、実行してlxcを起動すると

lxc-start -d -n Container1

その後、カーネルがクラッシュしましたが、通知機能全体を削除すると、 netlink_register_notifier と netlink_unregister_notifier の両方が完全に機能していますが、ユーザーアプリケーションの終了を処理できませんでした:(

4

0 に答える 0