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

📄 ospf_neighbor_events.c

📁 vxworks下ospf协议栈
💻 C
📖 第 1 页 / 共 3 页
字号:
    ++sptr_neighbor->events;    if (sptr_neighbor->address == sptr_interface->designated_router.address)        {        sptr_interface->designated_router.address = 0x00000000L;        sptr_interface->sptr_neighbor->designated_router = 0x00000000L;        }    if (sptr_neighbor->address == sptr_interface->backup_designated_router.address)        {        sptr_interface->backup_designated_router.address = 0x00000000L;        sptr_interface->sptr_neighbor->backup_designated_router = 0x00000000L;        }    sptr_neighbor = ospf_remove_neighbor_from_interface_neighbor_list (sptr_interface, sptr_neighbor);#if defined (__OSPF_VIRTUAL_LINK__)if (sptr_interface->type == OSPF_VIRTUAL_LINK)    {    if (ospf.sptr_backbone_area != NULL)        {        if (ospf.sptr_backbone_area->lock_time == 0x00000000L)            {			/* SPR 84312 -- Begin */            ospf.sptr_backbone_area->lock_time = ospf_get_system_elapsed_time_second ();            /* SPR 84312 -- End */            }        }    if(sptr_interface->sptr_transit_area != NULL)        {        if (sptr_interface->sptr_transit_area->lock_time == 0x00000000L)            {			/* SPR 84312 -- Begin */            sptr_interface->sptr_transit_area->lock_time = ospf_get_system_elapsed_time_second ();            /* SPR 84312 -- End */            }        }     }#endif /* __OSPF_VIRTUAL_LINK__ */    ospf_schedule_routing_table_build ();       /* the entire routing table must be recalculated */    return;}/*******************************************************************************************************************************/void ospf_clear_advertisements_from_lists (OSPF_INTERFACE *sptr_interface,OSPF_NEIGHBOR *sptr_neighbor){    ospf_remove_all_database_pointers_from_neighbor_retransmit_list (sptr_neighbor);    ospf_free_neighbor_database_summary_list (sptr_neighbor);    ospf_free_neighbor_ls_request_list (sptr_neighbor);    ospf_free_interface_acknowledgement_list (sptr_interface, TRUE);    return;}/*******************************************************************************************************************************/static void ospf_establish_adjacency (OSPF_INTERFACE *sptr_interface,OSPF_NEIGHBOR *sptr_neighbor){    enum OSPF_NEIGHBOR_STATE old_state;    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_establish_adjacency\r\n");    old_state = sptr_neighbor->state;    sptr_neighbor->state = OSPF_NEIGHBOR_EXCHANGE_START;    ospf_update_designated_router_state_if_necessary (old_state, sptr_interface, sptr_neighbor);    if (sptr_neighbor->database_description_sequence_number == 0x00000000L)        {		/* SPR 84312 -- Begin */        sptr_neighbor->database_description_sequence_number = ospf_get_system_elapsed_time_second ();  /* first attempt at adjacency, so initialize to time of day clock (p. 82) */        /* SPR 84312 -- End */        }    else        {        ++sptr_neighbor->database_description_sequence_number;        }    sptr_neighbor->flags._byte = 0x00;    sptr_neighbor->flags._bit.master = TRUE;    sptr_neighbor->flags._bit.initialize = TRUE;    sptr_neighbor->flags._bit.more = TRUE;    ospf_send_an_empty_database_description_packet (sptr_interface, sptr_neighbor);    return;}/*******************************************************************************************************************************/static OSPF_NEIGHBOR *ospf_remove_neighbor_from_interface_neighbor_list (OSPF_INTERFACE *sptr_interface,OSPF_NEIGHBOR *sptr_neighbor_to_remove){    OSPF_NEIGHBOR *sptr_neighbor = NULL;    OSPF_NEIGHBOR *sptr_next_neighbor = NULL;    /*     * This is the per interface neighborlist     */    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_remove_neighbor_from_interface_neighbor_list\r\n");    for (sptr_neighbor = sptr_interface->sptr_neighbor; sptr_neighbor != NULL; sptr_neighbor = sptr_next_neighbor)        {        sptr_next_neighbor = sptr_neighbor->sptr_forward_link;        if (sptr_neighbor == sptr_neighbor_to_remove)            {		    /* SPR#76812 */		    semTake (ospf_config_mutex, WAIT_FOREVER);            ospf_remove_node_from_list ((OSPF_GENERIC_NODE **) &(sptr_interface->sptr_neighbor), (OSPF_GENERIC_NODE *) sptr_neighbor_to_remove);            --ospf.number_of_neighbors;            semGive (ospf_config_mutex);#if defined(__OSPF_MIB__)            if ( sptr_neighbor->sptr_interface->type == OSPF_VIRTUAL_LINK )            {                /* tell MIB API to remove this virtual neighbor */                ospf2Mapi_request( (void *)sptr_neighbor, ospfVirtNbrDeleteReqType );            }            else            {                /* tell MIB API to remove this neighbor */                ospf2Mapi_request( (void *)sptr_neighbor, ospfNbrDeleteReqType );            }#endif /* __OSPF_MIB__ */            return (sptr_neighbor_to_remove);            }        }    return (sptr_neighbor_to_remove);}/*******************************************************************************************************************************/static void ospf_update_flags_due_to_adjacency_tear_down (OSPF_INTERFACE *sptr_interface){    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_update_flags_due_to_adjacency_tear_down\r\n");    if (((sptr_interface->type == OSPF_BROADCAST) || (sptr_interface->type == OSPF_NBMA)) && (sptr_interface->state >= OSPF_INTERFACE_DESIGNATED_ROUTER))        {        sptr_interface->flags._bit.neighbor_change = TRUE;        }    else if ((sptr_interface->type == OSPF_POINT_TO_POINT) || (sptr_interface->type == OSPF_POINT_TO_MULTIPOINT) ||        (sptr_interface->type == OSPF_VIRTUAL_LINK))        {        sptr_interface->sptr_area->build_router = TRUE;     /* update route information since the adjacency is now gone */        }    return;}/*******************************************************************************************************************************/static void ospf_decrement_appropriate_neighbor_state_counters (OSPF_INTERFACE *sptr_interface,enum OSPF_NEIGHBOR_STATE old_state,    enum OSPF_NEIGHBOR_STATE new_state){    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_decrement_appropriate_neighbor_state_counters\r\n");    if ((old_state >= OSPF_NEIGHBOR_INITIALIZING) && (new_state < OSPF_NEIGHBOR_INITIALIZING))        {        ospf_update_neighbor_state_counters (sptr_interface, OSPF_NEIGHBOR_INITIALIZING, OSPF_DECREMENT_COUNTERS);        }    if ((old_state >= OSPF_NEIGHBOR_EXCHANGE) && (new_state < OSPF_NEIGHBOR_EXCHANGE))        {        ospf_update_neighbor_state_counters (sptr_interface, OSPF_NEIGHBOR_EXCHANGE, OSPF_DECREMENT_COUNTERS);        }    if ((old_state == OSPF_NEIGHBOR_FULL) && (new_state < OSPF_NEIGHBOR_FULL))        {        ospf_update_neighbor_state_counters (sptr_interface, OSPF_NEIGHBOR_FULL, OSPF_DECREMENT_COUNTERS);        }    return;}/*******************************************************************************************************************************/static void ospf_update_designated_router_state_if_necessary (enum OSPF_NEIGHBOR_STATE old_state,OSPF_INTERFACE *sptr_interface,    OSPF_NEIGHBOR *sptr_neighbor){    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_update_designated_router_state_if_necessary\r\n");    if ((old_state >= OSPF_NEIGHBOR_2_WAY) &&        (sptr_interface->designated_router.address != 0x00000000L) &&        (sptr_interface->designated_router.id == sptr_neighbor->id) &&        (sptr_interface->designated_router.address == sptr_neighbor->address))        {        sptr_interface->designated_router.state = sptr_neighbor->state;        }    return;}/*******************************************************************************************************************************/static void ospf_update_neighbor_state_counters (OSPF_INTERFACE *sptr_interface,enum OSPF_NEIGHBOR_STATE state,    enum OSPF_COUNTER_ACTION_TYPE action){    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_update_neighbor_state_counters\r\n");    switch (state)        {        case OSPF_NEIGHBOR_INITIALIZING:            {            if (action == OSPF_INCREMENT_COUNTERS)                {                ++sptr_interface->number_of_neighbors_in_init_state;                ++sptr_interface->sptr_area->number_of_neighbors_in_init_state;                ++ospf.number_of_neighbors_in_init_state;                }            else                {                --sptr_interface->number_of_neighbors_in_init_state;                --sptr_interface->sptr_area->number_of_neighbors_in_init_state;                --ospf.number_of_neighbors_in_init_state;                }            break;            }        case OSPF_NEIGHBOR_FULL:            {            if (action == OSPF_INCREMENT_COUNTERS)                {                ++sptr_interface->number_of_neighbors_in_full_state;                ++sptr_interface->sptr_area->number_of_neighbors_in_full_state;                ++ospf.number_of_neighbors_in_full_state;                }            else                {                --sptr_interface->number_of_neighbors_in_full_state;                --sptr_interface->sptr_area->number_of_neighbors_in_full_state;                --ospf.number_of_neighbors_in_full_state;                }            break;            }        case OSPF_NEIGHBOR_EXCHANGE:            {            if (action == OSPF_INCREMENT_COUNTERS)                {                ++sptr_interface->number_of_neighbors_in_exchange_state;                ++sptr_interface->sptr_area->number_of_neighbors_in_exchange_state;                ++ospf.number_of_neighbors_in_exchange_state;                }            else                {                --sptr_interface->number_of_neighbors_in_exchange_state;                --sptr_interface->sptr_area->number_of_neighbors_in_exchange_state;                --ospf.number_of_neighbors_in_exchange_state;                }            break;            }        default:            {            break;            }        }    return;}/*******************************************************************************************************************************/static void ospf_neighbor_state_transition_printf (OSPF_NEIGHBOR *sptr_neighbor,enum OSPF_NEIGHBOR_EVENT event,    enum OSPF_NEIGHBOR_STATE old_state){    char print_buffer[PRINT_BUFFER_SIZE];    OSPF_PRINTF_DEBUG (OSPF_DEBUG_PRINTF, "OSPF: Entering ospf_neighbor_state_transition_printf\r\n");    OSPF_CONVERT_IP_ADDRESS_TO_DOT_FORMAT_FOR_DEBUG (print_buffer, sptr_neighbor->address);    OSPF_PRINTF_NEIGHBOR (OSPF_NEIGHBOR_PRINTF, "OSPF: Neighbor %s has transitioned from state %s to state %s because of event %s\r\n",        print_buffer, ospf_neighbor_states[old_state], ospf_neighbor_states[sptr_neighbor->state], ospf_neighbor_events[event]);    return;}/***********************************************************************************************************************************/

⌨️ 快捷键说明

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