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