偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OpenHarmony設(shè)備開發(fā)(七)- LWIP

系統(tǒng) OpenHarmony
OpenHarmony輕量化系統(tǒng)連接WIFI便多數(shù)都為LWIP協(xié)議,本文便主要介紹輕量化系統(tǒng)連接WIFI的分配IP步驟。

??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??

前言

LWIP全稱為LIght Weight IP,本意便是輕量化的小型TCP協(xié)議,旨在保留TCP的功能下盡量減少對系統(tǒng)資源的占用,LWIP多用于輕量化的設(shè)備上.當(dāng)然LWIP功能不只是支持TCP協(xié)議傳輸,還支持了DHCP協(xié)議動態(tài)分配IP地址,IP協(xié)議等等。

OpenHarmony輕量化系統(tǒng)連接WIFI便多數(shù)都為LWIP協(xié)議,本文便主要介紹輕量化系統(tǒng)連接WIFI的分配IP步驟。

對于小熊派nano而言,lwip的主要頭文件都保存在了該地址下:

??//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/lwip??

netif網(wǎng)絡(luò)接口

首先我們要認(rèn)識到netif結(jié)構(gòu)體,該結(jié)構(gòu)體是LWIP從硬件中抽象出來的網(wǎng)卡(網(wǎng)絡(luò)接口),并且該結(jié)構(gòu)體還是個鏈表結(jié)構(gòu),即支持多個網(wǎng)卡配置.我們使用LWIP進(jìn)行配置IP時,netif結(jié)構(gòu)體必不可少。

netif結(jié)構(gòu)體的定義存放在:

vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/lwip/netif.h??

介紹一些主要的變量:

struct netif *next;該變量便表示了netif是鏈表結(jié)構(gòu),提供了配置多個網(wǎng)卡的接口,當(dāng)需要配置第二個網(wǎng)絡(luò)接口時,便指向該指針便可配置第二網(wǎng)絡(luò)接口,第三第四如上原理。

#打卡不停更#【FFH】OpenHarmony設(shè)備開發(fā)(七)- LWIP-開源基礎(chǔ)軟件社區(qū)

本文主要介紹ipv4的相關(guān)變量(因?yàn)閕pv4用的比較多)。

