INET Framework for OMNeT++/OMNEST
OSPF::InterfaceStateNotDesignatedRouter Class Reference

#include <OSPFInterfaceStateNotDesignatedRouter.h>

Inheritance diagram for OSPF::InterfaceStateNotDesignatedRouter:
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::InterfaceStateNotDesignatedRouter::GetState ( void  ) const [inline, virtual]
void OSPF::InterfaceStateNotDesignatedRouter::ProcessEvent ( OSPF::Interface intf,
Interface::InterfaceEventType  event 
) [virtual]

Implements OSPF::InterfaceState.

{
    if (event == OSPF::Interface::NeighborChange) {
        CalculateDesignatedRouter(intf);
    }
    if (event == OSPF::Interface::InterfaceDown) {
        intf->Reset();
        ChangeState(intf, new OSPF::InterfaceStateDown, this);
    }
    if (event == OSPF::Interface::LoopIndication) {
        intf->Reset();
        ChangeState(intf, new OSPF::InterfaceStateLoopback, this);
    }
    if (event == OSPF::Interface::HelloTimer) {
        if (intf->GetType() == OSPF::Interface::Broadcast) {
            intf->SendHelloPacket(OSPF::AllSPFRouters);
        } else {    // OSPF::Interface::NBMA
            if (intf->GetRouterPriority() > 0) {
                unsigned long neighborCount = intf->GetNeighborCount();
                for (unsigned long i = 0; i < neighborCount; i++) {
                    const OSPF::Neighbor* neighbor = intf->GetNeighbor(i);
                    if (neighbor->GetPriority() > 0) {
                        intf->SendHelloPacket(neighbor->GetAddress());
                    }
                }
            } else {
                intf->SendHelloPacket(intf->GetDesignatedRouter().ipInterfaceAddress);
                intf->SendHelloPacket(intf->GetBackupDesignatedRouter().ipInterfaceAddress);
            }
        }
        intf->GetArea()->GetRouter()->GetMessageHandler()->StartTimer(intf->GetHelloTimer(), intf->GetHelloInterval());
    }
    if (event == OSPF::Interface::AcknowledgementTimer) {
        intf->SendDelayedAcknowledgements();
    }
}

The documentation for this class was generated from the following files: