深度探索Linux核心之對組播的支援

2021-06-02 19:50:59 字數 758 閱讀 7616

對組播資料報的支援由如下幾項組成:若干裝置標誌,乙個裝置函式和乙個資料結構。下面分別對其進行介紹。

net_device結構體的成員flags是乙個unsigned short型的資料型別,儲存網路介面的一組裝置標誌。對於乙太網網路裝置,核心提供的預設的初始化函式中,這樣給flags賦值:

dev->flags      = iff_broadcast|iff_multicast;

memset(dev->broadcast,0xff, eth_alen);

即預設狀態下,乙太網卡是可廣播的,同時,它能夠進行組播發送。並把介面的廣播位址設定為ff:ff:ff:ff:ff:ff。

乙個裝置函式,即函式void (*dev->set_multicast_list)(struct net_device *dev)。當與裝置相關的機器位址清單發生變化時,呼叫這個裝置函式。該函式還在dev->flags被修改時呼叫,

pcnet32網絡卡驅動程式中,該函式的執行流程是:

1、如果介面當前處於混雜模式,設定私有資料的init_block的模式,使網絡卡不再使用硬體過濾器來過濾資料報。

2、否則,設定相應的init_block的模式,同時,載入新的組播位址列表。

3、復位網絡卡。

乙個資料結構是struct dev_mc_list *dev->mc_list。這是與裝置關聯的所有組播位址形成的乙個鍊錶。這些組播位址在pcnet32網絡卡驅動程式中,通過pcnet32_load_multicast函式,以一定的形式把它們儲存在init_block的filter中。

深度探索Linux核心之自動分配UDP本地埠

在sock dgram型別的套接字的操作函式集的sendmsg成員函式中,每次呼叫對應的第4層協議的sendmsg成員函式時,都會進行埠號的檢查,如果沒有繫結就呼叫協議的成員函式get port進行自動繫結。代表inet域網路層套接字的結構體struct inet sock有兩個埠號相關的成員 u1...

深度探索Linux核心之傳送乙個UDP資料報

注 下面會好好幾篇文章,我都摘自同乙個作者,他是一位前輩,和高人。我在此先表示感謝,在文章的後面我會注出作者和位址。我這樣做,主要是防止自己以後找不到這些經典的好文章。出自 在socket程式設計中,傳送資料報文可供使用的api函式有send,sendto和sendmsg,下面是關於前兩個系統呼叫的...

PHP 5 0物件模型深度探索之繫結

除了限制訪問,訪問方式也決定哪個方法將被子類呼叫或哪個屬性將被子類訪問.函式呼叫與函式本身的關聯,以及成員訪問與變數記憶體位址間的關係,稱為繫結。在計算機語言中有兩種主要的繫結方式 靜態繫結和動態繫結。靜態繫結發生於資料結構和資料結構間,程式執行之前.靜態繫結發生於編譯期,因此不能利用任何執行期的資...