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)); }
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; } }
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; }
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; } }
private void ExchangeDone(OspfNeighborState state, NeighborEventType evt, object data) { if (LSRequestList.Count == 0) { OspfNeighborState = OspfNeighborState.Full; } else { OspfNeighborState = OspfNeighborState.Loading; BeginLSRProcess(); } }
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; } } }
internal void RaiseEvent(NeighborEventType eventType, object data = null) { lock (Lock) { Log.Write("OSPF", "NEIGHBOREVENT", string.Format("State: {0}, Event: {1}", OspfNeighborState, eventType)); _stateMachine.RaiseEvent(OspfNeighborState, eventType, data); } }