How to obtain and allocate IPv6 addresses

This page contains a suggested approach for allocating IPv6 addresses within the Mesh. Only two node types are used in this document, namely backbone and client nodes, whose meaning should be clear.

So, you want to get an IPv6 address for your node in the Brisbane Mesh? OK, then you will fall into one of these categories:

On the other side, if you are a backabone node with an address space already, here are some ways of dividing the address space up for peer backbone nodes:

1. Client node

You've got a single antenna and want to attach to a nearby server node.

Try these in order:

2. Backbone extension

You want to set up a point-to-point with a nearby (backbone) node who has just put up an antenna dedicated just for you.

Needs more work

3. 'Seed' backbone

You're the first node in an area, you can't connect to anywhere else and you've got plans to have people connect to you.

Note: Try as hard as you can to get an address space allocated to you from some nearby backbone node, because by allocating an address using the next step introduces complexity into the routing tables, and therefore increases the overhead of routing traffic.

If you've talked with other backbone nodes, and things look grim, then you can choose one of these two steps:

Hierarchical carving

You are already a backbone node with an address space and you want to give out addresses to your peers.

This section describes how to efficiently subnet for strongly tree-shaped networks.

We are mostly concerned with routing overhead, and not so much with address space exhaustion. So, the following subnetting scheme is described in the context of site-local address spaces (i.e. those that start with fec). In general, router addresses will be in the following form:

-----10-----   ---6---   -------------48------------   -----64-----
1111 1110 11 | rrrr rr | aaa bbb .. ccc | 000 .. 000 | xxxxx..xxxxx
  SL prefix  | seed id |  NLA ident     |    zero    | interface ID
-------------network-part--------------   --------host-part--------

The first 16 bits identify the address space of a seed node, consisting of the 10-bit "site-local" prefix, and the 6-bit seed number.

The next 48 bits are broken up into 3-bit "next-level" addresses. The first of these indicate the address space delegated to "2nd level" peers, i.e those peers connected directly to the seed node. The next triple of bits after that indicating the address space of "3rd level" peers which are those directly connected to 2nd level peers, and so forth. There is sufficient space to split into 16 levels. (i.e. an n'th level host has a prefix of length 16+3(n-1) bits.)

The last 64 bits are the EUI-64 interface ID, which is derived from the network interface's 48 bit MAC address (by inserting ff:ff or ff:fe into the middle).

Let's go through an example. Say you are a 4th level node with a WaveLAN card with MAC address 00:60:1d:f7:21:09 and have been given the subnet prefix fec1:2e80::/25 by your "upstream" (level 3) backbone. Your 25-bit, level 4 subnet prefix can be broken up in the following way:

--f- ==e= ---c- ==1= -:2--==e==-8---
1111 1110 11 00 0001 001 011 101
------------ -- ---- --- --- ---
S.L. prefix  seed #   L2  L3  L4

But what is your host's address? Because your backbone node is "multihomed", you will have two addresses; namely the one that your upstream provider sees, and the one that all your clients see. Your clients (and the rest of the mesh) should now know you as fec1:2e80::0060:1dff:fff7:2109.

Aside: Actually, your upstream provider can reach you through 3 addresses: