2016-03-09 37 views
1

的網絡連接套接字地址的結構示於下面每個netlink系列有哪些組播組可用?

struct sockaddr_nl { 
    sa_family_t  nl_family; /* AF_NETLINK */ 
    unsigned short nl_pad;  /* Zero. */ 
    pid_t   nl_pid;  /* Port ID. */ 
    __u32   nl_groups; /* Multicast groups mask. */ 
}; 

人7的netlink說,每個網絡鏈路的家庭具有一組32個的組播組。 我在哪裏可以找到每個netlink系列的可用多播組?我無法在手冊頁上找到它們。

+0

我的印象是,有意不發佈或收集有關netlink的任何信息。 「正確」的方法是使用libnl。我只能從內核資源中找到我需要的所有信息:( – user1641854

回答

0

嗯,這不是一個很大的答案,但我認爲它是最接近它可以實際。

Netlink不存儲任何組元數據AFAIK。該協議的用戶通過黑客入侵位域來定義他們的組以及他們想要做什麼。所以你不問Netlink的問題。你在問關於Netlink的用戶。此外,我聽說(雖然實際上並沒有打擾實施),即使用戶空間也可以將組播消息發送到任意組,甚至到其他用戶空間客戶端,所以問題也不是真正的內核範圍。

如果列表中有一個列表收集這些信息給你,我會非常驚訝。 Netlink用戶不是靜態的;一個內核將有一個bunch of users,另一個內核將有another bunch of users。每個用戶協議將定義它自己的多播組(如果有的話)。這甚至不包括由不合常理使用Generic Netlink instead of Netlink的雜散內核模塊定義的協議。 :)

如果你很難找到這些信息是一應俱全片段,你就必須從網絡連接套接字API注意到,通過control buffer field named dst_group網絡鏈路initialize nl_groups的內核端用戶。所以你必須找到初始化這個字段的代碼。例如,NETLINK_DNRTMSG,似乎有two groups ......一個叫DNRNG_NLGRP_L1,另一個叫DNRNG_NLGRP_L2 ......好運算出他們是什麼。 :)

另一方面,正如您所見,用戶空間代碼通過nl_groups與組進行交互。你必須找到初始化這個字段的代碼。由於用戶空間代碼比內核更分散,所以你面臨着一些不合理的任務。

換句話說,我覺得你的方法(無論你在做什麼)都不符合Netlink的設計。您不需要列表組播組;你的代碼已經知道它正在執行的特定協議是什麼,所以它靜態地自訂它。

相關問題