lwip源码下载
① 如何查看lwip源码的当前版本
在Linux内核的顶层Makefile中,扒昌顶端就蠢蔽有,格式为 VERSION = 3 PATCHLEVEL = 0 SUBLEVEL = 8 EXTRAVERSION = NAME = Sneaky Weasel 以上的版春档扒本号就是3.08
② 求解LWIP 1.4.0源码里#define TCP_PCB_COMMON(type)
如此做只是将常用的代码,以宏拆歼的形式定义出来,李御友这样代码简洁,也便于修改,只是阅读起来有点困难。
不同于封装成函数,执行时没哪槐有开销;因为在预编译阶段编译器就会帮你把宏替换成了c代码。
③ (急)IP协议源代码(C++)中的转发函数谁能帮忙解释一下
PERF_START 转发开始,初始化。
ip_forward() 转发函数, 转发一个数据包。
ip_route() 找通向目的地的路线。
(struct ip_addr *)&(iphdr->dest 目的地转成ip_addr结构。如果 找到路线,送返 结构 netif,否则 送返 NULL。
if((ip_route ...NULL){} 如果送返 NULL,也就是没找到路线,则做 {...}
找到路线, 但是 if(netif == inp) ,表示同一个数据包,已到达,不必转发。
IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); 如果ttl == 0,为防止数据包不断在 IP 互联网络上永不终止地循环,减小 数据包 生存时间TTL 1,icmp..是否执行封包回显应答。
IPH_CHKSUM_SET 更新 IP checksum 检查,根据条件决定是否+1。
DEBUGF -- 查错时输出的信息
#ifdef IP_STATS ... #endif
如果定义了IP_STATS (IP 开始) 则...
PERF_STOP() 终止 转发
④ gethostbyname()的源码
struct hostent* gethostbyname(const char *name)
{
err_t err;
ip_addr_t addr;
/* buffer variables for lwip_gethostbyname() */
HOSTENT_STORAGE struct hostent s_hostent;
HOSTENT_STORAGE char *s_aliases;
HOSTENT_STORAGE ip_addr_t s_hostent_addr;
HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2];
/* query host IP address */
err = netconn_gethostbyname(name, &addr);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG, (lwip_gethostbyname(%s) failed, err=%d
, name, err));
h_errno = HOST_NOT_FOUND;
return NULL;
}
⑤ 有用STM32F107+lwip 做TCP客户端的吗
我用过stm32F107以太网通讯,单片机作为丛昌旦客户端与PC机迅好服务端通讯, 需要移植Lwip协议栈,Lwip协渗扰议栈提供了UDP、TCP、Socket 的API函数,使用时直接调用;建议你先看看此开发板自带的例程源码,里面用了Lwip实现了telnet、http、ftp通讯。如果你没有的话,我可以发给你。 至于你说的其他两个,我没用过,抱歉。你可以看看例程源码里有没有相关的使用例子。