#include <OSPFInterfaceStateWaiting.h>
Inheritance diagram for OSPF::InterfaceStateWaiting:
Public Member Functions | |
virtual void | ProcessEvent (Interface *intf, Interface::InterfaceEventType event) |
virtual Interface::InterfaceStateType | GetState (void) const |
|
Implements OSPF::InterfaceState. 00012 { return Interface::WaitingState; }
|
|
00009 { 00010 if ((event == OSPF::Interface::BackupSeen) || 00011 (event == OSPF::Interface::WaitTimer)) 00012 { 00013 CalculateDesignatedRouter (intf); 00014 } 00015 if (event == OSPF::Interface::InterfaceDown) { 00016 intf->Reset (); 00017 ChangeState (intf, new OSPF::InterfaceStateDown, this); 00018 } 00019 if (event == OSPF::Interface::LoopIndication) { 00020 intf->Reset (); 00021 ChangeState (intf, new OSPF::InterfaceStateLoopback, this); 00022 } 00023 if (event == OSPF::Interface::HelloTimer) { 00024 if (intf->GetType () == OSPF::Interface::Broadcast) { 00025 intf->SendHelloPacket (OSPF::AllSPFRouters); 00026 } else { // OSPF::Interface::NBMA 00027 unsigned long neighborCount = intf->GetNeighborCount (); 00028 int ttl = (intf->GetType () == OSPF::Interface::Virtual) ? VIRTUAL_LINK_TTL : 1; 00029 for (unsigned long i = 0; i < neighborCount; i++) { 00030 OSPF::Neighbor* neighbor = intf->GetNeighbor (i); 00031 if (neighbor->GetPriority () > 0) { 00032 intf->SendHelloPacket (neighbor->GetAddress (), ttl); 00033 } 00034 } 00035 } 00036 intf->GetArea ()->GetRouter ()->GetMessageHandler ()->StartTimer (intf->GetHelloTimer (), intf->GetHelloInterval ()); 00037 } 00038 if (event == OSPF::Interface::AcknowledgementTimer) { 00039 intf->SendDelayedAcknowledgements (); 00040 } 00041 }
|