IP Address Assignment Behavior and Specs
1/19/00 Created by SY-
1/24/00 First draft
1/25/00 Add Rob's comments
2/3/00 Major modifications of Automatic IP Address Assignment
4/24/00 Rob reviews again
12/8/00 Last modified
This document outlines the desired behaviour of NetDB3 when assigning IP addresses.
This should cover interface IP addresses for all node types (simple, advanced, router, IPC)
and dynamic address for networks and IPCs.
Table of Contents
IP addresses are automatically assigned in the following cases:
- Using a template node
- Using a node as a template
- User does not specify address or address space (dynamic DHCP address)
- User specifies count>1 for IPC or dynamic addresses
- User specifies explicit IP address that is taken
- User specifies address space in IP address input field
- User select address space from select box
Additional notes:
- Addresses are reserved to a user, not to an object. Reserved addresses that are not used should
be released when the user logs out.
Cases 1-3 - System attempts to find the best representative IP address as follows:
Is the node a template?
- Yes
Does the template have an address space?
- Yes
Allocate IP address by AS
- No
Does the user have a default address space?
- Yes
Allocate IP address by AS
- No
Do not allocate- leave IP address field blank
- No
Sort node's addresses by rank, active, IP numeric
- Yes
Allocate IP address based on AS of this address
- No
Does the user have a default address space?
- Yes
- No
Do not allocate- leave IP address field blank
No errors are ever returned. If the address space is full or the user does not have
rights to the address space, the IP address field is left blank.
Cases 4-7 - user has specified address, address space and/or count
Determining start and end addresses
IP address will be assigned as follows:
- Given Input: address space/address, (count)
- Determine applicable address space- if address space does not exist, return error
- Ownership check for address space. Error if user does not have rights to AS
- If count = 1,
- Determine if using address or address space
- If input field, IP address or IP address space is converted into an IP address (IP1)
- if input is in 4 octet format (w.x.y.z), strip off prefixes
Ex. 171.64.0.0/16 converts to 171.64.0.0
- if input is not in 4 octet format, strip off network prefix and fill in with zeroes till 4 octets.
Example: 171.64.20/24 converts to 171.64.20.0
- If address space select box, convert AS to IP address (IP1) by stripping off prefix
- Determine base(start) and limit(end) addresses
Base address
- if IP1 > low_reserve, then base = IP1
- if IP1 = as_base, then base = low_reserve
- if as_base < IP1 < low_reserve, then
- if god then base= IP1 else (if mortal, base = low_reserve)
Limit address
- limit = high_reserve
- If start address > end address, give error- no available addresses
Look for Address
- If count n > 1
- start address = low_reserve (no- start address is the greater of low_reserve or requested address 12/8/00), end address = high_reserve
- if block of addresses are available at start address, assign those addresses (12/8/00)
- between start and end address, make table of all the available blocks with starting block address
and # of addresses in block
- look through table for CBT (continuous best try). i.e., find smallest block that will fit needed_addr (Best Fit)
- if no continuous block, assign biggest block. then try for CBT again (loop) until have enough addresses
- if not enough addresses, do not assign addresses previously found and end
- If count = 1,
- if base is available, then use it, else ( if base < low_r, base = low_r)
- prefix pf = default_pf (27)
- while (pf>prefix_len)
- loop (base, limit) (DO NOT START OVER AT BEGINNING OF AS)
- base ++
- check for /pf net address and /pf broadcast address
- check if available
- end
- pf - -
- end
- End:
- if count >1 and got all addresses, SUCCESS- no message
- if count >1 and did not get all addresses, ERROR "could not find (count) addresses in address space (AS)"
- if count = 1 and did not get address, ERROR "no addresses available in address space (AS)"
- if count = 1 and got address and address=base, SUCCESS- no message
- if count = 1 and got address and (base = as_base) and (addr <> base), SUCCESS- no message
- if count = 1 and got address and (base <> as_base) and (addr <> base),
WARNING- "allocated address (address) not equal to requested address (base)"
- if as_base does not exist, ERROR "cannot assign address in non-existent address space"
- if user does not have rights to as_base, ERROR "cannot assign address because insufficient rights to
address space
Invalid address spaces will generate error.
Valid address space formats
- w.x.y.z/n - existing address space with prefix
e.g. 171.64.20.0/24
- w.x.y/n - existing address space without trailing zeroes
e.g. 171.64.20/24
- w.x.y.z - existing address space without prefix
e.g. 171.64.20.0
The below portion of the NetDB node page is used for IP addresses and will be referred to in this
section. I picked the Advanced Node interface since it's the most comprehensive.
Creating IP Addresses
- Enter explicit IP address in input field in w.x.y.z format
ex. 171.64.20.5, 171.66.23.4
Will assign next available by above algorithm, starting from this explicit address
If explicit IP address is not available so another is selected, message will be sent.
If no IP address available between explicit IP address and end of AS, send an error.
- Enter existing address space in input field- assign addresses as specified above.
- Select address space from select box- assign address as specified above
Input field takes precedence over select box.
Active box is checked by default
Modifying IP Addresses
- Erase old IP address and explicitly enter a new IP address in w.x.y.z format
- Erase old IP address and enter address space
- Uncheck old address. Hit "addl" to get select box and input field. Add new address as usual.
Deleting IP addresses
IP addresses can be deleted in two ways:
- Unclick box to left of IP address
- Clear IP address box and name (if present)-
(currently, a checked box next to a blank IP address causes an error)
Adding Additional Addresses
- Hit "addl" button. Add new address as usual. If nothing is selected, do
not give error. (currently gives error unless one unclicks box)
Use as Template
- if template is type 'template', use address space from template
- if the template has no address space, use the user's default address space
- if user has no default address, don't reserve an address
- if template is not type 'template',
- sort all addresses by interface number, active flag, ip and use the address space
of the 1st address. Do not use template's IP address as starting address- start from beginning of
address space.
- if the template has no addresses, use the user's default address space
- if user has no default address, don't reserve an address
Dynamic DHCP Addresses
Dynamic DHCP Addresses are addresses used for Roaming DHCP. They are associated
with address spaces within a network. Below is a portion of the Network page, showing
the dynamic address section as it should look.
Notes on Dynamic DHCP Addresses
- When adding another address, the Name field is not present. User cannot assign initial name
but can modify an existing name.
- Automatically assigned name will be in the following format:
DN(IP Address) where IP Address is in hex, without periods.
e.g. for 171.64.20.5, the name would be "DNab351005"
- Active box is checked by default
- IP addresses are assigned in the same way as other IP addresses with the exception
of the count field and reserves.
- If an integer n is entered into the count field, the program will attempt to assign n Dynamic
addresses. Bulk assignment will not try to skip /27 network and broadcast addresses. Errors will be given if there are not enough available addresses.
- If no IP address or address space is entered but the count field is entered with an integer
and the "addl" button is pushed, the program assumes the dynamic addresses are in
the associated address space. So IP addresses are still assigned.
- Even if user is god, reserves will be observed if no explicit start address assigned
IPC Addresses
IPC Addresses are the addresses handed out by an IPC provider. IPC addresses
are not the interface addresses of an IPC node. Below is a portion of the IPC
page, showing the IPC address section as it should look.
Notes on IPC Addresses
- When adding another address, the Name field is not present. User cannot assign initial name
but can modify an existing name.
- Automatically assigned name will be in the following format:
DN where IP Address is in hex, without periods.
e.g. for 171.64.20.5, the name would be "DNab351005"
- Active box is checked by default
- IP addresses are assigned in the same way as other IP addresses with the exception
of the count field and reserves
- If an integer n is entered into the count field, the program will attempt to assign n IPC
addresses. Bulk assignments will not attempt to skip /27 network and broadcast addresses. Errors will be given if there are not enough available addresses.
- Even if user is god, reserves will be observed if no explicit start address
Addresses are checked and reserved at the following times:
- User hits "verify" button next to IP address- all addresses verified on that interface
- User assigns multiple IPC or Dynamic addresses using Count field
- User hits "Create" or "Modify" button
- User hits "add'l" button- all addresses verified on that interfaces
P = pass, F = fail
Automatic Address Assignment from User's Default Address Space
- Is address assigned from user's address space?P 3/25
- What if no address left in user's address space?P 4/4
- Does it observe the /27 assignment order rule? P 3/2
- Are reserves observed? Even for gods? P 3/25
- No default address space- should leave blank P 4/4
Address Space Select Box
- Reserves observed P 3/25
- /27 rule observed P 3/2
- Only see user's allowed AS P 3/2
IP Address Input Field
- Input valid address space P 4/4
- Input invalid address space to create start point P 3/25
- Input valid non-used IP address P 3/2
- Input invalid IP address (no associated address space) P3/2
- Input invalid (not valid IP addr or AS) P 3/25
Invalid AS get put in list and checked- feature
- Valid used IP address- should get next available with message P 3/25
- No address available- get message P 3/25
- Are reserves observed?
- Accepts all AS formats P 3/25
- If AS is 0/24, what happens if try 0/25 or 128/25
- /27 rule observed if address space
- God can explcitly assign reserved address P 3/25
- Can explicity assign /27 broadcast or net address P 4/4
- Use broadcast address- get error F 3/25
- Address space does not wrap around. P4/4
Verify button/ reserving
- Verified names/addresses reserved to user P 3/2
- If add the same address as an existing address and hit verify, should assign next avail
P 3/2
- Verify existing address/name - no error P 3/2
- Verify name, no address- error expected P 3/2
- Verify blank fields- error expected P 3/2
- If verify an IP address, then uncheck and commit, is that address still locked?
F 3/2 An odd condition. Also, that user now cannot use
it even tho verified under its id (confirmed by GS for dialtest user)
- Verified names and addresses listed F 3/2
- Single verify button per interface but verifies all addresses on that interface
- Single verify button for IPC addresses, DHCP addresses
- Reserved addresses cleaned up after user logs out F 4/4
- No best fit if count=1 P 4/4
- Should not lose any data during name or address verifies
Additional button
- Does add'l verify other addresses so no duplicates? P 3/25
- Don't enter additional- should get no error P 3/2
IPC Addresses
- Does count work properly?
- Find the best block? P 3/25
- Invalid count format should give error P 3/25
- Enter name, no address
- Automatic name assignment
- Does not assign broadcast or net addresses P 3/25
- Count bigger than available addresses- error P 3/25
- Reserves observed? F 3/2
Dynamic Addresses
- Does count work properly?
- Find the best block? P 3/25
- What if select different AS? P 4/4
- Invalid count format
- Enter name, no address
- Automatic name assignment
- Does not assign broadcast or net addresses P 3/25
- Count bigger than available addresses P 3/25
- Reserves observed? F 3/2 With lo/hi reserve = 0, acts like
reserves = 2
Existing Addresses
- If uncheck existing address and try to reassign and verify, should accept.
P 3/2
- If uncheck existing address and try additional assignment in that AS, does it skip the unchecked address?
Feature P 3/25
- Unclick to remove address F 3/2
sometimes, when deleting DHCP addr, get "<#> not locked by user sunia" error
- Clear address to remove address - name should go away P 3/2
- Clear name to remove name P 3/2
- Change existing address to AS. Accepts all formats? P /4
- Change all existing addresses to same AS- assigned properly?P 3/2
- If existing addr changed to another existing addr, should get reassigned to next avail
P 3/2
- change existing address, but not name. Hit verify Should accept. F 3/2
get error that name already exists
- If delete address, other users should be able to use it
Router Node
- 2 addresses per interface F 3/2
Only one address field now
- Only first address on first interface is automatically assigned during create
Template Node
- What if use template which has AS that user does not have rights to?
- What if AS is out of addresses?
- Reserves observed?
- /27 rule observed?
- If no AS, does it use user's default AS?
Use as Template
- What if use template which has AS that user does not have rights to?
- What if AS is out of addresses?
- Reserves observed?
- /27 rule observed?
- Is the correct AS used (if multiple interfaces, active/non-active addresses, order)
F 3/25
- If no AS, does it use user's default AS?
- Assign from beginning of AS, not from IP address
- What if no address is active?
Create/Modify
- Check for different behavior given node already exists or doesn't exist
Display
- IP addresses should be in number order, not string order, on info page G 3/25
Duplicate Addresses
- If duplicate addresses are found on an interface, one will be assigned to next avail address
P 3/2
- If duplicate address but no available address, get error. F 3/2
Get error but cannot simply declick or clear duplicate. Perpetual loop.
Multiple Interfaces/Nodes
- How is automatic address assignment, verify, duplicates affected on multiple interfaces?
- How is automatic address assignment, verify, duplicates affected on multiple locked nodes?
Errors
- If an error occurs during any operation, is the returned page correct?
P 4/4
User Access to Address Space
- "bad addr" means user does not have access to that address' AS
- "bad AS" means user does not have access to that address space (AS)
- In below cases, should get error saying user doesn't have rights to AS. Original entry
should be listed but not checked.
- Create Node
- Create - use bad addr - hit create F 3/2
get error but bad input is still checked
- Create - use bad AS - hit create F 3/2
node is created with no IP address
- Create - use bad addr - hit verify
- Create - use bad AS - hit verify
- Create - use bad addr - hit add'l
- Create - use bad AS - hit add'l
- Create - hit add'l - use bad addr - hit create P 4/4
- Create - hit add'l - use bad AS - hit create F 3/2
get error but bad input is still checked
- Create - hit add'l - use bad addr - hit verify F 3/2
get error but bad input is still checked
- Create - hit add'l - use bad AS - hit verify F 3/2
get error but bad input is still checked
- Create - hit add'l - use bad addr - hit add'l F 3/2
no error
- Create - hit add'l - use bad AS - hit add'l F 3/2
get error but bad input is still checked
- Modify Node
- Modify - use bad addr for existing - hit Modify F 3/2
get error but bad input is still checked
- Modify - use bad AS for existing - hit Modify
- Modify - use bad addr for existing - hit verify F 3/2
get error but bad input is still checked
- Modify - use bad AS for existing- hit verify
- Modify - use bad addr for existing - hit add'l
- Modify - use bad AS for existing- hit add'l
- Modify - hit add'l - use bad addr - hit Modify
- Modify - hit add'l - use bad AS - hit Modify
- Modify - hit add'l - use bad addr - hit verify
- Modify - hit add'l - use bad AS - hit verify
- Modify - hit add'l - use bad addr - hit add'l
- Modify - hit add'l - use bad AS - hit add'l
- Use as Template - not Template Node
- Use as Template - use bad addr - hit create
- Use as Template - use bad AS - hit create
- Use as Template - use bad addr - hit verify
- Use as Template - use bad AS - hit verify
- Use as Template - use bad addr - hit add'l
- Use as Template - use bad AS - hit add'l
- Use as Template - hit add'l - use bad addr - hit create
- Use as Template - hit add'l - use bad AS - hit create
- Use as Template - hit add'l - use bad addr - hit verify
- Use as Template - hit add'l - use bad AS - hit verify
- Use as Template - hit add'l - use bad addr - hit add'l
- Use as Template - hit add'l - use bad AS - hit add'l
- Use as Template - Template Node
- Use as Template - use bad addr - hit create
- Use as Template - use bad AS - hit create
- Use as Template - use bad addr - hit verify
- Use as Template - use bad AS - hit verify
- Use as Template - use bad addr - hit add'l
- Use as Template - use bad AS - hit add'l
- Use as Template - hit add'l - use bad addr - hit create
- Use as Template - hit add'l - use bad AS - hit create
- Use as Template - hit add'l - use bad addr - hit verify
- Use as Template - hit add'l - use bad AS - hit verify
- Use as Template - hit add'l - use bad addr - hit add'l
- Use as Template - hit add'l - use bad AS - hit add'l
- Advanced Node
- Create - use bad addr - hit create
- Create - use bad AS - hit create
- Create - use bad addr - hit verify
- Create - use bad AS - hit verify
- Create - use bad addr - hit add'l
- Create - use bad AS - hit add'l
- Create - hit add'l - use bad addr - hit create
- Create - hit add'l - use bad AS - hit create
- Create - hit add'l - use bad addr - hit verify
- Create - hit add'l - use bad AS - hit verify
- Create - hit add'l - use bad addr - hit add'l
- Create - hit add'l - use bad AS - hit add'l
- IPC Node
- Create - use bad addr - hit create
- Create - use bad AS - hit create
- Create - use bad addr - hit verify
- Create - use bad AS - hit verify
- Create - use bad addr - hit add'l
- Create - use bad AS - hit add'l
- Create - hit add'l - use bad addr - hit create
- Create - hit add'l - use bad AS - hit create
- Create - hit add'l - use bad addr - hit verify
- Create - hit add'l - use bad AS - hit verify
- Create - hit add'l - use bad addr - hit add'l
- Create - hit add'l - use bad AS - hit add'l
THE END