diff --git a/src/IPMeow.Lib/Server/DnsServer.cs b/src/IPMeow.Lib/Server/DnsServer.cs index ec05e4e..9525253 100644 --- a/src/IPMeow.Lib/Server/DnsServer.cs +++ b/src/IPMeow.Lib/Server/DnsServer.cs @@ -9,6 +9,6 @@ namespace IPMeow.Lib.Server; public class DnsServer : IRoutedServer { public required IPAddress Address { get; set; } - public required ICollection Protocols { get; set; } + public required ICollection Protocols { get; set; } public bool SupportsTls { get; set; } } diff --git a/src/IPMeow.Lib/Server/IRoutedServer.cs b/src/IPMeow.Lib/Server/IRoutedServer.cs index c0852bd..e09d359 100644 --- a/src/IPMeow.Lib/Server/IRoutedServer.cs +++ b/src/IPMeow.Lib/Server/IRoutedServer.cs @@ -9,5 +9,5 @@ namespace IPMeow.Lib.Server; public interface IRoutedServer { public IPAddress Address { get; set; } - public ICollection Protocols { get; set; } + public ICollection Protocols { get; set; } } diff --git a/src/IPMeow.Lib/Server/Protocol.cs b/src/IPMeow.Lib/Server/Protocol.cs index acd03b8..1af06f4 100644 --- a/src/IPMeow.Lib/Server/Protocol.cs +++ b/src/IPMeow.Lib/Server/Protocol.cs @@ -5,8 +5,9 @@ using System.Threading.Tasks; namespace IPMeow.Lib.Server; -public struct Protocol +public struct Endpoint { - public short Port { get; set; } + public short? Port { get; set; } + public string Protocol { get; set; } public string Name { get; set; } } diff --git a/src/IPMeow.Lib/Server/Protocols.cs b/src/IPMeow.Lib/Server/Protocols.cs index 134e320..c9703fc 100644 --- a/src/IPMeow.Lib/Server/Protocols.cs +++ b/src/IPMeow.Lib/Server/Protocols.cs @@ -7,7 +7,7 @@ namespace IPMeow.Lib.Server; public static class Protocols { - private static readonly HashSet _protos = new() + private static readonly HashSet _protos = new() { Http, Dns, @@ -24,26 +24,26 @@ public static class Protocols Imap }; - public static readonly Protocol Http = new() { Name = "HTTP", Port = 80 }; - public static readonly Protocol Dns = new() { Name = "DNS", Port = 53 }; - public static readonly Protocol DnsOverTls = new() { Name = "DNS-over-TLS", Port = 853 }; - public static readonly Protocol DnsOverHttps = new() { Name = "DNS-over-HTTPS", Port = 443 }; - public static readonly Protocol Ntp = new() { Name = "NTP", Port = 123 }; - public static readonly Protocol Ssh = new() { Name = "SSH", Port = 22 }; - public static readonly Protocol Snmp = new() { Name = "SNMP", Port = 161 }; - public static readonly Protocol Ldap = new() { Name = "LDAP", Port = 389 }; - public static readonly Protocol Kerberos = new() { Name = "Kerberos", Port = 88 }; - public static readonly Protocol Radius = new() { Name = "RADIUS", Port = 1812 }; - public static readonly Protocol Smtp = new() { Name = "SMTP", Port = 25 }; - public static readonly Protocol Pop3 = new() { Name = "POP3", Port = 110 }; - public static readonly Protocol Imap = new() { Name = "IMAP", Port = 143 }; + public static readonly Endpoint Http = new() { Name = "HTTP", Port = 80 }; + public static readonly Endpoint Dns = new() { Name = "DNS", Port = 53 }; + public static readonly Endpoint DnsOverTls = new() { Name = "DNS-over-TLS", Port = 853 }; + public static readonly Endpoint DnsOverHttps = new() { Name = "DNS-over-HTTPS", Port = 443 }; + public static readonly Endpoint Ntp = new() { Name = "NTP", Port = 123 }; + public static readonly Endpoint Ssh = new() { Name = "SSH", Port = 22 }; + public static readonly Endpoint Snmp = new() { Name = "SNMP", Port = 161 }; + public static readonly Endpoint Ldap = new() { Name = "LDAP", Port = 389 }; + public static readonly Endpoint Kerberos = new() { Name = "Kerberos", Port = 88 }; + public static readonly Endpoint Radius = new() { Name = "RADIUS", Port = 1812 }; + public static readonly Endpoint Smtp = new() { Name = "SMTP", Port = 25 }; + public static readonly Endpoint Pop3 = new() { Name = "POP3", Port = 110 }; + public static readonly Endpoint Imap = new() { Name = "IMAP", Port = 143 }; - public static Protocol? GetByPort(short port) + public static Endpoint? GetByPort(short port) { return _protos.SingleOrDefault(s => s.Port == port); } - public static Protocol? GetByName(string name) + public static Endpoint? GetByName(string name) { return _protos.SingleOrDefault(s => s.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); } diff --git a/src/IPMeow.Lib/Site/Network.cs b/src/IPMeow.Lib/Site/Network.cs index b34bcac..8370b2e 100644 --- a/src/IPMeow.Lib/Site/Network.cs +++ b/src/IPMeow.Lib/Site/Network.cs @@ -8,6 +8,6 @@ public class Network { [Key] public required string Name { get; set; } - public virtual ICollection DnsServers { get; set; } - public virtual ICollection Networks { get; set; } + public virtual ICollection ServiceServers { get; set; } = default!; + public virtual ICollection Networks { get; set; } = default!; } diff --git a/src/IPMeow.Server/Address/AddressManager.cs b/src/IPMeow.Server/Address/AddressManager.cs new file mode 100644 index 0000000..c4f9258 --- /dev/null +++ b/src/IPMeow.Server/Address/AddressManager.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Threading.Tasks; +using IPMeow.Lib.Address; +using IPMeow.Lib.Site; + +namespace IPMeow.Server.Address; + +public class AddressManager +{ + private readonly Dictionary _dynAssignments = new(); + + public IPv6Address AssignRandomV6(MacAddress addr, Network n) + { + throw new NotImplementedException(); + + IPv6Address ip = new(IPAddress.None); + _dynAssignments.Add(addr, (ip, DateTime.UtcNow)); + } + + public IPv4Address AssignRandomV4(MacAddress addr, Network n) + { + throw new NotImplementedException(); + + IPv4Address ip = new(IPAddress.None); + _dynAssignments.Add(addr, (ip, DateTime.UtcNow)); + } +} diff --git a/src/IPMeow.Server/Controllers/NetworkController.cs b/src/IPMeow.Server/Controllers/NetworkController.cs new file mode 100644 index 0000000..bb514b4 --- /dev/null +++ b/src/IPMeow.Server/Controllers/NetworkController.cs @@ -0,0 +1,38 @@ +using IPMeow.Lib.Request; +using IPMeow.Lib.Site; +using IPMeow.Server.Data; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace IPMeow.Server.Controllers; + +[ApiController] +[Route("api/network/v6")] +public class V6NetworkController : ControllerBase +{ + public V6NetworkController(IpamContext data) + { + _data = data; + } + + private readonly IpamContext _data; + + [HttpGet("settings/{name}")] + public async Task GetSettings(string name) + { + return await _data.Networks.AsNoTracking().SingleOrDefaultAsync(x => x.Name == name); + } +} + +[ApiController] +[Route("api/network/v4")] +public class V4NetworkController : ControllerBase +{ + public V4NetworkController(IpamContext data) + { + _data = data; + } + + private readonly IpamContext _data; + +} diff --git a/src/IPMeow.Server/Data/IpamContext.cs b/src/IPMeow.Server/Data/IpamContext.cs index dbd6b6c..7f48880 100644 --- a/src/IPMeow.Server/Data/IpamContext.cs +++ b/src/IPMeow.Server/Data/IpamContext.cs @@ -1,4 +1,5 @@ using IPMeow.Lib.Host; +using IPMeow.Lib.Site; using IPMeow.Server.Data.Model; using Microsoft.EntityFrameworkCore; @@ -9,6 +10,7 @@ public class IpamContext : DbContext public DbSet Hosts => Set(); public DbSet HostInterfaces => Set(); public DbSet Assignments => Set(); + public DbSet Networks => Set(); protected override void OnConfiguring(DbContextOptionsBuilder opt) {