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