diff --git a/docs/ntppool/tpl/manage/server.html b/docs/ntppool/tpl/manage/server.html
index 4c904ef..f4212ec 100644
--- a/docs/ntppool/tpl/manage/server.html
+++ b/docs/ntppool/tpl/manage/server.html
@@ -4,6 +4,10 @@
[% IF server.hostname %]Hostname: [% server.hostname | html %]
[% END %]
IP: [% server.ip | html %]
+IPv6:
+[% IF server.ipv6 %][% server.ipv6 | html %]
+[% ELSE %]
+[% END %]
[% IF server.deletion_on %]
This server is scheduled for deletion
on [% server.deletion_on.strftime("%B %d, %Y") %].
diff --git a/lib/Bundle/NP.pm b/lib/Bundle/NP.pm
index 7a1a8c3..af35e21 100644
--- a/lib/Bundle/NP.pm
+++ b/lib/Bundle/NP.pm
@@ -88,6 +88,7 @@ Email::Simple::Creator
Digest::HMAC_MD5
Net::IP
Net::DNS
+Net::IPv6Addr
Test::Pod
Pod::Coverage
diff --git a/lib/NP/Model.pm b/lib/NP/Model.pm
index 66f5d31..2544ce7 100644
--- a/lib/NP/Model.pm
+++ b/lib/NP/Model.pm
@@ -186,6 +186,7 @@ __PACKAGE__->meta->setup(
columns => [
id => { type => 'integer', not_null => 1 },
ip => { type => 'varchar', default => '', length => 15, not_null => 1 },
+ ipv6 => { type => 'varchar', default => '', length => 40 },
user_id => { type => 'integer', default => '', not_null => 1 },
hostname => { type => 'varchar', length => 255 },
stratum => { type => 'integer' },
diff --git a/lib/NTPPool/Control/Manage.pm b/lib/NTPPool/Control/Manage.pm
index e80e1af..3e17841 100644
--- a/lib/NTPPool/Control/Manage.pm
+++ b/lib/NTPPool/Control/Manage.pm
@@ -10,6 +10,7 @@ use Email::Send 'SMTP';
use Sys::Hostname qw(hostname);
use Email::Date qw();
use JSON::XS qw(encode_json);
+use Net::IPv6Addr;
sub render {
my $self = shift;
@@ -157,6 +158,7 @@ sub handle_update {
# deletion and non-js netspeed
if ($self->request->uri =~ m!^/manage/server/update/server!) {
return $self->handle_update_netspeed if $self->req_param('Update');
+ return $self->handle_update_ipv6 if $self->req_param('SetIPv6');
if ($self->req_param('Delete')) {
my $server = $self->req_server or return NOT_FOUND;
return $self->redirect("/manage/server/delete?server=" . $server->ip);
@@ -196,6 +198,19 @@ sub handle_update_netspeed {
}
+sub handle_update_ipv6 {
+ my $self = shift;
+ my $server = $self->req_server or return NOT_FOUND;
+ my $ipv6 = $self->req_param('ipv6');
+ chomp($ipv6);
+ unless(Net::IPv6Addr::ipv6_chkip($ipv6)) {
+ return OK, "Invalid IPv6 address";
+ }
+ $server->ipv6($self->req_param('ipv6'));
+ $server->save;
+ return OK, $self->evaluate_template('tpl/manage.html');
+}
+
sub handle_update_profile {
my $self = shift;
diff --git a/sql/ntppool.update b/sql/ntppool.update
index 413a605..9bc0289 100644
--- a/sql/ntppool.update
+++ b/sql/ntppool.update
@@ -269,7 +269,9 @@ alter table zone_server_counts
#35
alter table servers add key (score_ts);
-
+#36
+alter table servers
+ add ipv6 varchar(40);