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
Sebastian Schrader
Kea
Commits
660f725b
Commit
660f725b
authored
Sep 10, 2013
by
Tomek Mrugalski
🛰
Browse files
[3145] Several clean-ups in IAPREFIX option, prefix-len checked
parent
8f359120
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/lib/dhcp/option6_iaprefix.cc
View file @
660f725b
...
...
@@ -34,6 +34,11 @@ namespace dhcp {
Option6IAPrefix
::
Option6IAPrefix
(
uint16_t
type
,
const
isc
::
asiolink
::
IOAddress
&
prefix
,
uint8_t
prefix_len
,
uint32_t
pref
,
uint32_t
valid
)
:
Option6IAAddr
(
type
,
prefix
,
pref
,
valid
),
prefix_len_
(
prefix_len
)
{
// Option6IAAddr will check if prefix is IPv6 and will throw if it is not
if
(
prefix_len
>
128
)
{
isc_throw
(
BadValue
,
prefix_len
<<
" is not a valid prefix length. "
<<
"Allowed range is 0..128"
);
}
}
Option6IAPrefix
::
Option6IAPrefix
(
uint32_t
type
,
OptionBuffer
::
const_iterator
begin
,
...
...
@@ -44,8 +49,7 @@ Option6IAPrefix::Option6IAPrefix(uint32_t type, OptionBuffer::const_iterator beg
void
Option6IAPrefix
::
pack
(
isc
::
util
::
OutputBuffer
&
buf
)
{
if
(
!
addr_
.
isV6
())
{
isc_throw
(
isc
::
BadValue
,
addr_
.
toText
()
<<
" is not an IPv6 address"
);
isc_throw
(
isc
::
BadValue
,
addr_
.
toText
()
<<
" is not an IPv6 address"
);
}
buf
.
writeUint16
(
type_
);
...
...
@@ -99,7 +103,7 @@ std::string Option6IAPrefix::toText(int indent /* =0 */) {
for
(
OptionCollection
::
const_iterator
opt
=
options_
.
begin
();
opt
!=
options_
.
end
();
++
opt
)
{
tmp
<<
(
*
opt
).
second
->
toText
(
indent
+
2
);
tmp
<<
(
*
opt
).
second
->
toText
(
indent
+
2
);
}
return
tmp
.
str
();
}
...
...
@@ -109,7 +113,7 @@ uint16_t Option6IAPrefix::len() {
uint16_t
length
=
OPTION6_HDR_LEN
+
OPTION6_IAPREFIX_LEN
;
// length of all suboptions
for
(
Option
::
OptionCollection
::
iterator
it
=
options_
.
begin
();
for
(
Option
::
OptionCollection
::
const_
iterator
it
=
options_
.
begin
();
it
!=
options_
.
end
();
++
it
)
{
length
+=
(
*
it
).
second
->
len
();
}
...
...
src/lib/dhcp/option6_iaprefix.h
View file @
660f725b
...
...
@@ -25,16 +25,16 @@ namespace dhcp {
/// @brief Class that represents IAPREFIX option in DHCPv6
///
/// It is based on a similar class that handles addresses.
///
The major
differences
are fields order and prefix ha
s also
/// It is based on a similar class that handles addresses.
There are major
/// differences
, though. The fields are in different order. There i
s also
/// additional prefix length field.
///
/// It should be noted that to get a full prefix (2 values: base
address
, and
/// It should be noted that to get a full prefix (2 values: base
prefix
, and
/// a prefix length) 2 methods are used: getAddress() and getLength(). Although
/// using getAddress() to obtain base
address
is somewhat counter-intuitive at
/// using getAddress() to obtain base
prefix
is somewhat counter-intuitive at
/// first, it becomes obvious when one realizes that an address is a special
/// case of a prefix with /128. It make everyone's like much easier, because
/// the base
address
doubles as a regular address in many cases, e.g. when
/// case of a prefix with /128. It make
s
everyone's like much easier, because
/// the base
prefix
doubles as a regular address in many cases, e.g. when
/// searching for a lease.
class
Option6IAPrefix
:
public
Option6IAAddr
{
...
...
@@ -42,7 +42,7 @@ public:
/// length of the fixed part of the IAPREFIX option
static
const
size_t
OPTION6_IAPREFIX_LEN
=
25
;
/// @brief Ctor, used for options constructed (during transmission).
/// @brief C
onstruc
tor, used for options constructed (during transmission).
///
/// @param type option type
/// @param addr reference to an address
...
...
@@ -52,7 +52,9 @@ public:
Option6IAPrefix
(
uint16_t
type
,
const
isc
::
asiolink
::
IOAddress
&
addr
,
uint8_t
prefix_length
,
uint32_t
preferred
,
uint32_t
valid
);
/// @brief ctor, used for received options.
/// @brief Constructor, used for received options.
///
/// @throw OutOfRange if buffer is too short
///
/// @param type option type
/// @param begin iterator to first byte of option data
...
...
@@ -65,11 +67,15 @@ public:
/// Writes option in wire-format to buf, returns pointer to first unused
/// byte after stored option.
///
/// @throw BadValue if the address is not IPv6
///
/// @param buf pointer to a buffer
void
pack
(
isc
::
util
::
OutputBuffer
&
buf
);
/// @brief Parses received buffer.
///
/// @throw OutOfRange when buffer is shorter than 25 bytes
///
/// @param begin iterator to first byte of option data
/// @param end iterator to end of option data (first byte after option end)
virtual
void
unpack
(
OptionBufferConstIter
begin
,
...
...
@@ -80,8 +86,7 @@ public:
/// @param indent number of spaces before printing text
///
/// @return string with text representation.
virtual
std
::
string
toText
(
int
indent
=
0
);
virtual
std
::
string
toText
(
int
indent
=
0
);
/// sets address in this option.
///
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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