lwIP

lwip ---(十二)ICMP处理

我怕爱的太早我们不能终老 提交于 2021-01-29 17:35:03
  目前,IP层的东西基本讲解完,数据包的发送或分片发送没有具体涉及到。数据包的发送,与上层协议密切相关,即 传输层 ,后面的内容就是讨论传输层的东西了。这里先讲解传输层协议中比较简单的 ICMP 协议。 ICMP(Internet Control Message Protocol) 是Internet控制报文协议 ,用于在IP主机、路由器之间传递控制消息。 控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息 。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。   在以前讲解IP层 ip_input 函数时,已经三次涉及到了 ICMP 的东西,第一次在数据包转发过程中,需要将数据包的 TTL 值减 1 ,若此时 TTL 值变为 0 则用 icmp_time_exceeded 函数向源主机返回一份超时 ICMP 信息;还有 两次是 ip_input 函数通过IP报文头部的协议字段值判断该数据包是交给哪个上层协议 的, 若是 ICMP 协议,则调用 icmp_input 函数 ; 若没有一个协议能接受这个数据包,则调用 icmp_dest_unreach 函数向源主机返回一个协议不可达 ICMP 差错控制包 。这里先讲解 icmp_time_exceeded 和 icmp_dest_unreach 函数是怎样发送 ICMP 信息包的。  

wireshark抓包工具的使用及分析

扶醉桌前 提交于 2021-01-12 08:05:06
前段时间看到群里在讨论Wireshark抓包工具,想写一篇使用笔记但一直没来得及写,本篇就通过实例来分享wireshark抓包工具的使用。 Wireshark简介 Wireshark 是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 Wireshark下载、安装 下载链接: https://www.wireshark.org/#download 官网下载速度较慢,在本公众号聊天界面回复关键字: Wireshark ,获取网盘链接,若链接失效可联系我获取。 安装与一般的PC机软件安装方式一样,按默认方式安装即可。 Wireshark的使用 我们就借助往期文章: C语言、嵌入式应用:TCP通信实例分析 的TCP通信的demo来做演示。 实验框图如: 在本公众号聊天界面回复关键字: Wireshark ,获取本次试验代码及工具: 其中tcp_client为RT-Thread Studio工程,使用RT-Thread Studio工具导入之后,修改WiFi信息与你电脑连接的WiFi一致: 编译下载到小熊派开发板即可。 启动Wireshark抓包工具,选择无线网卡: 输入过滤信息 ip.src == xxx.xxx.xxx.xxx or ip.dst == xxx.xxx.xxx.xxx ,比如我这边是 ip.src == 192.168

lwip---动态内存管理

时光怂恿深爱的人放手 提交于 2021-01-07 09:53:13
  总的来说,LWIP的动态内存管理机制可以有三种: C运行时库自带的内存分配策略 、 动态内存堆(HEAP)分配策略 和 动态内存池(POOL)分配策略 。   动态内存堆分配策略和C运行时库自带的内存分配策略具有很大的相似性,这是LWIP模拟运行时库分配策略实现的。这两种策略使用者只能从中选择一种,这通过头文件 lwippools.h 中的宏定义 MEM_LIBC_MALLOC 来实现的, 当它被定义为1时则使用标准C运行时库自带的内存分配策略,而为0时则使用LWIP自身的动态内存堆分配策略 。一般情况下,我们选择使用LWIP自身的动态内存堆分配策略,这里不对C运行时库自带的内存分配策略进行讨论。   同时,动态内存堆分配策略可以有两种实现方式,第一种就是如前所述的通过开辟一个内存堆,然后通过模拟C运行时库的内存分配策略来实现。第二种就是通过动态内存池的方式来实现,也即动态内存堆分配函数通过简单调用动态内存池(POOL)分配函数来完成其功能,在这种情况下,用户需要在头文件 lwippools.h 中定义宏 MEM_USE_POOLS 和 MEM_USE_CUSTOM_POOLS 为1,同时还要开辟一些额外的缓冲池区,如下: LWIP_MALLOC_MEMPOOL_START LWIP_MALLOC_MEMPOOL ( 20 , 256 ) LWIP_MALLOC_MEMPOOL

打算把LWIP 2.0.3升级为2.1.2

放肆的年华 提交于 2020-12-28 18:46:47
20201226 周六晚 21点21分 一年前写过 《花了两个小时将lwip1.4.1 升级为2.0.3》 这次搞mqtt的tls,发现2.1.2 里面说无缝连接了TLS。并且目前版本的华为LITEOS也用了2.1.2 。 官网 2.1.2 是18年发布的,因此可以说明2.1.2 是靠谱的。不过还是应该把官方资料读一读。 http://savannah.nongnu.org/projects/lwip/ 来源: oschina 链接: https://my.oschina.net/u/4258325/blog/4863957

是的,RT-Thread 3.0.4发布了

▼魔方 西西 提交于 2020-12-12 05:01:18
2018年已过去一半了,让我们先默默回顾下年初的计划和目标实现的怎么样了? RT-Thread基本上是按着既定的节奏在推进,离上一个版本发布也过去将近一个季度,在年中迎来v3.0.4版本发布,同时越来越多的开发者加入到了RT-Thread的建设中,如来一颗糖,liuguang,zhuangwei,bluebear,孙冬梅等开发者亦做出许多的贡献。 下面 们主要分新版本发布和社区两块来做一个介绍。 新版本发布 RT-Thread 3.0.4版本相比RT-Thread 3.0.3版本改动不算大,一部分也是bsp的调整,主体比较大的改动部分包括: 更完善的龙芯1C BSP:在龙芯1C智龙开发板上,RT-Thread可以不再依赖pmon就运行起来了。目前龙芯1C BSP也相对健全,可以购买一套龙芯1C300开发板支持下我们国家的龙芯处理器。 更完善的i.MX RT1052 BSP驱动支持,基本上(除了camera驱动)整套驱动都齐全了; 针对GNU GCC版本以及libc功能特性的侦测,以最大程度避免GCC不同版本而带来的编译问题; 其他主要是一些周边的改动,github上的master主干也在发布v3.0.4后,开始陆续的把v3.1.0开发分支的更改合并过去;而v3.0.4会做为v3.0.x分支继续进行维护。 内核 调整rt_event_send中hook调用位置

解决一个引起死机BUG的过程。

萝らか妹 提交于 2020-10-26 04:11:15
在 《生态系统开发中,一些收获以及暂且没法解释的事情 [简单列表]》 记录到: [19] commit a1cb82f2c6d9a91c5d5fd7bf1ba13010207578a1 (HEAD -> master) Author: unsv29 <33002609@qq.com> Date: Tue Sep 15 17:13:03 2020 +0800 many tiny change ,mainly about socket MICRO 这个版本在其中一个CPU60上有问题。在qmxx上也有问题(传log马上发现问题,传csv没发现问题)。编译顺序 调整后(ota调整到tcna之前)都没问题。在qmxx上换个SD卡就好了,不换SD卡退回到很久之前的版本也不行,就是下载boot.txt出问题,下载别的都不出问题。最后把sd卡低格了,就OK了。 这个问题后果其实并不严重,因为一般不用下载log.txt. 不过这说明一个问题:我的sd驱动不完善。 《stm32 sdio调试,修改官方例程bug,已成功调通SDIO读取SD卡》 这个文章可能有帮助。不过我的SD卡已经让我低格了,无法验证这个代码好不好用了。以后有机会再实验吧。 不过我仍然小看这个问题了,后来又换了一个SD卡又出现问题了。因此打算根治这个问题。 改变编译顺序,改变编译等级都不会触发这个问题。所以说这个问题很隐蔽。

lwip心得-无法connnect原因

送分小仙女□ 提交于 2020-08-16 08:15:17
20190929 (1)在试验tcp echo client的过程中发现, connect之后再也无法connect了。查看返回值发现原因是端口已经被占用了。 所以一旦connect之后就要通过写代码进行tcp_close (2) 在试验tcp echo client的过程中发现,首次就无法connnect成功,原因是以太网硬件相当于没有初始化完毕,就是我那个检测link up 或者link down的函数。所以要当linkup之后再进行以太网的相关活动。 来源: oschina 链接: https://my.oschina.net/u/4353713/blog/4464201

IGMP小结(2)

喜夏-厌秋 提交于 2020-08-15 20:07:53
20190831 以前写过一个小结 关于LWIP的IGMP阶段性小结 。这次呢,当然希望更深入一些。 (1)在lwipopts.h里面加上 #define LWIP_IGMP 1 #define LWIP_RAND lwip_rand 然后建立一个lwip_rand函数 (2)添加igmp_init函数 (3)添加 if ((localtime - IGMPTimer) >= IGMP_TMR_INTERVAL) { IGMPTimer = localtime; igmp_tmr(); } (4)在low_level_init函数里面添加 netif->flags |= NETIF_FLAG_IGMP; (5)在ETH_MACDMA_Config函数里面把 ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_Perfect;改为 ETH_InitStructure.ETH_MulticastFramesFilter = ETH_MulticastFramesFilter_None; 为什么要改?在文档AN3411里面有 来源: oschina 链接: https://my.oschina.net/u/4267221/blog/4464207