addressdb revision 9bff67898d55cddfcec9ce30cc2b1bb6211ec691
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinCopyright (C) 2000 Internet Software Consortium.
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic UpdaterSee COPYRIGHT in the source root or http://www.isc.org/copyright for terms.
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein$Id: addressdb,v 1.2 2000/06/21 23:43:28 tale Exp $
4a14ce5ba00ab7bc55c99ffdcf59c7a4ab902721Automatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinYou are lost in a maze of twisty little pointers, all alike...
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinADB |-> 0 |-> handle ---> handle ---> 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | | |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |-lists of names --------> name -------> name -------> 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | | |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | namehook namehook
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | | | | |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | | 0 0 -> fetch
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | V
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater |-lists of elements -----> element ----> element ----> element ---> 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | | | |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | |-> zoneinfo |-> 0 |-> zoneinfo
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |-lists of dead handles
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein ...
e21a2904f02a03fa06b6db04d348f65fe9c67b2bMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinA handle contains a task, taskaction, and event argument, and is linkable
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinin two ways. One, for the list returned to the caller, and two to be
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinattached to either a name (so events can be generated) or to the dead handle
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austeinlist, where no events are generated.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinHANDLE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |--- addrinfo ---> addrinfo ---> 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein | |-> entry |-> entry
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |--- task, action, arg
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein V
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinHANDLE
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein |
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein V
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein 0
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinNotes and questions:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
ab8729140b1ad688ab03e1e9ce438fb1cbb49222Automatic Updater o If a handle is on the dead handle list, it is only waiting for
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater the caller to dns_adb_done() it.
75c0816e8295e180f4bc7f10db3d0d880383bc1cMark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o If a handle is on a name list, it will generate at most one
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein event, and then be moved to the dead handle list.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o If events are not requested, it is NEVER placed on the name's
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein list, even though fetches for that name may be started.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o Names will have to have a reference count for each fetch
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein in progress. They will also have a bit that says some
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater previous fetches failed. XXX How in the world would I
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater "refresh" the data? If I only got 2 of 9 A6 chains to converge,
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater when and how do I restart them later?
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o The caller will give us a name, and we will return two items:
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater a handle and a list of addresses. If the list was non-empty when
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater it was given to us, we will append (unique) addrinfo's to the list.
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater o How in the world do you shut this thing down?
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater If you cancel the fetches first:
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater 1. The handles are sent an event saying "no more
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein names are coming."
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein 2. The handles are moved to the dead handle list.
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrews
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein If you cancel the handles first:
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater 1. The handles are moved to the dead handle list.
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater It would therefore seem simpler to cancel/done all handles first,
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater then all fetches.
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o If a fetch returns a CNAME, what do we do?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o If a fetch returns a DNAME, what do we do?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein o If a fetch returns 4 ipv4 addresses, we will have to allocate
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater 3 more (total of 4) namehooks, 4 entries, and fill them in.
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater What happens if only some of these can be allocated?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater o ipv6 raises the memory problem to a new level. What if we
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater have to fork into multiple chains, but we run out of memory?
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
1fdd2470b625a58b57d0b155e6caf8c4fc0afe8aAutomatic Updater
58d9e9169e7ab4355a0b0bfc13bc616bc5247dfeAutomatic Updater----------------------------------------------------------------------
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob AusteinLooking up entries via names:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Look for the name in the database.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein FOUND:
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein For each complete address, allocate an addrinfo structure
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein and add it to the handle.
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater If any fetches are in progress for this name, attach this
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein handle to this name so events can be posted to the handle,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if the handle wants events.
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater If no fetches are in progress and the name is incomplete,
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater see if we can start a fetch for this name.
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater NOT FOUND:
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater Create a new adbname structure.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater Create a new namehook structure.
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein Start a fetch on this name.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater If more data is coming (fetches are in progress) attach
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater the handle to the name, so it can get notification of
3cddb2c552ee6582e8db0849c28747f6b6ca57feAutomatic Updater new data.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater If the name is incomplete (due to fetches in progress,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein recently failed fetches, or the inability to start new
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater fetches) copy the incomplete flag to the handle, so the
2895f101b5585a19015ac2c2c1e1812ac467fa12Automatic Updater caller can know this.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein