⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ospf_print_utilities.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 3 页
字号:
/* ospf_print_utilities.c *//* Copyright 2000-2002 Wind River Systems, Inc. */#include "copyright_wrs.h"/* modification history----------------------02b,11jun03,ram      SPR#88965 Separate route table and LSDB hash parameters02a,22apr03,ram	     SPR#76812 Modifications for OSPF performance enhancements01s,19nov02,mwv      Merge TMS code SPR 8428401r,09apr02,jkw      Sequence number wrap.01q,22sep01,kc       Removed references to port number.01p,26sep00,reshma   Added WindRiver CopyRight01o,25sep00,reshma   RFC-1587 implementation for OSPF NSSA Option, also tested against                      ANVL.01n,07jul00,reshma   Unix compatibility related changes.01m,04apr00,reshma   Added some MIB support (Read only).Passed all important ANVL OSPF                      tests.01l,23dec99,reshma   Compatibility with VxWorks-IP and VxWorks RTM-interface01k,28dec98,jack     Compiled and added some comments01j,11nov98,jack     Config changes, linted and big endian changes01i,30oct98,jack     Incorporate changes for compilation on Vxworks01h,23aug98,jack     ANVL tested OSPF with PATRICIA tree route table and no recursion01g,10aug98,jack     PATRICIA Route Table Based OSPF Code Base01f,04jun98,jack     Integration with RTM and BGP01e,24apr98,jack     RTM changes01d,10jul97,cindy    Pre-release v1.52b01c,02oct97,cindy    Release Version 1.5201b,22oct96,cindy    Release Version 1.5001a,05jun96,cindy    First Beta Release*//*DESCRIPTIONospf_print_utilities.c is used for printing OSPF packets, OSPF link state advertisements, andthe OSPF routing table.This file is used whenever OSPF data structures need to be displayed.*/#include "ospf.h"#if defined (__OSPF_VIRTUAL_STACK__)#include "ospf_vs_lib.h"#endif /* __OSPF_VIRTUAL_STACK__ */void ospf_print_next_hops (OSPF_NEXT_HOP_BLOCK* sptr_next_hop);/********************************************************************************************************************************/static char *cptr_packet_type[] = {"Unknown","Hello","Database Description","LS Request","LS Update","LS Acknowledgement"};static char *cptr_direction_string[] = {"Transmitted","Received"};static char *cptr_boolean_string[] = {"False","True"};#if defined (__OPAQUE_LSA__)static char *cptr_ls_type_string[] = {"Stub","Router","Network","Summary Network","Summary AS Boundary Router","AS External","Unknown", "NSSA", "Type 9", "Type 10", "Type 11", "Unknown"};#else /* __OPAQUE_LSA__ */static char *cptr_ls_type_string[] = {"Stub","Router","Network","Summary Network","Summary AS Boundary Router","AS External","Unknown"};#endif /* __OPAQUE_LSA__ */static char *cptr_destination_type_string[] = {"Network","ASBR","ABR","Virtual","ASE","Unknown"};static char *cptr_path_type_string[] = {"Intra","Inter","Type 1 External","Type 2 External","Unknown"};static char *cptr_authentication_type_string[] = {"None","Simple","MD5", "Unknown"};static char *cptr_route_node_or_next_hop_status[] = {"Not New", "New", "Not Available", "Dont Care", "Unknown"};#if defined (__OPAQUE_LSA__)static char *cptr_link_type[] = {"None","Router Link","Network Link","Summary Link","Summary ASBR Link","External Link","Dont Care Link", "NSSA Link", "Type 9 Link", "Type 10 Link", "Type 11 Link", "Unknown"};#else /* __OPAQUE_LSA__ */static char *cptr_link_type[] = {"None", "Router Link", "Network Link", "Summary Link", "Summary ASBR Link", "External Link", "Dont Care Link", "Unknown"};#endif /* __OPAQUE_LSA__ *//********************************************************************************************************************************/static void ospf_display_hello_packet (OSPF_HELLO_HEADER *sptr_hello_packet,USHORT length_of_packet);static void ospf_display_database_description_packet (OSPF_DATABASE_HEADER *sptr_database_packet,USHORT length_of_packet);static void ospf_display_ls_request_packet (OSPF_LS_REQUEST_HEADER *sptr_ls_request_packet,USHORT length_of_packet);static void ospf_display_ls_update_packet (OSPF_LS_UPDATE_HEADER *sptr_ls_update_packet);static void ospf_display_ls_header (OSPF_LS_HEADER *sptr_ls_header);static void ospf_display_router_links_advertisement (OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER *sptr_router_links_advertisement_header);static void ospf_display_network_links_advertisement (OSPF_NETWORK_LINK_ADVERTISEMENT_HEADER *sptr_network_links_advertisement_header);static void ospf_display_summary_links_advertisement (OSPF_SUMMARY_LINK_ADVERTISEMENT_HEADER *sptr_summary_links_advertisement_header);#if defined (__NSSA__)static void ospf_display_type_7_links_advertisement (OSPF_TYPE_7_LINK_ADVERTISEMENT_HEADER *sptr_type_7_links_advertisement_header);#endif /*__NSSA__*/static void ospf_display_external_links_advertisement (OSPF_EXTERNAL_LINK_ADVERTISEMENT_HEADER *sptr_external_links_advertisement_header);static void ospf_display_ls_acknowledgement_packet (OSPF_LS_ACKNOWLEDGEMENT_HEADER *sptr_ls_acknowledgement_packet,USHORT length_of_packet);/********************************************************************************************************************************/void ospf_display_packet (OSPF_PACKET *sptr_packet,enum BOOLEAN receive){	USHORT length;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_display_packet\r\n");	length = sptr_packet->header.length;	length = net_to_host_short (length);    ospf_display_ospf_header (&sptr_packet->header, receive);	switch (sptr_packet->header.type)		{		case OSPF_HELLO_PACKET:			ospf_display_hello_packet (&sptr_packet->header.rest_of_packet.hello, length);			break;		case OSPF_DATABASE_DESCRIPTION_PACKET:			ospf_display_database_description_packet (&sptr_packet->header.rest_of_packet.database, length);			break;		case OSPF_LINK_STATE_REQUEST_PACKET:			ospf_display_ls_request_packet (&sptr_packet->header.rest_of_packet.ls_request, length);			break;		case OSPF_LINK_STATE_UPDATE_PACKET:			ospf_display_ls_update_packet (&sptr_packet->header.rest_of_packet.ls_update);			break;		case OSPF_LINK_STATE_ACKNOWLEDGEMENT_PACKET:			ospf_display_ls_acknowledgement_packet (&sptr_packet->header.rest_of_packet.ls_acknowledgement, length);			break;		default:			*((ULONG *) 0x00000000L) = 0x00000000L;			break;		}	return;}/*******************************************************************************************************************************/void ospf_display_ospf_header (OSPF_HEADER *sptr_packet,enum BOOLEAN receive){	char print_buffer[PRINT_BUFFER_SIZE];	char print_buffer_1[PRINT_BUFFER_SIZE];	ULONG router_id;	USHORT length;	BYTE_ENUM (OSPF_UNION_PACKET_TYPES)	type;	USHORT authentication_type;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_display_ospf_header\r\n");	router_id = sptr_packet->router_id;	router_id = net_to_host_long (router_id);	OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer, router_id);	OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer_1, sptr_packet->area_id);	length = sptr_packet->length;	length = net_to_host_short (length);	type = sptr_packet->type;	if (type > OSPF_LINK_STATE_ACKNOWLEDGEMENT_PACKET)		{		type = 0x00;		}	authentication_type = net_to_host_short (sptr_packet->authentication_type);	/* Check for valid index for array string */	if ((type != OSPF_HELLO_PACKET) &&		(type != OSPF_DATABASE_DESCRIPTION_PACKET) &&		(type != OSPF_LINK_STATE_REQUEST_PACKET) &&		(type != OSPF_LINK_STATE_UPDATE_PACKET) &&		(type != OSPF_LINK_STATE_ACKNOWLEDGEMENT_PACKET))		{		OSPF_PRINTF_ALARM (OSPF_ALARM_PRINTF, "PACKET TYPE = %x\n", type);		type = OSPF_LINK_STATE_ACKNOWLEDGEMENT_PACKET + 1;		}	/* Check for valid index for array string */	if ((authentication_type != OSPF_AUTHENTICATION_NONE) &&		(authentication_type != OSPF_AUTHENTICATION_SIMPLE) &&		(authentication_type != OSPF_AUTHENTICATION_MD5))		{		OSPF_PRINTF_ALARM (OSPF_ALARM_PRINTF, "AUTHENTICATION TYPE = %x\n", authentication_type);		authentication_type = OSPF_AUTHENTICATION_MD5 + 1;		}    OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "OSPF: %s %s\r\n",                       cptr_packet_type[type], 	cptr_direction_string[receive]);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "      --- OSPF Packet Header ---\r\n");	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         version = %d, length = %d, router id = %s, area id = %s, checksum = %x\r\n",		sptr_packet->version, length, print_buffer, print_buffer_1, sptr_packet->checksum);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         authentication type = %s\r\n",		cptr_authentication_type_string[authentication_type]);	switch (authentication_type)		{		case OSPF_AUTHENTICATION_SIMPLE:			{			OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         simple key = %s \r\n",				sptr_packet->authentication_field.key_or_plain_text_passwd );			break;			}		case OSPF_AUTHENTICATION_MD5:			{			OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         md5 key ID = %d, data length = %d, cryptographic sequence number = %d\r\n",				sptr_packet->authentication_field.md5.key_ID, sptr_packet->authentication_field.md5.authentication_data_length,				sptr_packet->authentication_field.md5.cryptographic_sequence_number);			break;			}		default:			{			break;			}		}	return;}/*******************************************************************************************************************************/static void ospf_display_hello_packet (OSPF_HELLO_HEADER *sptr_hello_packet,USHORT length_of_packet){	char print_buffer[PRINT_BUFFER_SIZE];	char print_buffer_1[PRINT_BUFFER_SIZE];	ULONG *ulptr_neighbor;	ULONG neighbor;	ULONG size_of_neighbor_optional_fields;	ULONG network_mask;	USHORT hello_interval;	ULONG router_dead_interval;	ULONG designated_router;	ULONG backup_designated_router;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_display_hello_packet\r\n");	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "      --- Hello Packet Details ---\r\n");	network_mask = sptr_hello_packet->network_mask;	network_mask = net_to_host_long (network_mask);	OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer, network_mask);	hello_interval = sptr_hello_packet->hello_interval;	hello_interval = net_to_host_short (hello_interval);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         network mask = %s, hello interval = %d\r\n", print_buffer, hello_interval);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         Options:  type of service = %s, external routing capability = %s\r\n",		cptr_boolean_string[sptr_hello_packet->options._bit.tos], cptr_boolean_string[sptr_hello_packet->options._bit.externals]);	router_dead_interval = sptr_hello_packet->router_dead_interval;	router_dead_interval = net_to_host_long (router_dead_interval);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         router priority = %d, router dead interval = %d\r\n", sptr_hello_packet->router_priority,		router_dead_interval);	designated_router = sptr_hello_packet->designated_router;	designated_router = net_to_host_long (designated_router);	backup_designated_router = sptr_hello_packet->backup_designated_router;	backup_designated_router = net_to_host_long (backup_designated_router);	OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer, designated_router);	OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer_1, backup_designated_router);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         designated router = %s, backup designated router = %s\r\n", print_buffer, print_buffer_1);	ulptr_neighbor = &(sptr_hello_packet->backup_designated_router);	for (size_of_neighbor_optional_fields = (ULONG) length_of_packet - OSPF_PACKET_SIZE - OSPF_HELLO_HEADER_SIZE;		size_of_neighbor_optional_fields > 0x00000000L; size_of_neighbor_optional_fields -= sizeof (ULONG))		{		++ulptr_neighbor;		neighbor = *ulptr_neighbor;		neighbor = net_to_host_long (neighbor);		OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer, neighbor);		OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         neighbor = %s\r\n", print_buffer);		}	return;}/*******************************************************************************************************************************/static void ospf_display_database_description_packet (OSPF_DATABASE_HEADER *sptr_database_packet,USHORT length_of_packet){	seq_t sequence_number;	OSPF_LS_HEADER *sptr_ls_header;	ULONG size_of_database_optional_fields;	OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_display_database_description_packet\r\n");	sequence_number = sptr_database_packet->sequence;	sequence_number = net_to_host_long (sequence_number);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "      --- Database Packet Details ---\r\n");	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         Options:  type of service = %s, external routing capability = %s\r\n",		cptr_boolean_string[sptr_database_packet->options._bit.tos], cptr_boolean_string[sptr_database_packet->options._bit.externals]);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         Flags:  Init = %s, More = %s, Master = %s\r\n",		cptr_boolean_string[sptr_database_packet->flags._bit.initialize], cptr_boolean_string[sptr_database_packet->flags._bit.more],		cptr_boolean_string[sptr_database_packet->flags._bit.master]);	OSPF_PRINTF_PACKET (OSPF_PACKET_PRINTF, "         sequence number = %u\r\n", sequence_number);	sptr_ls_header = &(sptr_database_packet->link_state_advertisement_header);	for (size_of_database_optional_fields = (ULONG) length_of_packet - OSPF_PACKET_SIZE - OSPF_DATABASE_HEADER_SIZE;		size_of_database_optional_fields > 0x00000000L; size_of_database_optional_fields -= OSPF_DB_PIECE_SIZE)		{		ospf_display_ls_header (sptr_ls_header);		sptr_ls_header = (OSPF_LS_HEADER *) ((ULONG) sptr_ls_header + OSPF_DB_PIECE_SIZE);		}	return;}/*******************************************************************************************************************************/static void ospf_display_ls_request_packet (OSPF_LS_REQUEST_HEADER *sptr_ls_request_packet,USHORT length_of_packet){	char print_buffer[PRINT_BUFFER_SIZE];	char print_buffer_1[PRINT_BUFFER_SIZE];	OSPF_LS_REQUESTED_ADVERTISEMENT *sptr_ls_requested_advertisement;	ULONG size_of_requested_advertisement_optional_fields;	ULONG link_state_id;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -