<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                那么netif具體該如何使用呢?其實使用還是非常簡單的。首先我們需要根據我們的網卡定義一個netif結構體變量struct netif gnetif,我們首先要把網卡掛載到netif\_list鏈表上才能使用,因為LwIP是通過鏈表來管理所有的網卡,所有第一步是通過netif\_add()函數將我們的網卡掛載到netif\_list鏈表上,netif\_add()函數具體見代碼清單 4?2。 ``` 1 struct netif * 2 netif_add(struct netif *netif,const ip4_addr_t *ipaddr, 3 const ip4_addr_t *netmask, const ip4_addr_t *gw, 4 void *state, netif_init_fn init, netif_input_fn input) 5 { 6 LWIP_ASSERT_CORE_LOCKED(); 7 8 if (ipaddr == NULL) 9 { 10 ipaddr = ip_2_ip4(IP4_ADDR_ANY); 11 } 12 if (netmask == NULL) 13 { 14 netmask = ip_2_ip4(IP4_ADDR_ANY); 15 } 16 if (gw == NULL) 17 { 18 gw = ip_2_ip4(IP4_ADDR_ANY); 19 } 20 21 /* reset new interface configuration state */ 22 ip_addr_set_zero_ip4(&netif->ip_addr); (1) 23 ip_addr_set_zero_ip4(&netif->netmask); 24 ip_addr_set_zero_ip4(&netif->gw); 25 netif->output = netif_null_output_ip4; 26 27 NETIF_SET_CHECKSUM_CTRL(netif, NETIF_CHECKSUM_ENABLE_ALL); 28 netif->mtu = 0; 29 netif->flags = 0; 30 31 memset(netif->client_data, 0, sizeof(netif->client_data)); 32 33 /* remember netif specific state information data */ 34 netif->state = state; 35 netif->num = netif_num; 36 netif->input = input; (2) 37 38 NETIF_RESET_HINTS(netif); 39 40 41 netif_set_addr(netif, ipaddr, netmask, gw); (3) 42 43 44 /* call user specified initialization function for netif */ 45 if (init(netif) != ERR_OK) (4) 46 { 47 return NULL; 48 } 49 50 { 51 struct netif *netif2; 52 int num_netifs; 53 do 54 { 55 if (netif->num == 255) 56 { 57 netif->num = 0; 58 } 59 num_netifs = 0; 60 for(netif2 = netif_list; netif2 != NULL; netif2 = netif2->next) 61 { 62 num_netifs++; 63 if (netif2->num == netif->num) 64 { 65 netif->num++; 66 break; 67 } 68 } 69 } 70 while (netif2 != NULL); 71 } 72 if (netif->num == 254) 73 { 74 netif_num = 0; 75 } 76 else 77 { 78 netif_num = (u8_t)(netif->num + 1); (5) 79 } 80 81 /* add this netif to the list */ 82 netif->next = netif_list; 83 netif_list = netif; (6) 84 85 mib2_netif_added(netif); 86 87 88 ip4_addr_debug_print(NETIF_DEBUG, ipaddr); 89 90 ip4_addr_debug_print(NETIF_DEBUG, netmask); 91 92 ip4_addr_debug_print(NETIF_DEBUG, gw); 93 94 95 netif_invoke_ext_callback(netif, LWIP_NSC_NETIF_ADDED, NULL); 96 97 return netif; 98 } ``` * (1):清空主機IP地址、子網掩碼、網關等字段信息。 * (2):根據傳遞進來的參數填寫網卡state、input等字段的相關信息。 * (3):調用網卡設置函數netif_set_addr()設置網卡IP地址、子網掩碼、網關等信息。 * (4):通過傳遞進來的回調函數init()進行網卡真正的初始化操作,所以該函數是由用戶實現的,對于不同網卡就使用不一樣的初始化,而此處是以太網,則該回調函數一般為ethernetif_init(),該函數在后文想想講解。 * (5):初始化網卡成功,則遍歷當前設備擁有多少個網卡,并為當前網卡分配唯一標識num。 * (6):將當前網卡插入netif_list鏈表中。 在使用之前需要進行初始化主機IP地址、子網掩碼、網關等,并且在調用netif_add()函數之后會觸發netif_init_fn的回調函數。 總之一句話,在開始使用LwIP協議棧的時候,我們就需要將網卡底層移植完成,才能開始使用,而移植的第一步,就是將網絡進行初始化,并且設置該網卡為默認網卡,讓LwIP能通過網卡進行收發數據,具體見代碼清單 4 3加粗部分 ``` 1 /*Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */ 2 #define IP_ADDR0 192 3 #define IP_ADDR1 168 4 #define IP_ADDR2 1 5 #define IP_ADDR3 122 6 7 /*NETMASK*/ 8 #define NETMASK_ADDR0 255 9 #define NETMASK_ADDR1 255 10 #define NETMASK_ADDR2 255 11 #define NETMASK_ADDR3 0 12 13 /*Gateway Address*/ 14 #define GW_ADDR0 192 15 #define GW_ADDR1 168 16 #define GW_ADDR2 1 17 #define GW_ADDR3 1 18 19 struct netif gnetif; 20 ip4_addr_t ipaddr; 21 ip4_addr_t netmask; 22 ip4_addr_t gw; 23 uint8_t IP_ADDRESS[4]; 24 uint8_t NETMASK_ADDRESS[4]; 25 uint8_t GATEWAY_ADDRESS[4]; 26 27 void TCPIP_Init(void) 28 { 29 30 tcpip_init(NULL, NULL); 31 32 /* IP addresses initialization */ 33 /* USER CODE BEGIN 0 */ 34 #ifdef USE_DHCP 35 ip_addr_set_zero_ip4(&ipaddr); 36 ip_addr_set_zero_ip4(&netmask); 37 ip_addr_set_zero_ip4(&gw); 38 #else 39 IP4_ADDR(&ipaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3); 40 IP4_ADDR(&netmask,NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3); 41 IP4_ADDR(&gw,GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3); 42 #endif /* USE_DHCP */ 43 /* USER CODE END 0 */ 44 /* Initilialize the LwIP stack without RTOS */ 45 /* add the network interface (IPv4/IPv6) without RTOS */ 46 netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, &ethernetif_init, 47 &tcpip_input); 48 /* Registers the default network interface */ 49 netif_set_default(&gnetif); 50 51 if (netif_is_link_up(&gnetif)) 52 { 53 /* When the netif is fully configured this function must be called */ 54 netif_set_up(&gnetif); 55 } 56 else 57 { 58 /* When the netif link is down this function must be called */ 59 netif_set_down(&gnetif); 60 } 61 } ``` 掛載網卡的過程是非常簡單的,如果一個設備當前是還沒有網卡的,當調用netif\_add()函數掛載網卡后,其過程如圖 4?1所示,當設備需要掛載多個網卡的時候,就多次調用netif\_add()函數即可,新掛載的網卡會在鏈表的最前面,具體見圖 4?2。 ![](https://box.kancloud.cn/500561cd4262d0c74b51eff9d11b885a_432x325.png) ![](https://box.kancloud.cn/3defce5c264eb4e905f732cb5c85c7ee_802x393.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看