BIND 10 #1634: Abstract pool/lease store: initial requirements list
BIND 10 Development
do-not-reply at isc.org
Mon Feb 13 05:51:00 UTC 2012
#1634: Abstract pool/lease store: initial requirements list
-------------------------------------+-------------------------------------
Reporter: tomek | Owner: UnAssigned
Type: task | Status: reviewing
Priority: major | Milestone: Sprint-
Component: dhcp | DHCP-20120220
Keywords: | Resolution:
Defect Severity: N/A | Sensitive: 0
Feature Depending on Ticket: | Sub-Project: DHCP
Add Hours to Ticket: 0 | Estimated Difficulty: 0
Internal?: 0 | Total Hours: 0
-------------------------------------+-------------------------------------
Comment (by sar):
''MUST allow lease manipulation on-line (during server operation)''
Do we need to allow this while the server is running? Or is it possible
to do something similar to Bind9 where the database is frozen for a bit
while the changes are made?
Re: Storage of additional information
Stephen has this in his notes:
* It MUST be possible to store multiple options of the same type with a
particular lease.
Can we elaborate on this? Does this mean multiple options from multiple
sources or multiple options within the same packet? In v4 multiple
options tend to get concatenated and we should be clear if it applies to
v4 and if so how it applies.
I read the statement ''MAY allow view/update by existing tools''
as saying that we may allow Omapi to access the database in some fashion.
As there seems to be confusion as to what the document means it should be
clarified. I assume we would only worry about Omapi and we wouldn't worry
about tools that might read the current lease database file as there isn't
much of a way for them to connect to the new database. And I would agree
that this is a "may". We've told folks that we will see what we can do
but haven't promised anything.
''string or char[128] client-id - DUID is up to 128 bytes long, DHCPv4
uses HW address;''
DHCPv4 client id doesn't have to be the HW address and is mostly treated
as an opaque blob,
though I don't think that really affects the DB except that we need fields
for both HW address
and client id.
''timestamp cltt - client last communication time - required for
failover;''
I think there are several other fields we may need or want for failover if
we choose to do the current failover draft again. However we may do
failover in a different fashion. If we allow multiple DHCP servers to
access the same backend database then we don't need to have the DHCP
servers talk to each other to do failover. The failover is handled by the
backend DB. Using this model does have implications - in particular with
what happens if the two servers are partitioned.
''bool fixed - Is this lease fixed? If yes, never remove it from DB''
In the current v4 code fixed leases don't appear in the DB, they are in
the configuration file but don't get written to the DB. Reserved leases
do get written to the DB as well as going through the other steps of a
lease.
This brings up the question of configuration vs DB. In the current split
information such as pool start and end is in the configuration file but
not in the DB. Are we planning to have a separate configuration store?
(I thought the answer was yes). If so how are we deciding which
information goes into which area?
''bool fqdn_fwd - was forward update performed? Required during lease
release or expiration.''
What information we choose to store for DDNS will depend quite strongly on
how we choose to implement it. The original suggestion was that there
would be a co-located DNS server. The dhcp server would update the DNS
server via messages. The DNS server would update the master DNS server
using DNS magic. The more recent suggestion from Bluecat was that there
would be a DDNS update module. The DHCP server would simply send the
appropriate information to the DDNS module and it would be responsible for
doing the DDNS transactions with an actual DNS server. It would be
possible for the DDNS module to update the lease DB but it would probably
be neater to have a separate DB that contained only the DDNS information.
The DHCP server would pass messages to the DDNS module whenever there was
a transition and let the DDNS module sort out if it needed to do an
update.
In short we may not need to store any DDNS information (though we may wish
to track anything we need to generate such as FQDN names.)
As a minor note currently we don't actually know which DNS server we
updated. We can track up to 3 servers for a zone and simply hand them all
to the DNS client code. Mostly we get back success of failure - but no
indication of which server it contacted.
''t1, t2 timers (v6 only)''
I believe we currently keep similar things for v4 and use them to set the
suggested renew and rebind times.
''Do we want to keep separate list of fixed-leases?''
I think there are two features in our current separation of fixed-leases.
1) We don't have to put them into the DB, and indeed don't do several
things with them that we do with normal leases. 2) The provide a cheap
way of doing failover. There are some places that only do fixed leases.
When a new machine appears an address is selected for it and a new conf
file is generated (or they use omapi to generate the new entry). In this
case if the same set of fixed addresses are shared between a set of
servers they can all the same clients without conflict. (But woe unto you
if your files become inconsistent.)
I don't think (1) is that interesting and we have had to add the reserved
option to allow for fixed addresses that do go through the normal cycle.
(2) has some interest but we can probably get the same features out of
using the same DB for multiple DHCP servers.
''Do we want to have subnets and pools split?''
I believe we should try and simplify the current arrangement, but the
arrangement exists for some reasons so we should 1) try to figure out what
they are 2) provide similar features in the new arrangement 3) be prepared
to add some of the hierarchy as needed. (It may be that much of the
complexity is simply due to adding new features on top of old and we don't
actually need most of it, but I'm not sure if that is wishful thinking or
not.)
I believe there is one place where the current arrangement isn't strictly
hierarchical but I can't remember it offhand. In any case we should try
and make any hierarchy clean and clear. Currently it is the case that
even if you define some things within a restricted range (pool, subnet
etc) the affects are global. People regularly run into this as a problem.
''Do we want to store information in human readable form''
Stephen's comment seems reasonable. I would add that in case of any
inconsistency the binary data wins and the human readable is replaced.
''Network topology''
I don't think we currently need a complete topology. If I'm running the
server on a machine with 3 interfaces but only provide it one via the
command line it seems to be happy with a configuration that only describes
that interface. We do need to supply information about an interface even
if there won't be any clients using it directly though.
As to the complexity I think we may need to write up what we need for (b)
before making a final decision. As a user I'd be unhappy if I needed to
include specific interface to pool mappings. That would seem to make it
difficult to modify the server hardware without having to reconfigure the
DHCP server.
''DNS Updates''
See previous comments on DDNS. If we go with a separate module handling
all of this then all these issues move to there.
From the scratchpad section
''Are there requirements on detecting overlapping pools or other
inconsistencies''
My first though is that it would be part of the configuration code to
figure out if something is inconsistent before it can be put into the
lease database - assuming that some configuration information is going
into the DB. Or were you thinking about bugs in the server causing it to
try and write inconsistent information?
--
Ticket URL: <http://bind10.isc.org/ticket/1634#comment:6>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list