diff --git a/wifi/olsrd.conf b/wifi/olsrd.conf
new file mode 100644
index 0000000..c3d9a53
--- /dev/null
+++ b/wifi/olsrd.conf
@@ -0,0 +1,491 @@
+#
+# OLSR.org routing daemon config file
+#
+# Lines starting with a # are discarded
+#
+
+# Debug level(0-9)
+# If set to 0 the daemon runs in the background
+
+DebugLevel	1
+
+# IP version to use (4 or 6)
+
+IpVersion	4
+
+# FIBMetric ("flat", "correct", or "approx")
+# Just use "flat", the others don't work very well
+
+FIBMetric "flat"
+
+# Clear the screen each time the internal state changes
+
+ClearScreen     yes
+
+# HNA IPv4 routes
+# syntax: netaddr netmask
+# Example Internet gateway:
+# 0.0.0.0 0.0.0.0
+
+Hna4
+{
+# Internet gateway
+#    0.0.0.0   0.0.0.0
+
+# specific small networks reachable through this node
+#    15.15.0.0 255.255.255.0
+#    15.16.0.0 255.255.255.0
+}
+
+# HNA IPv6 routes
+# syntax: netaddr prefix
+# Example Internet gateway:
+#Hna6
+#{
+# Internet gateway
+#     ::              0
+
+# specific small networks reachable through this node
+#    fec0:2200:106:0:0:0:0:0 48
+#}
+
+# Specify the routing Table olsr uses
+# currently only implemented in linux versions, (bsd planned)
+# useful for policyrouting, to ensure that olsr can use
+# the table a policy rule with priority 65536 is auto-installed
+# by olsrd if an value < 253 ist specified!
+# value defaults to 253 (main table)
+# valid values are 1 .. 254
+# (freifunkfirmware uses 111 for its policy routing)
+
+RtTable 255
+
+#you may specify another table for the default route only
+#if used no policy route will get auto-installed for this table,
+#but the default route gets also inserted into table 254
+#(the last table used in default linux policy routing)
+#valid tables are the same as for RtTable
+
+RtTableDefault 255
+
+# Specify the proto tag to be used for routes olsr inserts into kernel
+# currently only implemented for linux, defaults to 0 which gets replaced
+# by an OS-specific default value under linux 3 (BOOT) gets used as default
+# (for backward compatibility)
+# valid values under linux are 1 .. 254
+# 1 gets remapped by olsrd to 0 UNSPECIFIED (1 is reserved for ICMP redirects)
+# 2 KERNEL routes (not very wise to use)
+# 3 BOOT (should in fact not be used by routing daemons)
+# 4 STATIC
+# 8 .. 15 various routing daemons (gated, zebra, bird, & co)
+
+# RtProto 111
+
+# For testing purposes it may be nice to use another port for olsrd
+# for using another port than the IANA assigned one
+# for a production network, there should be a good reason!!
+# defaults to 698 (IANA assigned olsr-port)
+# valid values are 698 or > 1000
+
+# OlsrPort 698
+
+# Should olsrd keep on running even if there are
+# no interfaces available? This is a good idea
+# for a PCMCIA/USB hotswap environment.
+# "yes" OR "no"
+
+AllowNoInt	yes
+
+# TOS(type of service) value for
+# the IP header of control traffic.
+# If not set it will default to 16
+
+#TosValue	16
+
+# The fixed willingness to use(0-7)
+# If not set willingness will be calculated
+# dynammically based on battery/power status
+
+#Willingness    4
+
+# Allow processes like the GUI front-end
+# to connect to the daemon.
+
+IpcConnect
+{
+     # Determines how many simultaneously
+     # IPC connections that will be allowed
+     # Setting this to 0 disables IPC
+
+     MaxConnections  0
+
+     # By default only 127.0.0.1 is allowed
+     # to connect. Here allowed hosts can
+     # be added
+
+     Host            127.0.0.1
+     # Host            10.0.0.5
+
+     # Specify entire net-ranges that are
+     # allowed to connect
+
+     # Net             192.168.1.0 255.255.255.0
+}
+
+# Link quality level
+# 0 = do not use link quality
+# 1 = use link quality for MPR selection
+# 2 = use link quality for MPR selection and routing
+# Defaults to 2
+
+#LinkQualityLevel	2
+
+# Link quality algorithm (only for lq level 1 or 2)
+# Defaults to "etx_ff" for fixpoint based etx algorithm
+
+LinkQualityAlgorithm    "ett_ss"
+
+# Link quality aging factor
+# Defaults to 0.05, smaller values mean larger LQ window size
+# Link quality aging does only apply to lq level 1 and 2
+
+LinkQualityAging 0.05
+
+# Fisheye mechanism for TC messages 0=off, 1=on
+# default is 1
+
+LinkQualityFishEye	0
+
+# Wether to use hysteresis or not
+# Hysteresis adds more robustness to the
+# link sensing but delays neighbor registration.
+# Used by default. 'yes' or 'no'
+
+UseHysteresis	no
+
+# Hysteresis parameters
+# Do not alter these unless you know
+# what you are doing!
+# Set to auto by default. Allowed
+# values are floating point values
+# in the interval 0,1
+# THR_LOW must always be lower than
+# THR_HIGH!!
+
+#HystScaling	0.50
+#HystThrHigh	0.80
+#HystThrLow	0.30
+
+
+# Polling rate in seconds(float).
+# Default value 0.05 sec
+
+Pollrate	0.05
+
+# Interval to poll network interfaces for configuration
+# changes. Defaults to 2.5 seconds
+
+NicChgsPollInt  2.0
+
+
+# TC redundancy
+# Specifies how much neighbor info should
+# be sent in TC messages
+# Possible values are:
+# 0 - only send MPR selectors
+# 1 - send MPR selectors and MPRs
+# 2 - send all neighbors
+#
+# defaults to 0
+
+TcRedundancy	2
+
+#
+# NatThreshold
+#
+# (currently this is only in the freifunk firmware)
+# If the NAT-Endpoint (the preferred 0/0 HNA
+# emitting node) is to be changed, the ETX value of the current 0/0 is
+# compared to the new one. If the ETX difference is too small, the default
+# route isn't changed. defaults to 1.0
+# The configured route gets multiplied by the threshold,
+# before comparing which route is better
+
+# NatThreshold  0.9
+
+#
+# MPR coverage
+# Specifies how many MPRs a node should
+# try select to reach every 2 hop neighbor
+#
+# Can be set to any integer >0
+#
+# defaults to 1
+
+MprCoverage	3
+
+
+# Olsrd plugins to load
+# This must be the absolute path to the file
+# or the loader will use the following scheme:
+# - Try the paths in the LD_LIBRARY_PATH
+#   environment variable.
+# - The list of libraries cached in /etc/ld.so.cache
+# - /lib, followed by /usr/lib
+#
+# the examples in this list are for linux, so check if the plugin is
+# available if you use windows/BSD.
+
+# LoadPlugin "olsrd_httpinfo.dll"
+# LoadPlugin "/system/lib/olsrd_httpinfo.so.0.1"
+#{
+    # port number the httpinfo plugin will be listening, default 1978
+#   PlParam     "port"   "8000"
+
+    # ip address that can access the plugin, use "0.0.0.0"
+    # to allow everyone
+#   PlParam     "Host"   "127.0.0.1"
+#   PlParam     "Host"   "80.23.53.22"
+
+    # networks that can access the plugin (ip/netmask)
+    # careful with 0.0.0.0/0, makes (ddos) attacks poss.
+#   PlParam     "Net"    "0.0.0.0 0.0.0.0"
+#   PlParam     "Net"    "104.0.0.0 255.255.0.0"
+#   PlParam     "Net"    "192.168.0.0 255.255.0.0"
+#
+
+# LoadPlugin "olsrd_txtinfo.dll"
+#LoadPlugin "/system/lib/olsrd_txtinfo.so.0.1"
+#{
+    # port number the txtinfo plugin will be listening, default 2006
+#   PlParam     "port"   "81"
+    # ip address that can access the plugin, use "0.0.0.0"
+    # to allow everyone
+#    PlParam     "Accept"   "127.0.0.1"
+#}
+
+#LoadPlugin "olsrd_secure.so.0.3"
+#{
+    # define source of keyfile for secure plugin
+    # see lib/secure/README_SECURE for more information
+
+#   PlParam     "Keyfile"   "/etc/olsr-keyfile.txt"
+#}
+
+#LoadPlugin "olsrd_dyn_gw.so.0.1"
+#{
+    # Here parameters are set to be sent to the
+    # plugin. Theese are on the form "key" "value".
+    # Parameters ofcause, differs from plugin to plugin.
+    # Consult the documentation of your plugin for details.
+
+    # Example: dyn_gw params
+
+    # how often to check for Internet connectivity
+    # defaults to 5 secs
+#   PlParam     "Interval"   "40"
+
+    # if one or more IPv4 addresses are given, do a ping on these in
+    # descending order to validate that there is not only an entry in
+    # routing table, but also a real internet connection. If any of
+    # these addresses could be pinged successfully, the test was
+    # succesful, i.e. if the ping on the 1st address was successful,the
+    # 2nd won't be pinged
+#   PlParam     "Ping"       "141.1.1.1"
+#   PlParam     "Ping"       "194.25.2.129"
+#}
+
+# olsrd_dyn_gw_plain.so.0.4
+# {
+# }
+
+
+# Interfaces and their rules
+# Omitted options will be set to the
+# default values.
+# multiple interfaces can be speicified
+Interface "wlan0"
+{
+
+    # IPv4 broadcast address to use. The
+    # one usefull example would be 255.255.255.255
+    # If not defined the broadcastaddress
+    # every card is configured with is used
+    # The second useful value would be to
+    # specify the peer adress of an ptp-tunnel
+
+    # Ip4Broadcast      255.255.255.255
+
+    # Interface Mode is used to prevent unnecessary
+    # packet forwarding on switched ethernet interfaces
+    # valid Modes are "mesh" and "ether"
+    # The default value is mesh!
+
+    # Mode "mesh"
+
+    # IPv6 address scope to use.
+    # Must be 'site-local' or 'global'
+
+    # Ip6AddrType		site-local
+
+    # IPv6 multicast address to use when
+    # using site-local addresses.
+    # If not defined, ff05::15 is used
+
+    # Ip6MulticastSite	ff05::11
+
+    # IPv6 multicast address to use when
+    # using global addresses
+    # If not defined, ff0e::1 is used
+
+    # Ip6MulticastGlobal	ff0e::1
+
+
+    # Emission intervals.
+    # If not defined, RFC proposed values will
+    # be used in most cases.
+
+    # Hello interval in seconds(float)
+    HelloInterval    1.0
+
+    # HELLO validity time
+    HelloValidityTime	10.0
+
+    # TC interval in seconds(float)
+    TcInterval        1.0
+
+    # TC validity time
+    TcValidityTime	20.0
+
+    # MID interval in seconds(float)
+    # MidInterval	5.0
+
+    # MID validity time
+    # MidValidityTime	30.0
+
+    # HNA interval in seconds(float)
+    # HnaInterval	5.0
+
+    # HNA validity time
+    # HnaValidityTime    30.0
+
+    # When multiple links exist between hosts
+    # the weight of interface is used to determine
+    # the link to use. Normally the weight is
+    # automatically calculated by olsrd based
+    # on the characteristics of the interface,
+    # but here you can specify a fixed value.
+    # Olsrd will choose links with the lowest value.
+    # Note:
+    # Interface weight is used only when LinkQualityLevel is set to 0.
+    # For any other value of LinkQualityLevel, the interface ETX
+    # value is used instead.
+    # Weight 0
+
+
+    # If a certain route should be preferred
+    # or ignored by the mesh, the Link Quality
+    # value of a node can be multiplied with a factor
+    # entered here. In the example the route
+    # using 192.168.0.1 would rather be ignored.
+    # A multiplier of 0.5 will result in a small
+    # (bad) LinkQuality value and a high (bad)
+    # ETX value.
+    # Note:
+    # Link quality multiplier is used only when
+    # LinkQualityLevel is > 0.
+
+    # LinkQualityMult 192.168.0.1 0.5
+
+    # This multiplier applies to all other nodes
+    # LinkQualityMult default 0.8
+}
+
+# another Interface (with different configs)
+#Interface "eth1"
+#{
+    # IPv4 broadcast address to use.
+    # One usefull example would be 255.255.255.255
+    # If not defined the broadcastaddress of
+    # every interface which has one configured gets used
+    # The second useful value would be to
+    # specify the peer adress of an ptp-tunnel
+
+#    Ip4Broadcast	192.168.255.255
+
+    # Interface Mode is used to prevent unnecessary
+    # packet forwardin on switched ethernet interfaces
+    # valid Modes are "mesh" and "ether"
+    # The default value is mesh!
+
+#    Mode "ether"
+#}
+
+#LoadPlugin "olsrd_bmf.so.1.7.0"
+#{
+    # Specify the name of the BMF network interface.
+    # Defaults to "bmf0".
+    #PlParam "BmfInterface" "bmf0"
+
+    # Specify the IP address and mask for the BMF network interface.
+    # By default, the IP address of the first OLSR interface is copied.
+    # The default prefix length is 32.
+    #PlParam "BmfInterfaceIp" "10.10.10.234/24"
+
+    # Enable or disable marking the BMF network interface as persistent.
+    # When the interface is persistent (default) then it will not be removed
+    # when olsrd shuts down. This is to facilitate other programs (for example
+    # multicast routing daemon mrouted) to continue using it.
+    #PlParam "BmfInterfacePersistent" "yes"
+
+    # Enable or disable the flooding of local broadcast packets
+    # (e.g. packets with IP destination 192.168.1.255). Either "yes"
+    # or "no". Defaults to "yes".
+    # Note: all nodes in the same network should have the same setting for
+    # this plugin parameter.
+    #PlParam "DoLocalBroadcast" "yes"
+
+    # Enable or disable the capturing packets on the OLSR-enabled
+    # interfaces (in promiscuous mode). Either "yes" or "no". Defaults
+    # to "no".
+    # The multicast (and, if configured, local broadcast) packets sent on
+    # the non-OLSR network interfaces and on the BMF network interface will
+    # always be flooded over the OLSR network.
+    # If this parameter is "yes", also the packets sent on the OLSR-enabled
+    # network interfaces will be flooded over the OLSR network.
+    # NOTE: This parameter should be set consistently on all hosts throughout
+    # the network. If not, hosts may receive multicast packets in duplicate.
+    #PlParam "CapturePacketsOnOlsrInterfaces" "yes"
+
+    # The forwarding mechanism to use. Either "Broadcast" or
+    # "UnicastPromiscuous". Defaults to "Broadcast".
+    # In the "UnicastPromiscuous" mode, packets are forwarded (unicast) to the
+    # best candidate neighbor; other neighbors listen promiscuously. IP-local
+    # broadcast is not used. This saves air time on 802.11 WLAN networks,
+    # on which unicast packets are usually sent at a much higher bit rate
+    # than broadcast packets (which are sent at a basic bit rate).
+    # Note: all nodes in the same network should have the same setting for
+    # this plugin parameter.
+    #PlParam "BmfMechanism" "Broadcast"
+
+    # The number of times BMF will transmit the same packet whenever it decides
+    # to use broadcast to forward a packet. Defaults to 1. Not used if
+    # "BmfMechanism" is set to "UnicastPromiscuous".
+    #PlParam "BroadcastRetransmitCount" "1"
+
+    # If the number of neighbors to forward to is less than or equal to the
+    # FanOutLimit, then packets to be relayed will be sent via unicast.
+    # If the number is greater than the FanOutLimit the packet goes out
+    # as broadcast. Legal values are 0...10. See MAX_UNICAST_NEIGHBORS
+    # as defined in NetworkInterfaces.h . 0 means broadcast is always used,
+    # even if there is only 1 neighbor to forward to. Defaults to 2.
+    # This plugin parameter is not used if "BmfMechanism" is set to
+    # "UnicastPromiscuous".
+    #PlParam "FanOutLimit" "0"
+
+    # List of non-OLSR interfaces to include
+    #PlParam     "NonOlsrIf"  "eth2"
+    #PlParam     "NonOlsrIf"  "eth3"
+#}
+
+LockFile "/data/local/olsrd.lock"
