自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

前言

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

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

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

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

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

首先我們要認(rèn)識(shí)到netif結(jié)構(gòu)體,該結(jié)構(gòu)體是LWIP從硬件中抽象出來(lái)的網(wǎng)卡(網(wǎng)絡(luò)接口),并且該結(jié)構(gòu)體還是個(gè)鏈表結(jié)構(gòu),即支持多個(gè)網(wǎng)卡配置.我們使用LWIP進(jìn)行配置IP時(shí),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),提供了配置多個(gè)網(wǎng)卡的接口,當(dāng)需要配置第二個(gè)網(wǎng)絡(luò)接口時(shí),便指向該指針便可配置第二網(wǎng)絡(luò)接口,第三第四如上原理。

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

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

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

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


進(jìn)一步查看IP,子網(wǎng)掩碼,網(wǎng)關(guān)的ip_addr_t結(jié)構(gòu)體,我們便能從里面看到了存放了ip4和ip6的地址,其中ip4變量是以無(wú)符號(hào)整數(shù)類型保存,ip4_addr_t結(jié)構(gòu)體里面只有一個(gè)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動(dòng)態(tài)分配IP

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

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

  1. 創(chuàng)建netif結(jié)構(gòu)體,并對(duì)此初始化。
  2. 啟動(dòng)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); //啟動(dòng)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);尋找一個(gè)名為name的網(wǎng)絡(luò)接口,并將此網(wǎng)絡(luò)接口作為返回值返回。
  5. err_t netifapi_dhcps_start(struct netif *netif, char *start_ip, u16_t ip_num);?啟動(dòng)DHCP服務(wù)端,提供客戶端連接,常用于設(shè)備作為熱點(diǎn)時(shí)所選擇的DHCP啟動(dòng)方式。
    參數(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)。

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

  1. 創(chuàng)建netif結(jié)構(gòu)體,并對(duì)此初始化。
  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)于開(kāi)源的內(nèi)容,請(qǐng)?jiān)L問(wèn):??

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

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

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

2022-10-25 14:51:11

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

2022-09-22 15:23:40

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

2022-09-06 15:25:22

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

2022-02-15 14:06:36

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

2022-02-21 15:38:57

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

2022-09-07 15:35:49

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

2023-04-25 16:30:58

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

2022-09-28 13:48:13

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

2022-02-15 14:45:14

OpenHarmo系統(tǒng)鴻蒙

2022-09-30 13:50:07

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

2022-07-29 14:29:24

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

2021-01-06 11:21:56

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

2022-02-17 18:08:04

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

2022-09-20 14:27:23

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

2023-04-21 15:54:08

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

2022-10-12 15:00:02

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

2022-03-02 16:08:31

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

2022-01-21 21:22:24

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

2023-07-25 10:45:48

OHScrcpy鴻蒙

2023-05-16 14:49:25

鴻蒙內(nèi)核移植
點(diǎn)贊
收藏

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