Linux網路協議棧之網路裝置管理

2021-05-23 00:49:12 字數 2332 閱讀 8715

linux為何要對網路裝置單獨管理呢?這是因為。協議棧很多地方都會涉及到網路裝置。小至ip位址的設定。大至ip路由的更新。都離不開高效的網路裝置管理。將網路裝置單獨管理可以提高效率!    每個網路裝置,在linux中都會對應乙個資料結構,net_device。 就從這個結構說起linux 2。6。21中,對net_device定義如下:

太多的成員。太龐大了。不要緊,等到要使用到相應成員的時候再來解釋好了。

注意到這麼龐大的結構中,有個成員叫: struct net_device *next,呵呵,很熟悉吧,就是用它來建立網路裝置的鍊錶。每乙個網路裝置啟動的時候,都會呼叫register_netdev()(drivers/net/net_init.c)

跟蹤這個函式:

int register_netdev(struct net_device *dev)

/**  back compatibility hook. kill this one in 2.5

*/if (dev->name[0]==0 || dev->name[0]==' ')

err = register_netdevice(dev);

out:

rtnl_unlock();

return err;

}

跟蹤至: register_netdevice(struct net_device *dev) (net/core/dev.c)

從此可以看出。新加入乙個裝置時,會插入三個位置:以名字為雜湊值組織的dev_name_head ,以序號為主鏈的雜湊陣列dev_index_head.還有dev_base.它為快速查詢網路裝置提供了基礎。事實上。在核心中,經常要根據index找到dev. 或者根據name找到dev.我們遇到的時候再分析到現在,我們可以在核心中順藤摸瓜的找到每乙個網路裝置了。還有很重要的。裝置更改了配置,要怎麼通知跟他相關的子系統呢?例如,網絡卡更新了ip,如何使路由得到更新?接著往下看:注意到上面註冊**中所呼叫的乙個函式notifier_call_chain(&netdev_chain, netdev_register, dev).該函式的作用是,在通知鍊錶上netdev_chain上傳送netdev_register訊息,所有在與該通知鍊錶關聯的子系統都可以收到此訊息。以此,可以快速的更新整個系統的配置訊息。以路由子系統為例,來講述該過程:在ipv4子系統載入的時候,加呼叫ip_init(),接著呼叫fib_init(),然後再呼叫ip_fib_init()跟蹤一下此函式:

void __init ip_fib_init(void)

register_netdevice_notifier是做什麼的呢?

往下跟蹤:

int register_netdevice_notifier(struct notifier_block *nb)

}rtnl_unlock();

return err;

}

呵呵,它在netdev_chain上註冊了通知鏈,當此鏈上有事件發生時,會呼叫fib_netdev_notifiers中的相關資訊處理,看一下fib_netdev_notifier的資訊:

struct notifier_block fib_netdev_notifier = ;

ok,現在越來越具體了,如果netdev_chain有事件,會呼叫fib_netdev_event處理。

繼續跟蹤:

static int fib_netdev_event(struct notifier_block *this, unsigned long event, void *ptr)

if (!in_dev)

return notify_done;

switch (event) endfor_ifa(in_dev);

#ifdef config_ip_route_multipath

fib_sync_up(dev);

#endif

rt_cache_flush(-1);

break;

//裝置down

case netdev_down:

fib_disable_ip(dev, 0);

break;

//裝置引數改變

case netdev_changemtu:

case netdev_change:

rt_cache_flush(0);

break;

}return notify_done;

}

路由部份的**將在後續的筆記中給出。至此,整個網路裝置的架構非常的清晰了!

網路裝置 華為網路裝置配置使用FTP協議傳輸檔案

在進行網路裝置系統維護時,如公升級系統軟體 備份配置檔案等,均需要進行pc與裝置之間的檔案傳輸。通常選擇使用ftp tftp進行檔案傳輸。下面黃老師給大家介紹一下如何配置pc作為ftp server的方式來傳輸檔案。1.在ftp伺服器端執行ftp軟體,並設定ftp服務的相關資訊。2.配置裝置與ftp...

linux網路裝置驅動

linux網路裝置驅動 linux網路驅動程式的體系結構可劃分為4個層次。linux核心源 中提供了網路裝置介面及以網路子系統的上層的 移植特定網路硬體的驅動程式的主要工作就是完成裝置驅動功能層的相應 根據底層具體的硬體特性,定義網路裝置介面struct net device型別的結構體變數,並實現...

linux 網路裝置驅動

linux 網路驅動 謹以此文紀念過往的歲月 一.前言 在linux中網路驅動也是乙個大頭,如何去理解網路驅動是作為乙個linux驅動工程師必備的技能。不過同樣的裝置,在不同人的手中會有不同的效果,其原因就在於驅動的好與否。二.裝置註冊 學習網路的驅動與學習普通cdev驅動一樣,都是學習其模板,然後...