60 lines
2.1 KiB
C#
60 lines
2.1 KiB
C#
|
using InnovEnergy.EmuMeter;
|
||
|
using InnovEnergy.Lib.Protocols.DBus;
|
||
|
using InnovEnergy.Lib.Utils;
|
||
|
using InnovEnergy.Lib.Utils.Net;
|
||
|
|
||
|
|
||
|
// dotnet publish EmuMeter.csproj -c Release -r linux-arm -p:PublishSingleFile=true --self-contained true && \
|
||
|
// rsync -av bin/Release/net6.0/linux-arm/publish/ root@10.2.1.6:/home/root/emu && clear && \
|
||
|
// ssh root@10.2.1.6 /home/root/emu/EmuMeter
|
||
|
|
||
|
|
||
|
Console.WriteLine("Starting EmuMeter Driver " + Config.Version);
|
||
|
|
||
|
var networkInterfaces = await Nic.GetNetworkInterfaces();
|
||
|
|
||
|
var candidates = networkInterfaces.Where(n => n.IsUp &&
|
||
|
n.IsEthernet &&
|
||
|
(!n.Ip4Addresses.Any() || n.Ip4Addresses.Contains(Config.OwnAddress)));
|
||
|
|
||
|
foreach (var nic in candidates)
|
||
|
{
|
||
|
Console.WriteLine($"Found new network interface: {nic.Name}");
|
||
|
|
||
|
if (!nic.Ip4Addresses.Contains(Config.OwnAddress))
|
||
|
{
|
||
|
Console.WriteLine($"Configuring Point-to-Point connection on {nic.Name}");
|
||
|
Console.WriteLine($" own address: {Config.OwnAddress}");
|
||
|
Console.WriteLine($" peer address: {Config.PeerAddress}");
|
||
|
|
||
|
var success = await nic.AddPointToPoint($"{Config.OwnAddress}/16", $"{Config.PeerAddress}/16");
|
||
|
|
||
|
if (!success)
|
||
|
{
|
||
|
Console.WriteLine($"Failed to configure network interface: {nic.Name}");
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Console.WriteLine($"Pinging peer @ {Config.PeerAddress}");
|
||
|
|
||
|
var ping = await Config.PeerAddress.Ping();
|
||
|
|
||
|
if (ping)
|
||
|
{
|
||
|
Console.WriteLine($"Got answer from {Config.PeerAddress}");
|
||
|
var ex = await EmuMeterDriver.Run($"{Config.PeerAddress}:{Config.PeerPort}", Bus.System);
|
||
|
|
||
|
Console.WriteLine($"{nameof(EmuMeterDriver)} FAILED with\n{ex}");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Console.WriteLine($"No answer from {Config.PeerAddress}");
|
||
|
}
|
||
|
|
||
|
Console.Write($"Removing Point-to-Point connection on {nic.Name} ...");
|
||
|
var removed = await nic.RemoveAddress($"{Config.OwnAddress}/16");
|
||
|
Console.WriteLine(removed ? "done" : "failed");
|
||
|
}
|
||
|
|
||
|
Console.WriteLine("Stopping EmuMeter Driver");
|