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
ISC Open Source Projects
Kea
Commits
f000b6b5
Commit
f000b6b5
authored
Jan 09, 2013
by
Marcin Siodelski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[2317] Parse record-types field in DHCPv4 option definition configuration.
parent
6b78fee4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
13 deletions
+27
-13
src/bin/dhcp4/config_parser.cc
src/bin/dhcp4/config_parser.cc
+24
-3
src/bin/dhcp4/dhcp4.spec
src/bin/dhcp4/dhcp4.spec
+2
-9
src/bin/dhcp4/tests/config_parser_unittest.cc
src/bin/dhcp4/tests/config_parser_unittest.cc
+1
-1
No files found.
src/bin/dhcp4/config_parser.cc
View file @
f000b6b5
...
...
@@ -960,7 +960,8 @@ public:
BOOST_FOREACH
(
ConfigPair
param
,
option_def
->
mapValue
())
{
std
::
string
entry
(
param
.
first
);
ParserPtr
parser
;
if
(
entry
==
"name"
||
entry
==
"type"
||
entry
==
"space"
)
{
if
(
entry
==
"name"
||
entry
==
"type"
||
entry
==
"record-types"
||
entry
==
"space"
)
{
StringParserPtr
str_parser
(
dynamic_cast
<
StringParser
*>
(
StringParser
::
factory
(
entry
)));
if
(
str_parser
)
{
...
...
@@ -981,8 +982,6 @@ public:
array_parser
->
setStorage
(
&
boolean_values_
);
parser
=
array_parser
;
}
}
else
if
(
entry
==
"record_types"
)
{
// do nothing yet
}
else
{
isc_throw
(
DhcpConfigError
,
"invalid parameter: "
<<
entry
);
}
...
...
@@ -1050,6 +1049,28 @@ private:
OptionDefinitionPtr
def
(
new
OptionDefinition
(
name
,
code
,
type
,
array_type
));
// The record-types field may carry a list of comma separated names
// of data types that form a record.
std
::
string
record_types
=
getParam
<
std
::
string
>
(
"record-types"
,
string_values_
);
// Split the list of record types into tokens.
std
::
vector
<
std
::
string
>
record_tokens
=
isc
::
util
::
str
::
tokens
(
record_types
,
","
);
// Iterate over each token and add a record typy into
// option definition.
BOOST_FOREACH
(
std
::
string
record_type
,
record_tokens
)
{
try
{
boost
::
trim
(
record_type
);
if
(
!
record_type
.
empty
())
{
def
->
addRecordField
(
record_type
);
}
}
catch
(
const
Exception
&
ex
)
{
isc_throw
(
DhcpConfigError
,
"invalid record type values"
<<
" specified for the option definition: "
<<
ex
.
what
());
}
}
// Check the option definition parameters are valid.
try
{
def
->
validate
();
...
...
src/bin/dhcp4/dhcp4.spec
View file @
f000b6b5
...
...
@@ -71,16 +71,9 @@
},
{ "item_name": "record_types",
"item_type": "
li
st",
"item_type": "st
ring
",
"item_optional": false,
"item_default": [],
"list_item_spec":
{
"item_name": "record-type",
"item_type": "string",
"item_optional": false,
"item_default": ""
}
"item_default": "",
},
{ "item_name": "space",
...
...
src/bin/dhcp4/tests/config_parser_unittest.cc
View file @
f000b6b5
...
...
@@ -447,7 +447,7 @@ TEST_F(Dhcp4ParserTest, optionDefAdd) {
"
\"
code
\"
: 100,"
"
\"
type
\"
:
\"
ipv4-address
\"
,"
"
\"
array
\"
: False,"
//
" \"record
_
types\":
[ ]
,"
"
\"
record
-
types
\"
:
\"\"
,"
"
\"
space
\"
:
\"
isc
\"
"
" } ]"
"}"
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment