openlldp-0.4alpha实现详解(六)——lldp_tlv、lldp_tlv_common、msap、lldp_neighbor模块
来源:互联网 发布:alphago软件 编辑:程序博客网 时间:2024/04/29 14:24
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的。
msap模块
该模块主要负责邻居信息的更新和插入以及创建。
lldp_neighbor.c模块
该模块主要是获取系统信息,并将该主机上所存储的所有邻居信息整合在一个字符串中。
/*同一台主机上存储的邻居信息,之后通过unix套接字将这些信息输出到文件中或是屏幕中*/char *lldp_neighbor_information(struct lldp_port *lldp_ports) { struct lldp_port *lldp_port = lldp_ports; struct lldp_msap *msap_cache = NULL; struct lldp_tlv_list *tlv_list = NULL; int neighbor_count = 0; char *result = malloc(2048); char *buffer = malloc(2048); char *info_buffer = malloc(2048); char *tmp_buffer = malloc(2048); char *tlv_name = NULL; char *tlv_subtype = NULL; memset(result, 0x0, 2048); memset(buffer, 0x0, 2048); memset(info_buffer, 0x0, 2048); memset(tmp_buffer, 0x0, 2048); sprintf(result, "\nOpenLLDP Neighbor Info: \n\n"); while(lldp_port != NULL) { neighbor_count = 0; memset(buffer, 0x0, 2048); memset(info_buffer, 0x0, 2048); memset(tmp_buffer, 0x0, 2048); sprintf(buffer, "Interface '%s' has ", lldp_port->if_name); strncat(result, buffer, 2048); msap_cache = lldp_port->msap_cache; while(msap_cache != NULL) { neighbor_count++; tlv_list = msap_cache->tlv_list; sprintf(tmp_buffer, "Neighbor %d:\n", neighbor_count); strncat(info_buffer, tmp_buffer, 2048); memset(tmp_buffer, 0x0, 2048); while(tlv_list != NULL) { memset(tmp_buffer, 0x0, 2048);if(tlv_list->tlv != NULL) { tlv_name = tlv_typetoname(tlv_list->tlv->type); if(tlv_name != NULL) { sprintf(tmp_buffer, "\t%s: ", tlv_name); strncat(info_buffer, tmp_buffer, 2048); //free(tlv_name); //tlv_name = NULL; memset(tmp_buffer, 0x0, 2048); tlv_subtype = decode_tlv_subtype(tlv_list->tlv); if(tlv_subtype != NULL) { sprintf(tmp_buffer, "\t%s\n", tlv_subtype); strncat(info_buffer, tmp_buffer, 2048); memset(tmp_buffer, 0x0, 2048); free(tlv_subtype); tlv_subtype = NULL; } } else { sprintf(tmp_buffer, "\t\tUnknown TLV Type (%d)\n", tlv_list->tlv->type); strncat(info_buffer, tmp_buffer, 2048); } } else { debug_printf(DEBUG_NORMAL, "Yikes... NULL TLV in MSAP cache!\n");}tlv_list = tlv_list->next; } strncat(info_buffer, "\n", 2048); msap_cache = msap_cache->next; } memset(buffer, 0x0, 2048); sprintf(buffer, "%d LLDP Neighbors: \n\n", neighbor_count); strncat(result, buffer, 2048); strncat(result, info_buffer, 2048); lldp_port = lldp_port->next; } free(tmp_buffer); free(info_buffer); free(buffer); return(result);}本人享有博客文章的版权,转载请标明出处http://blog.csdn.net/baidu20008
0 0
- openlldp-0.4alpha实现详解(六)——lldp_tlv、lldp_tlv_common、msap、lldp_neighbor模块
- openlldp-0.4alpha实现详解(三)——lldp_linux_framer模块
- openlldp-0.4alpha实现详解(四)——rx_sm模块
- openlldp-0.4alpha实现详解(五)——tx_sm模块
- openlldp-0.4alpha实现详解(七)——lldp_main,lldpneighbors模块
- openlldp-0.4alpha实现详解(一)
- openlldp-0.4alpha实现详解(二)
- dubbo 源码学习笔记 (六) —— 集群模块
- Python学习(六)模块 —— 包
- python基础学习六——模块
- animation的基本实现——Scale、Rotate、alpha、translate
- android动画—alpha
- Spring—模块详解
- Android补间动画效果translate、scale、alpha、rotate详解(带源码)XML实现
- OpenCV(六) Opencv中 core 核心模块详解——访问图像像素的几种方法
- Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
- Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
- Animation 动画对应的XML详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
- Lua脚本在C++下的舞步(入门指引)(转)
- 陈一舟接下来的路该怎么走?丁磊或是学习的榜样
- 2013年阿里算法笔试题解题报告
- 最少操作次数使两个字符串相等
- Lua 中 userdata 的反向映射
- openlldp-0.4alpha实现详解(六)——lldp_tlv、lldp_tlv_common、msap、lldp_neighbor模块
- UIWindow和UIScreen讲解
- Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法与解析
- ASIHTTPRequest加载web请求
- iOS 真机调试
- ios如何判断当前网络的运营商
- 网卡驱动9-linux内核3.0.8的mdio_bus\phy_device\phy_driver
- 有道云笔记导入到印象笔记无法同步的问题解决
- 1588分析和实现总纲