#include <OSPFInterfaceStateDown.h>
Inheritance diagram for OSPF::InterfaceStateDown:

Public Member Functions | |
| virtual void | ProcessEvent (Interface *intf, Interface::InterfaceEventType event) |
| virtual Interface::InterfaceStateType | GetState (void) const |
|
|
Implements OSPF::InterfaceState. 00012 { return Interface::DownState; }
|
|
||||||||||||
|
00011 {
00012 if (event == OSPF::Interface::InterfaceUp) {
00013 OSPF::MessageHandler* messageHandler = intf->GetArea ()->GetRouter ()->GetMessageHandler ();
00014 messageHandler->StartTimer (intf->GetHelloTimer (), truncnormal (0.1, 0.01)); // add some deviation to avoid startup collisions
00015 messageHandler->StartTimer (intf->GetAcknowledgementTimer (), intf->GetAcknowledgementDelay ());
00016 switch (intf->GetType ()) {
00017 case OSPF::Interface::PointToPoint:
00018 case OSPF::Interface::PointToMultiPoint:
00019 case OSPF::Interface::Virtual:
00020 ChangeState (intf, new OSPF::InterfaceStatePointToPoint, this);
00021 break;
00022
00023 case OSPF::Interface::NBMA:
00024 if (intf->GetRouterPriority () == 0) {
00025 ChangeState (intf, new OSPF::InterfaceStateNotDesignatedRouter, this);
00026 } else {
00027 ChangeState (intf, new OSPF::InterfaceStateWaiting, this);
00028 messageHandler->StartTimer (intf->GetWaitTimer (), intf->GetRouterDeadInterval ());
00029
00030 long neighborCount = intf->GetNeighborCount ();
00031 for (long i = 0; i < neighborCount; i++) {
00032 OSPF::Neighbor* neighbor = intf->GetNeighbor (i);
00033 if (neighbor->GetPriority () > 0) {
00034 neighbor->ProcessEvent (OSPF::Neighbor::Start);
00035 }
00036 }
00037 }
00038 break;
00039
00040 case OSPF::Interface::Broadcast:
00041 if (intf->GetRouterPriority () == 0) {
00042 ChangeState (intf, new OSPF::InterfaceStateNotDesignatedRouter, this);
00043 } else {
00044 ChangeState (intf, new OSPF::InterfaceStateWaiting, this);
00045 messageHandler->StartTimer (intf->GetWaitTimer (), intf->GetRouterDeadInterval ());
00046 }
00047 break;
00048
00049 default:
00050 break;
00051 }
00052 }
00053 if (event == OSPF::Interface::LoopIndication) {
00054 intf->Reset ();
00055 ChangeState (intf, new OSPF::InterfaceStateLoopback, this);
00056 }
00057 }
|
1.4.1