当前位置:网站首页>LLDP协议编写要点

LLDP协议编写要点

2022-06-10 18:55:00 buildroot

LLDP协议是一种标识交换机的协议,首先会想到交换机的名称,描述等,其实还有许多的内容,比如,端口的描述,ttl,管理ip,mac地址等。

抓取一个lldp报文,它的组成如下图所示

有目的地址(01:80:c2:00:00:0e)和源地址(00:26:f8:99:00:77),还有协议类型0x88cc

往下就是tlv了,比如Chassis subtype、port subtype、Time to Live(ttl)、port description等等

这些数据都是以字符的形式放入数组中的

一个一个地分析

一、目的地址是01:80:c2:00:00:0X形式,这个是管理帧,可以参考stp报文的目的地址,意思是可以通过block或discard状态的端口的报文,这类报文是会进入到cpu进行处理的。在开启一些环网协议后这些报文和普通的报文的处理方式不同。

二、源地址即交换机的地址,这个地址可以根据需要更改

三、TLV如下图所示

其中前面的几个是必须的数据,不过一般来说会将上图的所有的tlv写进代码里。当然只有在发送shutdown帧时会直接使用上面的几个。而且会将ttl=0,那样可以直接将该设备老化从而将其从交换机的lldp表中删除。

PS:在交换机连接PC电脑时,电脑也会发送lldp报文,但是它只有前面的几个内容。建议最好是编写识别这些报文的代码,然后取消掉这类的报文。在某些老旧的交换中发的报文也只会包含前面几个TLV建议和电脑的lldp报文一样让交换机丢弃。

TLV一般由三部分或四部分组成当然具体组成还是参考说明文档

一、四部分

 上图是在88cc后接的tlv

 它的类型是02,但是wireshark显示的是1,其实这个值是经过了左移了的,所以还原的时候需要右移一位2>>1=1,长度是07是指04-00-26-f8-99-00-77这7个数组值,子类型是04请参考lldp手册中的chassis子类型的类型值,其中4对应的就是mac地址,后面接的就是内容了,mac地址那么就是6个16进制的数组成的。它就是源mac地址。我们在发送和接收这个类型的时候可以用对应的函数在数组中一个一个的处理,注意此处的值是char型的数0对应的是ascii码的0值,所以将其变成字符或字符串形式进入传输或者打印复制的时候,要注意转换类型,比如同样是0,0是ascii码的第一个 BLANK NULL的非打印字符,而字符‘0’对应是值是48。

二、三部分

如上图所示其值的含义与上述有些不同,它是系统名称,没有子类型

 

第一个值是0x0a>>1=5即它的类型,第二个值代表长度为5,系统名称没有子类型。即后面的值是它的名称,这些值是16进制的,找到它们对应的ascii码,0x54,0x39,0x30,x034的十进制是84,57,48,48,52查下表可知即为T9004

报文的组成已经说完了,比较简单只需对应的位置编写即可

接下来是重点,即状态机,但是我讲得比较地简单,只说明最基本的形式,比如有只接收不发送的状态,只发送不接收状态、即接收又发送的状态、即不接收也不发送状态(关闭状态)等等就不区分了

我在网上找一个图,上面有什么初始化啊,什么发送状态啊,接收状态啊,状态改变时,空闲状态的处理啊,初学者可能一脸懵逼,这是啥,这咋写啊。其实不难。人家写的库函数不过是用#define的高级用法写的罢了。

不过最好还是自己看完人家的代码后感悟才是最大的。

新建一个线程。学过单片机的可以理解为一个while(1)的循环体,只不过在linux等操作系统中可以用实时性等操作可以有多个while(1)的程序在运行。这个while(1)有一个1s的延时,即每一秒运行一次该程序。

程序的核心1是ttl即存活时间,其实就是交换机中的老化时间。一旦时间到了,该设备会被表删除。

核心2是如果交换机的状态发生了变化状态机就会进入到另一个状态中,其实简单来说就一个switch语句,如果发生了变化就进入到另一个case中去了。比如在idle状态(即空闲状态)时将它关闭,交换机的lldp状态立马进入shutdown状态,即发送一个ttl=0的报文,对端交换机在收到这个报文后将其ttl置0那么它会立马老化,对端交换机将它从lldp设备表中删除

核心3是间隔发送时间,其实就是为了保持一直在对端交换机表中,防止老化,会每隔一段时间会自动发送lldp报文。这个报文传输时间应该小于间隔时间的1/4。这里有间隔时间,存活时间乘数,重初始化延时,传输延时等参数。有兴趣的话自行百度,这里不展开讨论。

核心4将这些信息与mib库联系起来,这里不展开讨论

原网站

版权声明
本文为[buildroot]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_29734297/article/details/125169284