BIND 10 #3231: server-id for Kea4 does not work properly
BIND 10 Development
do-not-reply at isc.org
Thu Jan 9 11:58:37 UTC 2014
#3231: server-id for Kea4 does not work properly
-------------------------------------+-------------------------------------
Reporter: tomek | Owner:
Type: enhancement | marcin
Priority: medium | Status:
Component: dhcp4 | reviewing
Keywords: | Milestone: DHCP-
Sensitive: 0 | Kea1.0-alpha
Sub-Project: DHCP | Resolution:
Estimated Difficulty: 0 | CVSS Scoring:
Total Hours: 4 | Defect Severity: N/A
| Feature Depending on Ticket:
| Add Hours to Ticket: 4
| Internal?: 0
-------------------------------------+-------------------------------------
Changes (by tmark):
* owner: tmark => marcin
Comment:
Replying to [comment:7 marcin]:
> Replying to [comment:6 tmark]:
> > I think this is terrific solution. Good job.
>
> You're too kind :). Thanks!
>
> >
> > General:
> >
> > * Since server id file is now obsolete, this should perhaps be
mentioned in the !ChangeLog? Otherwise anyone running b10-dhcp4 now will
have this file and it will be orphaned. Either that or we have to come up
with a way for it to get wiped out?
>
> How about this?
> {{{
> 7XX. [bug] marcin
> b10-dhcp4: Different server identifiers are used for the packets
> being sent through different interfaces. The server uses IPv4 address
> assigned to the particular interface as a server identifier. This
> guarantees that the unicast packet sent by a relay or a client, to
> the address being a server identifier, will reach the server.
> The file holding server identifier is unused for b10-dhcpv4 and
> may be removed for existing installations. For new installations it
> is not created.
> (Trac #3231, git abc)
> }}}
>
I think this is sufficient.
> >
> >
-------------------------------------------------------------------------------
> >
> > src/bin/dhcp4/dhcp4_src.h
> >
> > Why are the methods adjustIfaceData, adjustRemoteAddr, and
appendServerId declared static? I saw comments on other existing static
methods that say it is because they are not dependent upon server state.
I don't agree with this approach. It makes it impossible to override them
in deriving test fixtures.
> >
> > As a general rule I try to limit statics to tasks relegated to
singleton start up, those uninteresting in terms of inheritance, or
unaffected if there were multiple instances of an object. Mind you this
is my own philosophy, I know there are others.
>
> If we really want to make a function overrideable in the child class
(say test fixture class) we should make it virtual. But, we don't do that
for the functions we don't plan to override. In other words, if you want
to override a certain function in the test fixture class, you have to
modify its declaration anyway. So, I disagree with a point about
overriding.
>
> The method being static is similar to making methods const. If we don't
plan the certain function to modify the class state, we make it const.
Although, making it non-const would still work for such function. By
declaring a function static we can use this function (even unit test it)
without making a new instance of the object which may slightly simplify
the unit test code. Plus, we make API clearer saying: !''this function
does not depend on object state!''.
>
> I wouldn't sacrifice my life for making object-independent functions
static, but I also don't see a sufficient reason not to make it static.
So, it is a judgment call. :)
>
As I said, simply my own philosophy.
>
> >
> >
-------------------------------------------------------------------------------
> >
> > src/bin/dhcp4/dhcp4_src.cc
> >
> > Dhcpv4Srv::adjustIfaceData()
> >
> > *At line 1157, response->getHops() is used to determine which port
value is used in the response. In trac3203 (not yet merged), tomek
changed this decision to be based upon query->getRemotePort(). One of you
appears to be wrong. You may wish to discuss this with him.
Additionally, adjustRemoteAddr uses non-zero value of giaddr to detect
relay messages, so even with this we are using two different ways to check
for "relayed-ness".
> >
>
> I agree it should be consistent, so I followed your suggestion and
created a new Pkt4 function to check whether the message is relayed or
not. This function checks both Hops and Giaddr value. If the combination
of these values is wrong it throws an exception. This exception will
propagate to the !Dhcpv4Srv main loop and the packet will be discarded,
which is a right behavior I suppose.
Looks good. This is much cleaner.
>
> >
------------------------------------------------------------------------------
> >
> > Code passes cppcheck.sh, unit tests pass valgrind.
>
> Thank you QA Team! :) I really appreciate your efforts here!
>
Wait til you get my bill!
Changes look good. Please merge.
--
Ticket URL: <https://bind10.isc.org/ticket/3231#comment:8>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list