這三個數(shù)據(jù)分別存放了主機(jī)的IP,子網(wǎng)掩碼,網(wǎng)關(guān).(但經(jīng)過查看此數(shù)據(jù),好像小熊派nano的IP地址和子網(wǎng)掩碼反了(有可能存放相關(guān)地址的時候傳遞的變量反了?)。

#打卡不停更#【FFH】OpenHarmony設(shè)備開發(fā)(七)- LWIP-開源基礎(chǔ)軟件社區(qū)


進(jìn)一步查看IP,子網(wǎng)掩碼,網(wǎng)關(guān)的ip_addr_t結(jié)構(gòu)體,我們便能從里面看到了存放了ip4和ip6的地址,其中ip4變量是以無符號整數(shù)類型保存,ip4_addr_t結(jié)構(gòu)體里面只有一個unsigned int的addr變量。

我們想獲取IP,子網(wǎng)掩碼,網(wǎng)關(guān)的數(shù)據(jù)方法如下:

static struct netif *g_lwip_netif = NULL;  //創(chuàng)建該結(jié)構(gòu)體
g_lwip_netif->ip_addr.u_addr.ip4.addr
g_lwip_netif->netmask.u_addr.ip4.addr
g_lwip_netif->gw.u_addr.ip4.addr

**char hostname[NETIF_HOSTNAME_MAX_LEN];**netif主機(jī)名稱。

**u8_t hwaddr[NETIF_MAX_HWADDR_LEN];**該設(shè)備MAC地址。

DHCP動態(tài)分配IP

DHCP全稱為Dynamic Host Configuration Protocol,動態(tài)主機(jī)配置協(xié)議.顧名思義,其作用便是可以動態(tài)分配IP地址,提高IP地址的使用效率。

主要介紹小熊派nano的實(shí)現(xiàn):

  1. 創(chuàng)建netif結(jié)構(gòu)體,并對此初始化。
  2. 啟動dhcp。
static struct netif *g_lwip_netif = NULL;    //創(chuàng)建該結(jié)構(gòu)體
g_lwip_netif = netifapi_netif_find("wlan1");
if (g_lwip_netif) //判斷dhcp是否初始化成功
{
dhcp_start(g_lwip_netif); //啟動DHCP
printf("begain to dhcp");
}

一些相關(guān)的API接口:

  1. err_t dhcp_is_bound(struct netif *netif);?獲取網(wǎng)絡(luò)接口的DHCP協(xié)商狀態(tài),可以使用該api循環(huán)判斷dhcp是否正常使用,判斷成功再進(jìn)行下一步工作.返回值為0即是成功。
  2. err_t netifapi_netif_common(struct netif *netif, netifapi_void_fn voidfunc,netifapi_errt_fn errtfunc);?打印主機(jī)以及設(shè)備的IP等相關(guān)信息,debug以及了解相關(guān)信息.樣例:netifapi_netif_common(g_lwip_netif, dhcp_clients_info_show, NULL)。
  3. err_t netifapi_netif_get_addr(struct netif *netif, ip4_addr_t *ipaddr, ip4_addr_t *netmask, ip4_addr_t *gw);獲取netif內(nèi)保存的設(shè)備的IP,子網(wǎng)掩碼,網(wǎng)關(guān)信息,將ip保存到ipaddr,子網(wǎng)掩碼保存到netmask,網(wǎng)關(guān)保存到gw。
  4. struct netif *netifapi_netif_find(const char *name);尋找一個名為name的網(wǎng)絡(luò)接口,并將此網(wǎng)絡(luò)接口作為返回值返回。
  5. err_t netifapi_dhcps_start(struct netif *netif, char *start_ip, u16_t ip_num);?啟動DHCP服務(wù)端,提供客戶端連接,常用于設(shè)備作為熱點(diǎn)時所選擇的DHCP啟動方式。
    參數(shù)一:網(wǎng)絡(luò)接口
    參數(shù)二:起始IP地址
    參數(shù)三:IP地址數(shù)量
    其中如果DHCPv4使用默認(rèn)配置,參數(shù)二和三都需要為NULL。
netifapi_dhcps_start(g_lwip_netif, 0, 0);
  • 更多的api接口可以參考netifapi.h和dhcp.h。
    存放地址:device/soc/hisilicon/hi3861v100/sdk_liteos/third_party/lwip_sack/include/lwip。

靜態(tài)分配IP

關(guān)鍵API接口為:err_t netifapi_netif_set_addr(struct netif *netif,const ip4_addr_t *ipaddr,const ip4_addr_t *netmask,const ip4_addr_t *gw)。

前文中有了一個獲取IP信息,這便有一個設(shè)置IP地址,我們可以通過這一個API便完成了對IP地址的分配,十分的便捷!

  1. 創(chuàng)建netif結(jié)構(gòu)體,并對此初始化。
  2. 設(shè)置IP,子網(wǎng)掩碼,網(wǎng)關(guān)。
  3. 調(diào)用API完成分配IP。
static struct netif *g_lwip_netif = NULL;    //創(chuàng)建該結(jié)構(gòu)體
g_lwip_netif = netifapi_netif_find("wlan1");ip4_addr_t bp_gw;
ip4_addr_t bp_ipaddr;
ip4_addr_t bp_netmask;
IP4_ADDR(&bp_ipaddr, 192, 168, 1, 110);
IP4_ADDR(&bp_gw, 192, 168, 1, 1);
IP4_ADDR(&bp_netmask, 255, 255, 255, 0);
netifapi_netif_set_addr(g_lwip_netif, &bp_ipaddr, &bp_netmask, &bp_gw);

ip地址打印

  1. 直接打印IPv4地址。
ip4_addr_t Ipv4_Addr;
unsigned char *read = (unsigned char *)&Ipv4_Addr.addr;
for (int i = 0; i < 4; i++)
{
printf("%d", *(read + i));
if (i != 3)
printf(".");
else
printf("\n");
}
  1. IPv4十進(jìn)制轉(zhuǎn)字符串。
ip4_addr_t Ipv4_Addr;const unsigned int num=Ipv4_Addr.addr;char strTemp[20];    //存放IPV4地址
sprintf(strTemp, "%d.%d.%d.%d",
(num & 0x000000ff),
(num & 0x0000ff00) >> 8,
(num & 0x00ff0000) >> 16,
(num & 0xff000000) >> 24);

??想了解更多關(guān)于開源的內(nèi)容,請?jiān)L問:??

??51CTO 開源基礎(chǔ)軟件社區(qū)??

??https://ost.51cto.com??。

責(zé)任編輯:jianghua 來源: 51CTO開源基礎(chǔ)軟件社區(qū)
相關(guān)推薦

2022-09-06 15:25:22

Wifi設(shè)備開發(fā)

2022-02-15 14:06:36

OpenHarmon操作系統(tǒng)鴻蒙

2022-10-25 14:51:11

設(shè)備開發(fā)鴻蒙

2022-09-22 15:23:40

設(shè)備開發(fā)鴻蒙

2022-09-07 15:35:49

設(shè)備開發(fā)鴻蒙

2022-02-21 15:38:57

Openharmon操作系統(tǒng)鴻蒙

2022-02-15 14:45:14

OpenHarmo系統(tǒng)鴻蒙

2022-09-30 13:50:07

設(shè)備開發(fā)鴻蒙

2022-07-29 14:29:24

設(shè)備開發(fā)鴻蒙

2023-04-25 16:30:58

設(shè)備開發(fā)鴻蒙

2021-01-06 11:21:56

鴻蒙HarmonyOS應(yīng)用開發(fā)

2022-09-28 13:48:13

設(shè)備開發(fā)鴻蒙

2022-02-17 18:08:04

OpenHarmon應(yīng)用開發(fā)鴻蒙

2024-04-09 09:34:36

鴻蒙系統(tǒng)燒錄操作系統(tǒng)

2022-09-20 14:27:23

設(shè)備開發(fā)鴻蒙

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2023-05-05 16:05:26

設(shè)備內(nèi)核移植鴻蒙

2022-11-04 14:58:59

應(yīng)用開發(fā)鴻蒙

2022-10-12 15:00:02

設(shè)備開發(fā)應(yīng)用開發(fā)

2023-04-21 15:54:08

應(yīng)用開發(fā)鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號