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