想了解更多关于开源的备开内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com
LWIP全称为LIght Weight IP,备开本意便是轻量化的小型TCP协议,旨在保留TCP的功能下尽量减少对系统资源的占用,LWIP多用于轻量化的设备上.当然LWIP功能不只是支持TCP协议传输,还支持了DHCP协议动态分配IP地址,IP协议等等。
OpenHarmony轻量化系统连接WIFI便多数都为LWIP协议,备开本文便主要介绍轻量化系统连接WIFI的分配IP步骤。
对于小熊派nano而言,备开lwip的主要头文件都保存在了该地址下:
//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/lwip
首先我们要认识到netif结构体,该结构体是LWIP从硬件中抽象出来的网卡(网络接口),并且该结构体还是个链表结构,即支持多个网卡配置.我们使用LWIP进行配置IP时,netif结构体必不可少。
netif结构体的备开定义存放在:
vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include/lwip/netif.h
介绍一些主要的变量:
struct netif *next;该变量便表示了netif是链表结构,提供了配置多个网卡的接口,当需要配置第二个网络接口时,便指向该指针便可配置第二网络接口,第三第四如上原理。
本文主要介绍ipv4的相关变量(因为ipv4用的比较多)。
这三个数据分别存放了主机的备开IP,子网掩码,网关.(但经过查看此数据,好像小熊派nano的IP地址和子网掩码反了(有可能存放相关地址的时候传递的变量反了?)。
进一步查看IP,子网掩码,网关的ip_addr_t结构体,我们便能从里面看到了存放了ip4和ip6的地址,其中ip4变量是以无符号整数类型保存,ip4_addr_t结构体里面只有一个unsigned int的addr变量。
我们想获取IP,备开子网掩码,网关的数据方法如下:
static struct netif *g_lwip_netif = NULL; //创建该结构体
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主机名称。
**u8_t hwaddr[NETIF_MAX_HWADDR_LEN];**该设备MAC地址。备开
DHCP全称为Dynamic Host Configuration Protocol,备开动态主机配置协议.顾名思义,其作用便是可以动态分配IP地址,提高IP地址的使用效率。
主要介绍小熊派nano的备开实现:
static struct netif *g_lwip_netif = NULL; //创建该结构体
g_lwip_netif = netifapi_netif_find("wlan1");
if (g_lwip_netif) //判断dhcp是否初始化成功
{
dhcp_start(g_lwip_netif); //启动DHCP
printf("begain to dhcp");
}
一些相关的API接口:
netifapi_dhcps_start(g_lwip_netif, 0, 0);
关键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信息,这便有一个设置IP地址,我们可以通过这一个API便完成了对IP地址的分配,十分的便捷!
static struct netif *g_lwip_netif = NULL; //创建该结构体
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);
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");
}
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);
想了解更多关于开源的内容,请访问:
51CTO 开源基础软件社区
https://ost.51cto.com。
责任编辑:jianghua 来源: 51CTO开源基础软件社区 LWIP协议鸿蒙(责任编辑:娱乐)
贝达药业(300558.SZ)公布消息:凯铭投资解押239万股及质押的511万股延期购回
铭瑄推终结者B760M GKD5主板 支持XMP首发829元
海外客商抢抓中国新春机遇 境外消费回流对进口消费产生一定带动作用