Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Kea
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Sebastian Schrader
Kea
Commits
0a90abf2
Commit
0a90abf2
authored
Sep 08, 2017
by
Tomek Mrugalski
🛰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[5357] Dhcp{4,6} grammar extended, sample configs added.
parent
e624c91a
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
302 additions
and
1 deletion
+302
-1
doc/examples/kea4/shared-network.json
doc/examples/kea4/shared-network.json
+76
-0
doc/examples/kea6/shared-network.json
doc/examples/kea6/shared-network.json
+74
-0
src/bin/dhcp4/dhcp4_lexer.ll
src/bin/dhcp4/dhcp4_lexer.ll
+23
-0
src/bin/dhcp4/dhcp4_parser.yy
src/bin/dhcp4/dhcp4_parser.yy
+47
-0
src/bin/dhcp4/parser_context.cc
src/bin/dhcp4/parser_context.cc
+2
-0
src/bin/dhcp4/parser_context.h
src/bin/dhcp4/parser_context.h
+3
-0
src/bin/dhcp4/tests/parser_unittest.cc
src/bin/dhcp4/tests/parser_unittest.cc
+1
-0
src/bin/dhcp6/dhcp6_lexer.ll
src/bin/dhcp6/dhcp6_lexer.ll
+23
-0
src/bin/dhcp6/dhcp6_parser.yy
src/bin/dhcp6/dhcp6_parser.yy
+46
-0
src/bin/dhcp6/parser_context.cc
src/bin/dhcp6/parser_context.cc
+3
-1
src/bin/dhcp6/parser_context.h
src/bin/dhcp6/parser_context.h
+3
-0
src/bin/dhcp6/tests/parser_unittest.cc
src/bin/dhcp6/tests/parser_unittest.cc
+1
-0
No files found.
doc/examples/kea4/shared-network.json
0 → 100644
View file @
0a90abf2
{
"Dhcp4"
:
{
"interfaces-config"
:
{
"interfaces"
:
[
"eth0"
]
},
"lease-database"
:
{
"type"
:
"memfile"
,
"lfc-interval"
:
3600
},
"shared-networks"
:
[
{
"interface"
:
"eth1"
,
"match-client-id"
:
false
,
"name"
:
"frog"
,
"option-data"
:
[
],
"rebind-timer"
:
150
,
"relay"
:
{
"ip-address"
:
"0.0.0.0"
},
"renew-timer"
:
100
,
"reservation-mode"
:
"all"
,
"subnet4"
:
[
{
"4o6-interface"
:
""
,
"4o6-interface-id"
:
""
,
"4o6-subnet"
:
""
,
"id"
:
1
,
"match-client-id"
:
true
,
"next-server"
:
"0.0.0.0"
,
"option-data"
:
[
],
"pools"
:
[
],
"rebind-timer"
:
20
,
"relay"
:
{
"ip-address"
:
"0.0.0.0"
},
"renew-timer"
:
10
,
"reservation-mode"
:
"all"
,
"subnet"
:
"10.0.0.0/8"
,
"valid-lifetime"
:
30
},
{
"4o6-interface"
:
""
,
"4o6-interface-id"
:
""
,
"4o6-subnet"
:
""
,
"id"
:
2
,
"match-client-id"
:
true
,
"next-server"
:
"0.0.0.0"
,
"option-data"
:
[
],
"pools"
:
[
],
"rebind-timer"
:
20
,
"relay"
:
{
"ip-address"
:
"0.0.0.0"
},
"renew-timer"
:
10
,
"reservation-mode"
:
"all"
,
"subnet"
:
"192.0.2.0/24"
,
"valid-lifetime"
:
30
}
],
"valid-lifetime"
:
200
}
],
//
end
of
shared-networks
//
This
is
regular
subnet.
It's
not
part
of
any
shared-network.
"subnet4"
:
[
{
"pools"
:
[
{
"pool"
:
"192.0.3.1 - 192.0.3.200"
}
],
"subnet"
:
"192.0.3.0/24"
,
"interface"
:
"eth0"
}
]
}
//
end
of
Dhcp
4
}
doc/examples/kea6/shared-network.json
0 → 100644
View file @
0a90abf2
{
"Dhcp6"
:
{
//
Kea
is
told
to
listen
on
ethX
interface
only.
"interfaces-config"
:
{
"interfaces"
:
[
"eth0"
]
},
//
We
need
to
specify
the
the
database
used
to
store
leases.
As
of
//
September
2016
,
four
database
backends
are
supported:
MySQL
,
//
PostgreSQL
,
Cassandra
,
and
the
in-memory
database
,
Memfile.
//
We'll
use
memfile
because
it
doesn't
require
any
prior
set
up.
"lease-database"
:
{
"type"
:
"memfile"
,
"lfc-interval"
:
3600
},
"subnet6"
:
[
{
"pools"
:
[
{
"pool"
:
"2001:db8:1::/80"
}
],
"subnet"
:
"2001:db8:1::/64"
,
"interface"
:
"eth0"
}
],
"shared-networks"
:
[
{
"interface"
:
"eth1"
,
"name"
:
"frog"
,
"option-data"
:
[
],
"preferred-lifetime"
:
200
,
"rapid-commit"
:
true
,
"rebind-timer"
:
150
,
"relay"
:
{
"ip-address"
:
"::"
},
"renew-timer"
:
100
,
"reservation-mode"
:
"all"
,
"subnet6"
:
[
{
"id"
:
1
,
"option-data"
:
[
],
"pd-pools"
:
[
],
"pools"
:
[
],
"preferred-lifetime"
:
30
,
"rapid-commit"
:
false
,
"rebind-timer"
:
20
,
"relay"
:
{
"ip-address"
:
"2001:db8:1::1"
},
"renew-timer"
:
10
,
"reservation-mode"
:
"all"
,
"subnet"
:
"2001:db8:1::/64"
,
"valid-lifetime"
:
40
},
{
"id"
:
2
,
"option-data"
:
[
],
"pd-pools"
:
[
],
"pools"
:
[
],
"preferred-lifetime"
:
30
,
"rapid-commit"
:
false
,
"rebind-timer"
:
20
,
"relay"
:
{
"ip-address"
:
"3000::1"
},
"renew-timer"
:
10
,
"reservation-mode"
:
"all"
,
"subnet"
:
"3000::/16"
,
"valid-lifetime"
:
40
}
],
"valid-lifetime"
:
300
}
]
}
}
src/bin/dhcp4/dhcp4_lexer.ll
View file @
0a90abf2
...
...
@@ -30,6 +30,8 @@ bool start_token_flag = false;
isc:
:
dhcp:
:
Parser4Context:
:ParserType
start_token_value
;
unsigned
int
comment_start_line
=
0
;
using
namespace
isc:
:dhcp
;
}
;
/
*
To
avoid
the
call
to
exit
...
oops
!
*
/
...
...
@@ -405,6 +407,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
valid-lifetime
", driver.loc_);
...
...
@@ -415,6 +418,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_RENEW_TIMER(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
renew-timer
", driver.loc_);
...
...
@@ -425,6 +429,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_REBIND_TIMER(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
rebind-timer
", driver.loc_);
...
...
@@ -443,12 +448,22 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
subnet4\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_SUBNET4(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
subnet4
", driver.loc_);
}
}
\"
shared-networks\
" {
switch (driver.ctx_) {
case Parser4Context::DHCP4:
return Dhcp4Parser::make_SHARED_NETWORKS(driver.loc_);
default:
return Dhcp4Parser::make_STRING("
shared-networks
", driver.loc_);
}
}
\"
option-def\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
...
...
@@ -466,6 +481,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
case isc::dhcp::Parser4Context::RESERVATIONS:
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
case isc::dhcp::Parser4Context::CLIENT_CLASS:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_OPTION_DATA(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
option-data
", driver.loc_);
...
...
@@ -480,6 +496,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
case isc::dhcp::Parser4Context::OPTION_DATA:
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
case isc::dhcp::Parser4Context::CLIENT_CLASS:
case Parser4Context::SHARED_NETWORK:
case isc::dhcp::Parser4Context::LOGGERS:
return isc::dhcp::Dhcp4Parser::make_NAME(driver.loc_);
default:
...
...
@@ -544,6 +561,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
interface\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_INTERFACE(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
interface
", driver.loc_);
...
...
@@ -580,6 +598,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
reservation-mode\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
case isc::dhcp::Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_RESERVATION_MODE(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
reservation-mode
", driver.loc_);
...
...
@@ -869,6 +888,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
relay\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_RELAY(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
relay
", driver.loc_);
...
...
@@ -1295,6 +1315,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_ECHO_CLIENT_ID(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
echo-client-id
", driver.loc_);
...
...
@@ -1305,6 +1326,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::DHCP4:
case isc::dhcp::Parser4Context::SUBNET4:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_MATCH_CLIENT_ID(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
match-client-id
", driver.loc_);
...
...
@@ -1317,6 +1339,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
case isc::dhcp::Parser4Context::SUBNET4:
case isc::dhcp::Parser4Context::RESERVATIONS:
case isc::dhcp::Parser4Context::CLIENT_CLASSES:
case Parser4Context::SHARED_NETWORK:
return isc::dhcp::Dhcp4Parser::make_NEXT_SERVER(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
next-server
", driver.loc_);
...
...
src/bin/dhcp4/dhcp4_parser.yy
View file @
0a90abf2
...
...
@@ -101,6 +101,8 @@ using namespace std;
ENCAPSULATE "encapsulate"
ARRAY "array"
SHARED_NETWORKS "shared-networks"
POOLS "pools"
POOL "pool"
USER_CONTEXT "user-context"
...
...
@@ -404,6 +406,7 @@ global_param: valid_lifetime
| rebind_timer
| decline_probation_period
| subnet4_list
| shared_networks
| interfaces_config
| lease_database
| hosts_database
...
...
@@ -955,6 +958,50 @@ rapid_commit: RAPID_COMMIT COLON BOOLEAN {
ctx.stack_.back()->set("rapid-commit", rc);
};
// ---- shared-networks ---------------------
shared_networks: SHARED_NETWORKS {
ElementPtr l(new ListElement(ctx.loc2pos(@1)));
ctx.stack_.back()->set("shared-networks", l);
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
} COLON LSQUARE_BRACKET shared_networks_list RSQUARE_BRACKET {
ctx.stack_.pop_back();
ctx.leave();
};
shared_networks_list: shared_network
| shared_networks_list COMMA shared_network
;
shared_network: LCURLY_BRACKET {
ElementPtr m(new MapElement(ctx.loc2pos(@1)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
} shared_network_params RCURLY_BRACKET {
ctx.stack_.pop_back();
}
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
;
shared_network_param: name
| subnet4_list
| interface
| renew_timer
| rebind_timer
| option_data_list
| match_client_id
| next_server
| relay
| reservation_mode
| echo_client_id
| client_classes
| valid_lifetime
| unknown_map_entry
;
// ---- option-def --------------------------
// This defines the "option-def": [ ... ] entry that may appear
...
...
src/bin/dhcp4/parser_context.cc
View file @
0a90abf2
...
...
@@ -175,6 +175,8 @@ Parser4Context::contextName()
return
(
"ncr-format"
);
case
REPLACE_CLIENT_NAME
:
return
(
"replace-client-name"
);
case
SHARED_NETWORK
:
return
(
"shared-networks"
);
default:
return
(
"__unknown__"
);
}
...
...
src/bin/dhcp4/parser_context.h
View file @
0a90abf2
...
...
@@ -216,6 +216,9 @@ public:
/// Used while parsing Dhcp4/Subnet4 structures.
SUBNET4
,
/// Used while parsing shared-networks structures.
SHARED_NETWORK
,
/// Used while parsing Dhcp4/Subnet4/reservation-mode.
RESERVATION_MODE
,
...
...
src/bin/dhcp4/tests/parser_unittest.cc
View file @
0a90abf2
...
...
@@ -252,6 +252,7 @@ TEST(ParserTest, file) {
"pgsql-reservations.json"
,
"reservations.json"
,
"several-subnets.json"
,
"shared-network.json"
,
"single-subnet.json"
,
"with-ddns.json"
};
...
...
src/bin/dhcp6/dhcp6_lexer.ll
View file @
0a90abf2
...
...
@@ -30,6 +30,8 @@ bool start_token_flag = false;
isc:
:
dhcp:
:
Parser6Context:
:ParserType
start_token_value
;
unsigned
int
comment_start_line
=
0
;
using
namespace
isc:
:dhcp
;
}
;
/
*
To
avoid
the
call
to
exit
...
oops
!
*
/
...
...
@@ -597,6 +599,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_PREFERRED_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
preferred-lifetime
", driver.loc_);
...
...
@@ -607,6 +610,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_VALID_LIFETIME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
valid-lifetime
", driver.loc_);
...
...
@@ -617,6 +621,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_RENEW_TIMER(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
renew-timer
", driver.loc_);
...
...
@@ -627,6 +632,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_REBIND_TIMER(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
rebind-timer
", driver.loc_);
...
...
@@ -645,12 +651,22 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
subnet6\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_SUBNET6(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
subnet6
", driver.loc_);
}
}
\"
shared-networks\
" {
switch (driver.ctx_) {
case Parser6Context::DHCP6:
return Dhcp6Parser::make_SHARED_NETWORKS(driver.loc_);
default:
return Dhcp6Parser::make_STRING("
shared-networks
", driver.loc_);
}
}
\"
option-def\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::DHCP6:
...
...
@@ -669,6 +685,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
case isc::dhcp::Parser6Context::RESERVATIONS:
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
case isc::dhcp::Parser6Context::CLIENT_CLASS:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_OPTION_DATA(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
option-data
", driver.loc_);
...
...
@@ -684,6 +701,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
case isc::dhcp::Parser6Context::CLIENT_CLASSES:
case isc::dhcp::Parser6Context::CLIENT_CLASS:
case isc::dhcp::Parser6Context::LOGGERS:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_NAME(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
name
", driver.loc_);
...
...
@@ -802,6 +820,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
interface\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_INTERFACE(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
interface
", driver.loc_);
...
...
@@ -811,6 +830,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
interface-id\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_INTERFACE_ID(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
interface-id
", driver.loc_);
...
...
@@ -829,6 +849,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
rapid-commit\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_RAPID_COMMIT(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
rapid-commit
", driver.loc_);
...
...
@@ -838,6 +859,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
reservation-mode\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_RESERVATION_MODE(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
reservation-mode
", driver.loc_);
...
...
@@ -1145,6 +1167,7 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
\"
relay\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser6Context::SUBNET6:
case Parser6Context::SHARED_NETWORK:
return isc::dhcp::Dhcp6Parser::make_RELAY(driver.loc_);
default:
return isc::dhcp::Dhcp6Parser::make_STRING("
relay
", driver.loc_);
...
...
src/bin/dhcp6/dhcp6_parser.yy
View file @
0a90abf2
...
...
@@ -109,6 +109,7 @@ using namespace std;
DISABLED "disabled"
OUT_OF_POOL "out-of-pool"
ALL "all"
SHARED_NETWORKS "shared-networks"
MAC_SOURCES "mac-sources"
RELAY_SUPPLIED_OPTIONS "relay-supplied-options"
...
...
@@ -413,6 +414,7 @@ global_param: preferred_lifetime
| rebind_timer
| decline_probation_period
| subnet6_list
| shared_networks
| interfaces_config
| lease_database
| hosts_database
...
...
@@ -942,6 +944,50 @@ rapid_commit: RAPID_COMMIT COLON BOOLEAN {
ctx.stack_.back()->set("rapid-commit", rc);
};
// ---- shared-networks ---------------------
shared_networks: SHARED_NETWORKS {
ElementPtr l(new ListElement(ctx.loc2pos(@1)));
ctx.stack_.back()->set("shared-networks", l);
ctx.stack_.push_back(l);
ctx.enter(ctx.SHARED_NETWORK);
} COLON LSQUARE_BRACKET shared_networks_list RSQUARE_BRACKET {
ctx.stack_.pop_back();
ctx.leave();
};
shared_networks_list: shared_network
| shared_networks_list COMMA shared_network
;
shared_network: LCURLY_BRACKET {
ElementPtr m(new MapElement(ctx.loc2pos(@1)));
ctx.stack_.back()->add(m);
ctx.stack_.push_back(m);
} shared_network_params RCURLY_BRACKET {
ctx.stack_.pop_back();
}
shared_network_params: shared_network_param
| shared_network_params COMMA shared_network_param
;
shared_network_param: name
| subnet6_list
| interface
| renew_timer
| rebind_timer
| option_data_list
| relay
| reservation_mode
| client_classes
| preferred_lifetime
| rapid_commit
| valid_lifetime
| unknown_map_entry
;
// ---- option-def --------------------------
// This defines the "option-def": [ ... ] entry that may appear
...
...
src/bin/dhcp6/parser_context.cc
View file @
0a90abf2
...
...
@@ -179,7 +179,9 @@ Parser6Context::contextName()
return
(
"ncr-format"
);
case
REPLACE_CLIENT_NAME
:
return
(
"replace-client-name"
);
default:
case
SHARED_NETWORK
:
return
(
"shared-networks"
);
default:
return
(
"__unknown__"
);
}
}
...
...
src/bin/dhcp6/parser_context.h
View file @
0a90abf2
...
...
@@ -219,6 +219,9 @@ public:
/// Used while parsing Dhcp6/Subnet6 structures.
SUBNET6
,
/// Used while parsing shared-networks structures.
SHARED_NETWORK
,
/// Used while parsing Dhcp6/Subnet6/reservation-mode.
RESERVATION_MODE
,
...
...
src/bin/dhcp6/tests/parser_unittest.cc
View file @
0a90abf2
...
...
@@ -256,6 +256,7 @@ TEST(ParserTest, file) {
configs
.
push_back
(
"pgsql-reservations.json"
);
configs
.
push_back
(
"reservations.json"
);
configs
.
push_back
(
"several-subnets.json"
);
configs
.
push_back
(
"shared-network.json"
);
configs
.
push_back
(
"simple.json"
);
configs
.
push_back
(
"stateless.json"
);
configs
.
push_back
(
"with-ddns.json"
);
...
...
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