Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Sebastian Schrader
Kea
Commits
e994b57c
Commit
e994b57c
authored
Feb 09, 2015
by
Marcin Siodelski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[3604] Use new interface configuration format where applicable.
Also, renamed interface-config to interfaces-config (plural form).
parent
f783c803
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
292 additions
and
144 deletions
+292
-144
doc/examples/kea4/multiple-options.json
doc/examples/kea4/multiple-options.json
+3
-1
doc/examples/kea4/reservations.json
doc/examples/kea4/reservations.json
+4
-2
doc/examples/kea4/several-subnets.json
doc/examples/kea4/several-subnets.json
+3
-1
doc/examples/kea4/single-subnet.json
doc/examples/kea4/single-subnet.json
+3
-1
doc/examples/kea6/advanced.json
doc/examples/kea6/advanced.json
+3
-1
doc/examples/kea6/multiple-options.json
doc/examples/kea6/multiple-options.json
+3
-1
doc/examples/kea6/several-subnets.json
doc/examples/kea6/several-subnets.json
+3
-1
doc/examples/kea6/simple.json
doc/examples/kea6/simple.json
+3
-1
doc/examples/kea6/stateless.json
doc/examples/kea6/stateless.json
+3
-1
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp4/json_config_parser.cc
+2
-2
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/config_parser_unittest.cc
+63
-47
src/bin/dhcp4/tests/d2_unittest.cc
src/bin/dhcp4/tests/d2_unittest.cc
+7
-3
src/bin/dhcp4/tests/dhcp4_process_tests.sh.in
src/bin/dhcp4/tests/dhcp4_process_tests.sh.in
+7
-3
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
src/bin/dhcp4/tests/dhcp4_srv_unittest.cc
+34
-12
src/bin/dhcp4/tests/direct_client_unittest.cc
src/bin/dhcp4/tests/direct_client_unittest.cc
+7
-3
src/bin/dhcp4/tests/dora_unittest.cc
src/bin/dhcp4/tests/dora_unittest.cc
+10
-3
src/bin/dhcp4/tests/inform_unittest.cc
src/bin/dhcp4/tests/inform_unittest.cc
+7
-3
src/bin/dhcp4/tests/kea_controller_unittest.cc
src/bin/dhcp4/tests/kea_controller_unittest.cc
+9
-3
src/bin/dhcp6/json_config_parser.cc
src/bin/dhcp6/json_config_parser.cc
+2
-2
src/bin/dhcp6/tests/config_parser_unittest.cc
src/bin/dhcp6/tests/config_parser_unittest.cc
+8
-8
src/bin/dhcp6/tests/confirm_unittest.cc
src/bin/dhcp6/tests/confirm_unittest.cc
+7
-3
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/ctrl_dhcp6_srv_unittest.cc
+4
-2
src/bin/dhcp6/tests/d2_unittest.cc
src/bin/dhcp6/tests/d2_unittest.cc
+7
-3
src/bin/dhcp6/tests/dhcp6_process_tests.sh.in
src/bin/dhcp6/tests/dhcp6_process_tests.sh.in
+4
-3
src/bin/dhcp6/tests/dhcp6_srv_unittest.cc
src/bin/dhcp6/tests/dhcp6_srv_unittest.cc
+19
-7
src/bin/dhcp6/tests/hooks_unittest.cc
src/bin/dhcp6/tests/hooks_unittest.cc
+6
-2
src/bin/dhcp6/tests/infrequest_unittest.cc
src/bin/dhcp6/tests/infrequest_unittest.cc
+12
-4
src/bin/dhcp6/tests/kea_controller_unittest.cc
src/bin/dhcp6/tests/kea_controller_unittest.cc
+9
-3
src/bin/dhcp6/tests/rebind_unittest.cc
src/bin/dhcp6/tests/rebind_unittest.cc
+18
-6
src/bin/dhcp6/tests/sarr_unittest.cc
src/bin/dhcp6/tests/sarr_unittest.cc
+3
-1
src/bin/keactrl/kea.conf.pre
src/bin/keactrl/kea.conf.pre
+6
-2
src/bin/keactrl/tests/keactrl_tests.sh.in
src/bin/keactrl/tests/keactrl_tests.sh.in
+6
-2
src/lib/dhcpsrv/parsers/ifaces_config_parser.h
src/lib/dhcpsrv/parsers/ifaces_config_parser.h
+7
-7
No files found.
doc/examples/kea4/multiple-options.json
View file @
e994b57c
...
...
@@ -5,7 +5,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea4/reservations.json
View file @
e994b57c
...
...
@@ -4,8 +4,10 @@
{
"Dhcp4"
:
{
#
Kea
is
told
to
listen
on
eth
0
interface
only.
"interfaces"
:
[
"eth0"
],
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea4/several-subnets.json
View file @
e994b57c
...
...
@@ -6,7 +6,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea4/single-subnet.json
View file @
e994b57c
...
...
@@ -6,7 +6,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea6/advanced.json
View file @
e994b57c
...
...
@@ -11,7 +11,9 @@
{
#
Kea
is
told
to
listen
on
ethX
network
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea6/multiple-options.json
View file @
e994b57c
...
...
@@ -5,7 +5,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea6/several-subnets.json
View file @
e994b57c
...
...
@@ -6,7 +6,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea6/simple.json
View file @
e994b57c
...
...
@@ -7,7 +7,9 @@
{
#
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
We
need
to
specify
lease
type.
As
of
May
2014
,
three
backends
are
supported:
#
memfile
,
mysql
and
pgsql.
We'll
just
use
memfile
,
because
it
doesn't
require
...
...
doc/examples/kea6/stateless.json
View file @
e994b57c
...
...
@@ -7,7 +7,9 @@
{
"Dhcp6"
:
{
"interfaces"
:
[
"ethX"
],
"interfaces-config:"
{
"interfaces"
:
[
"ethX"
]
},
#
This
is
the
list
of
options
that
will
be
granted
to
all
clients
that
ask.
"option-data"
:
[
{
...
...
src/bin/dhcp4/json_config_parser.cc
View file @
e994b57c
...
...
@@ -370,7 +370,7 @@ namespace dhcp {
(
config_id
.
compare
(
"rebind-timer"
)
==
0
))
{
parser
=
new
Uint32Parser
(
config_id
,
globalContext
()
->
uint32_values_
);
}
else
if
(
config_id
.
compare
(
"interfaces"
)
==
0
)
{
}
else
if
(
config_id
.
compare
(
"interfaces
-config
"
)
==
0
)
{
parser
=
new
IfacesConfigParser4
();
}
else
if
(
config_id
.
compare
(
"subnet4"
)
==
0
)
{
parser
=
new
Subnets4ListConfigParser
(
config_id
);
...
...
@@ -476,7 +476,7 @@ configureDhcp4Server(Dhcpv4Srv&, isc::data::ConstElementPtr config_set) {
subnet_parser
=
parser
;
}
else
if
(
config_pair
.
first
==
"option-data"
)
{
option_parser
=
parser
;
}
else
if
(
config_pair
.
first
==
"interface-config"
)
{
}
else
if
(
config_pair
.
first
==
"interface
s
-config"
)
{
// The interface parser is independent from any other
// parser and can be run here before any other parsers.
iface_parser
=
parser
;
...
...
src/bin/dhcp4/tests/config_parser_unittest.cc
View file @
e994b57c
// Copyright (C) 2012-201
4
Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2012-201
5
Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
...
...
@@ -124,6 +124,14 @@ public:
unlink
(
UNLOAD_MARKER_FILE
);
};
/// @brief Returns an interface configuration used by the most of the
/// unit tests.
std
::
string
genIfaceConfig
()
const
{
return
(
"
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
*
\"
]"
"}"
);
}
/// @brief Create the simple configuration with single option.
///
/// This function allows to set one of the parameters that configure
...
...
@@ -183,7 +191,7 @@ public:
/// describing an option.
std
::
string
createConfigWithOption
(
const
std
::
map
<
std
::
string
,
std
::
string
>&
params
)
{
std
::
ostringstream
stream
;
stream
<<
"{
\"
interfaces
\"
: [
\"
*
\"
],"
stream
<<
"{
"
<<
genIfaceConfig
()
<<
","
<<
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -446,7 +454,7 @@ public:
/// contents of the database do not affect result of
/// subsequent tests.
void
resetConfiguration
()
{
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
hooks-libraries
\"
: [ ], "
"
\"
valid-lifetime
\"
: 4000, "
"
\"
subnet4
\"
: [ ], "
...
...
@@ -500,7 +508,7 @@ TEST_F(Dhcp4ParserTest, emptySubnet) {
ConstElementPtr
status
;
EXPECT_NO_THROW
(
status
=
configureDhcp4Server
(
*
srv_
,
Element
::
fromJSON
(
"{
\"
interfaces
\"
: [
\"
*
\"
],"
Element
::
fromJSON
(
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ ], "
...
...
@@ -519,7 +527,7 @@ TEST_F(Dhcp4ParserTest, emptySubnet) {
TEST_F
(
Dhcp4ParserTest
,
unspecifiedRenewTimer
)
{
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
subnet4
\"
: [ { "
"
\"
pools
\"
: [ {
\"
pool
\"
:
\"
192.0.2.1 - 192.0.2.100
\"
} ],"
...
...
@@ -553,7 +561,7 @@ TEST_F(Dhcp4ParserTest, unspecifiedRenewTimer) {
TEST_F
(
Dhcp4ParserTest
,
unspecifiedRebindTimer
)
{
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
"
\"
pools
\"
: [ {
\"
pool
\"
:
\"
192.0.2.1 - 192.0.2.100
\"
} ],"
...
...
@@ -587,7 +595,7 @@ TEST_F(Dhcp4ParserTest, subnetGlobalDefaults) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -622,7 +630,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
ConstElementPtr
x
;
// Collection of four subnets for which subnet ids should be
// autogenerated - ids are unspecified or set to 0.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -676,7 +684,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnets) {
TEST_F
(
Dhcp4ParserTest
,
multipleSubnetsExplicitIDs
)
{
ConstElementPtr
x
;
// Four subnets with arbitrary subnet ids.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -730,7 +738,7 @@ TEST_F(Dhcp4ParserTest, multipleSubnetsExplicitIDs) {
TEST_F
(
Dhcp4ParserTest
,
multipleSubnetsOverlapingIDs
)
{
ConstElementPtr
x
;
// Four subnets, two of them having the same id.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -768,7 +776,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
ConstElementPtr
x
;
// All four subnets
string
config4
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config4
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -794,7 +802,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
"
\"
valid-lifetime
\"
: 4000 }"
;
// Three subnets (the last one removed)
string
config_first3
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_first3
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -815,7 +823,7 @@ TEST_F(Dhcp4ParserTest, reconfigureRemoveSubnet) {
"
\"
valid-lifetime
\"
: 4000 }"
;
// Second subnet removed
string
config_second_removed
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_second_removed
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -899,7 +907,7 @@ TEST_F(Dhcp4ParserTest, nextServerGlobal) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
next-server
\"
:
\"
1.2.3.4
\"
, "
...
...
@@ -929,7 +937,7 @@ TEST_F(Dhcp4ParserTest, nextServerSubnet) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -960,7 +968,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
ConstElementPtr
status
;
// Config with junk instead of next-server address
string
config_bogus1
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_bogus1
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -972,7 +980,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
"
\"
valid-lifetime
\"
: 4000 }"
;
// Config with IPv6 next server address
string
config_bogus2
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_bogus2
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -984,7 +992,7 @@ TEST_F(Dhcp4ParserTest, nextServerNegative) {
"
\"
valid-lifetime
\"
: 4000 }"
;
// Config with empty next server address
string
config_bogus3
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_bogus3
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -1019,7 +1027,7 @@ TEST_F(Dhcp4ParserTest, nextServerOverride) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
next-server
\"
:
\"
192.0.0.1
\"
, "
...
...
@@ -1049,7 +1057,7 @@ TEST_F(Dhcp4ParserTest, echoClientId) {
ConstElementPtr
status
;
string
config_false
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_false
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
echo-client-id
\"
: false,"
...
...
@@ -1058,7 +1066,7 @@ TEST_F(Dhcp4ParserTest, echoClientId) {
"
\"
subnet
\"
:
\"
192.0.2.0/24
\"
} ],"
"
\"
valid-lifetime
\"
: 4000 }"
;
string
config_true
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_true
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
echo-client-id
\"
: true,"
...
...
@@ -1093,7 +1101,7 @@ TEST_F(Dhcp4ParserTest, subnetLocal) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -1124,7 +1132,7 @@ TEST_F(Dhcp4ParserTest, subnetLocal) {
TEST_F
(
Dhcp4ParserTest
,
multiplePools
)
{
// Collection with two subnets, each with 2 pools.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -1183,7 +1191,7 @@ TEST_F(Dhcp4ParserTest, poolOutOfSubnet) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -1208,7 +1216,7 @@ TEST_F(Dhcp4ParserTest, poolPrefixLen) {
ConstElementPtr
status
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -1785,7 +1793,7 @@ TEST_F(Dhcp4ParserTest, optionStandardDefOverride) {
// configuration does not include options configuration.
TEST_F
(
Dhcp4ParserTest
,
optionDataDefaults
)
{
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
"
\"
option-data
\"
: [ {"
...
...
@@ -1857,7 +1865,7 @@ TEST_F(Dhcp4ParserTest, optionDataTwoSpaces) {
// The definition is not required for the option that
// belongs to the 'dhcp4' option space as it is the
// standard option.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
valid-lifetime
\"
: 4000,"
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
...
...
@@ -1937,7 +1945,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
// at the very end (when all other parameters are configured).
// Starting stage 1. Configure sub-options and their definitions.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
valid-lifetime
\"
: 4000,"
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
...
...
@@ -1989,7 +1997,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
// the configuration from the stage 2 is repeated because BIND
// configuration manager sends whole configuration for the lists
// where at least one element is being modified or added.
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
"
\"
option-data
\"
: [ {"
...
...
@@ -2085,7 +2093,7 @@ TEST_F(Dhcp4ParserTest, optionDataEncapsulate) {
// option setting.
TEST_F
(
Dhcp4ParserTest
,
optionDataInSingleSubnet
)
{
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
option-data
\"
: [ {"
...
...
@@ -2239,7 +2247,7 @@ TEST_F(Dhcp4ParserTest, optionDataBoolean) {
// for multiple subnets.
TEST_F
(
Dhcp4ParserTest
,
optionDataInMultipleSubnets
)
{
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -2513,7 +2521,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
// In the first stage we create definitions of suboptions
// that we will add to the base option.
// Let's create some dummy options: foo and foo2.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
valid-lifetime
\"
: 4000,"
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
...
...
@@ -2569,7 +2577,7 @@ TEST_F(Dhcp4ParserTest, stdOptionDataEncapsulate) {
// We add our dummy options to this option space and thus
// they should be included as sub-options in the 'vendor-opts'
// option.
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
"
\"
option-data
\"
: [ {"
...
...
@@ -2676,7 +2684,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsHex) {
// This configuration string is to configure two options
// sharing the code 1 and belonging to the different vendor spaces.
// (different vendor-id values).
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
valid-lifetime
\"
: 4000,"
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
...
...
@@ -2735,7 +2743,7 @@ TEST_F(Dhcp4ParserTest, vendorOptionsCsv) {
// This configuration string is to configure two options
// sharing the code 1 and belonging to the different vendor spaces.
// (different vendor-id values).
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
valid-lifetime
\"
: 4000,"
"
\"
rebind-timer
\"
: 2000,"
"
\"
renew-timer
\"
: 1000,"
...
...
@@ -2799,7 +2807,9 @@ buildHooksLibrariesConfig(const std::vector<std::string>& libraries) {
// Create the first part of the configuration string.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
*
\"
]"
"},"
"
\"
hooks-libraries
\"
: ["
;
// Append the libraries (separated by commas if needed)
...
...
@@ -2939,7 +2949,9 @@ TEST_F(Dhcp4ParserTest, selectedInterfaces) {
IfaceMgrTestConfig
test_config
(
true
);
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
eth0
\"
,
\"
eth1
\"
],"
string
config
=
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
eth0
\"
,
\"
eth1
\"
]"
"},"
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
valid-lifetime
\"
: 4000 }"
;
...
...
@@ -2976,7 +2988,9 @@ TEST_F(Dhcp4ParserTest, allInterfaces) {
// but it also includes asterisk. The asterisk switches server into the
// mode when it listens on all interfaces regardless of what interface names
// were specified in the "interfaces" parameter.
string
config
=
"{
\"
interfaces
\"
: [
\"
eth0
\"
,
\"
*
\"
,
\"
eth1
\"
],"
string
config
=
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
eth0
\"
,
\"
*
\"
,
\"
eth1
\"
]"
"},"
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
valid-lifetime
\"
: 4000 }"
;
...
...
@@ -3008,7 +3022,9 @@ TEST_F(Dhcp4ParserTest, selectedInterfacesAndAddresses) {
IfaceMgrTestConfig
test_config
(
true
);
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
eth0/10.0.0.1
\"
,
\"
eth1/192.0.2.3
\"
],"
string
config
=
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
eth0/10.0.0.1
\"
,
\"
eth1/192.0.2.3
\"
]"
"},"
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
valid-lifetime
\"
: 4000 }"
;
...
...
@@ -3053,7 +3069,7 @@ TEST_F(Dhcp4ParserTest, d2ClientConfig) {
// Verify that the convenience method agrees.
ASSERT_FALSE
(
CfgMgr
::
instance
().
ddnsEnabled
());
string
config_str
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_str
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -3118,7 +3134,7 @@ TEST_F(Dhcp4ParserTest, invalidD2ClientConfig) {
// Configuration string with an invalid D2 client config,
// "server-ip" is invalid.
string
config_str
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config_str
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -3164,7 +3180,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
ConstElementPtr
status
;
// A config with relay information.
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -3195,7 +3211,7 @@ TEST_F(Dhcp4ParserTest, subnetRelayInfo) {
// with defined client classes.
TEST_F
(
Dhcp4ParserTest
,
classifySubnets
)
{
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
@@ -3281,7 +3297,7 @@ TEST_F(Dhcp4ParserTest, classifySubnets) {
// respective IPv4 subnets.
TEST_F
(
Dhcp4ParserTest
,
reservations
)
{
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ "
...
...
@@ -3401,7 +3417,7 @@ TEST_F(Dhcp4ParserTest, reservations) {
TEST_F
(
Dhcp4ParserTest
,
reservationBogus
)
{
// Case 1: misspelled hw-address parameter.
ConstElementPtr
x
;
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
string
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ "
...
...
@@ -3427,7 +3443,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
checkResult
(
x
,
1
);
// Case 2: DUID and HW Address both specified.
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ "
...
...
@@ -3455,7 +3471,7 @@ TEST_F(Dhcp4ParserTest, reservationBogus) {
checkResult
(
x
,
1
);
// Case 3: Neither ip address nor hostname specified.
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
config
=
"{
"
+
genIfaceConfig
()
+
","
+
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ "
...
...
src/bin/dhcp4/tests/d2_unittest.cc
View file @
e994b57c
// Copyright (C) 2014
Internet Systems Consortium, Inc. ("ISC")
// Copyright (C) 2014
-2015
Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
...
...
@@ -74,7 +74,9 @@ Dhcp4SrvD2Test::buildTestNcr(uint32_t dhcid_id_num) {
void
Dhcp4SrvD2Test
::
reset
()
{
std
::
string
config
=
"{
\"
interfaces
\"
: [
\"
*
\"
],"
std
::
string
config
=
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
*
\"
]"
"},"
"
\"
hooks-libraries
\"
: [ ], "
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
...
...
@@ -95,7 +97,9 @@ Dhcp4SrvD2Test::configureD2(bool enable_d2, const bool exp_result,
const
size_t
max_queue_size
)
{
std
::
ostringstream
config
;
config
<<
"{
\"
interfaces
\"
: [
\"
*
\"
],"
"{
\"
interfaces-config
\"
: {"
"
\"
interfaces
\"
: [
\"
*
\"
]"
"},"
"
\"
rebind-timer
\"
: 2000, "
"
\"
renew-timer
\"
: 1000, "
"
\"
subnet4
\"
: [ { "
...
...
src/bin/dhcp4/tests/dhcp4_process_tests.sh.in
View file @
e994b57c
# Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2014
-2015
Internet Systems Consortium, Inc. ("ISC")
#
# Permission to use, copy, modify, and/or distribute this software for any