LwIP Application Developers Manual5---高层协议之DHCP,AUTOIP,SNMP,PPP
1.前言
本文主要讲述高层协议,包括DHCP
2.DHCP
2.1 从应用的角度看DHCP
你必须确保在编译和链接时使能DHCP,可通过在文件lwipopts.h里面定义LWIP_DHCP选项,该选项会加入一个dhcp struct的指针到netif结构体里面。
dhcp_start()将会分配一个dhcp 结构体。另外,LWIP_UDP一定要设置为非零的数值,由于DHCP是一个运行在UDP上的协议。
使用DHCP的设置很简单,你只要在初始化完接口后调用函数
dhcp_start()
为了能更好的正确处理租赁协议,DHCP有一对相关的时间函数可以被调用。你只要在你的主循环里调用下面函数来处理所有协议的定时器。
sys_check_timeouts()
然后你可以检查你的接口的->dhcp->state是否等于DHCP_BOUND,来进行下一步的操作。
注:For LWIP 2.0 you need to call dhcp_supplied_address(const struct netif *netif) instead
如果你要经常处理网络的变动,比如,一个移动系统经常接入不同的网络和拔除,那么你要告知DHCP这一相关状态,这个一般使用dhcp_network_changed()函数。
然而,协议栈不仅要告知DHCP还要通知AUTOIP和IGMP该链接的改变,因此正确的调用如下所示:
netif_set_link_up(&mynetif); netif_set_link_down(&mynetif);
你需要绑定链接的变化到你的接口。如果你想要更多的了解,下面有更多的(可能是过时的)的信息:
为了在一个接口上使用DHCP,简单的使用如下命令:
- dhcp_start()-开始一个接口的DHCP配置
- dhcp_renew()-强制恢复先前的租赁(平常并不需要)
- dhcp_renew()-释放先前的DHCP租赁,经常在dhcp_stop前调用。
- dhcp_stop()-停止一个接口的DHCP的配置
- dhcp_inform()-告知服务器我们手动配置的IP地址
NOTE:这些是lwIP的内核函数,它们并没有并发访问的保护。在多线程环境中,它们只能被内核线程调用(tcpip-thread)。当被其它线程调用时,使用在api-module netifapi.c定义的函数netifapi_dhcp_*()。
有一个选项可以利用物理层协议的自动协商。当链接的状态发生改变时大多数物理层会产生中断(比如:一个有效的自动协商已经完成或者一个有线链接已经断开)。
这些物理层中断状态的改变主要由tcpip线程处理(比如使用tcpip_callback_with_block(HandlePhyInterrupt,NULL,0))。
在HandlePhyInterrupt中断里,如果连接刚建立,那么要调整一些必要的硬件寄存器来控制自动协商的速度,然后调用dhcp_start。
如果连接断开,那么首先先调用netfi_set_down。上面提到的其它dhcp函数可以不需要使用。
2.2 DHCP support history in lwIP
1.2
2.3 External references
- RFC 1531 "Dynamic Host Configuration Protocol" October 1993, obsoleted by RFC 1541
- RFC 1541 "Dynamic Host Configuration Protocol" October 1993, obsoleted by RFC 2131
- RFC 2131 "Dynamic Host Configuration Protocol" March 1997, updated by RFC 3396
- RFC 3396 "Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4)" November 2002
3. AUTOIP
像DHCP,AUTOIP是一个模块,当一个设备启动时可以使能动态IPv4地址的分发。
AUTOIP是一个不用服务器来获得IP地址方法的协议,而DHCP需要一个服务器。
一个配置了AUTOIP的主机将会得到一个前缀为169.254/16的IP地址(169.254.xxx.xxx)
3.1 从应用的角度看AUTOIP
在使能AUTOIP前,你要确保编译了AUTOIP。你可以在lwipopt.h文件中定义LWIP_AUTOIP,并且在使用前还要确定该模块已经被初始化(查看Initializing lwIP)。
为了在一个接口上使用AUTOIP,只要简单的使用如下命令:
- autoip_start()-通过一个新的IP地址打开接口
- autoip_stop()-关闭该接口
查看Network interfaces management.来获得更多关于打开和关闭接口的说明。
NOTE:这些是lwIP的内核函数。它们并没有并行访问保护。在多线程环境中,它们只能被内核线程调用(通过tcpip-thread)。当被其它线程调用时,请使用在api-module netifapi.c中定义的函数netifapi_auto_ip*() 。
3.2 外部参考链接
- RFC 3927 - Dynamic Configuration of IPv4 Link-Local Addresses
4. SNMP
4.1 从应用的角度看SNMP
4.2 内部参考
4.3 外部参考链接
- RFC 1155 Structure and Identification of Management Information for TCP/IP-based Internets
- RFC 1156 Management Information Base for Network Management of TCP/IP-based internets
- RFC 1157 A Simple Network Management Protocol (SNMP)
- RFC 1158 Management Information Base for Network Management of TCP/IP-based internets: MIB-II
5. PPP
5.1 从应用的角度看PPP
lwIP有2种方式使用PPP:1、PPPoE(PPP over Ethernet) 2、PPP-over-serial
lwIP支持在线程环境中运行,PPP是一个单独的任务与lwIP主线程一同运行;
lwIP也支持在一个主循环中运行,lwIP函数将被主循环调用。
5.2 PPP over serial
- With Task Support
Required callback function
- With no Task Support
- Example Task Application code
5.3. Debug Support
5.4PPP support history in lwIP
5.5 External references
LwIP Application Developers Manual5---高层协议之DHCP,AUTOIP,SNMP,PPP的更多相关文章
- LwIP Application Developers Manual5---高层协议之DNS
1.前言 lwIP提供一个基本的DNS客户端(1.3.0后引进),通过使用DNS(Domain Name System)协议来允许应用程序解决主机名到地址的转换. 在文件lwipopts.h里面定义L ...
- LwIP Application Developers Manual2---Protocols概览
1.前言 本文是对LwIP Application Developers Manual的翻译 lwIP是模块化的并支持广泛的协议,这些大部分协议可以被裁减从而减小代码的尺寸 2.协议概览 链路层和网络 ...
- LwIP Application Developers Manual1---介绍
1.前言 本文主要是对LwIP Application Developers Manual的翻译 2.读者(应用开发手册的读者) 谁适合读这份手册 网络应用的开发者 想了解lwIP的网络应用开发者 阅 ...
- LwIP Application Developers Manual3---链路层和网络层协议之ARP,IPV4
1.前言 本文主要讲述链路层和网络层的几种协议:ARP,ipv4 2. ARP 2.1 ARP的主要应用 ARP的主要应用是在与互联网相连的以太网网络层,该层需要一些机制将MAC地址(该地址主要由制造 ...
- LwIP Application Developers Manual6---Application API layers
1.前言 lwIP提供3种应用编程接口来跟TCP/IP内核通信,如下所示: 低水平的内核/回调或raw API 2个高水平序列API: 1) netconn API 2) socket API(为了兼 ...
- LwIP Application Developers Manual3---链路层和网络层协议之IPV6,ICMP,IGMP
1.前言 本文主要讲述链路层和网络层的协议IPV6,ICMP 2.IPV6 2.1 IPV6特性 IPv6是IPv4的更新.其最显著的差别在于地址空间由32位转换成128位 2.2 从应用的角度看IP ...
- LwIP Application Developers Manual9---LwIP and multithreading
1.前言 lwIP的内核并不是线程安全的.如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets).当使用raw API时,你需要自己保护 ...
- LwIP Application Developers Manual11---Initializing lwIP
1.前言 2.Initialization for simple lwIP 查看doc/rawapi.txt来获得更多官方信息 #if NO_SYS /* Network interface vari ...
- LwIP Application Developers Manual7---lwIP with or without an operating system
1.前言 最近有一些讨论关于lwIP如何在单机的环境(比如,没有一个多线程的操作系统)使用. 本文的目的就是描述lwIP如何在无多线程操作系统或有多线程操作系统环境中运行 2.lwIP单线程内核 2. ...
随机推荐
- ADC触摸屏
目录 ADC触摸屏 硬件原理 等效电路 测量逻辑 程序设计(一)获得ADC 寄存器初始化 中断初始化 ADC模式(中断.测量) 中断函数 程序设计(二)获得坐标 生产者与消费者 ADC获取 程序优化 ...
- MySQL8常见客户端和启动相关参数
MySQL8常见客户端和启动相关参数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL常见的客户端 1>.使用MySQL服务自带的mysql连接工具 2>. ...
- Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码
Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...
- 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题
#问题:客户端为ie或Firefox,服务端为asp.net时,下载文件名中包含中文汉字时,下载下来的文件的文件名是乱码: #解决方案: 示例代码:下载名称中带汉字的文件: public void P ...
- JAVA核心技术I---JAVA基础知识(static关键字)
一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...
- 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)
题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ...
- PHP7 学习笔记(十一)使用phpstudy快速配置一个虚拟主机
说明:为了windows本地开发php方便,这里推荐使用PHP集成环境phpstudy. 目的:使用域名访问项目(tinywan.test) 1.官网:http://www.phpstudy.net ...
- impala系列: 同步Hive元数据和收集统计信息
---====================-- Impala 获取hive 的 metadata ---====================Impala 通常和Hive共用同一个metadat ...
- IScroll在某些手机浏览器上不能滑动和卡顿解决办法
1.不能滑动,增加一句 if (scroll != null) scroll.refresh();2.卡顿,增加 <script>window.PointerEvent = undefin ...
- 三十七、Linux 线程——线程清理和控制函数、进程和线程启动方式比较、线程的状态转换
37.1 线程清理和控制函数 #include <pthread.h> void pthread_cleanup_push(void (* rtn)(void *), void *arg) ...