private void InterfaceChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (sender is Interface myInterface) { Routes.RemoveAll(record => record.Interface != null && record.Interface.Equals(myInterface)); if (myInterface.IsActive) { var route = new Route(Route.RouteType.Connected) { Interface = myInterface, NetworkAddress = myInterface.NetworkAddress, NetworkMask = myInterface.NetworkMask }; Routes.Add(route); if (route.NetworkAddress != null && route.Interface != null) { ArpTable[route.NetworkAddress] = new ArpRecord(route.NetworkAddress, myInterface.MacAddress, true); } RouterChange?.Invoke(this, null); } } }
private void PacketArrival(object sender, EthernetPacket eth) { var myInterface = (Interface)sender; var arp = eth.Extract <ArpPacket>(); if (arp != null) { var protocol = new ArpProtocol(this, CurrentApp.Logging); protocol.Process(myInterface, arp); RouterChange?.Invoke(this, null); return; } if (!eth.DestinationHardwareAddress.Equals(myInterface.MacAddress) && !eth.DestinationHardwareAddress.Equals(PhysicalAddress.Parse("01-00-5E-00-00-09"))) { return; } var ip = eth.Extract <IPPacket>(); if (ip != null) { var protocol = new IpProtocol(this, CurrentApp.Logging); protocol.Process(myInterface, ip); } }
private void InterfaceChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs) { if (sender is Interface myInterface) { try { Routes.Remove(Routes.Single( record => record.Interface != null && record.Interface.Equals(myInterface)) ); } catch (InvalidOperationException e) { } if (myInterface.IsActive) { var route = new Route(Route.RouteType.Connected) { Interface = myInterface, NetworkAddress = myInterface.NetworkAddress.GetNetworkAddress(myInterface.NetworkMask), NetworkMask = myInterface.NetworkMask }; Routes.Add(route); if (myInterface.NetworkAddress != null) { ArpTable[myInterface.NetworkAddress] = new ArpRecord(myInterface.NetworkAddress, myInterface.MacAddress, true); } RouterChange?.Invoke(this, null); } } }
private void ClockTickEvent(object source, ElapsedEventArgs e) { RouterChange?.Invoke(this, null); }