LwIP IP 层常用函数和宏
Posted 研究是为了理解
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LwIP IP 层常用函数和宏相关的知识,希望对你有一定的参考价值。
1.将 4 字节数据组成 IP 地址
头文件:ip_addr.h
IP_ADDR4(ipaddr,a,b,c,d)
实现方法:
IP_ADDR4(ipaddr, a,b,c,d) (ipaddr)->addr = PP_HTONL(LWIP_MAKEU32(a,b,c,d))
可以看出已经转换为网络字节序(H:主机字节序,N:网络字节序)
比如默认 IP 地址为 172.18.1.2,使用宏定义为:
/*默认网络参数*/
#define IP_ADDER0 172
#define IP_ADDER1 18
#define IP_ADDER2 1
#define IP_ADDER3 2
则转化为 lwIP IP 地址代码为:
ip_addr_t ipaddr;
IP4_ADDR(&ipaddr, IP_ADDER0, IP_ADDER1, IP_ADDER2, IP_ADDER3)
2.将字符串形式的 IP 地址转化为 32 位网络字节序整数
头文件:ip_addr.h
ipaddr_aton(cp, addr)
这是一个宏,展开相当于:
ip4addr_aton(const char *cp, ip4_addr_t *addr)
这个函数与 Socket 编程中的 inet_aton类似。成功时返回1,失败返回0
- cp:需要转换的字符串形式 IP 地址(比如“172.18.1.2”)
- addr:指向保存 lwIP IP 地址信息的结构体变量地址。
3.字节序转换
头文件:def.h
htons(x) //主机字节序转网络字节序,16位
ntohs(x) //网络字节序转主机字节序,16位
htonl(x) //主机字节序转网络字节序,32位
ntohl(x) //网络字节序转主机字节序,32位
- 小结
项目 | Windows | Linux | lwIP |
---|---|---|---|
协议族 | PF_INET PF_INET6 | 同 Windows | 同 Windows |
地址族 | AF_INET AF_INET6 | 同 Windows | 同 Windows |
字节序转换 | unsigned short htons(unsigned short) unsigned short ntohs(unsigned short) unsigned long htonl(unsigned long) unsigned long ntohl(unsigned long) | 同 Windows | 同 Windows |
4 个单字节地址 组成网络字节序 IP | - | - | IP_ADDR4(ipaddr,a,b,c,d) |
字符串 IP 转为 32 位网络字节序 | unsigned long inet_addr(const char *string) | 同 windowns | ipaddr_aton(const char *cp, Ip4_addr_t *addr) |
以上是关于LwIP IP 层常用函数和宏的主要内容,如果未能解决你的问题,请参考以下文章
TCP/IP传输层协议实现 - TCP报文接收/发送(lwip)
TCP/IP传输层协议实现 - TCP的坚持定时器(lwip)