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

📄 ospf_link_state_advertisements.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
/* ospf_link_state_advertisements.c *//* Copyright 2000-2003 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------03w,11sep03,kkz    Fixed compiler warning for sfgnu03v,22jul03,agi    Fixed compiler warning03u,11jun03,ram    SPR#88965 Separate route table and LSDB hash parameters03t,09june03,htm   Fix for SPR# 87382, ANVL 4.203s,26may03,agi    Changed rwos_get_system_elapsed_time_second() to                   ospf_get_system_elapsed_time_second()03s,12may03,asr    Changes to make OSPF virtual stack compatible.03r,22may03,kkz    SPR 88613  Area Aggregation                    - section 12.4.3, final item - ignore backbone configured                   area address ranges when originating sumary LSAs into transit                   areas                   - added 2 new functions for handling area address range                   changes                   -  use "active" flag for address ranges, to track                   active links                   fix to ospf_originate_a_single_summary_links_advertisement ()03q,27may03,kc     Fixed SPR#86625 - added prematurely_age_advertisement                   argument to                   ospf_originate_default_summary_link_into_the_area().03p,21may03,htm    Fixed SPR 86153 - Commented usage of                   source_area_id_for_virtual_link() since the concept of source                   area is not mentioned in RFC 2328.03o,14may03,agi    Changed RWOS semaphores to vxWorks semaphores03n,15may03,ram    SPR#88410 Fix for setting external LSDB route_proto to zero after refresh03m,14may03,ram    SPR#88431 Fix for infinite loop in install and flood external routes03l,22apr03,ram    SPR#76812 Modifications for OSPF performance enhancements03k,22apr03,ram    SPR#87522 Modifications for correct redistribution of external routes03j,20feb03,kc     Fixed SPR#86319 - renamed the inject_default_route_if_stub_area                   variable to inject_summary_lsa_into_stub_area in                   ospf_originate_a_single_summary_links_advertisement().03i,19feb03,mwv    SPR 85906 - include IP header size into computation for LSA buffer creation.03h,17feb02,ram    SPR 81808 Added OSPF memory partition support03g,11feb03,kkz    SPR 76419, ANVL 27.3103f,28jan03,ram    SPR 85050 Added support for external route redistribution based on                   OSPF external metric values03e,22jan03,kkz    Fixed SPR#85856 - crash in ospf_install_and_flood_originated_advertisement0cd,16jan03,smr    SPR 78250 Changes to pass UNH 3.21 test.03c,06jan03,ram    SPR 85432 Changes to allow more OSPF external route processing03b,24dec02,dsk    Fixed SPR#75194, ANVL 27.1502c,09dec02,hme    Fixed SPR#75796, ANVL 37.1Sequence Number wrap is not                   happening smoothly.02q,18sep02,agi    Propogated latest fix02p,18jul02,jkw    Fix SPR 72230 and 7213502o,05jun02,kc     Fixed ospf_originate_external_links_advertisement() so that                   it will not originate any non-default AS-external-LSAs if                   in overflow state.02n,28jun02,jkw    Fix SPR 77140.02m,22apr02,ark    Added in fixes for virtual links02l,18apr02,kc     Don't originate any router links advertisement if there is                   no active interface in that area.02k,19apr02,jkw    Fix memory leak for external lsas.02j,16apr02,jkw    One copy of external and type 11 lsa02i,09apr02,jkw    Sequence number wrap.02h,04mar02,bt     Fix metric cost for address range02g,07feb02,jkw    Fix forwarding address for external lsa02f,20dec01,jkw    Removed sptr_area->sptr_interfaces structure.02e,10dec01,kc     Explicitly initialize opaque_interface pointer in                   ospf_originate_type_9_links_advertisement()02d,28nov01,jkw    Virtual link update fixes.02c,15nov01,jkw    Virtual link updates02b,09nov01,jkw    Fix null pointer check.02a,13oct01,kc     Dynamic configuration changes.01z,13oct01,br     Update virtual links code01y,11oct01,jkw    Set pointer to NULL after table_free.01x,03sep01,jkw    Added Mistral changes for 2178 updates.01w,22aug01,jkw    Added more support for opaque lsas.01v,20jun01,jkw    Added unnumbered link support01u,03may01,jkw    Added checks for NULL pointers and alarm messages01t,26sep00,reshma Added WindRiver CopyRight01s,25sep00,reshma RFC-1587 implementation for OSPF NSSA Option, also tested against ANVL.01r,07jul00,reshma Unix compatibility related changes.01q,04apr00,reshma Added some MIB support (Read only).Passed all important ANVL OSPF tests.01p,23dec99,reshma Compatibility with VxWorks-IP and VxWorks RTM-interface01o,18jan99,jack   fix in area range summarizations01n,06jan99,jack   Added another NULL pointer check in                   ospf_build_a_router_link_advertisement on sptr_interface->sptr_neighbor01m,06jan99,jack   Added NULL pointer check in ospf_build_a_router_link_advertisement on                   sptr_interface->sptr_neighbor01l,05jan99,jack   Updated a comment in the function                   ospf_build_a_router_link_advertisement01k,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_link_state_advertisements.c is used for originating link stateadvertisements.  This file is used for retrieving link state advertisements.This file is used whenever a link state advertisement needs to be created.*/#include "ospf.h"#include <time.h>#if defined (__OSPF_VIRTUAL_STACK__)#include "ospf_vs_lib.h"#endif /* __OSPF_VIRTUAL_STACK__ *//******************************************************************************/static enum BOOLEAN ospf_check_if_area_is_a_transit_area (OSPF_AREA_ENTRY *sptr_area);static OSPF_ROUTER_LINK_PIECE *ospf_add_a_link_description_to_the_router_advertisement (OSPF_ROUTER_LINK_PIECE *sptr_link,    ULONG link_id,ULONG link_data,BYTE_ENUM (OSPF_ROUTER_LINK_TYPE) type,BYTE number_of_metrics,USHORT tos0_metric,    USHORT *sptr_number_of_links,USHORT *sptr_length);static enum TEST ospf_check_if_next_hops_belong_to_the_area (OSPF_NEXT_HOP_BLOCK *sptr_next_hops_list_head,OSPF_AREA_ENTRY *sptr_area);static void ospf_generate_a_type_4_link_state_advertisement (OSPF_AREA_ENTRY *sptr_area,OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry,    enum BOOLEAN prematurely_age_advertisement);static void ospf_generate_a_type_3_link_state_advertisement (OSPF_AREA_ENTRY *sptr_area,OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry,    enum BOOLEAN prematurely_age_advertisement);static void ospf_generate_a_type_3_intra_area_link_state_advertisement (OSPF_AREA_ENTRY *sptr_area,ULONG network,ULONG mask,ULONG cost,    enum BOOLEAN prematurely_age_advertisement);static void ospf_build_a_router_link_advertisement (OSPF_AREA_ENTRY *sptr_area, OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER   *sptr_router_link_advertisement, USHORT *sptr_length);static void ospf_install_and_flood_originated_advertisement (UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement, OSPF_LS_DATABASE_ENTRY *sptr_database_entry, USHORT length,    OSPF_AREA_ENTRY *sptr_area);static void ospf_install_and_flood_external_advertisements_through_all_area (OSPF_EXTERNAL_ROUTE *sptr_external_route, UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement, OSPF_EXTERNAL_LINK_ADVERTISEMENT_HEADER *sptr_external_link_advertisement,    USHORT length);static void *create_buffer_for_lsa (OSPF_INTERFACE *sptr_interface, USHORT *usptr_allocated_size_for_lsa);/* SPR 78250 Start */static STATUS ospfAssignLinkStateIDs (UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement, OSPF_EXTERNAL_ROUTE *sptr_external_route, OSPF_LS_DATABASE_ENTRY *sptr_database_entry);/* SPR 78250 End *//* SPR 85050 -- Begin */static void ospf_check_for_replacement_external_route_to_same_destination(OSPF_EXTERNAL_ROUTE *sptr_external_route);/* SPR 85050 -- End *//*opaque lsa prototype jkw*/#if defined (__OPAQUE_LSA__)static void ospf_install_and_flood_type_11_advertisements_through_all_area (OSPF_INTERFACE *sptr_interface, UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement,    OSPF_TYPE_11_LINK_ADVERTISEMENT_HEADER *sptr_type_11_link_advertisement, USHORT length);#endif /* __OPAQUE_LSA__ */extern BOOLEAN ospf_verify_if_route_is_old(OSPF_ROUTING_TABLE_ENTRY *sptr_routing_table_entry);/******************************************************************************//* section 12.4 (page 114) */void ospf_originate_new_instance_of_the_link_state_advertisement (OSPF_LS_DATABASE_ENTRY *sptr_database_entry,OSPF_AREA_ENTRY *sptr_area, enum BOOLEAN first_pass_external){    OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER *sptr_new_router_link_advertisement;    UNION_OSPF_LINK_STATE_ADVERTISEMENT *sptr_advertisement;    seq_t sequence_number;    USHORT length;    enum TEST different_lsa;#if defined (__OPAQUE_LSA__)    OSPF_TYPE_9_LINK_ADVERTISEMENT_HEADER *sptr_type_9_link_advertisement = NULL;    OSPF_TYPE_10_LINK_ADVERTISEMENT_HEADER *sptr_type_10_link_advertisement = NULL;    OSPF_TYPE_11_LINK_ADVERTISEMENT_HEADER *sptr_type_11_link_advertisement = NULL;    OSPF_LS_OPAQUE_HEADER *opaque_lsa = NULL;    USHORT opaque_lsa_size = 0x0000;    USHORT opaque_ls_header_size = 0x0000;    OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER *sptr_old_router_link_advertisement = NULL;    USHORT checksum = 0x0000;    USHORT data_size = 0x0000;#endif /* __OPAQUE_LSA__ */    /* HME Fix SPR#75796, ANVL 37.1 Begin */    ULONG lock_time_MinLSInterval = 0;    /* HME Fix SPR#75796, ANVL 37.1 End */    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_originate_new_instance_of_the_link_state_advertisement\r\n");    sequence_number = sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number;    sequence_number = net_to_host_long (sequence_number);    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "------------------------>>>>>>>>>>>>>>>>??????? NEW ospf_link_state_advertisements: In Fn ospf_originate_new_instance_of_the_link_state_advertisement \r\n");    if ((sequence_number == OSPFMAXLSSEQ) &&        ((sptr_database_entry->ls_database_sequence_state == OSPF_NORMAL) ||        (sptr_database_entry->ls_database_sequence_state == OSPF_WAITING_FOR_MAXIMUM_SEQUENCE_INSTANCE_TO_BE_FLUSHED)))        {        /* section 12.1.6 (page 109-110) */        sptr_database_entry->advertisement.sptr_router->ls_header.age = OSPF_MAXIMUM_AGE;        sptr_database_entry->advertisement.sptr_router->ls_header.age =            host_to_net_short (sptr_database_entry->advertisement.sptr_router->ls_header.age);        (void) ospf_flood_advertisement_out_some_subset_of_the_routers_interfaces (sptr_database_entry->advertisement.sptr_router, sptr_area,            NULL, NULL, TRUE);        sptr_database_entry->ls_database_sequence_state = OSPF_WAITING_FOR_MAXIMUM_SEQUENCE_INSTANCE_TO_BE_FLUSHED;        return;        }    else        {        length = sptr_database_entry->advertisement.sptr_router->ls_header.length;        length = net_to_host_short (length);        sptr_new_router_link_advertisement = (OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER *) table_malloc (1, length);        if (sptr_new_router_link_advertisement == NULL)            {            ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) NULL, "OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER");            return;            }        else            {            memset (sptr_new_router_link_advertisement, 0x0, length);            }#if defined (__OPAQUE_LSA__)        if (sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_TYPE_9)            {            sptr_type_9_link_advertisement = (OSPF_TYPE_9_LINK_ADVERTISEMENT_HEADER *)sptr_new_router_link_advertisement;            /* save the interface to which this opaque is going to send to */            sptr_type_9_link_advertisement->opaque_interface = sptr_database_entry->advertisement.sptr_type_9->opaque_interface;            sptr_type_9_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                sptr_database_entry->advertisement.sptr_type_9->ls_header.sequence_number);            sptr_type_9_link_advertisement->ls_header.age = 0x0000;            sptr_type_9_link_advertisement->ls_header.options._byte = sptr_database_entry->advertisement.sptr_type_9->ls_header.options._byte;            sptr_type_9_link_advertisement->ls_header.type = sptr_database_entry->advertisement.sptr_type_9->ls_header.type;            sptr_type_9_link_advertisement->ls_header.id.lsid = sptr_database_entry->advertisement.sptr_type_9->ls_header.id.lsid;            data_size = sptr_database_entry->advertisement.sptr_type_9->ls_header.length;            data_size = net_to_host_short(data_size);            data_size = (USHORT)(data_size - OSPF_LS_HEADER_SIZE);            if ((sptr_database_entry->advertisement.sptr_type_9->data != NULL) && (data_size > 0))                {                sptr_type_9_link_advertisement->data = table_malloc(1, data_size);                if (sptr_type_9_link_advertisement->data == NULL)                    {                    ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) sptr_new_router_link_advertisement, "OSPF_ROUTER_LINK_ADVERTISEMENT_HEADER");                    return;                    }                memcpy(sptr_type_9_link_advertisement->data,sptr_database_entry->advertisement.sptr_type_9->data, data_size);                }            sptr_type_9_link_advertisement->ls_header.advertising_router = sptr_database_entry->advertisement.sptr_type_9->ls_header.advertising_router;            sptr_type_9_link_advertisement->ls_header.length = sptr_database_entry->advertisement.sptr_type_9->ls_header.length;            opaque_ls_header_size = sizeof(OSPF_LS_OPAQUE_HEADER);            opaque_lsa_size = (USHORT)(data_size + opaque_ls_header_size);            opaque_lsa = (OSPF_LS_OPAQUE_HEADER *) table_malloc(1, opaque_lsa_size);            if (opaque_lsa != NULL)                {                memset(opaque_lsa, 0x00, opaque_lsa_size);                memcpy(opaque_lsa, &(sptr_type_9_link_advertisement->ls_header), opaque_ls_header_size);                if ((sptr_type_9_link_advertisement->data != NULL) && (data_size > 0))                    {                    memcpy(((BYTE *)(opaque_lsa)+opaque_ls_header_size), sptr_type_9_link_advertisement->data, data_size);

⌨️ 快捷键说明

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