📄 ospf_show_lsdb.c
字号:
/* ospf_show_lsdb.c - OSPF display link state database *//* Copyright 2000-2003 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history-------------------- 02i,17jul03,agi Fixed compilation with __OPAQUE_LSA__ flag turned on Updated copyright02h,30may03,asr Renamed route_proto to route_protocol02g,09may03,kc Fixed SPR#88389 - displays routeProtoId for AS External LSDB.02f,27may03,agi changed rw_container to ospf_container02e,14may03,agi changed RWOS semaphores to vxWorks semaphores02d,22apr03,ram SPR#76812 Modifications for OSPF performance enhancements02c,17feb03,ram SPR 85893 Modified changes to ospfShowExternalLsdb.02d,29jan03,mwv SPR 85893 - ospfShow-Lsdb commands igone delete pending flag for external LSA's02c,06jan03,ram SPR 85432 Changes to allow more OSPF external route processing02b,19nov02,mwv Merge TMS code SPR 8428402a,08oct02,agi Fixed compiler warnings01f,25apr02,jkw Add more detail for displaying lsdb and change hex to decimal for metric display01e,19apr02,jkw Fix memory leak for external lsas.01d,16apr02,jkw One copy of external and type 11 lsa01c,09jan02,jkw Add area for external link state advertisements.01b,13aug01,kc Fixed compiler warnings.01a,23jul01,jkw Added new show routines based on lsa_type, lsa_id, and advertising router*//*DESCRIPTIONospf_show_lsdb.c is used for displaying the link state database.This file is used whenever the link state database needs to be displayed.*/#include "ospf.h"#if defined (__OSPF_VIRTUAL_STACK__)#include "ospf_vs_lib.h"#endif /* __OSPF_VIRTUAL_STACK__ *//* prototypes */static void ospf_print_number_of_router_lsas(ULONG number_of_lsas);static void ospf_print_number_of_network_lsas(ULONG number_of_lsas);static void ospf_print_number_of_network_summary_lsas(ULONG number_of_lsas);static void ospf_print_number_of_asbr_summary_lsas(ULONG number_of_lsas);#if defined (__NSSA__)static void ospf_print_number_of_type_7_lsas(ULONG number_of_lsas);#endif /* __NSSA__ */#if defined (__OPAQUE_LSA__)static void ospf_print_number_of_type_9_lsas(ULONG number_of_lsas);static void ospf_print_number_of_type_10_lsas(ULONG number_of_lsas);#endif /* __OPAQUE_LSA__ */static void ospf_print_number_of_external_lsas(ULONG number_of_lsas);#if defined (__OPAQUE_LSA__)static void ospf_print_number_of_type_11_lsas(ULONG number_of_lsas);#endif /* __OPAQUE_LSA__ */static void ospf_print_total_number_of_lsas(ULONG number_of_lsas);static void ospf_print_router_lsa_bytes(ULONG number_of_bytes);static void ospf_print_network_lsa_bytes(ULONG number_of_bytes);static void ospf_print_network_summary_lsa_bytes(ULONG number_of_bytes);static void ospf_print_asbr_summary_lsa_bytes(ULONG number_of_bytes);#if defined (__NSSA__)static void ospf_print_type_7_lsa_bytes(ULONG number_of_bytes);#endif /* __NSSA__ */#if defined (__OPAQUE_LSA__)static void ospf_print_type_9_lsa_bytes(ULONG number_of_bytes);static void ospf_print_type_10_lsa_bytes(ULONG number_of_bytes);#endif /* __OPAQUE_LSA__ */static void ospf_print_external_lsa_bytes(ULONG number_of_bytes);#if defined (__OPAQUE_LSA__)static void ospf_print_type_11_lsa_bytes(ULONG number_of_bytes);#endif /* __OPAQUE_LSA__ */static void ospf_print_total_lsa_bytes(ULONG number_of_bytes);static void ospf_print_ls_router_id();static void ospf_print_ls_age(USHORT ls_age);static void ospf_print_ls_options();static void ospf_print_ls_options_for_router(OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER *sptr_router);static void ospf_print_ls_type(BYTE_ENUM (OSPF_LS_TYPE) type);static void ospf_print_ls_id(ULONG ls_id);static void ospf_print_ls_advertising_router(ULONG ls_advertising_router);static void ospf_print_ls_sequence_number(seq_t ls_sequence_number);static void ospf_print_ls_checksum(USHORT ls_checksum);static void ospf_print_ls_length(USHORT ls_length);static void ospf_print_ls_number_of_links(USHORT number_of_links);static void ospf_print_ls_router_area_id(ULONG ls_area_id);static void ospf_print_ls_router_links(USHORT ls_number_of_links, OSPF_ROUTER_LINK_PIECE *link);static void ospf_print_ls_network_mask(ULONG ls_network_mask);static void ospf_print_ls_network_area_id(ULONG ls_area_id);static void ospf_print_ls_network_links (OSPF_NETWORK_LINK_ADVERTISEMENT_HEADER *sptr_network_links_advertisement_header);static void ospf_print_ls_summary_area_id(ULONG ls_area_id);static void ospf_print_ls_summary_tos0_metric(ULONG ls_metric);static void ospf_print_ls_asbr_summary_area_id(ULONG ls_area_id);static void ospf_print_ls_external_link(OSPF_EXTERNAL_LINK_ADVERTISEMENT_HEADER *external_link);#if defined (__NSSA__)static void ospf_print_ls_type_7_link(OSPF_TYPE_7_LINK_ADVERTISEMENT_HEADER *type_7_link);#endif/* opaque lsa print opaque lsa prototype jkw */#if defined (__OPAQUE_LSA__)static void ospf_print_ls_opaque_id(OSPF_LS_ID ls_id);#endif /* __OPAQUE_LSA__ */STATUS ospfShowLsdb() { OSPF_AREA_ENTRY *sptr_area = ospf.sptr_area_list; OSPF_LS_DATABASE_HEAD *sptr_ls_database_head = NULL; OSPF_LS_DATABASE_ENTRY *sptr_database_entry = NULL; OSPF_LS_DATABASE_ENTRY *sptr_next_database_entry = NULL;#if defined (__OPAQUE_LSA__) UNION_OSPF_LS_ID ospf_lsid;#endif /* __OPAQUE_LSA__ */ ULONG index; USHORT number_of_links; ULONG number_of_router_lsas = 0x00000000; ULONG number_of_network_lsas = 0x00000000; ULONG number_of_network_summary_lsas = 0x00000000; ULONG number_of_asbr_summary_lsas = 0x00000000;#if defined (__NSSA__) ULONG number_of_type_7_lsas = 0x00000000;#endif /* __NSSA__ */#if defined (__OPAQUE_LSA__) ULONG number_of_type_9_lsas = 0x00000000; ULONG number_of_type_10_lsas = 0x00000000;#endif /* __OPAQUE_LSA__ */ ULONG number_of_external_lsas = 0x00000000;#if defined (__OPAQUE_LSA__) ULONG number_of_type_11_lsas = 0x00000000;#endif /* __OPAQUE_LSA__ */ /* SPR 85432 -- Begin */ OSPF_LS_DATABASE_ENTRY *sptr_display_route = NULL; OSPF_LS_DATABASE_ENTRY *sptr_display_route_output = NULL; OSPF_CONTAINER_ITERATOR iterator; /* SPR 85432 -- End */ OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_show_lsdb\r\n"); semTake (ospf_global_mutex, WAIT_FOREVER); while (sptr_area != NULL) { for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_ROUTER][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_ROUTER][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_router != NULL ) { ospf_print_ls_router_id(); ospf_print_ls_router_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_router->ls_header.age); ospf_print_ls_id(sptr_database_entry->advertisement.sptr_router->ls_header.id); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_router->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_router->ls_header.checksum); number_of_links = sptr_database_entry->advertisement.sptr_router->number_of_links; number_of_links = net_to_host_short (number_of_links); ospf_print_ls_number_of_links(number_of_links); printf("=====================================================================\r\n"); number_of_router_lsas++; } } } for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_NETWORK][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_NETWORK][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_network != NULL ) { ospf_print_ls_network_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_network->ls_header.age); ospf_print_ls_id(sptr_database_entry->advertisement.sptr_network->ls_header.id); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_network->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_network->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_network->ls_header.checksum); printf("=====================================================================\r\n"); number_of_network_lsas++; } } } for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_SUMMARY_NETWORK][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_SUMMARY_NETWORK][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_summary != NULL ) { ospf_print_ls_summary_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_summary->ls_header.age); ospf_print_ls_id(sptr_database_entry->advertisement.sptr_summary->ls_header.id); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_summary->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_summary->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_summary->ls_header.checksum); printf("=====================================================================\r\n"); number_of_network_summary_lsas++; } } } for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_SUMMARY_AS_BOUNDARY_ROUTER][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_SUMMARY_AS_BOUNDARY_ROUTER][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_summary != NULL ) { ospf_print_ls_asbr_summary_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_summary->ls_header.age); ospf_print_ls_id(sptr_database_entry->advertisement.sptr_summary->ls_header.id); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_summary->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_summary->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_summary->ls_header.checksum); printf("=====================================================================\r\n"); number_of_asbr_summary_lsas++; } } }#if defined (__NSSA__) for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_TYPE_7][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->ls_database_hash_table[OSPF_LS_TYPE_7][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_type_7 != NULL ) { ospf_print_ls_age(sptr_database_entry->advertisement.sptr_type_7->ls_header.age); ospf_print_ls_id(sptr_database_entry->advertisement.sptr_type_7->ls_header.id); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_type_7->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_type_7->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_type_7->ls_header.checksum); printf("=====================================================================\r\n"); number_of_type_7_lsas++; } } }#endif /* __NSSA__ */ /* opaque lsa show routines for opaque lsa jkw */#if defined (__OPAQUE_LSA__) for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_9_LSA][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_9_LSA][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_type_9 != NULL ) { ospf_print_ls_router_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_type_9->ls_header.age); ospf_lsid.lsid = sptr_database_entry->advertisement.sptr_type_9->ls_header.id.lsid; ospf_lsid.lsid = net_to_host_long(ospf_lsid.lsid); ospf_print_ls_opaque_id(ospf_lsid.opaque_lsid); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_type_9->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_type_9->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_type_9->ls_header.checksum); printf("=====================================================================\r\n"); number_of_type_9_lsas++; } } } for (index = 0x00000000L, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_10_LSA][index]); /* for each hash list */ index < OSPF_HASH_TABLE_SIZE; ++index, sptr_ls_database_head = &(sptr_area->opaque_ls_database_hash_table[TYPE_10_LSA][index])) { /* SPR#76812 */ for (sptr_database_entry = sptr_ls_database_head->sptr_linear_database_entry; sptr_database_entry != NULL; sptr_database_entry = sptr_next_database_entry) { sptr_next_database_entry = sptr_database_entry->sptr_forward_link; if ( sptr_database_entry->advertisement.sptr_type_10 != NULL ) { ospf_print_ls_router_area_id(sptr_area->area_id); ospf_print_ls_age(sptr_database_entry->advertisement.sptr_type_10->ls_header.age); ospf_lsid.lsid = sptr_database_entry->advertisement.sptr_type_10->ls_header.id.lsid; ospf_lsid.lsid = net_to_host_long(ospf_lsid.lsid); ospf_print_ls_opaque_id(ospf_lsid.opaque_lsid); ospf_print_ls_advertising_router(sptr_database_entry->advertisement.sptr_type_10->ls_header.advertising_router); ospf_print_ls_sequence_number(sptr_database_entry->advertisement.sptr_type_10->ls_header.sequence_number); ospf_print_ls_checksum(sptr_database_entry->advertisement.sptr_type_10->ls_header.checksum); printf("=====================================================================\r\n"); number_of_type_10_lsas++; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -