Пример #1
0
 internal void OnHelloReceive(IPHeader ipHeader, OspfHeader ospfHeader, OspfHelloHeader ospfHelloHeader)
 {
     lock (Lock)
     {
         LastSeen = DateTime.Now;
         Log.Write("OSPF", "NEIGHBOR", string.Format("Hello received. From: {0}, State: {1}", ospfHeader.RouterID, OspfNeighborState));
         RaiseEvent(NeighborEventType.HelloReceived);
         if (ospfHelloHeader.Neighbor.Any(p => p == Module.RouterID))
         {
             var tupleData = new Tuple<IPHeader, OspfHeader, Tuple<IPAddress, IPAddress>>(ipHeader, ospfHeader,
                                                                                              new Tuple<IPAddress, IPAddress>(ospfHelloHeader.Dr, ospfHelloHeader.Bdr));
             RaiseEvent(NeighborEventType.TwoWayReceived, tupleData);
         }
         else
         {
             var tupleData = new Tuple<IPHeader, OspfHeader, object>(ipHeader, ospfHeader, ospfHelloHeader);
             RaiseEvent(NeighborEventType.OneWayReceived, tupleData);
         }
     }
 }
Пример #2
0
 //private void HandleHelloMessage(IPHeader ipHeader, OspfHeader ospfHeader, OspfHelloHeader ospfHelloHeader)
 //{
 //    return;
 //    Neighbor neighbor = NeighborMap[ospfHeader.rid] ?? Neighbor.Create(ipHeader, ospfHeader, ospfHelloHeader);
 //    NeighborEventArgs args = NeighborEventArgs.Create(ipHeader, ospfHeader, ospfHelloHeader);
 //    neighbor.RaiseEvent(NeighborEventType.HelloReceived, args);
 //    if (ospfHelloHeader.neighbor.Any(p => p == RouterID))
 //    {
 //        neighbor.RaiseEvent(NeighborEventType.TwoWayReceived, args);
 //    }
 //    if (neighbor.IsNew && IsPotentialNeighbor(ipHeader, ospfHeader, ospfHelloHeader))
 //    {
 //        NeighborMap.Add(neighbor.RouterId, neighbor);
 //        neighbor.IsNew = false;
 //    }
 //    else
 //    {
 //        Log.Write("OSPF", "HELLO", string.Format("Incompatible OSPF hello message from .", ipHeader.saddr.StandardFormat));
 //    }
 //}
 private bool IsPotentialNeighbor(IPHeader ipHeader, OspfHeader ospfHeader, OspfHelloHeader ospfHelloHeader)
 {
     //if (!ospfHeader.aid.Equals(Area))
     //{
     //    return false;
     //}
     //if (ospfHelloHeader.interval != HelloInterval)
     //{
     //    return false;
     //}
     //if (ospfHelloHeader.routerdeadintvl != RouterDeadInterval)
     //{
     //    return false;
     //}
     //if (((ospfHelloHeader.Options & OspfHelloOptions.ExternalRoutingCapable) == OspfHelloOptions.ExternalRoutingCapable) == IsStub)
     //{
     //    return false;
     //}
     return true;
 }