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

📄 ospf_link_state_advertisements.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 5 页
字号:
                    }                sptr_old_router_link_advertisement = table_malloc(1, opaque_lsa_size);                if (sptr_old_router_link_advertisement != NULL)                    {                    memset(sptr_old_router_link_advertisement, 0x00, opaque_lsa_size);                    memcpy ((void *) sptr_old_router_link_advertisement, (const void *)sptr_new_router_link_advertisement, opaque_lsa_size);                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)opaque_lsa, opaque_lsa_size);                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = 0x0000;                    sptr_new_router_link_advertisement->ls_header.checksum = ospf_generate_LS_checksum ((void *) sptr_new_router_link_advertisement, (USHORT)opaque_lsa_size,                        (BYTE *) &sptr_new_router_link_advertisement->ls_header.checksum);                    checksum = sptr_new_router_link_advertisement->ls_header.checksum;                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)sptr_old_router_link_advertisement, opaque_lsa_size);                    table_free(sptr_old_router_link_advertisement);                    sptr_old_router_link_advertisement = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = checksum;                    }                else                    {                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    }                }            }        else if (sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_TYPE_10)            {            sptr_type_10_link_advertisement = (OSPF_TYPE_10_LINK_ADVERTISEMENT_HEADER *)sptr_new_router_link_advertisement;            sptr_type_10_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                sptr_database_entry->advertisement.sptr_type_10->ls_header.sequence_number);            sptr_type_10_link_advertisement->ls_header.age = 0x0000;            sptr_type_10_link_advertisement->ls_header.options._byte = sptr_database_entry->advertisement.sptr_type_10->ls_header.options._byte;            sptr_type_10_link_advertisement->ls_header.type = sptr_database_entry->advertisement.sptr_type_10->ls_header.type;            sptr_type_10_link_advertisement->ls_header.id.lsid = sptr_database_entry->advertisement.sptr_type_10->ls_header.id.lsid;            data_size = sptr_database_entry->advertisement.sptr_type_10->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_10->data != NULL) && (data_size > 0))                {                sptr_type_10_link_advertisement->data = table_malloc(1, data_size);                if (sptr_type_10_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_10_link_advertisement->data, sptr_database_entry->advertisement.sptr_type_10->data, data_size);                }            sptr_type_10_link_advertisement->ls_header.advertising_router = sptr_database_entry->advertisement.sptr_type_10->ls_header.advertising_router;            sptr_type_10_link_advertisement->ls_header.length = sptr_database_entry->advertisement.sptr_type_10->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_10_link_advertisement->ls_header), opaque_ls_header_size);                if ((sptr_type_10_link_advertisement->data != NULL) && (data_size > 0))                    {                    memcpy(((BYTE *)(opaque_lsa)+opaque_ls_header_size), sptr_type_10_link_advertisement->data, data_size);                    }                sptr_old_router_link_advertisement = table_malloc(1, opaque_lsa_size);                if (sptr_old_router_link_advertisement != NULL)                    {                    memset(sptr_old_router_link_advertisement, 0x00, opaque_lsa_size);                    memcpy ((void *) sptr_old_router_link_advertisement, (const void *)sptr_new_router_link_advertisement, opaque_lsa_size);                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)opaque_lsa, opaque_lsa_size);                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = 0x0000;                    sptr_new_router_link_advertisement->ls_header.checksum = ospf_generate_LS_checksum ((void *) sptr_new_router_link_advertisement, (USHORT)opaque_lsa_size,                        (BYTE *) &sptr_new_router_link_advertisement->ls_header.checksum);                    checksum = sptr_new_router_link_advertisement->ls_header.checksum;                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)sptr_old_router_link_advertisement, opaque_lsa_size);                    table_free(sptr_old_router_link_advertisement);                    sptr_old_router_link_advertisement = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = checksum;                    }                else                    {                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    }                }            }        else if (sptr_database_entry->advertisement.sptr_router->ls_header.type == OSPF_LS_TYPE_11)            {            sptr_type_11_link_advertisement = (OSPF_TYPE_11_LINK_ADVERTISEMENT_HEADER *)sptr_new_router_link_advertisement;            sptr_type_11_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                sptr_database_entry->advertisement.sptr_type_11->ls_header.sequence_number);            if ((sptr_new_router_link_advertisement->ls_header.type == OSPF_LS_TYPE_11) && (first_pass_external == TRUE))                {                sptr_type_11_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                    sptr_database_entry->advertisement.sptr_type_11->ls_header.sequence_number);                }            else if ((sptr_new_router_link_advertisement->ls_header.type == OSPF_LS_TYPE_11) && (first_pass_external == FALSE))                {                sptr_type_11_link_advertisement->ls_header.sequence_number = sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number;                }            sptr_type_11_link_advertisement->ls_header.age = 0x0000;            sptr_type_11_link_advertisement->ls_header.options._byte = sptr_database_entry->advertisement.sptr_type_11->ls_header.options._byte;            sptr_type_11_link_advertisement->ls_header.type = sptr_database_entry->advertisement.sptr_type_11->ls_header.type;            sptr_type_11_link_advertisement->ls_header.id.lsid = sptr_database_entry->advertisement.sptr_type_11->ls_header.id.lsid;            data_size = sptr_database_entry->advertisement.sptr_type_11->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_11->data != NULL) && (data_size > 0))                {                sptr_type_11_link_advertisement->data = table_malloc(1, data_size);                if (sptr_type_11_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_11_link_advertisement->data, sptr_database_entry->advertisement.sptr_type_11->data, data_size);                }            sptr_type_11_link_advertisement->ls_header.advertising_router = sptr_database_entry->advertisement.sptr_type_11->ls_header.advertising_router;            sptr_type_11_link_advertisement->ls_header.length = sptr_database_entry->advertisement.sptr_type_11->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_11_link_advertisement->ls_header), opaque_ls_header_size);                if ((sptr_type_11_link_advertisement->data != NULL) && (data_size > 0))                    {                    memcpy(((BYTE *)(opaque_lsa)+opaque_ls_header_size), sptr_type_11_link_advertisement->data, data_size);                    }                sptr_old_router_link_advertisement = table_malloc(1, opaque_lsa_size);                if (sptr_old_router_link_advertisement != NULL)                    {                    memset(sptr_old_router_link_advertisement, 0x00, opaque_lsa_size);                    memcpy ((void *) sptr_old_router_link_advertisement, (const void *)sptr_new_router_link_advertisement, opaque_lsa_size);                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)opaque_lsa, opaque_lsa_size);                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = 0x0000;                    sptr_new_router_link_advertisement->ls_header.checksum = ospf_generate_LS_checksum ((void *) sptr_new_router_link_advertisement, (USHORT)opaque_lsa_size,                        (BYTE *) &sptr_new_router_link_advertisement->ls_header.checksum);                    checksum = sptr_new_router_link_advertisement->ls_header.checksum;                    memcpy ((void *) sptr_new_router_link_advertisement, (const void *)sptr_old_router_link_advertisement, opaque_lsa_size);                    table_free(sptr_old_router_link_advertisement);                    sptr_old_router_link_advertisement = NULL;                    sptr_new_router_link_advertisement->ls_header.checksum = checksum;                    }                else                    {                    table_free(opaque_lsa);                    opaque_lsa = NULL;                    }                }            }        else            {            memcpy ((void *) sptr_new_router_link_advertisement, (const void *) sptr_database_entry->advertisement.sptr_router,                (size_t) length);            if ((sptr_new_router_link_advertisement->ls_header.type == OSPF_LS_AS_EXTERNAL) && (first_pass_external == TRUE))                {            sptr_new_router_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number);                }            else if ((sptr_new_router_link_advertisement->ls_header.type == OSPF_LS_AS_EXTERNAL) && (first_pass_external == FALSE))                {           /* Fix TSR #287037, SPR# 83500 Begin */            sptr_new_router_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number);            /* Fix TSR #287037, SPR# 83500 End */                }            else                {                sptr_new_router_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (                    sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number);                }            sptr_new_router_link_advertisement->ls_header.age = 0x0000;            length = sptr_new_router_link_advertisement->ls_header.length;            length = net_to_host_short (length);            sptr_new_router_link_advertisement->ls_header.checksum = 0x0000;            sptr_new_router_link_advertisement->ls_header.checksum = ospf_generate_LS_checksum ((void *) (sptr_new_router_link_advertisement),                length, (BYTE *) &sptr_new_router_link_advertisement->ls_header.checksum);            }#else /* __OPAQUE_LSA__ */        memcpy ((void *) sptr_new_router_link_advertisement, (const void *) sptr_database_entry->advertisement.sptr_router,            (size_t) length);        sptr_new_router_link_advertisement->ls_header.sequence_number = ospf_increment_sequence_number (            sptr_database_entry->advertisement.sptr_router->ls_header.sequence_number);        sptr_new_router_link_advertisement->ls_header.age = 0x0000;        length = sptr_new_router_link_advertisement->ls_header.length;        length = net_to_host_short (length);        sptr_new_router_link_advertisement->ls_header.checksum = 0x0000;        sptr_new_router_link_advertisement->ls_header.checksum = ospf_generate_LS_checksum ((void *) (sptr_new_router_link_advertisement),            length, (BYTE *) &sptr_new_router_link_advertisement->ls_header.checksum);#endif /* __OPAQUE_LSA__ */        sptr_advertisement = (UNION_OSPF_LINK_STATE_ADVERTISEMENT *) table_malloc (1, sizeof (ULONG));        if (sptr_advertisement == NULL)            {            ospf_print_memory_error_message_and_free_buffer_if_necessary ((void *) sptr_new_router_link_advertisement, "UNION_OSPF_LINK_STATE_ADVERTISEMENT");            return;            }        else            {            memset (sptr_advertisement , 0x0, sizeof (ULONG));            }        sptr_advertisement->sptr_router = sptr_new_router_link_advertisement;        OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF,"OSPF NEW INSTANCE OF LINK STATE ADVERTISEMENT \r\n");        switch( sptr_advertisement->sptr_router->ls_header.type )        {#if defined(__OPAQUE_LSA__)            case OSPF_LS_TYPE_9:            case OSPF_LS_TYPE_10:            case OSPF_LS_TYPE_11:                ospf.wrnOspfGeneralGroupEntry.wrnOspfOriginateNewOpaqueLsas++;                break;#endif /* __OPAQUE_LSA__ */            case OSPF_LS_AS_EXTERNAL:            case OSPF_LS_ROUTER:            case OSPF_LS_NETWORK:            case OSPF_LS_SUMMARY_NETWORK:            case OSPF_LS_SUMMARY_AS_BOUNDARY_ROUTER:#if defined(__NSSA__)            case OSPF_LS_MULTICAST:            case OSPF_LS_TYPE_7:#endif /* __NSSA__ */                 ospf.ospfGeneralGroupEntry.ospfOriginateNewLsas++;                 break;            case OSPF_LS_ROUTER_ABR:            case OSPF_LS_ROUTER_ASBR:

⌨️ 快捷键说明

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