Skip to content

Commit 6f47a0a

Browse files
committed
radvd: support nat64prefix; closes #7487 #8289
1 parent 3621caa commit 6f47a0a

File tree

4 files changed

+45
-2
lines changed

4 files changed

+45
-2
lines changed

src/etc/inc/plugins.inc.d/radvd.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,11 @@ function radvd_configure_do($verbose = false, $ignorelist = [])
289289
}
290290
}
291291

292+
if (!$entry->nat64prefix->isEmpty()) {
293+
$radvdconf .= "\tnat64prefix {$entry->nat64prefix->getValue()} {\n";
294+
$radvdconf .= "\t};\n";
295+
}
296+
292297
$dnssl = [];
293298
$rdnss = [];
294299

src/opnsense/mvc/app/controllers/OPNsense/Radvd/forms/dialogEntry.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@
9898
<visible>false</visible>
9999
</grid_view>
100100
</field>
101+
<field>
102+
<id>entries.nat64prefix</id>
103+
<label>NAT64 prefix</label>
104+
<type>text</type>
105+
<help>The NAT64 prefix included in the router advertisements. The "well-known prefix" reserved for this service is 64:ff9b::/96.</help>
106+
<advanced>true</advanced>
107+
<grid_view>
108+
<visible>false</visible>
109+
</grid_view>
110+
</field>
101111
<field>
102112
<id>entries.AdvLinkMTU</id>
103113
<label>Link MTU</label>

src/opnsense/mvc/app/models/OPNsense/Radvd/Radvd.php

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,32 @@ public function performValidation($validateFullModel = false)
4949
continue;
5050
}
5151

52+
$key = $entry->__reference;
53+
54+
if (!$entry->nat64prefix->isEmpty()) {
55+
$prefix = $entry->nat64prefix->getValue();
56+
if (strpos($prefix, '/') !== false) {
57+
$prefix = explode('/', $prefix);
58+
switch ($prefix[1]) {
59+
case '32':
60+
case '40':
61+
case '48':
62+
case '56':
63+
case '64':
64+
case '96':
65+
break;
66+
default:
67+
$messages->appendMessage(
68+
new Message(
69+
gettext('Prefix size must be one of 32, 40, 48, 56, 64 or 96.'),
70+
$key . '.nat64prefix'
71+
)
72+
);
73+
break;
74+
}
75+
}
76+
}
77+
5278
$raMax = $entry->MaxRtrAdvInterval->asInt();
5379
if (
5480
$raMax < $entry->MaxRtrAdvInterval->getMinimumvalue() ||
@@ -58,8 +84,6 @@ public function performValidation($validateFullModel = false)
5884
continue;
5985
}
6086

61-
$key = $entry->__reference;
62-
6387
$raMin = $entry->MinRtrAdvInterval->asInt();
6488
$raMinAllowed = (int)floor($raMax * 0.75);
6589

src/opnsense/mvc/app/models/OPNsense/Radvd/Radvd.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@
115115
<high>High</high>
116116
</OptionValues>
117117
</AdvDefaultPreference>
118+
<nat64prefix type="NetworkField">
119+
<NetMaskRequired>Y</NetMaskRequired>
120+
<AddressFamily>ipv6</AddressFamily>
121+
</nat64prefix>
118122
</entries>
119123
</items>
120124
</model>

0 commit comments

Comments
 (0)