#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 |
virtual Interface::InterfaceStateType OSPF::InterfaceStateWaiting::GetState | ( | void | ) | const [inline, virtual] |
void OSPF::InterfaceStateWaiting::ProcessEvent | ( | Interface * | intf, | |
Interface::InterfaceEventType | event | |||
) | [virtual] |
Implements OSPF::InterfaceState.
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 }