When a connection first comes up, if you have locators, send a message that says, "I have prefix X/Y from super prefix A/B distance Z."
Remote will respond with one of:
"I have prefix R/S from super prefix A/B distance Z." -- interior peer. Packets to and from X/Y and R/S can shortcut across this link.
"I have prefix R/S from super prefix A/B distance N<Z." -- Better upstream path. I will request locators from this link and deprecate X/Y.
"I want /S addresses." -- Link is downstream from me. If /S addresses are available, reply with an assignment. Otherwise, request a new larger assignment from upstream and then reply with an assignment /S in size. Also, if /S is bigger than the maximum allowed for that link, reject the request.
A link is either peering (P) or transit (T). If peering, it will not request of honor an "I want" message but it will route the destinations offered. Where does it propogate the peered addresses? Towards any interior peers and towards the origin of its prefixes.
If transit it may be parallel or not. If the link is designated to allow parallelism, then ask for /S addresses but don't give the ones on the alternate same-distance link up. When a downstream requests addresses, offer a prefix in both.
If you don't have addresses when the connection comes up, send a message which says, "I have no addresses. I want /S addressses."
A end host sends a multicast "I want /S addresses" when he comes up where /S is one.
Response to I want:
"Assign D/E from A/B distance Z to you. Assign F/G from A/B distance Z to you. Assign H/I from J/K distance L to you."
If multihomed you may get more than one. If its a parallel path to the same upstream ISP, they'll both be from the same super prefix. If its a different ISP, they won't.
Link failed:
If my upstream link fails, send a "X/Y no longer available" message to all links. Then pick the link that previously sent an I-have message with the lowest distance and send an "I want /s addresses."
Locators deprecated:
Send a message upstream that says, "Deprecate X/Y in C seconds." On the down stream side, send a message that says, "Assign D/E from A/B distance Z to you. Deprecate E/F (prior assignment) in C seconds." The downstream side should immedately register its new locators via SNRP and deprioritize the deprecated ones. After 1/2 C, it should remove the deprecated locators via SNRP. After C it should stop responding to packets with the old locators. After C, the upstream should stop routing E/F downstream and remove it from its table since it no longer holds that prefix.
Multihoming:
Accept a super-prefix from each upstream and propogate sub-prefixes downstream. Distance will be to the exit for that particular upstream.
Interface types:
1. Transit bidirectional. Will accept and/or offer addresses based on the distance to the source and will transmit routes towards the prefix sources. Use on interior links with more than one possible path to the ISP connections.
2. Transit accept. Will request and accept but won't offer addresses. Will transmit routes. Use on exterior links to an ISP.
3. Transit offer. Will offer but won't request or accept addresses. May accept routes. Use on exterior links to a customer.
4. Peer interior. Will accept and send shortcut routes for the owned prefixes. Will propogate them towards the prefix sources until they intersect. Not sure why you'd ever use this instead of transit bidirectional.
5. Peer exterior. Will accept and send super-prefix routes. Will propogate them towards the sources of the interior prefixes.