📄 ospf_link_state_advertisements.c
字号:
} 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 + -