簡體   English   中英

如何抑制多個Netlink事件?

[英]How to suppress multiple netlink events?

我一直使用此代碼作為示例來接收Linux機器上的接口打開/關閉事件。 我能夠正確接收事件,但是當接口從先前的關閉狀態啟動時,我會收到多個網絡鏈接事件,如下所示:

Event received >> NETLINK::Down
Event received >> NETLINK::Down
Event received >> NETLINK::Up

編輯:我已經從以下代碼中修改了一行:

addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;

至:

addr.nl_groups = RTMGRP_LINK;

但是我仍然收到多個事件。 有人可以建議是否有可能抑制這些事件以使每個州都收到一個唯一的事件嗎? 如果可以,怎么辦?

最終,經過大量研究,我得以完成這項工作。 有一個名為“ ifi_change”的標志,它給出了Netdevice狀態更改的變化。 我無法想到它,因為rtnetlink手冊頁未提及任何內容。 它說它保留供將來使用,應始終設置為0xFFFFFFFF。 但是,其值會隨着接口當前狀態的改變而改變。 如果狀態發生變化,則給出一個有限值,否則為零。 使用此檢查,我可以抑制多個netlink消息。

查看代碼,我懷疑您會收到以下每種類型的事件的通知:

addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;

我建議縮小到

addr.nl_groups = RTMGRP_LINK;

(或視情況適用於IPv4 / IPv6。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM