IPv6 addresses are allegedly distributed in a way that reduces the routing table bloat seen in IPv4. With no central authority, how do you manage that?
I'm not sure that the problem is unsolvable, but I don't have any reason to believe that someone out there is sitting on a revolutionary global mesh routing algorithm, waiting for the right time to publish.
I have a project in the works where a future piece of it is intended to address this issue. I'm essentially waiting for the right time to publish. Since it's the current discussion here, here's the relevant part...
My intention is to use a piece of IPv6 space and encode a lat/long into it in a way that: A) you only have to make sure that no one near you is using the same lat/long, and B) for networks far away from you, you can represent many of them in a single entry line in your routing table. A network-slash-mask notation ends up encoding a rectangle laid onto the globe.
Specifically, I am intending to set up shop in 0x3FFF/16. The next 48 bits are the central lat/long (encoded in a special way) of the main control point you declare for you network. The last 64-bits are for you to spread across all the nodes in your network or managed group.
The lat/long is encoded as two 24-bit values, interleaved. With a lat or a long represented a 24-bit number, you have a granularity of about 8 feet on average. They are interleaved so that you can slice them with a netmask value and refer to large rectangle (granted it's warped by being laid onto a sphere) as a single entry. For networks far from you, most of the time all you really care about is that what direction are they (N-S-E-W), because you'll push them out a link headed that direction. For networks near you, you will store more entries.
My encoding of the lat/long is to take the -90 to +90 of lat, and -180 to +180 of long and map them across a 24-bit signed integer. The scaling of them becomes:
integer_lat_value = int(latitude / 90.0 * 2^23)
integer_long_value = int(longitude / 180 * 2^23)
The above values are then interlaced into a 48-bit value, most significant bits first, latitude first.