Our internal solution does:
-> assigns subnets out of internal 'allocations' to help aggregation. The LIR allocations and internal 'allocations' form a tree down to the most specific assignments.
I think that this comes under designing the human viewable data structures to store information about the IP address space itself. I think what you have done is a good idea, though. As Nigel Titley pointed this out to me originally, IP lends itself very nicely to a binary tree of largest free blocks. Lets design the data structure available to the hostmaster.
-> validation against 'overlapping' assignments and assignments out of 'less specific' allocation bounds.
We definately need overlap detection.
-> 'allocation pools' for flexible assignments in cases where addresses for a single site are not aggregated into a single block.
This comes under designing the data structures, I think.
-> searching of unassigned space using a combined exact-fit/first-fit strategy.
Please expand on this. I don't want an end product that decides for you which subnet you will be assigning. That will be useful for people who need to migrate already used ranges of IP address space into the tool (ie everyone). QIP 4 does this, which is another reason why IMHO, it's totally useless. (My views do not represent anybody that Lucent can sue).
-> heuristic net_name generation
I think that this is a lovely touch, but it doesn't come into the "minimal requirements" umbrella.
-> quick overview of allocation tree, also showing unassigned gaps.
think that this will indeed be a useful feature of any data structre we decide on.
-> data is stored in a database that also stores routing and reverse DNS information.
I don't believe if IPMT is mandated to deal with DNS at all, at least in its first incarnation.
no support for IPv6 so far...
IPv6 is something I'd like IPMT to eventually support. Still, this might have to get stuck on the back burner for the moment... So; A summary so far: 1) We need to check for properly formulated dotted quad format IPs: n.n.n.n/m where n >= 0; n <= 255; m >= 1; m <= 32; 2) We need to check for overlaps so that two subnets cannot overlap any space. We need to check for: (where a is frist IP in range, z is last IP in range) 0 : No overlap a1---z1 a2---z2 a1---z1 a2---z2 1 : Range 1 totally inside range 2 a1---z1 a2--------------z2 2 : Range 2 totally inside range 1 a1--------------z1 a2---z2 3 : Partial overlap a1-----z1 a2-----z2 a1-----z1 a2-----z2 4 : Perfect overlap, range 1 == range 2 a1-----z1 a2-----z2 5 : Edge overlap = someone screwed up, editing by hand a1---z1 a2---z2 a1---z1 a2---z2 ie. 10.15.20.0 -- 10.15.21.0 10.15.21.0 -- 10.15.21.255 (oops). 3) We need some kind of data structure to be defined, so that the hostmaster can access the IP space in a sensible way. I reckon this should include: o A way of seeing the IP space - what is free, what is used. o A way of dividing the IP space into sections for assigning to different areas, such as colo, dialup etc. o A sensible method of assigning free space (ie not always the next free block - think of migration). 4) We need to think about IPv6 I hope people will comment on this summary and pummel beat it into shape. Nothing worthwhile ever happened by people being polite. Thank you very much Michael for your comments. Guy -- Guy Vegoda \ guy@vegoda.org *Please do not send html* NIC: GUY-RIPE \ guy@cryptography.org.uk *attachments* Unix, Linux Hobbyist \ +44(0)20 7961 8318 (work) www.thenakedfrenchman.com \ +44(0)958 469 532 (cell)
On Tue, Apr 03, 2001 at 11:00:59AM +0100, Guy Vegoda wrote:
-> searching of unassigned space using a combined exact-fit/first-fit strategy.
Please expand on this.
The tool will accept a number for the count of IP addresses to be assigned and search for a suitably aligned assignment. Obviously you will end with holes in your allocation whenever an assignment is returned. There are various alogrithms (coming by memory or disk space allocators) that try to get 'optimal' results by filling the holes. This tool does a two phase search, first it looks for assignments that fill holes completely and then it falls back and searches the first hole in the allocation that is large enough.
I don't want an end product that decides for you which subnet you will be assigning.
Why not ? Most assignments are completely arbitrary. There are two reasons to chose a specific subnet: aggregation and reservation. In both cases you do a bigger assignment first (which only exists privately, not in the RIPE database) and select your assignments from this block. -- i.A. Michael van Elst / phone: +49 721 9652 330 Xlink - Network Information Centre \/ fax: +49 721 9652 349 Emmy-Noether-Strasse 9 /\ link http://nic.xlink.net/ D-76131 Karlsruhe, Germany /_______ email: hostmaster@xlink.net [ KPNQwest Germany GmbH, Sitz Karlsruhe ] [ Amtsgericht Karlsruhe HRB 8161, Geschaeftsfuehrer: Koen Bertoen ]
Michael van Elst writes:
There are various alogrithms (coming by memory or disk space allocators) that try to get 'optimal' results by filling the holes. This tool does a two phase search, first it looks for assignments that fill holes completely and then it falls back and searches the first hole in the allocation that is large enough.
This is suboptimal. Assuming 10.0.0.0/28, 10.0.2.0/23 and 10.0.4.0/25 are free and you search for a /26. The above algorithm will find 10.0.2.0/23 and break it up, whereas it is better to break up 10.0.4.0/25 in order to avoid excessive fragementation. IMHO the algorithm should search for the first block of minimal size which is large enough to hold the assignment. Robert
Hi, On Thu, Apr 19, 2001 at 08:14:43PM +0200, Michael van Elst wrote:
I don't want an end product that decides for you which subnet you will be assigning.
Why not ? Most assignments are completely arbitrary. There are two reasons to chose a specific subnet: aggregation and reservation. In both cases you do a bigger assignment first (which only exists privately, not in the RIPE database) and select your assignments from this block.
Seconded. Such a tool would be very useful "give me a free /28 in Munich". Gert Doering -- NetMaster -- SpaceNet AG Mail: netmaster@Space.Net Joseph-Dollinger-Bogen 14 Tel : +49-89-32356-0 80807 Muenchen Fax : +49-89-32356-299
On Thu, 19 Apr 2001, Michael van Elst wrote: MvE> The tool will accept a number for the count of IP addresses to be assigned MvE> and search for a suitably aligned assignment. Obviously you will end with MvE> holes in your allocation whenever an assignment is returned. MvE> MvE> There are various alogrithms (coming by memory or disk space allocators) MvE> that try to get 'optimal' results by filling the holes. This tool does a MvE> two phase search, first it looks for assignments that fill holes completely MvE> and then it falls back and searches the first hole in the allocation that MvE> is large enough. MvE> MvE> MvE> > I don't want an end product that decides for you MvE> > which subnet you will be assigning. MvE> MvE> Why not ? Most assignments are completely arbitrary. There are two MvE> reasons to chose a specific subnet: aggregation and reservation. MvE> In both cases you do a bigger assignment first (which only exists MvE> privately, not in the RIPE database) and select your assignments MvE> from this block. I agreed, and we tried to first fill requests for, e.g., /24 in even blocks in /20 "reserved" for /24s, to be expanded to /23 when needed. Same algorithms for other popular block sizes, such as /27 and /26... Sincerely, D.Marck [DM5020, DM268-RIPE, DM3-RIPN] ------------------------------------------------------------------------ *** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck@rinet.ru *** ------------------------------------------------------------------------
On Thu, 19 Apr 2001, Michael van Elst wrote:
Why not ? Most assignments are completely arbitrary. There are two reasons to chose a specific subnet: aggregation and reservation. In both cases you do a bigger assignment first (which only exists privately, not in the RIPE database) and select your assignments from this block.
Implementation suggestions that spring to mind: 1. since both perl and PHP support object techniques, make the subnet selection strategy a class (or module, or whatever the language-specific term of the week is). Instantiate a configured class to switch easily between strategies. This probably generalises for other program areas. 2. this system may have multiple users accessing it simultaneously. subnet selections etc cannot be allowed to conflict. PostgreSQL has far more mature support for the proper transactions that are motivated, and also has a native IP address/subnet datatype with corresponding operations. 3. multiple front-end support should be possible. I can guarantee that some LIRs will want to customise it, possibly drastically. Again, an object class (module) can support this, or you can just spit out XML and have XSLT parse it for HTML/pdf/etc - or use both strategies. This is surprisingly easy. 4. this is off-topic for the lir-wg and needs a dedicated mailing list! see [7] 5. once a dedicated list is up, a code license has to be chosen, and then a cvs/build server provided. I suggest these issues wait, but they are of equal importance with the choice of implementation language and deployment environment. 6. php can be used outside of a web interface, but perl is still more developer-friendly in the long run, has a wider range of libraries, greater code maturity, a larger userbase especially in this community, and proper structuring will allow development of Perl/TK interfaces to logic core without interference with web FE's - et cetera. Complicated data structures in Perl are *not* a pain - in fact, they're considerably more powerful, expressive and concise than those available in the language cores of all other language candidates, as anyone who's used the Schwartzian Transform will agree. 7. this is off-topic for the lir-wg and needs a dedicated mailing list! see [4] - Joshua
participants (6)
-
Dmitry Morozovsky
-
Gert Doering, Netmaster
-
Guy Vegoda
-
Joshua Goodall
-
Michael van Elst
-
Robert Kiessling