Managing allocatiions out of a CIDR block

Mark Prior writes...

I am trying to rewrite the system that we use to allocate blocks from
our provider blocks to customers. Previously the smallest block we
allocated was a class C and so this process was pretty easy but now I
want to be able to optimally use our allocations and allocate blocks
down to a /30. Does anyone have any ideas, or code, that will manage
multiple CIDR blocks and keep track of the currently unused parts of
the block and given a requirement find an appropriate allocation
(while not fragmenting it like crazy). It would be also useful if it
could collect together POP specific blocks so that, for example, two
parts of the same class C were at the same POP.

Ideas, suggestions?

I started writing one of these. I've been busy so it has been wallowing
in some subdirectory. But it will be web page based using CGI. Any browser
can access it (with authorization and valid IP) so people who work from
Win95 or Mac or UNIX workstations can access it. It is being written in C
and is to be tested under Apache on Linux, but will probably work fairly
well on any UNIX with a CGI conforming HTTP server. It will need its own
userid to run as (root not advised, but the personal userid of the network
administrator would work).

It will be completely CIDR. So if you add or delete or assign a /23 you
will be working with an aligned pair of class-C networks as one.

It will keep its own data files so no special DB server is needed (there
isn't that much to keep). It will generate SWIP templates and allocation
reports usable to request more space.

Any other features you think should be in it before I get too far along
in the basic design?

At this time I don't know when it will be complete. Looks like 2-4 months.
Could be more. Less if my own need for it increases to where I can justify
more time in it.

I just completed the CGI for my "Grass Roots Servers" project and you can
see a sample of my work (with source) at this location: - Lease or Buy Domain Names - Best Web Limited (click on "The TLD selector")