System update spec proposal

Polychronis Ypodimatopoulos ypod at mit.edu
Wed Jun 27 17:43:50 EDT 2007


Actually things are not as simple as that.

The first problem is that the table of neighbors in  fwt_list_neigh does
not get updated to remove nodes that are no longer reachable, so after a
while you will be left with stale entries and you will either have to
reset the table with fwt_reset, or try to find out who is still there.
I'm not sure if this changed since last month, but if not, then both
solutions seem like a bad hack to me.

The second problem is that, even if you have a completely up-to-date
list of direct neighbors, link quality among them still can vary greatly
and you may end up trying to get something from a far neighbor at 1Mbit,
while there are others much closer with better link quality.

I wrote some code to deal with both problems, so that you have a
qualitative hop count (offering real numbers instead of just integers
for hop count) for all nodes in the mesh without
broadcasting/multicasting any frames. The following snapshot only shows
one neighbor with perfect reception.

http://web.media.mit.edu/~ypod/teleporter/dump.png

I can clean up the code and upload it somewhere.


Dan Williams wrote:
>> The only thing i'm missing atm is a way to tell which ip addresses to
>> prefer downloading from since they are close. This information is
>> already availible in the mesh routing tables in the network driver (and
>> possibly the arp cache), and its just a question of getting this info
>> and using it to drive what servers to pick for downloading.
>>     
>
> So, like michail said, do something like:
>
> n = 0
> while (True) {
>     buf = output of (iwpriv msh0 fwt_list_neigh n)
>     if (buf == "(null)")
>         break;  // all done
>
>     <parse buf into fields>
>     hwaddr = parsed[0]  // Grab the 'ra' field (1st one)
>     ip4addr = lookup_hwaddr_in_arp(hwaddr)
>     <do something with ip4addr>
>     n++;
> }
>   
>


Dan Williams wrote:
>> The only thing i'm missing atm is a way to tell which ip addresses to
>> prefer downloading from since they are close. This information is
>> already availible in the mesh routing tables in the network driver (and
>> possibly the arp cache), and its just a question of getting this info
>> and using it to drive what servers to pick for downloading.
>>     
>
> So, like michail said, do something like:
>
> n = 0
> while (True) {
>     buf = output of (iwpriv msh0 fwt_list_neigh n)
>     if (buf == "(null)")
>         break;  // all done
>
>     <parse buf into fields>
>     hwaddr = parsed[0]  // Grab the 'ra' field (1st one)
>     ip4addr = lookup_hwaddr_in_arp(hwaddr)
>     <do something with ip4addr>
>     n++;
> }
>
> Look on the 'olpc' branch of the libertas driver here:
>
> http://git.infradead.org/?p=libertas-2.6.git;a=blob;f=drivers/net/wireless/libertas/README;hb=olpc
> http://git.infradead.org/?p=libertas-2.6.git;a=blob;f=drivers/net/wireless/libertas/ioctl.c;hb=olpc
>
> The README has a description of the command, and the ioctl.c has the
> implementation.  Just search for the string "neigh" and you'll find it.
>
> Dan
>
>   
>>>> Basically aside from the vserver bits, which no one has seen, I don't
>>>> see a particular advantage to using rsync.  In fact, I see serious
>>>> downsides since it misses some of the key critical advantages of using
>>>> our own tool not the least of which is that we can make our tool do what
>>>> we want and with rsync you're talking about changing the protocols.
>>>>   
>>>>         
>>> Hmm, interestingly I see "using our own tool" as a disadvantage, not a 
>>> huge one, but a disadvantage nonetheless, in that we have more untested 
>>> code on the system (and we already have a lot), and in this case, in a 
>>> critical must-never-fail system.  For instance, what happens if the user 
>>> is never connected to another XO or school server, but only connects to 
>>> a (non-mesh) WiFi network?  Does the mesh-broadcast upgrade discovery 
>>> protocol work in that case?
>>>       
>> Avahi works fine for these cases too. Of course, since it was originally
>> created for normal networks. However, if you never come close to another
>> OLPC machine, then we won't find a machine to upgrade against. Its quite
>> trivial to make it pull from any http server on the net, but that has to
>> be either polled (which I don't like) or initiated manually (which might
>> be fine).
>>
>>
>> _______________________________________________
>> Devel mailing list
>> Devel at lists.laptop.org
>> http://lists.laptop.org/listinfo/devel
>>     
>
> _______________________________________________
> Devel mailing list
> Devel at lists.laptop.org
> http://lists.laptop.org/listinfo/devel
>   



More information about the Devel mailing list