LwIP Application Developers Manual5---高層協議之DHCP,AUTOIP,SNMP,PPP


1.前言

本文主要講述高層協議,包括DHCP

2.DHCP

2.1 從應用的角度看DHCP

你必須確保在編譯和鏈接時使能DHCP,可通過在文件lwipopts.h里面定義LWIP_DHCP選項,該選項會加入一個dhcp struct的指針到netif結構體里面。

dhcp_start()將會分配一個dhcp 結構體。另外,LWIP_UDP一定要設置為非零的數值,由於DHCP是一個運行在UDP上的協議。

使用DHCP的設置很簡單,你只要在初始化完接口后調用函數

dhcp_start()

為了能更好的正確處理租賃協議,DHCP有一對相關的時間函數可以被調用。你只要在你的主循環里調用下面函數來處理所有協議的定時器。

sys_check_timeouts()

 

然后你可以檢查你的接口的->dhcp->state是否等於DHCP_BOUND,來進行下一步的操作。

注:For LWIP 2.0 you need to call dhcp_supplied_address(const struct netif *netif) instead

如果你要經常處理網絡的變動,比如,一個移動系統經常接入不同的網絡和拔除,那么你要告知DHCP這一相關狀態,這個一般使用dhcp_network_changed()函數。

然而,協議棧不僅要告知DHCP還要通知AUTOIP和IGMP該鏈接的改變,因此正確的調用如下所示:

netif_set_link_up(&mynetif);

netif_set_link_down(&mynetif);

 

你需要綁定鏈接的變化到你的接口。如果你想要更多的了解,下面有更多的(可能是過時的)的信息:

為了在一個接口上使用DHCP,簡單的使用如下命令:

  • dhcp_start()-開始一個接口的DHCP配置
  • dhcp_renew()-強制恢復先前的租賃(平常並不需要)
  • dhcp_renew()-釋放先前的DHCP租賃,經常在dhcp_stop前調用。
  • dhcp_stop()-停止一個接口的DHCP的配置
  • dhcp_inform()-告知服務器我們手動配置的IP地址

NOTE:這些是lwIP的內核函數,它們並沒有並發訪問的保護。在多線程環境中,它們只能被內核線程調用(tcpip-thread)。當被其它線程調用時,使用在api-module netifapi.c定義的函數netifapi_dhcp_*()。

有一個選項可以利用物理層協議的自動協商。當鏈接的狀態發生改變時大多數物理層會產生中斷(比如:一個有效的自動協商已經完成或者一個有線鏈接已經斷開)。

這些物理層中斷狀態的改變主要由tcpip線程處理(比如使用tcpip_callback_with_block(HandlePhyInterrupt,NULL,0))。

在HandlePhyInterrupt中斷里,如果連接剛建立,那么要調整一些必要的硬件寄存器來控制自動協商的速度,然后調用dhcp_start。

如果連接斷開,那么首先先調用netfi_set_down。上面提到的其它dhcp函數可以不需要使用。

2.2 DHCP support history in lwIP

1.2 

2.3 External references

  • RFC 1531 "Dynamic Host Configuration Protocol" October 1993, obsoleted by RFC 1541
  • RFC 1541 "Dynamic Host Configuration Protocol" October 1993, obsoleted by RFC 2131
  • RFC 2131 "Dynamic Host Configuration Protocol" March 1997, updated by RFC 3396
  • RFC 3396 "Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4)" November 2002

 3. AUTOIP

像DHCP,AUTOIP是一個模塊,當一個設備啟動時可以使能動態IPv4地址的分發。

AUTOIP是一個不用服務器來獲得IP地址方法的協議,而DHCP需要一個服務器。

一個配置了AUTOIP的主機將會得到一個前綴為169.254/16的IP地址(169.254.xxx.xxx)

3.1 從應用的角度看AUTOIP

     在使能AUTOIP前,你要確保編譯了AUTOIP。你可以在lwipopt.h文件中定義LWIP_AUTOIP,並且在使用前還要確定該模塊已經被初始化(查看Initializing lwIP)。

為了在一個接口上使用AUTOIP,只要簡單的使用如下命令:

  • autoip_start()-通過一個新的IP地址打開接口
  • autoip_stop()-關閉該接口

查看Network interfaces management.來獲得更多關於打開和關閉接口的說明。

NOTE:這些是lwIP的內核函數。它們並沒有並行訪問保護。在多線程環境中,它們只能被內核線程調用(通過tcpip-thread)。當被其它線程調用時,請使用在api-module netifapi.c中定義的函數netifapi_auto_ip*() 。

3.2 外部參考鏈接

  • RFC 3927 - Dynamic Configuration of IPv4 Link-Local Addresses

4. SNMP

4.1 從應用的角度看SNMP

4.2 內部參考

Private Mib Generator

4.3 外部參考鏈接

  • RFC 1155 Structure and Identification of Management Information for TCP/IP-based Internets
  • RFC 1156 Management Information Base for Network Management of TCP/IP-based internets
  • RFC 1157 A Simple Network Management Protocol (SNMP)
  • RFC 1158 Management Information Base for Network Management of TCP/IP-based internets: MIB-II

5. PPP

5.1 從應用的角度看PPP

lwIP有2種方式使用PPP:1、PPPoE(PPP over Ethernet) 2、PPP-over-serial

lwIP支持在線程環境中運行,PPP是一個單獨的任務與lwIP主線程一同運行;

lwIP也支持在一個主循環中運行,lwIP函數將被主循環調用。

5.2 PPP over serial

  • With Task Support 

 

  • Required callback function

 

  • With no Task Support

 

  • Example Task Application code

 

5.3. Debug Support 

 

5.4PPP support history in lwIP

 

5.5 External references

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM