SmartOS之以太网精简协议栈TinyIP
做物联网,没有以太网怎么能行!
基于Enc28j60,我们团队独立实现了以太网精简协议栈TinyIP,目前支持ARP/ICMP/TCP/UDP/DHCP,还缺一个DNS就完整了。
TinyIP内置一个数据缓冲区,Enc28j60收到数据以后,放入缓冲区,然后TinyIP内部开始根据Ethernet/ARP/IP/ICMP/TCP/UDP/DHCP头部结构体对数据进行拆分和重组,执行业务逻辑。
TinyIP百分百是我们团队独立完成,没有抄袭那怕参考任何一款已有以太网协议(例如uip/lwip),各种协议结构作为国际标准是公开的,我们只需要按照协议去实现即可。
鄙视那些自己做不到就说别人抄袭的人!
#include "Sys.h"
#include "Enc28j60.h"
#include "SerialPort.h"
#include "TinyIP/TinyIP.h"
#include "conf.h"
Spi* spi;
Enc28j60* enc;
TinyIP* tip;
void OnPing(TinyIP* tip, ICMP_HEADER* icmp, byte* buf, uint len)
{
debug_printf("Ping From ");
TinyIP::ShowIP(tip->RemoteIP);
debug_printf(" with Payload=%d\r\n", len);
}
void OnUdpReceived(TinyIP* tip, UDP_HEADER* udp, byte* buf, uint len)
{
debug_printf("Udp From ");
TinyIP::ShowIP(tip->RemoteIP);
debug_printf(":%d with Payload=%d ", tip->RemotePort, len);
TinyIP::ShowData(buf, len);
debug_printf(" \r\n");
}
void OnTcpAccepted(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)
{
debug_printf("TcpAccepted From ");
TinyIP::ShowIP(tip->RemoteIP);
debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len);
}
void OnTcpDisconnected(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)
{
debug_printf("TcpDisconnected From ");
TinyIP::ShowIP(tip->RemoteIP);
debug_printf(":%d with Payload=%d\r\n", tip->RemotePort, len);
}
void OnTcpReceived(TinyIP* tip, TCP_HEADER* tcp, byte* buf, uint len)
{
debug_printf("TcpReceived From ");
TinyIP::ShowIP(tip->RemoteIP);
debug_printf(":%d with Payload=%d ", tip->RemotePort, len);
TinyIP::ShowData(buf, len);
debug_printf(" \r\n");
}
void TestEthernet()
{
debug_printf("\r\n\r\n");
debug_printf("TestEthernet Start......\r\n");
spi = new Spi(SPI_3);
enc = new Enc28j60(spi);
tip = new TinyIP(enc);
tip->UseDHCP = true;
tip->Init();
tip->OnPing = OnPing;
tip->OnUdpReceived = OnUdpReceived;
tip->OnTcpAccepted = OnTcpAccepted;
tip->OnTcpDisconnected = OnTcpDisconnected;
tip->OnTcpReceived = OnTcpReceived;
debug_printf("\r\n TestEthernet Finish!\r\n");
}
芯片GD32F103VK/GD32F103VE/STM32F103VE
TinyIP类内部根据系统ID生成随机的MAC地址和初始IP地址192.168.0.x,IP最后一字节就是系统ID第一字节。
开启DHCP后,将会自动获取IP地址。
必须实现ARP协议,否则别人找不到你这个IP所对应的MAC,进而无法通信。
支持Ping/TCP/UDP多种必要事件挂载。
以太网所有功能全开,RTM下固件ROM大概9k。
End.
转石头大哥
SmartOS之以太网精简协议栈TinyIP的更多相关文章
- PROFINET如何实现实时性
平时我们都听过文艺作品要“源于生活而高于生活”.PROFINET是基于工业以太网的,用文艺范儿的词汇说就是“源于以太网而高于以太网”.那么,PROFINET是怎么做到“高于以太网”的呢? 要做到比普通 ...
- TCP/IP协议学习(四) 协议概述
生活中有舒适区,借口成为懒惰的护身符,学习也有舒适区,逃避便是阻止进步的最大障碍. 经过半年多嵌入式方面的工作和学习,我提高了很多,但同时我也对自己所面临的问题逐渐清晰: 1. 偏于实践,理论基础不牢 ...
- TCP/IP协议栈与数据报封装 (802.3 Ethernet 以太网 802.11 WLAN 无线网 )
http://blog.csdn.net/jnu_simba/article/details/8957242 一.ISO/OSI参考模型 OSI(open system interconnection ...
- TCP/IP协议栈与数据包封装+TCP与UDP区别
ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. T ...
- 以太网接口TCP/IP协议介绍,说的很容易懂了
以太网接口TCP/IP协议介绍,说的很容易懂了 TCP/IP协议,或称为TCP/IP协议栈,或互联网协议系列. TCP/IP协议栈(按TCP/IP参考模型划分) 应用层 FTP SMTP HTT ...
- 几种开放源码的TCP/IP协议栈比较
http://blog.chinaunix.net/uid-28785506-id-3828286.html 原文地址:几种开放源码的TCP/IP协议栈比较 作者:三点水兽 1.BSD TCP/IP协 ...
- 几个主流TCP/IP协议栈介绍
我们知道TCP IP协议栈内包括了诸多协议.那么对于这当中的协议的功能以及作用,我们来具体了解一下吧.现在让我们做一个盘点,帮助大家总结一下,还望对大家能够有所帮助. 1.BSD TCP IP协议栈 ...
- 【转】TCP/IP协议栈及OSI参考模型详解
OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...
- 理解 Linux 网络栈(1):Linux 网络协议栈简单总结
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...
随机推荐
- Spring MVC静态资源处理:<mvc:resources />
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
- linux rz sz的安装
可以使用yum来安装 yum -y install lrzsz 然后rz就是上传文件,sz就是把文件导到本地.sz 文件名 即可
- sql server 2005 使用Log Explorer查看和恢复数据
使用Log Explorer查看和恢复数据 Log Explorer 4.1.可用于SQL Server2005的日志查看工具 下载地址: http://download.csdn.net/ ...
- Unity 小知识
1.如何使物体颜色成2D效果 点开材质球的Shader属性,选择Unlit/Color 2.画布属性中的UI Scale Mode中可以设为 S W S S,这样屏幕大小缩放时,画布内的物体大小随之缩 ...
- DOM对象与Jquery对象转换
dom对象的样式是这么加的(js) .style.background = “red”; jquery对象样式是这么加的(jq) .css(“background”,”red”); <div i ...
- 智能指针 - 现代C++新特性总结
C++98中的智能指针通过一个模板类auto_ptr来实现,new操作符返回的指针可以交由它来管理,程序员不用再显式的调用delete,这在一定程度上避免了堆内存忘记释放的问题:不过auto_ptr有 ...
- 配置tomcat通过客户端访问
1:在tomcat conf/tomcat-users.xml 文件里 配置用户名和密码,以及访问方式 For example, to add the manager-gui role to ...
- C语言常用函数大全
一.数学函数 调用数学函数时,要求在源文件中包下以下命令行: #include <math.h> 函数原型说明 功能 返回值 说明 int abs( int x) 求整数x的绝对值 计算结 ...
- JS中“==”和“===”的原理和区别
1.为什么讨论这个问题? - 有个说法,尽量不用==,而使用===,是这样吗? 2.分析问题,原理是什么? 下面说说ECMAScript 5 language specification里的说明: 1 ...
- centos安装samba
yum -y install samba samba-client samba-swat /etc/init.d/smb start chkconfig --level 35 smb on cp -p ...