<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<font face="Helvetica, Arial, sans-serif"><font face="Helvetica,
Arial, sans-serif">Hey,<br>
<br>
<font face="Helvetica, Arial, sans-serif">we just released this
very simple experimental python library</font> that we call<font
face="Helvetica, Arial, sans-serif">ed "netdiff".</font><br>
<font face="Helvetica, Arial, sans-serif"><font face="Helvetica,
Arial, sans-serif"><font face="Helvetica, Arial, sans-serif"><br>
<font face="Helvetica, Arial, sans-serif">What can you do
with it?<br>
<br>
</font><font face="Helvetica, Arial, sans-serif">Mainly
figure out changes to the netwo<font face="Helvetica,
Arial, sans-serif">r<font face="Helvetica, Arial,
sans-serif">k topology. <br>
<font face="Helvetica, Arial, sans-serif"><font
face="Helvetica, Arial, sans-serif">Currently
only olsr 0.6.x and <font face="Helvetica,
Arial, sans-serif">batman-advanced are <font
face="Helvetica, Arial, sans-serif">implemented,
but it<font face="Helvetica, Arial,
sans-serif"> should be<font
face="Helvetica, Arial, sans-serif"> </font></font>quite
easy to implement other routing protocols</font>.</font></font></font><br>
</font></font></font><br>
</font></font></font></font></font>
<pre>from netdiff import OlsrParser</pre>
<pre>from netdiff import diff</pre>
<pre>from time import sleep</pre>
<pre>
current = OlsrParser('<a class="moz-txt-link-freetext" href="http://127.0.0.1:2006">http://127.0.0.1:2006</a>')
# wait 2 minutes
time.sleep(120)
latest = OlsrParser('<a class="moz-txt-link-freetext" href="http://127.0.0.1:2006">http://127.0.0.1:2006</a>')
</pre>
<pre>diff(current, latest)
</pre>
will return something like:<br>
<br>
<pre>{</pre>
<pre> "removed": [</pre>
<pre> ["10.150.0.7", "10.150.0.9"]</pre>
<pre> ], </pre>
<pre> "added": [</pre>
<pre> ["10.150.0.5", "10.150.0.4"]</pre>
<pre> ]</pre>
<pre>}</pre>
<br>
Another cool thing is to output a NetworkGraph json object, eg:<br>
<br>
<pre>from netdiff import BatmanParser</pre>
<pre>from netdiff import diff</pre>
<pre>
batman = BatmanParser('./test/alfred-output.json')</pre>
<pre>batman.json()</pre>
<br>
will output:<br>
<br>
<pre>{</pre>
<pre> "type": "NetworkGraph", </pre>
<pre> "protocol": "batman-adv", </pre>
<pre> "version": "2014.3.0", </pre>
<pre> "revision": null, </pre>
<pre> "metric": "TQ", </pre>
<pre> "nodes": [</pre>
<pre> {</pre>
<pre> "id": "a0:f3:c1:ac:6c:44"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "id": "a0:f3:c1:96:94:06"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "id": "10:fe:ed:37:3a:39"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "id": "00:05:1c:06:35:8e"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "id": "90:f6:52:f2:8c:2c"</pre>
<pre> }</pre>
<pre> ], </pre>
<pre> "links": [</pre>
<pre> {</pre>
<pre> "source": "a0:f3:c1:ac:6c:44", </pre>
<pre> "target": "10:fe:ed:37:3a:39", </pre>
<pre> "weight": "1.000"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "source": "a0:f3:c1:96:94:06", </pre>
<pre> "target": "90:f6:52:f2:8c:2c", </pre>
<pre> "weight": "1.000"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "source": "10:fe:ed:37:3a:39", </pre>
<pre> "target": "90:f6:52:f2:8c:2c", </pre>
<pre> "weight": "1.000"</pre>
<pre> }, </pre>
<pre> {</pre>
<pre> "source": "00:05:1c:06:35:8e", </pre>
<pre> "target": "90:f6:52:f2:8c:2c", </pre>
<pre> "weight": "1.000"</pre>
<pre> }</pre>
<pre> ]</pre>
<pre>}</pre>
<br>
Why we separated this logic into a library?<br>
<ul>
<li>not tied to any particular framework or node-database, it's
pure python</li>
<li>easy to add more routing protocols, newcomers can work on it
more easily compared to having to delve into a node-database</li>
<li>it's possible to add some nice features that we'll implement
in the near future thanks to the networkx library:</li>
<ul>
<li>calculating betweenness centrality</li>
<li>merge topologies of different nodes of an island into one
(union), so that if the network gets split up, it is possible
to draw a complete topology with just the missing link, and
not just half topology</li>
</ul>
</ul>
<p>So.. there's still some hard work to do to integrate this into
our node-db but I hope this experiment succeeds!<br>
</p>
<p>We are open for suggestions and improvements.<br>
</p>
<p>Federico<br>
</p>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</body>
</html>