lldp
文章平均质量分 59
baidu20008
这个作者很懒,什么都没留下…
展开
-
openlldp-0.4alpha实现详解(二)
接下来,看看openlldp的源代码src目录:这其中,platform目录包含了各种不同平台收发报文和获取网络接口信息的接口,主要是bpf和linux的。tlv模块包含了lldpdu中报文的创建,验收,销毁等等工作。lldp_debug模块包含了调试信息打印接口。lldp_neighbor模块包含了获取系统信息以及提取lldp邻居信息接口。lldpneighbors模块为查看邻居原创 2013-12-13 11:20:22 · 3136 阅读 · 3 评论 -
openlldp-0.4alpha实现详解(五)——tx_sm模块
该模块主要是构建了要传输的lldp报文,以及发送状态机的运转。该处实现的bug之一,就是shutdown报文并没有构建正确。且当本地信息发生变化时,并不会将somethingchangelocal置一,这样当本端有变动时,无法将最新的信息尽快的发送给直连邻居。还有当收到一个新的邻居信息时,不会立即进行回应。同时当lldp协议被置为disable时,理应发送shutdown报文。但这里并没有提供在协原创 2014-02-21 17:33:09 · 2188 阅读 · 1 评论 -
openlldp-0.4alpha实现详解(七)——lldp_main,lldpneighbors模块
lldp_main.c模块调用之前的各个模块的接口,实现lldp功能。使用select进行套接字的复用,每个一秒运行一次端口发送和接收状态机。#ifdef BUILD_SERVICE// We are building as a service, so this should be our ServiceMain()int ServiceMain(int argc, char *arg原创 2014-02-24 11:10:47 · 3504 阅读 · 1 评论 -
openlldp-0.4alpha实现详解(六)——lldp_tlv、lldp_tlv_common、msap、lldp_neighbor模块
lldp_tlv主要是用来创建各种lldp报文所需的tlv,并提供验证。而lldp_tlv_common模块则是对于标准tlv进行修整。之前我们知道,lldp的tlv的type只有7个bit位,而length则有9个bit位,这样的结构对于程序的使用是十分不便的,故此进行转化。将7个bit位的type,转化为uint8_t。9bit的length转为为uint16_t的。 msa原创 2014-02-24 11:07:01 · 2537 阅读 · 1 评论 -
openlldp-0.4alpha实现详解(一)
LLDP协议由802.1ab所定义。它是一个二层协议,一般称之为数据链路发现协议。这里对于该协议的实现原理不做详细介绍。具体原理可以参见IEEE 802.1ab文档(http://www.ieee802.org/1/pages/802.1ab.html)。 OpenLLDP为802.1ab的开源实现,号称支持Linux,macOS,FreeBSD,NetBSD等众多类unix系原创 2013-12-13 11:14:37 · 4297 阅读 · 2 评论 -
openlldp-0.4alpha实现详解(三)——lldp_linux_framer模块
该主要数lldp报文的缓存和缓存报文的发送,以及一些原始套接字的创建和本地基本信息的获取。一些主要函数如下:int socketInitializeLLDP(struct lldp_port *lldp_port){ struct ifreq *ifr = calloc(1, sizeof(struct ifreq)); struct sockaddr_ll *sll = cal原创 2014-02-19 11:23:55 · 2649 阅读 · 0 评论 -
openlldp-0.4alpha实现详解(四)——rx_sm模块
该模块完成接收状态机的跳转以及接收帧所进行的相关处理。 lldp的接收状态机,参见lldp标准文档。该实现代码和标准文档基本一致,变量名和函数名都大部分相同。int rxProcessFrame(struct lldp_port *lldp_port) {……/*主要是验证报文的正确性:具体要验证报文的目的地址以及报文类型字段*//* As per section 1原创 2014-02-19 12:38:13 · 2489 阅读 · 0 评论