diff --git a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net10.0.apilist.cs b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net10.0.apilist.cs new file mode 100644 index 0000000..fe69ab4 --- /dev/null +++ b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net10.0.apilist.cs @@ -0,0 +1,308 @@ +// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.3.0) +// Name: Smdn.Net.AddressResolution +// AssemblyVersion: 1.3.0.0 +// InformationalVersion: 1.3.0+a0c81b27b1d8712b13d3e464d115fb0c983f00ed +// TargetFramework: .NETCoreApp,Version=v10.0 +// Configuration: Release +// Metadata: IsTrimmable=True +// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.AddressResolution +// Metadata: RepositoryBranch=main +// Metadata: RepositoryCommit=a0c81b27b1d8712b13d3e464d115fb0c983f00ed +// Referenced assemblies: +// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 +// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 +// System.Collections, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Collections.Concurrent, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.ComponentModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.ComponentModel.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Diagnostics.Process, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Linq, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Memory, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 +// System.Net.NetworkInformation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Net.Ping, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Net.Primitives, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Runtime.InteropServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.Threading, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// Vanara.Core, Version=4.1.1.0, Culture=neutral, PublicKeyToken=c37e4080322237fa +// Vanara.PInvoke.IpHlpApi, Version=4.1.1.0, Culture=neutral, PublicKeyToken=c37e4080322237fa +// Vanara.PInvoke.Shared, Version=4.1.1.0, Culture=neutral, PublicKeyToken=c37e4080322237fa +// Vanara.PInvoke.Ws2_32, Version=4.1.1.0, Culture=neutral, PublicKeyToken=c37e4080322237fa +#nullable enable annotations + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Net; +using System.Net.NetworkInformation; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Smdn.Net; +using Smdn.Net.AddressResolution; +using Smdn.Net.AddressTables; +using Smdn.Net.NetworkScanning; + +namespace Smdn.Net { + public abstract class IPNetworkProfile { + public static IPNetworkProfile Create() {} + public static IPNetworkProfile Create(Func?> addressRangeGenerator, NetworkInterface? networkInterface = null) {} + public static IPNetworkProfile Create(IPAddress baseAddress, IPAddress subnetMask, NetworkInterface? networkInterface = null) {} + public static IPNetworkProfile Create(IPAddress baseAddress, int prefixLength, NetworkInterface? networkInterface = null) {} + public static IPNetworkProfile Create(IPNetwork network, NetworkInterface? networkInterface = null) {} + public static IPNetworkProfile Create(NetworkInterface networkInterface) {} + public static IPNetworkProfile Create(Predicate predicateForNetworkInterface) {} + public static IPNetworkProfile CreateFromNetworkInterface(Guid id) {} + public static IPNetworkProfile CreateFromNetworkInterface(PhysicalAddress physicalAddress) {} + public static IPNetworkProfile CreateFromNetworkInterface(string id) {} + public static IPNetworkProfile CreateFromNetworkInterfaceName(string name) {} + + protected IPNetworkProfile(NetworkInterface? networkInterface) {} + + public NetworkInterface? NetworkInterface { get; } + + public abstract IEnumerable? GetAddressRange(); + } + + public static class PhysicalAddressExtensions { + public static string ToMacAddressString(this PhysicalAddress hardwareAddress, char delimiter = ':') {} + } +} + +namespace Smdn.Net.AddressResolution { + public interface IAddressResolver where TAddress : notnull where TResolvedAddress : notnull { + void Invalidate(TAddress address); + ValueTask ResolveAsync(TAddress address, CancellationToken cancellationToken); + } + + public class MacAddressResolver : MacAddressResolverBase { + protected MacAddressResolver(IAddressTable addressTable, bool shouldDisposeAddressTable, INetworkScanner? networkScanner, bool shouldDisposeNetworkScanner, NetworkInterface? networkInterface, int maxParallelCountForRefreshInvalidatedAddresses, ILogger? logger) {} + public MacAddressResolver() {} + public MacAddressResolver(IAddressTable? addressTable, INetworkScanner? networkScanner, bool shouldDisposeAddressTable = false, bool shouldDisposeNetworkScanner = false, NetworkInterface? networkInterface = null, int maxParallelCountForRefreshInvalidatedAddresses = 3, IServiceProvider? serviceProvider = null) {} + public MacAddressResolver(IPNetworkProfile? networkProfile, IServiceProvider? serviceProvider = null) {} + + public bool CanPerformNetworkScan { get; } + public override bool HasInvalidated { get; } + public TimeSpan NetworkScanInterval { get; set; } + public TimeSpan NetworkScanMinInterval { get; set; } + public bool ShouldResolveIPv4MappedIPv6Address { get; set; } + + protected override void Dispose(bool disposing) {} + public IAsyncEnumerable EnumerateAddressTableEntriesAsync(CancellationToken cancellationToken = default) {} + public IAsyncEnumerable EnumerateAddressTableEntriesAsync(Predicate predicate, CancellationToken cancellationToken = default) {} + protected override void InvalidateCore(IPAddress ipAddress) {} + protected override void InvalidateCore(PhysicalAddress macAddress) {} + protected override ValueTask RefreshAddressTableAsyncCore(CancellationToken cancellationToken = default) {} + protected override ValueTask RefreshInvalidatedAddressesAsyncCore(CancellationToken cancellationToken = default) {} + protected override async ValueTask ResolveIPAddressToMacAddressAsyncCore(IPAddress ipAddress, CancellationToken cancellationToken) {} + protected override async ValueTask ResolveMacAddressToIPAddressAsyncCore(PhysicalAddress macAddress, CancellationToken cancellationToken) {} + protected virtual async ValueTask SelectAddressTableEntryAsync(Predicate predicate, CancellationToken cancellationToken) {} + } + + public abstract class MacAddressResolverBase : + IAddressResolver, + IAddressResolver, + IDisposable + { + protected static PhysicalAddress AllZeroMacAddress { get; } + public static MacAddressResolverBase Null { get; } + + protected MacAddressResolverBase(ILogger? logger = null) {} + + public abstract bool HasInvalidated { get; } + protected ILogger? Logger { get; } + + protected virtual void Dispose(bool disposing) {} + public void Dispose() {} + public void Invalidate(IPAddress ipAddress) {} + public void Invalidate(PhysicalAddress macAddress) {} + protected abstract void InvalidateCore(IPAddress ipAddress); + protected abstract void InvalidateCore(PhysicalAddress macAddress); + public ValueTask RefreshAddressTableAsync(CancellationToken cancellationToken = default) {} + protected virtual ValueTask RefreshAddressTableAsyncCore(CancellationToken cancellationToken) {} + public ValueTask RefreshInvalidatedAddressesAsync(CancellationToken cancellationToken = default) {} + protected virtual ValueTask RefreshInvalidatedAddressesAsyncCore(CancellationToken cancellationToken) {} + public ValueTask ResolveIPAddressToMacAddressAsync(IPAddress ipAddress, CancellationToken cancellationToken = default) {} + protected abstract ValueTask ResolveIPAddressToMacAddressAsyncCore(IPAddress ipAddress, CancellationToken cancellationToken); + public ValueTask ResolveMacAddressToIPAddressAsync(PhysicalAddress macAddress, CancellationToken cancellationToken = default) {} + protected abstract ValueTask ResolveMacAddressToIPAddressAsyncCore(PhysicalAddress macAddress, CancellationToken cancellationToken); + void IAddressResolver.Invalidate(IPAddress address) {} + ValueTask IAddressResolver.ResolveAsync(IPAddress address, CancellationToken cancellationToken) {} + void IAddressResolver.Invalidate(PhysicalAddress address) {} + ValueTask IAddressResolver.ResolveAsync(PhysicalAddress address, CancellationToken cancellationToken) {} + protected void ThrowIfDisposed() {} + } +} + +namespace Smdn.Net.AddressTables { + public interface IAddressTable : IDisposable { + IAsyncEnumerable EnumerateEntriesAsync(CancellationToken cancellationToken); + } + + public enum AddressTableEntryState : int { + Delay = 4, + Incomplete = 1, + None = 0, + Probe = 5, + Reachable = 2, + Stale = 3, + } + + public abstract class AddressTable : IAddressTable { + public static IAddressTable Null { get; } + + public static IAddressTable Create(IServiceProvider? serviceProvider = null) {} + + protected AddressTable(ILogger? logger = null) {} + + protected ILogger? Logger { get; } + + protected virtual void Dispose(bool disposing) {} + public void Dispose() {} + public IAsyncEnumerable EnumerateEntriesAsync(CancellationToken cancellationToken = default) {} + protected abstract IAsyncEnumerable EnumerateEntriesAsyncCore(CancellationToken cancellationToken); + protected void ThrowIfDisposed() {} + } + + [SupportedOSPlatform("windows")] + public sealed class IpHlpApiAddressTable : AddressTable { + public static bool IsSupported { get; } + + public IpHlpApiAddressTable(IServiceProvider? serviceProvider = null) {} + + [AsyncIteratorStateMachine(typeof(IpHlpApiAddressTable.d__4))] + protected override IAsyncEnumerable EnumerateEntriesAsyncCore([EnumeratorCancellation] CancellationToken cancellationToken) {} + } + + public sealed class ProcfsArpAddressTable : AddressTable { + public static bool IsSupported { get; } + + public ProcfsArpAddressTable(IServiceProvider? serviceProvider = null) {} + + [AsyncIteratorStateMachine(typeof(ProcfsArpAddressTable.d__5))] + protected override IAsyncEnumerable EnumerateEntriesAsyncCore([EnumeratorCancellation] CancellationToken cancellationToken) {} + } + + public readonly struct AddressTableEntry : + IEquatable, + IEquatable, + IEquatable + { + public static readonly AddressTableEntry Empty; // = "{IP=, MAC=(null), IsPermanent=False, State=None, Iface=}" + + public static IEqualityComparer DefaultEqualityComparer { get; } + public static IEqualityComparer ExceptStateEqualityComparer { get; } + + public AddressTableEntry(IPAddress ipAddress, PhysicalAddress? physicalAddress, bool isPermanent, AddressTableEntryState state, string? interfaceId) {} + + public IPAddress? IPAddress { get; } + public string? InterfaceId { get; } + [MemberNotNullWhen(false, "IPAddress")] + public bool IsEmpty { [MemberNotNullWhen(false, "IPAddress")] get; } + public bool IsPermanent { get; } + public PhysicalAddress? PhysicalAddress { get; } + public AddressTableEntryState State { get; } + + public bool Equals(AddressTableEntry other) {} + public bool Equals(IPAddress? other) {} + public bool Equals(IPAddress? other, bool shouldConsiderIPv4MappedIPv6Address) {} + public bool Equals(PhysicalAddress? other) {} + public override bool Equals(object? obj) {} + public override int GetHashCode() {} + public override string ToString() {} + } +} + +namespace Smdn.Net.NetworkScanning { + public interface INetworkScanner : IDisposable { + ValueTask ScanAsync(CancellationToken cancellationToken); + ValueTask ScanAsync(IEnumerable addresses, CancellationToken cancellationToken); + } + + public sealed class ArpScanCommandNetworkScanner : CommandNetworkScanner { + public static bool IsSupported { get; } + + public ArpScanCommandNetworkScanner(IPNetworkProfile? networkProfile, IServiceProvider? serviceProvider = null) {} + + protected override bool GetCommandLineArguments(IEnumerable addressesToScan, out string executable, out string arguments) {} + protected override bool GetCommandLineArguments(out string executable, out string arguments) {} + } + + public abstract class CommandNetworkScanner : INetworkScanner { + public interface IProcessFactory { + Process CreateProcess(ProcessStartInfo processStartInfo); + } + + protected readonly struct Command { + public Command(string name, string? executablePath) {} + + public bool IsAvailable { get; } + public string Name { get; } + + public string GetExecutablePathOrThrow() {} + } + + protected static IReadOnlyCollection DefaultCommandPaths { get; } + + protected static CommandNetworkScanner.Command FindCommand(string command, IEnumerable paths) {} + + protected CommandNetworkScanner(ILogger? logger, IServiceProvider? serviceProvider) {} + + protected virtual void Dispose(bool disposing) {} + public void Dispose() {} + protected abstract bool GetCommandLineArguments(IEnumerable addressesToScan, out string executable, out string? arguments); + protected abstract bool GetCommandLineArguments(out string executable, out string? arguments); + public virtual ValueTask ScanAsync(CancellationToken cancellationToken = default) {} + public virtual ValueTask ScanAsync(IEnumerable addresses, CancellationToken cancellationToken = default) {} + protected void ThrowIfDisposed() {} + } + + [SupportedOSPlatform("windows")] + public sealed class IpHlpApiNetworkScanner : NetworkScanner { + public static bool IsSupported { get; } + + public IpHlpApiNetworkScanner(IPNetworkProfile networkProfile, IServiceProvider? serviceProvider = null) {} + + protected override async ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken = default) {} + } + + public abstract class NetworkScanner : INetworkScanner { + public static INetworkScanner Null { get; } + + public static INetworkScanner Create(IPNetworkProfile? networkProfile, IServiceProvider? serviceProvider = null) {} + + protected NetworkScanner(IPNetworkProfile networkProfile, ILogger? logger = null) {} + + protected ILogger? Logger { get; } + protected IPNetworkProfile NetworkProfile { get; } + + protected virtual void Dispose(bool disposing) {} + public void Dispose() {} + public virtual ValueTask ScanAsync(CancellationToken cancellationToken = default) {} + public virtual ValueTask ScanAsync(IEnumerable addresses, CancellationToken cancellationToken = default) {} + protected virtual ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken) {} + protected void ThrowIfDisposed() {} + } + + public sealed class NmapCommandNetworkScanner : CommandNetworkScanner { + public static bool IsSupported { get; } + + public NmapCommandNetworkScanner(IPNetworkProfile networkProfile, IServiceProvider? serviceProvider = null) {} + + protected override bool GetCommandLineArguments(IEnumerable addressesToScan, out string executable, out string arguments) {} + protected override bool GetCommandLineArguments(out string executable, out string arguments) {} + } + + public sealed class PingNetworkScanner : NetworkScanner { + public static bool IsSupported { get; } + + public PingNetworkScanner(IPNetworkProfile networkProfile, IServiceProvider? serviceProvider = null) {} + + protected override void Dispose(bool disposing) {} + protected override async ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken = default) {} + } +} +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0. +// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) diff --git a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net8.0.apilist.cs b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net8.0.apilist.cs index 8fcd2aa..b526887 100644 --- a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net8.0.apilist.cs +++ b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-net8.0.apilist.cs @@ -1,9 +1,13 @@ -// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.2.0) +// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.3.0) // Name: Smdn.Net.AddressResolution -// AssemblyVersion: 1.2.0.0 -// InformationalVersion: 1.2.0+c05b71d8cee9f9e5f62130f20bb3eb25e8a79614 +// AssemblyVersion: 1.3.0.0 +// InformationalVersion: 1.3.0+a0c81b27b1d8712b13d3e464d115fb0c983f00ed // TargetFramework: .NETCoreApp,Version=v8.0 // Configuration: Release +// Metadata: IsTrimmable=True +// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.AddressResolution +// Metadata: RepositoryBranch=main +// Metadata: RepositoryCommit=a0c81b27b1d8712b13d3e464d115fb0c983f00ed // Referenced assemblies: // Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 // Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 @@ -300,5 +304,5 @@ protected override void Dispose(bool disposing) {} protected override async ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken = default) {} } } -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.6.0.0. -// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.4.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0. +// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) diff --git a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.0.apilist.cs b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.0.apilist.cs index 6c645a1..81e1da8 100644 --- a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.0.apilist.cs +++ b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.0.apilist.cs @@ -1,9 +1,12 @@ -// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.2.0) +// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.3.0) // Name: Smdn.Net.AddressResolution -// AssemblyVersion: 1.2.0.0 -// InformationalVersion: 1.2.0+c05b71d8cee9f9e5f62130f20bb3eb25e8a79614 +// AssemblyVersion: 1.3.0.0 +// InformationalVersion: 1.3.0+a0c81b27b1d8712b13d3e464d115fb0c983f00ed // TargetFramework: .NETStandard,Version=v2.0 // Configuration: Release +// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.AddressResolution +// Metadata: RepositoryBranch=main +// Metadata: RepositoryCommit=a0c81b27b1d8712b13d3e464d115fb0c983f00ed // Referenced assemblies: // Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 // Microsoft.Bcl.HashCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 @@ -287,5 +290,5 @@ protected override void Dispose(bool disposing) {} protected override async ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken = default) {} } } -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.6.0.0. -// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.4.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0. +// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) diff --git a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.1.apilist.cs index 821801e..5de9e94 100644 --- a/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.1.apilist.cs +++ b/doc/api-list/Smdn.Net.AddressResolution/Smdn.Net.AddressResolution-netstandard2.1.apilist.cs @@ -1,9 +1,12 @@ -// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.2.0) +// Smdn.Net.AddressResolution.dll (Smdn.Net.AddressResolution-1.3.0) // Name: Smdn.Net.AddressResolution -// AssemblyVersion: 1.2.0.0 -// InformationalVersion: 1.2.0+c05b71d8cee9f9e5f62130f20bb3eb25e8a79614 +// AssemblyVersion: 1.3.0.0 +// InformationalVersion: 1.3.0+a0c81b27b1d8712b13d3e464d115fb0c983f00ed // TargetFramework: .NETStandard,Version=v2.1 // Configuration: Release +// Metadata: RepositoryUrl=https://github.com/smdn/Smdn.Net.AddressResolution +// Metadata: RepositoryBranch=main +// Metadata: RepositoryCommit=a0c81b27b1d8712b13d3e464d115fb0c983f00ed // Referenced assemblies: // Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 // Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 @@ -283,5 +286,5 @@ protected override void Dispose(bool disposing) {} protected override async ValueTask ScanAsyncCore(IPAddress address, CancellationToken cancellationToken = default) {} } } -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.6.0.0. -// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.4.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.7.1.0. +// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.5.0.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)