Beispiel #1
0
 private void TwoWayReceived(OspfNeighborState state, NeighborEventType evt, object data)
 {
     var tupleData = data as Tuple<IPHeader, OspfHeader, Tuple<IPAddress, IPAddress>>;
     var dr = tupleData.Item3.Item1;
     var bdr = tupleData.Item3.Item2;
     var newTupleData = new Tuple<IPAddress, IPAddress, IPAddress>(dr, bdr, tupleData.Item1.SourceAddress);
     if (ShouldBeAdjacent(newTupleData))
     {
         ProcessAdjacency(newTupleData);
     }
     else
     {
         OspfNeighborState = OspfNeighborState.TwoWay;
     }
 }
Beispiel #2
0
 private void SeqNumberMismatch(OspfNeighborState state, NeighborEventType evt, object data)
 {
     var tupleData = data as Tuple<IPHeader, OspfHeader, Tuple<OspfDbdHeader, OspfLsaHeader[]>>;
     OspfNeighborState = OspfNeighborState.ExStart;
     InitListData();
     DDSequenceNumber++;
     LocalMSState = MasterSlaveState.Master;
     PrepareSendDBD(tupleData.Item1.SourceAddress, GetDBDOptions(isFirstRun: true, hasMore: true));
 }
Beispiel #3
0
 private void NegotiationDone(OspfNeighborState state, NeighborEventType evt, object data)
 {
     var tupleData = data as Tuple<IPHeader, OspfHeader, object>;
     //+
     DBSummaryList.AddRange(Interface.Area.RouterLSAMap.Values.Where(p => p.CommonHeader.LSAge < Constant.MaxAge).Select(p => p.CommonHeader));
     LSRetransmissionList.AddRange(Interface.Area.RouterLSAMap.Values.Where(p => p.CommonHeader.LSAge >= Constant.MaxAge).Select(p => p.CommonHeader));
     //+
     DBSummaryList.AddRange(Interface.Area.NetworkLSAMap.Values.Where(p => p.CommonHeader.LSAge < Constant.MaxAge).Select(p => p.CommonHeader));
     LSRetransmissionList.AddRange(Interface.Area.NetworkLSAMap.Values.Where(p => p.CommonHeader.LSAge >= Constant.MaxAge).Select(p => p.CommonHeader));
     //+
     DBSummaryList.AddRange(Interface.Area.SummaryLSAMap.Values.Where(p => p.CommonHeader.LSAge < Constant.MaxAge).Select(p => p.CommonHeader));
     LSRetransmissionList.AddRange(Interface.Area.SummaryLSAMap.Values.Where(p => p.CommonHeader.LSAge >= Constant.MaxAge).Select(p => p.CommonHeader));
     //+
     if (Interface.OspfNetworkType != OspfNetworkType.VirtualLink && Interface.Area.ExternalRoutingCapability)
     {
         DBSummaryList.AddRange(Module.ASExternalLSAMap.Values.Where(p => p.CommonHeader.LSAge < Constant.MaxAge).Select(p => p.CommonHeader));
         LSRetransmissionList.AddRange(Module.ASExternalLSAMap.Values.Where(p => p.CommonHeader.LSAge < Constant.MaxAge).Select(p => p.CommonHeader));
     }
     OspfNeighborState = OspfNeighborState.Exchange;
 }
Beispiel #4
0
 private void HelloReceived(OspfNeighborState state, NeighborEventType evt, object data)
 {
     _inactivityTimer = new Timer();
     _inactivityTimer.Interval = 1000;
     _inactivityTimer.Elapsed += (s, e) =>
                                 {
                                     if ((DateTime.Now - LastSeen).Seconds > Interface.RouterDeadInterval)
                                     {
                                         RaiseEvent(NeighborEventType.InactivityTimer);
                                     }
                                 };
     _inactivityTimer.Start();
     OspfNeighborState nextState;
     if (_stateMachine.GetNext(state, evt, out nextState))
     {
         OspfNeighborState = nextState;
     }
 }
Beispiel #5
0
 private void ExchangeDone(OspfNeighborState state, NeighborEventType evt, object data)
 {
     if (LSRequestList.Count == 0)
     {
         OspfNeighborState = OspfNeighborState.Full;
     }
     else
     {
         OspfNeighborState = OspfNeighborState.Loading;
         BeginLSRProcess();
     }
 }
Beispiel #6
0
 private void AdjOK(OspfNeighborState state, NeighborEventType evt, object data)
 {
     var tupleData = data as Tuple<IPAddress, IPAddress, IPAddress>;
     if (OspfNeighborState == OspfNeighborState.TwoWay)
     {
         if (ShouldBeAdjacent(tupleData))
         {
             OspfNeighborState = OspfNeighborState.ExStart;
             ProcessAdjacency(tupleData);
         }
     }
     else if (OspfNeighborState == OspfNeighborState.ExStart)
     {
         if (!ShouldBeAdjacent(tupleData))
         {
             InitListData();
             OspfNeighborState = OspfNeighborState.TwoWay;
         }
     }
 }