Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OSPF::InterfaceStateDown Class Reference

#include <OSPFInterfaceStateDown.h>

Inheritance diagram for OSPF::InterfaceStateDown:

OSPF::InterfaceState List of all members.

Public Member Functions

virtual void ProcessEvent (Interface *intf, Interface::InterfaceEventType event)
virtual Interface::InterfaceStateType GetState (void) const

Member Function Documentation

virtual Interface::InterfaceStateType OSPF::InterfaceStateDown::GetState void   )  const [inline, virtual]
 

Implements OSPF::InterfaceState.

00012 { return Interface::DownState; }

void OSPF::InterfaceStateDown::ProcessEvent Interface intf,
Interface::InterfaceEventType  event
[virtual]
 

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 }


The documentation for this class was generated from the following files:
Generated on Thu Oct 19 18:22:32 2006 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.0