On Fri, Apr 26, 2013 at 03:30:35PM -0400, cmsv wrote:
I have reached a point where i need to start using the uevent functionality to work around some network scenarios when the gateways lose internet access but i am having a bit of a difficult time understanding how to do it since making use of uevents which is something new to me.
The explanation here is not helping much either http://www.open-mesh.org/projects/batman-adv/wiki/Uevent
and i understand that i might need to go to the basics to understand it and learn how to code.
My need to use uevents to change a nodes behaviour is to change a node from server to client and vice versa when it loses connectivity to the WAN (not for example losing connectivity to the dsl router that is actually the gateway but that has the node as a LAN client)
The uevents in batman-adv (as explained in the wiki) are "messages" sent by the kernel module when a particular event (internal to batman-adv) occurs.
WAN on/off is an event which comes from an external source and so you do not need to bother the batman-adv's uevents.
I am assuming that uevents will allow me to work with this physical setup correct?
Not uevents from batman-adv. If something else can trigger a uevent for you then yes. But you will not get any help from the uevents in batman-adv in this case.
As far as i understand now and if i am not mistaken when a gateway loses WAN connectivity the node that is making use of uevents will change the node from "server" to "client" on batman-adv .
This is a mechanism that you have to implement in your firmware. batman-adv alone cannot do that because it does not know when the connection goes down.
I can say that this is probably a behaviour that you may want, but batman-adv won't help you in this.
Now my question is if i can also make it to change the dhcp setup from dhcp server to inactive and receive it´s dhcp service from another gateway node.
In theory something like this would be executed on openwrt when a gateway node detects no connectivity to the wan:
uci set batman-adv.bat0.gw_mode=client ; uci commit batman-adv ; batman-adv reboot ; uci set dhcp.lan.force=0 ; uci set dhcp.lan.ignore=1 ; uci commit dhcp ; /etc/init.d/dnsmasq restart ;
when it detects wan connectivity it will want to become a server and will auto execute:
uci set batman-adv.bat0.gw_mode=server ; uci commit batman-adv ; batman-adv reboot ; uci set dhcp.lan.force=1 ; uci set dhcp.lan.ignore=0 ; uci commit dhcp ; /etc/init.d/dnsmasq restart ;
A small script can even be made in order so simplify things either automatically or manually and lets call it: gateway-mode client-mode
Upon detecting no WAN connectivity the script will be activated.
Am i on the right track so far (at least in theory) ?
Maybe. All this stuff I guess have to be applied on an OpenWRT system, but I don't know it enough to answer. Maybe on the Openwrt channel/list somebody will be able to help you in this direction.
Now the second part is how to detect WAN connectivity which is different from noticing that there is no connectivity to the actual gw router that has the node on it's LAN.
I thought about a ping test to a few address from which after 100% loss reply from all; something or Uevent will activate the gateway/client mode script but it creates another problem ahead.
In a quick conversation with ordex on irc i understand that i have to invoke the wiki docs uevent functions with the parameters i want at the moment i decide.
This is an internal function that can be used by a developer to "add new uevents to batman-adv". Here you want to play with something totally external and totally unrelated to batman-adv. So the uevents wikipage can't help you :)
This can be the gateway/client mode script
correct ?
Since uevent is something new to me; can someone recommend some freshman tutorial that may take me in the right direction. I have no clue where or how to start looking to code it and also when coded; where will it be added.
I also would like to ask anyone that has uevent working how they are using it for the same type of need and maybe even share some recipe.
Sometimes I used ifplugd to detect whether an Ethernet link was UP or not..you may want to look into it as well.
Cheers,