LWIP模块详细分析
更新时间:2024-06-29 02:26:01 阅读量: 综合文库 文档下载
- lwip模块推荐度:
- 相关推荐
LWIP模块只要包括:
(1)、配置模块;(2)、初始化模块;(3)、netIf模块;(4)mem模块(5)、netarp模块
(6)ip模块(7)icmp模块(8)dhcp模块(9)tcp模块(10)snmp模块
(1)、配置模块:通过各种宏定义的方式 对系统和子系统进行配置。主
要文件是opt.h
(2)、初始化模块:初始化模块入口文件tcpip.c,其初始化入口函数
Void tcpip_init(void (* initfunc)(void *), void *arg);通过调用lwip_init(),初始化所有的子模块,并启动协议栈管理进程。
static void tcpip_thread(void *arg):协议栈数据分发管理进程负责输入报文的处理,超时处理、API函数及回调的处理。
Void tcpip_init(void (* initfunc)(void *), void *arg) {
tcpip_init_done = initfunc; tcpip_init_done_arg = arg;
mbox = sys_mbox_new(TCPIP_MBOX_SIZE); lwip_init();
#if LWIP_TCPIP_CORE_LOCKING
lock_tcpip_core = sys_sem_new(1);
#endif /* LWIP_TCPIP_CORE_LOCKING */
sys_thread_new(TCPIP_THREAD_NAME,
tcpip_thread,
NULL,
LWIP_STK_SIZE, TCPIP_THREAD_PRIO);
}
(3)、netIf
模块:
Netif模块是协议栈与底层驱动的接口模块。该模块的主要文件是netif.c,通过链表的形式描述了所有的网口设备。
NetIf 的数据结构描述了网口的参数,包括IP地址、MAC 地址、link 状态、网口号、收发函数等等参数。一个网口设备的数据收发主要通过该结构进行
(4)mem模块
Mem 模块同一管理了协议栈使用的内容缓冲区,并管理pbuf 结构以 及报文的字段处理。主要的文件包括mem.c、memp.c、pbuf.c。
(5)、netarp模块
netarp 模块是处理arp 协议的模块,主要源文件为etharp.c。 其主要入口函数:ethernet_input(struct pbuf *p, struct netif *netif) 该入口函数通过判断输入报文p的协议类型来决定是按照arp协议进处理还是将该报文提交到IP 协议。
ethernet_input(struct pbuf *p, struct netif *netif) {
struct eth_hdr* ethhdr; u16_t type;
ethhdr = p->payload; switch (type) {
case ETHTYPE_IP: IP packet etharp_ip_input(netif, p);
case ETHTYPE_ARP: pass p to ARP module etharp_arp_input(netif, (struct eth_addr*)(netif->hwaddr), p); case ETHTYPE_PPPOEDISC: PPPOE_SUPPORT pppoe_disc_input(netif, p);
case ETHTYPE_PPPOE: /* PPP Over Ethernet Session Stage */ pppoe_data_input(netif, p);
default:
ETHARP_STATS_INC(etharp.proterr); ETHARP_STATS_INC(etharp.drop); }
return ERR_OK; }
if如果报文是ARP 报文,该接口则调用etharp_arp_input,进行arp 请求处理。
if如果是ip 报文,该接口就调用etharp_ip_input 进行arp 更新,并调用ip_input接口,将报文提交给ip 层。
/******************************************************************/ 在该模块中,创建了设备的地址映射arp 表,并提供地址映射关系查询接口。同时还提供了arp报文的发送接口。如下:
err_t etharp_output(struct netif *netif, struct pbuf *q, struct ip_addr *ipaddr)
该接口需要注册到netif 的output 字段,ip 层在输出报文时,通过 该接口获取目标机的MAC 地址,组合最终报文后,由该接口调用底 层设备的驱动接口发送数据。
在etharp_output 接口中,判断报文类型:
如果是广播包或者组播包,就调用etharp_send_ip(组装目标mac 和源mac)接口,etharp_send_ip调用netif结构中的设备驱动注册的linkoutput钩子函数,发送最终报文。
如果是单播包,etharp_output接口就调用etharp_query进行ip 地址和MAC地址的映射,来获取到目标机的MAC地址。并在etharp_query 中调用etharp_send_ip 来发送最终组合报文。
(6)、ip模块
ip 模块实现了协议的ip 层处理,主要文件为ip.c。其主要入口函数
为:err_t ip_input(struct pbuf *p, struct netif *inp)
该接口通过判断输入报文的协议类型,将其输入到相应的上层协议模块中去。比如,将udp报文送到udp_input。
该模块另外一个接口是输入函数,原型如下:
err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t tos, u8_t proto)
该接口通过路由表或者传输ip 后,调用netif 的output字段函数钩 子发送报文。
(7)UDP模块
udp 模块实现了udp 协议层的协议处理,主要文件为udp.c。该模 块通过PCB 控制块将应用端口跟应用程序做了绑定。在接收到新报 文时,分析其对应的PCB,找到对应的处理钩子,进行应用的处理。 主要入口函数为:
void udp_input(struct pbuf *p, struct netif *inp) 该模块负责输出的接口如下:
err_t udp_send(struct udp_pcb *pcb, struct pbuf *p)
该模块负责将一个PCB 跟一个本地端口进行绑定的接口如下: err_t udp_bind(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t port) 该模块负责将一个PCB 跟一个远端端口绑定的接口如下:
err_t udp_connect(struct udp_pcb *pcb, struct ip_addr *ipaddr, u16_t
(8)、icmp模块
该模块负责icmp 协议的处理,其比较简单。主要的处理接口如下: Void icmp_input(struct pbuf *p, struct netif *inp) 上述接口负责icmp 输入报文的分析和处理。
(9)、igmp模块
igmp 模块负责分组管理。其主要的接口函数如下:
void igmp_input(struct pbuf *p, struct netif *inp, struct ip_addr *dest)
该接口负责IGMP 协议报文的处理,比如分析当前报文是请求还 是应答。
err_t igmp_joingroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr) 该接口将一个网口加入一个组。
err_t igmp_leavegroup(struct ip_addr *ifaddr, struct ip_addr *groupaddr)
该接口将一个网口从一个组中移出。
(10)、dhcp模块
dhcp 模块用于获取设备ip 地址的相关信息。其处理入口主要有这 么几个:dpch的启动、dpch的接收报文处理以及定时器模块的处理。 主要的接口原型如下:
err_t dhcp_start(struct netif *netif)
该接口用于设备启动dhcp 模块,主要是客户端的功能。该模块实 现设备dhcp描述结构生成,并将dhcp的端口绑定到udp协议中,以 及将本dhcp模块跟远端服务器端口进行绑定。最后启动dhcp 申请。 static void dhcp_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, struct ip_addr *addr, u16_t port)
该接口为一个注册接口,用于dhcp 报文接收。在start dhcp 时, 该接口通过dhcp的udp pcb 注册到udp协议层。Udp进行报文处理 后,根据端口调用该注册接口。该接口中,实现dhcp 报文的协议处 理。
Void dhcp_fine_tmr() Void dhcp_coarse_tmr()
这两个函数接口实现了dhcp 的相关超时处理监控。上面一个用于 请求应答超时处理。下面一个用于地址租用情况的到期处理。 从源码分析看,上述的接口在应用lwip 的协议栈时,需要重点关 注。对于小内存应用的场合,该协议栈的内存管理以及pbuf 应用部 分需要自行改写。
关于lwip 源码的理解学习,请大家自己多看看相关资料。水好深,
作者这里也是略知
(11)、tcp模块 (12)、snmp模块
正在阅读:
LWIP模块详细分析06-29
慈爱的目光作文800字02-05
2018-2019年高中政治人教版《必修二 政治生活》《第一单元 公民的政治生活》《第二课 我国公民05-01
知识产权考试重点 - 图文04-01
大班数学活动说课稿《熊妈妈几点了》09-16
齿轮泵快速修复方法的研究05-21
2016届广东高考政治二轮题组训练4.14《探索世界与追求真理》.doc05-30
2015年二级建造师考试试题及答案解析《市政实务》网友版410-18
新概念二册子Lesson5 习题05-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 模块
- 分析
- 详细
- LWIP
- 南京中医药大学三基单5选1
- 6S及服务礼仪推行手册 - 图文
- 会计第三章
- “十三五”重点项目-动物毛类项目申请报告
- 在集团公司企业文化建设工作会上的讲话
- 2018版中国铝合金游艇市场行情动态报告目录
- 第十一单元化学与社会发展讲解
- Excel在人力资源管理中的应用
- 元宝山滑雪场商务休闲会所
- 0第2课文化对人的影响
- 冀教版三年级数学练习题 - 图文
- 主体结构初支方案3.10
- 2018初三数学第二章 分式方程的应用专项训练 - 商品销售利润问题
- 2004、2005、2006、2007、2008、2010年金融理论与实务试题+答案0
- PE新人向教程
- 设备管理系统开题报告 - 图文
- 亚伟基础知识(双音、三音)
- 淮息四标3%灰土施工方案
- 两书一表与施工安全管理培训材料 - 图文
- 低年级 公民教育 教案集