Hi All,<div><br></div><div>In follow up to the Commotion code sprint / conference that just occurred:</div><div><a href="http://tech.chambana.net/projects/commotion">http://tech.chambana.net/projects/commotion</a></div><div>
<a href="http://tech.chambana.net/projects/commotion/wiki/JUNE_2011_CODE_SPRINTSUMMIT">http://tech.chambana.net/projects/commotion/wiki/JUNE_2011_CODE_SPRINTSUMMIT</a><br></div><div>... we discussed a potential OLSR plugin that would gradually turn down a node's TX power until a minimum specified LQ was reached by one of that node's 2-hop neighbors.</div>
<div><br></div><div>The primary use case for this plugin is to support a mesh of primarily low-power / battery-power devices (smart phones, laptops, tablets) being used by democratic activists as a secure and reliable communications platform that is difficult to be controlled or cut off by authoritarian regimes.</div>
<div><br></div><div>In this use case, low TX power is ideal, as it prompts longer routes and more hops through mesh, making the identification of a packet's source more difficult.  Likewise, lower TX power makes a node more difficult to detect / eavesdrop.  I understand this use case does run counter to convention, in particular sacrificing throughput and reliability for longer routes.</div>
<div><br></div><div>Although, I would expect this plugin could be generalized to also provide some measure of tx power vs. interference optimization in more typical meshes.</div><div><br></div><div>Below is a very rough, psuedo-code-ish spec for this plugin resulting from discussion with conference attendees.  I am planning on doing a proof-of-concept implementation of this plugin to try out in a small mesh, and comments, suggestions, criticisms, and witticisms (especially funny ones) are welcome.</div>
<div><br></div><div><meta http-equiv="content-type" content="text/html; charset=utf-8"><div id="magicdomid486" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo i" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><i>Functional spec:</i></span></div>
<div id="magicdomid487" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- Gradually turn down TX power until reachability of 2-hop neighbor degrades below specified LQ</span></div>
<div id="magicdomid488" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- Node beacons its config to 2-hop piers to tell neighbors not also turn down their tx pwr at the same time</span></div>
<div id="magicdomid489" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo i" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><i><br>
</i></span></div><div id="magicdomid489" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo i" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><i>Operational params:</i></span></div>
<div id="magicdomid490" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- minLQ (int): minimum LQ for 2-hop neighbors</span></div>
<div id="magicdomid491" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; ">- period (int): time period for TX power adjustments</div><div id="magicdomid493" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; ">
<span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- beaconCfg (bool): enable beaconing of config to neighbor nodes </span></div><div id="magicdomid494" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; ">
<span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- battery (bool): node running on battery?</span></div><div id="magicdomid495" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; ">
<span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- upCmd / downCmd (string): commands for raising / lowering TX power (a bit hackish, but different radios may not all support iw and/or iwconfig)</span></div>
<div id="magicdomid496" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><meta http-equiv="content-type" content="text/html; charset=utf-8"><div id="magicdomid491" class="" style="padding-right: 1px; ">
<span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- delta (int): delta for changing TX power, e.g. 1dB, 2dB</span></div>- oprhanTxPwr (int): Nominal TX power level for isolated nodes (may be 0?)</span></div>
<div id="magicdomid497" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- neighborCheck (int): time period when an isolated node powers up tx to check for new neighbors</span></div>
<div id="magicdomid497" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><br>
</span></div><div id="magicdomid498" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo i" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; "><i>Edge case:</i></span></div>
<div id="magicdomid499" class="" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">- Battery-powered (or even wire-powered?) node with no visible neighbors should eventually turn down (or turn off?) its transmitter.  Turn TX power down to orphanTxPwr, and periodically power back up on interval neighborCheck to check if a neighbor has appeared</span></div>
<div id="magicdomid803" class="ace-line" style="padding-right: 1px; font-family: Arial, sans-serif; font-size: 13px; line-height: 17px; "><span class="author-g-bbdg9fsv1qred0uo" style="cursor: auto; background-color: rgb(220, 204, 255); padding-top: 0px; padding-bottom: 1px; ">--> collect these settings into config profiles for laptoppers to select from desktop, e.g. lowest power, normal, max throughput</span></div>
</div><div><br>-- <br><div>Ben West</div><div><a href="mailto:me@benwest.name" target="_blank">me@benwest.name</a></div><br>
</div>