Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
3e996717
Commit
3e996717
authored
Aug 07, 2017
by
Francis Dupont
Browse files
[master] Finished merge of trac5241 (always-send)
parents
408e36f7
4c7bf159
Changes
39
Expand all
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
3e996717
1283. [func] fdupont
An 'always-send' parameter has been added to options
configuration. It allows an option to be always sent, even if
a client didn't request it.
(Trac #5241, git xxx)
1282. [bug] fdupont
Now all interface service sockets are closed before interface
re-detection. Note if the re-configuration fails they remain
...
...
doc/examples/kea4/multiple-options.json
View file @
3e996717
...
...
@@ -125,6 +125,14 @@
{
"
name
": "
default-ip-ttl
",
"
data
": "
0
xf
0
"
},
// At a few exceptions options are added to response only when
// the client requests them. The always-send flag should be used
// to enforce a particular option.
{
"
name
": "
vendor-class-identifier
",
"
data
": "
isc
",
"
always-send
": true
}
],
...
...
doc/examples/kea6/multiple-options.json
View file @
3e996717
...
...
@@ -111,6 +111,15 @@
{
"
name
": "
bootfile-param
",
"
data
": "
root=/dev/sda
2
,
quiet
,
splash
"
},
// At a few exceptions options are added to response only when
// the client requests them. The always-send flag should be used
// to enforce a particular option.
{
"
name
": "
pana-agent
",
"
data
": "
2001
:db
8
:
2
::
123
",
"
always-send
": true
}
],
"
pools
": [
...
...
doc/guide/dhcp4-srv.xml
View file @
3e996717
...
...
@@ -990,8 +990,56 @@ temporarily override a list of interface names and listen on all interfaces.
},
...
]
}
</screen>
}
</screen>
Defined options are added to response when the client requests them
at a few exceptions which are always added. To enforce the addition
of a particular option set the always-send flag to true as in:
<screen>
"Dhcp4": {
"option-data": [
{
<userinput>
"name": "domain-name-servers",
"data": "192.0.2.1, 192.0.2.2",
"always-send": true
</userinput>
},
...
]
}
</screen>
The effect is the same as if the client added the option code in the
Parameter Request List option (or its equivalent for vendor
options) so in:
<screen>
"Dhcp4": {
"option-data": [
{
<userinput>
"name": "domain-name-servers",
"data": "192.0.2.1, 192.0.2.2",
"always-send": true
</userinput>
},
...
],
"subnet4": [
{
"subnet": "192.0.3.0/24",
"option-data": [
{
<userinput>
"name": "domain-name-servers",
"data": "192.0.3.1, 192.0.3.2"
</userinput>
},
...
],
...
},
...
],
...
}
</screen>
The Domain Name Servers option is always added to responses
(the always-send is "sticky") but the value is the subnet one
when the client is localized in the subnet.
</para>
<para>
The
<command>
name
</command>
parameter specifies the option name. For a
...
...
doc/guide/dhcp6-srv.xml
View file @
3e996717
...
...
@@ -1010,7 +1010,7 @@ temporarily override a list of interface names and listen on all interfaces.
be skipped, unless you want to specify the option value as
hexstring. Therefore the above example can be simplified to:
<screen>
"Dhcp
4
": {
"Dhcp
6
": {
"option-data": [
{
<userinput>
"name": "dns-servers",
...
...
@@ -1018,11 +1018,57 @@ temporarily override a list of interface names and listen on all interfaces.
},
...
]
}
</screen>
}
</screen>
Defined options are added to response when the client requests them
at a few exceptions which are always added. To enforce the addition
of a particular option set the always-send flag to true as in:
<screen>
"Dhcp6": {
"option-data": [
{
<userinput>
"name": "dns-servers",
"data": "2001:db8::cafe, 2001:db8::babe",
"always-send": true
</userinput>
},
...
]
}
</screen>
The effect is the same as if the client added the option code in the
Option Request Option (or its equivalent for vendor options) so in:
<screen>
"Dhcp6": {
"option-data": [
{
<userinput>
"name": "dns-servers",
"data": "2001:db8::cafe, 2001:db8::babe",
"always-send": true
</userinput>
},
...
],
"subnet6": [
{
"subnet": "2001:db8:1::/64",
"option-data": [
{
<userinput>
"name": "dns-servers",
"data": "2001:db8:1::cafe, 2001:db8:1::babe"
</userinput>
},
...
],
...
},
...
],
...
}
</screen>
The DNS Servers option is always added to responses
(the always-send is "sticky") but the value is the subnet one
when the client is localized in the subnet.
</para>
<para>
It is possible to override options on a per-subnet basis. If
clients connected to most of your subnets are expected to get the
...
...
src/bin/dhcp4/dhcp4_lexer.cc
View file @
3e996717
This diff is collapsed.
Click to expand it.
src/bin/dhcp4/dhcp4_lexer.ll
View file @
3e996717
...
...
@@ -496,6 +496,15 @@ ControlCharacterFill [^"\\]|\\{JSONEscapeSequence}
}
}
\"
always-send\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::OPTION_DATA:
return isc::dhcp::Dhcp4Parser::make_ALWAYS_SEND(driver.loc_);
default:
return isc::dhcp::Dhcp4Parser::make_STRING("
always-send
", driver.loc_);
}
}
\"
pools\
" {
switch(driver.ctx_) {
case isc::dhcp::Parser4Context::SUBNET4:
...
...
src/bin/dhcp4/dhcp4_parser.cc
View file @
3e996717
This diff is collapsed.
Click to expand it.
src/bin/dhcp4/dhcp4_parser.h
View file @
3e996717
...
...
@@ -219,7 +219,7 @@ namespace isc { namespace dhcp {
/// Both variants must be built beforehand, because swapping the actual
/// data requires reading it (with as()), and this is not possible on
/// unconstructed variants: it would require some dynamic testing, which
/// should not be the variant's respons
i
bility.
/// should not be the variant's respons
a
bility.
/// Swapping between built and (possibly) non-built is done with
/// variant::move ().
template
<
typename
T
>
...
...
@@ -398,81 +398,81 @@ namespace isc { namespace dhcp {
TOKEN_CODE
=
306
,
TOKEN_SPACE
=
307
,
TOKEN_CSV_FORMAT
=
308
,
TOKEN_
RECORD_TYPES
=
309
,
TOKEN_
ENCAPSULATE
=
310
,
TOKEN_
ARRAY
=
311
,
TOKEN_
POOLS
=
312
,
TOKEN_POOL
=
313
,
TOKEN_
USER_CONTEXT
=
314
,
TOKEN_
SUBNE
T
=
315
,
TOKEN_
INTERFACE
=
316
,
TOKEN_INTERFACE
_ID
=
317
,
TOKEN_ID
=
318
,
TOKEN_
RAPID_COMMIT
=
319
,
TOKEN_R
ESERVATION_MODE
=
320
,
TOKEN_
DISABLED
=
321
,
TOKEN_
OUT_OF_POOL
=
322
,
TOKEN_
AL
L
=
323
,
TOKEN_
HOST_RESERVATION_IDENTIFIERS
=
324
,
TOKEN_
CLIENT_CLASSE
S
=
325
,
TOKEN_
T
ES
T
=
326
,
TOKEN_
CLIENT_CLASS
=
327
,
TOKEN_
RESERVATION
S
=
328
,
TOKEN_
DUID
=
329
,
TOKEN_
HW_ADDRESS
=
330
,
TOKEN_
CIRCUIT_ID
=
331
,
TOKEN_C
LIEN
T_ID
=
332
,
TOKEN_
HOSTNAME
=
333
,
TOKEN_
FLEX_ID
=
334
,
TOKEN_
RELAY
=
335
,
TOKEN_
IP_ADDRESS
=
336
,
TOKEN_
HOOKS_LIBRARIE
S
=
337
,
TOKEN_LIBRAR
Y
=
338
,
TOKEN_
PARAMETERS
=
339
,
TOKEN_
EXPIRED_LEASES_PROCESSING
=
340
,
TOKEN_
RECLAIM_TIMER_WAIT_TIME
=
341
,
TOKEN_
FLUSH_
RECLAIM
ED
_TIMER_WAIT_TIME
=
342
,
TOKEN_
HOLD
_RECLAIMED_TIME
=
343
,
TOKEN_
MAX
_RECLAIM
_LEASES
=
344
,
TOKEN_MAX_RECLAIM_
TIME
=
345
,
TOKEN_
UNWARNED
_RECLAIM_
CYCLES
=
346
,
TOKEN_
DHCP4O6_PORT
=
347
,
TOKEN_
CONTROL_SOCKE
T
=
348
,
TOKEN_SOCKET
_TYPE
=
349
,
TOKEN_SOCKET_
NAM
E
=
350
,
TOKEN_
DHCP_DDNS
=
351
,
TOKEN_
ENABLE_UPDATE
S
=
352
,
TOKEN_
QUALIFYING_SUFFIX
=
353
,
TOKEN_
SERVER_IP
=
354
,
TOKEN_SERVER_P
ORT
=
355
,
TOKEN_SE
ND
ER_
I
P
=
356
,
TOKEN_SENDER_P
ORT
=
357
,
TOKEN_
MAX_QUEUE_SIZE
=
358
,
TOKEN_
NCR_PROTOCOL
=
359
,
TOKEN_NCR_
FORMAT
=
360
,
TOKEN_
ALWAYS_INCLUDE_FQDN
=
361
,
TOKEN_
OVERRIDE_NO_UPDATE
=
362
,
TOKEN_OVERRIDE_
CLIENT
_UPDATE
=
363
,
TOKEN_
REPLAC
E_CLIENT_
NAM
E
=
364
,
TOKEN_
GENERATED_PREFIX
=
365
,
TOKEN_
TCP
=
366
,
TOKEN_
JSON
=
367
,
TOKEN_
WHEN_PRESENT
=
368
,
TOKEN_
NEVER
=
369
,
TOKEN_
ALWAYS
=
370
,
TOKEN_
WHEN_NOT_PRESENT
=
371
,
TOKEN_
LOGGING
=
372
,
TOKEN_LOGG
ERS
=
373
,
TOKEN_
OUTPUT_OPTION
S
=
374
,
TOKEN_OUTPUT
=
375
,
TOKEN_
DEBUGLEVEL
=
376
,
TOKEN_
SEVERITY
=
377
,
TOKEN_
FLUSH
=
378
,
TOKEN_
MAXSIZE
=
379
,
TOKEN_MAX
VER
=
380
,
TOKEN_
DHCP6
=
381
,
TOKEN_DHCP
DDNS
=
382
,
TOKEN_
CONTROL_AGENT
=
383
,
TOKEN_
ALWAYS_SEND
=
309
,
TOKEN_
RECORD_TYPES
=
310
,
TOKEN_
ENCAPSULATE
=
311
,
TOKEN_
ARRAY
=
312
,
TOKEN_POOL
S
=
313
,
TOKEN_
POOL
=
314
,
TOKEN_
USER_CONTEX
T
=
315
,
TOKEN_
SUBNET
=
316
,
TOKEN_INTERFACE
=
317
,
TOKEN_
INTERFACE_
ID
=
318
,
TOKEN_
ID
=
319
,
TOKEN_R
APID_COMMIT
=
320
,
TOKEN_
RESERVATION_MODE
=
321
,
TOKEN_
DISABLED
=
322
,
TOKEN_
OUT_OF_POO
L
=
323
,
TOKEN_
ALL
=
324
,
TOKEN_
HOST_RESERVATION_IDENTIFIER
S
=
325
,
TOKEN_
CLIENT_CLASS
ES
=
326
,
TOKEN_
TEST
=
327
,
TOKEN_
CLIENT_CLAS
S
=
328
,
TOKEN_
RESERVATIONS
=
329
,
TOKEN_
DUID
=
330
,
TOKEN_
HW_ADDRESS
=
331
,
TOKEN_C
IRCUI
T_ID
=
332
,
TOKEN_
CLIENT_ID
=
333
,
TOKEN_
HOSTNAME
=
334
,
TOKEN_
FLEX_ID
=
335
,
TOKEN_
RELAY
=
336
,
TOKEN_
IP_ADDRES
S
=
337
,
TOKEN_
HOOKS_
LIBRAR
IES
=
338
,
TOKEN_
LIBRARY
=
339
,
TOKEN_
PARAMETERS
=
340
,
TOKEN_
EXPIRED_LEASES_PROCESSING
=
341
,
TOKEN_RECLAIM_TIMER_WAIT_TIME
=
342
,
TOKEN_
FLUSH
_RECLAIMED_TIME
R_WAIT_TIME
=
343
,
TOKEN_
HOLD
_RECLAIM
ED_TIME
=
344
,
TOKEN_MAX_RECLAIM_
LEASES
=
345
,
TOKEN_
MAX
_RECLAIM_
TIME
=
346
,
TOKEN_
UNWARNED_RECLAIM_CYCLES
=
347
,
TOKEN_
DHCP4O6_POR
T
=
348
,
TOKEN_
CONTROL_
SOCKET
=
349
,
TOKEN_SOCKET_
TYP
E
=
350
,
TOKEN_
SOCKET_NAME
=
351
,
TOKEN_
DHCP_DDN
S
=
352
,
TOKEN_
ENABLE_UPDATES
=
353
,
TOKEN_
QUALIFYING_SUFFIX
=
354
,
TOKEN_SERVER_
I
P
=
355
,
TOKEN_SE
RV
ER_P
ORT
=
356
,
TOKEN_SENDER_
I
P
=
357
,
TOKEN_
SENDER_PORT
=
358
,
TOKEN_
MAX_QUEUE_SIZE
=
359
,
TOKEN_NCR_
PROTOCOL
=
360
,
TOKEN_
NCR_FORMAT
=
361
,
TOKEN_
ALWAYS_INCLUDE_FQDN
=
362
,
TOKEN_OVERRIDE_
NO
_UPDATE
=
363
,
TOKEN_
OVERRID
E_CLIENT_
UPDAT
E
=
364
,
TOKEN_
REPLACE_CLIENT_NAME
=
365
,
TOKEN_
GENERATED_PREFIX
=
366
,
TOKEN_
TCP
=
367
,
TOKEN_
JSON
=
368
,
TOKEN_
WHEN_PRESENT
=
369
,
TOKEN_
NEVER
=
370
,
TOKEN_
ALWAYS
=
371
,
TOKEN_
WHEN_NOT_PRESENT
=
372
,
TOKEN_LOGG
ING
=
373
,
TOKEN_
LOGGER
S
=
374
,
TOKEN_OUTPUT
_OPTIONS
=
375
,
TOKEN_
OUTPUT
=
376
,
TOKEN_
DEBUGLEVEL
=
377
,
TOKEN_
SEVERITY
=
378
,
TOKEN_
FLUSH
=
379
,
TOKEN_MAX
SIZE
=
380
,
TOKEN_
MAXVER
=
381
,
TOKEN_DHCP
6
=
382
,
TOKEN_
DHCPDDNS
=
383
,
TOKEN_TOPLEVEL_JSON
=
384
,
TOKEN_TOPLEVEL_DHCP4
=
385
,
TOKEN_SUB_DHCP4
=
386
,
...
...
@@ -810,6 +810,10 @@ namespace isc { namespace dhcp {
symbol_type
make_CSV_FORMAT
(
const
location_type
&
l
);
static
inline
symbol_type
make_ALWAYS_SEND
(
const
location_type
&
l
);
static
inline
symbol_type
make_RECORD_TYPES
(
const
location_type
&
l
);
...
...
@@ -1106,10 +1110,6 @@ namespace isc { namespace dhcp {
symbol_type
make_DHCPDDNS
(
const
location_type
&
l
);
static
inline
symbol_type
make_CONTROL_AGENT
(
const
location_type
&
l
);
static
inline
symbol_type
make_TOPLEVEL_JSON
(
const
location_type
&
l
);
...
...
@@ -1375,8 +1375,8 @@ namespace isc { namespace dhcp {
enum
{
yyeof_
=
0
,
yylast_
=
7
48
,
///< Last index in yytable_.
yynnts_
=
31
7
,
///< Number of nonterminal symbols.
yylast_
=
7
51
,
///< Last index in yytable_.
yynnts_
=
31
6
,
///< Number of nonterminal symbols.
yyfinal_
=
24
,
///< Termination state number.
yyterror_
=
1
,
yyerrcode_
=
256
,
...
...
@@ -1476,8 +1476,8 @@ namespace isc { namespace dhcp {
case
199
:
// socket_type
case
209
:
// db_type
case
286
:
// hr_mode
case
41
8
:
// ncr_protocol_value
case
42
6
:
// replace_client_name_value
case
41
9
:
// ncr_protocol_value
case
42
7
:
// replace_client_name_value
value
.
copy
<
ElementPtr
>
(
other
.
value
);
break
;
...
...
@@ -1519,8 +1519,8 @@ namespace isc { namespace dhcp {
case
199
:
// socket_type
case
209
:
// db_type
case
286
:
// hr_mode
case
41
8
:
// ncr_protocol_value
case
42
6
:
// replace_client_name_value
case
41
9
:
// ncr_protocol_value
case
42
7
:
// replace_client_name_value
value
.
copy
<
ElementPtr
>
(
v
);
break
;
...
...
@@ -1621,8 +1621,8 @@ namespace isc { namespace dhcp {
case
199
:
// socket_type
case
209
:
// db_type
case
286
:
// hr_mode
case
41
8
:
// ncr_protocol_value
case
42
6
:
// replace_client_name_value
case
41
9
:
// ncr_protocol_value
case
42
7
:
// replace_client_name_value
value
.
template
destroy
<
ElementPtr
>
();
break
;
...
...
@@ -1670,8 +1670,8 @@ namespace isc { namespace dhcp {
case
199
:
// socket_type
case
209
:
// db_type
case
286
:
// hr_mode
case
41
8
:
// ncr_protocol_value
case
42
6
:
// replace_client_name_value
case
41
9
:
// ncr_protocol_value
case
42
7
:
// replace_client_name_value
value
.
move
<
ElementPtr
>
(
s
.
value
);
break
;
...
...
@@ -2077,6 +2077,12 @@ namespace isc { namespace dhcp {
return
symbol_type
(
token
::
TOKEN_CSV_FORMAT
,
l
);
}
Dhcp4Parser
::
symbol_type
Dhcp4Parser
::
make_ALWAYS_SEND
(
const
location_type
&
l
)
{
return
symbol_type
(
token
::
TOKEN_ALWAYS_SEND
,
l
);
}
Dhcp4Parser
::
symbol_type
Dhcp4Parser
::
make_RECORD_TYPES
(
const
location_type
&
l
)
{
...
...
@@ -2521,12 +2527,6 @@ namespace isc { namespace dhcp {
return
symbol_type
(
token
::
TOKEN_DHCPDDNS
,
l
);
}
Dhcp4Parser
::
symbol_type
Dhcp4Parser
::
make_CONTROL_AGENT
(
const
location_type
&
l
)
{
return
symbol_type
(
token
::
TOKEN_CONTROL_AGENT
,
l
);
}
Dhcp4Parser
::
symbol_type
Dhcp4Parser
::
make_TOPLEVEL_JSON
(
const
location_type
&
l
)
{
...
...
src/bin/dhcp4/dhcp4_parser.yy
View file @
3e996717
...
...
@@ -96,6 +96,7 @@ using namespace std;
CODE "code"
SPACE "space"
CSV_FORMAT "csv-format"
ALWAYS_SEND "always-send"
RECORD_TYPES "record-types"
ENCAPSULATE "encapsulate"
ARRAY "array"
...
...
@@ -1134,6 +1135,7 @@ option_data_param: option_data_name
| option_data_code
| option_data_space
| option_data_csv_format
| option_data_always_send
| unknown_map_entry
;
...
...
@@ -1156,6 +1158,11 @@ option_data_csv_format: CSV_FORMAT COLON BOOLEAN {
ctx.stack_.back()->set("csv-format", space);
};
option_data_always_send: ALWAYS_SEND COLON BOOLEAN {
ElementPtr persist(new BoolElement($3, ctx.loc2pos(@3)));
ctx.stack_.back()->set("always-send", persist);
};
// ---- pools ------------------------------------
// This defines the "pools": [ ... ] entry that may appear in subnet4.
...
...
src/bin/dhcp4/dhcp4_srv.cc
View file @
3e996717
...
...
@@ -1226,21 +1226,37 @@ Dhcpv4Srv::appendRequestedOptions(Dhcpv4Exchange& ex) {
}
Pkt4Ptr
query
=
ex
.
getQuery
();
Pkt4Ptr
resp
=
ex
.
getResponse
();
std
::
vector
<
uint8_t
>
requested_opts
;
// try to get the 'Parameter Request List' option which holds the
// codes of requested options.
OptionUint8ArrayPtr
option_prl
=
boost
::
dynamic_pointer_cast
<
OptionUint8Array
>
(
query
->
getOption
(
DHO_DHCP_PARAMETER_REQUEST_LIST
));
// If there is no PRL option in the message from the client then
// there is nothing to do.
if
(
!
option_prl
)
{
return
;
// Get the codes of requested options.
if
(
option_prl
)
{
requested_opts
=
option_prl
->
getValues
();
}
// Iterate on the configured option list to add persistent options
for
(
CfgOptionList
::
const_iterator
copts
=
co_list
.
begin
();
copts
!=
co_list
.
end
();
++
copts
)
{
const
OptionContainerPtr
&
opts
=
(
*
copts
)
->
getAll
(
DHCP4_OPTION_SPACE
);
if
(
!
opts
)
{
continue
;
}
// Get persistent options
const
OptionContainerPersistIndex
&
idx
=
opts
->
get
<
2
>
();
const
OptionContainerPersistRange
&
range
=
idx
.
equal_range
(
true
);
for
(
OptionContainerPersistIndex
::
const_iterator
desc
=
range
.
first
;
desc
!=
range
.
second
;
++
desc
)
{
// Add the persistent option code to requested options
if
(
desc
->
option_
)
{
uint8_t
code
=
static_cast
<
uint8_t
>
(
desc
->
option_
->
getType
());
requested_opts
.
push_back
(
code
);
}
}
}
Pkt4Ptr
resp
=
ex
.
getResponse
();
// Get the codes of requested options.
const
std
::
vector
<
uint8_t
>&
requested_opts
=
option_prl
->
getValues
();
// For each requested option code get the instance of the option
// to be returned to the client.
for
(
std
::
vector
<
uint8_t
>::
const_iterator
opt
=
requested_opts
.
begin
();
...
...
@@ -1288,15 +1304,39 @@ Dhcpv4Srv::appendRequestedVendorOptions(Dhcpv4Exchange& ex) {
}
uint32_t
vendor_id
=
vendor_req
->
getVendorId
();
std
::
vector
<
uint8_t
>
requested_opts
;
// Let's try to get ORO within that vendor-option
/// @todo This is very specific to vendor-id=4491 (Cable Labs). Other
/// vendors may have different policies.
OptionUint8ArrayPtr
oro
=
boost
::
dynamic_pointer_cast
<
OptionUint8Array
>
(
vendor_req
->
getOption
(
DOCSIS3_V4_ORO
));
// Get the list of options that client requested.
if
(
oro
)
{
requested_opts
=
oro
->
getValues
();
}
// Iterate on the configured option list to add persistent options
for
(
CfgOptionList
::
const_iterator
copts
=
co_list
.
begin
();
copts
!=
co_list
.
end
();
++
copts
)
{
const
OptionContainerPtr
&
opts
=
(
*
copts
)
->
getAll
(
vendor_id
);
if
(
!
opts
)
{
continue
;
}
// Get persistent options
const
OptionContainerPersistIndex
&
idx
=
opts
->
get
<
2
>
();
const
OptionContainerPersistRange
&
range
=
idx
.
equal_range
(
true
);
for
(
OptionContainerPersistIndex
::
const_iterator
desc
=
range
.
first
;
desc
!=
range
.
second
;
++
desc
)
{
// Add the persistent option code to requested options
if
(
desc
->
option_
)
{
uint8_t
code
=
static_cast
<
uint8_t
>
(
desc
->
option_
->
getType
());
requested_opts
.
push_back
(
code
);
}
}
}
//
Option ORO not found. D
on't do anything then.
if
(
!
oro
)
{
//
If there is nothing to add d
on't do anything then.
if
(
requested_opts
.
empty
()
)
{
return
;
}
...
...
@@ -1304,8 +1344,6 @@ Dhcpv4Srv::appendRequestedVendorOptions(Dhcpv4Exchange& ex) {
// Get the list of options that client requested.
bool
added
=
false
;
const
std
::
vector
<
uint8_t
>&
requested_opts
=
oro
->
getValues
();
for
(
std
::
vector
<
uint8_t
>::
const_iterator
code
=
requested_opts
.
begin
();
code
!=
requested_opts
.
end
();
++
code
)
{
if
(
!
vendor_rsp
->
getOption
(
*
code
))
{
...
...
src/bin/dhcp4/location.hh
View file @
3e996717
// Generated 201707141
116
// Generated 201707
28
141
5
// A Bison parser, made by GNU Bison 3.0.4.
// Locations for Bison parsers in C++
...
...
src/bin/dhcp4/position.hh
View file @
3e996717
// Generated 201707141
116
// Generated 201707
28
141
5
// A Bison parser, made by GNU Bison 3.0.4.
// Positions for Bison parsers in C++
...
...
src/bin/dhcp4/simple_parser4.cc
View file @
3e996717
...
...
@@ -45,7 +45,8 @@ const SimpleDefaults SimpleParser4::OPTION4_DEF_DEFAULTS = {
/// for those option-data declarations.
const
SimpleDefaults
SimpleParser4
::
OPTION4_DEFAULTS
=
{
{
"space"
,
Element
::
string
,
"dhcp4"
},
{
"csv-format"
,
Element
::
boolean
,
"true"
}
{
"csv-format"
,
Element
::
boolean
,
"true"
},
{
"always-send"
,
Element
::
boolean
,
"false"
}
};
/// @brief This table defines default global values for DHCPv4
...
...
src/bin/dhcp4/stack.hh
View file @
3e996717
// Generated 201707141
116
// Generated 201707
28
141
5
// A Bison parser, made by GNU Bison 3.0.4.
// Stack handling for Bison parsers in C++
...
...
src/bin/dhcp4/tests/config_parser_unittest.cc
View file @
3e996717
...
...
@@ -2820,7 +2820,7 @@ TEST_F(Dhcp4ParserTest, optionDataSinglePool) {
// Expect a single option with the code equal to 100.