Table of Contents
IMA-DTN
Based on IBR-DTN
This is the guide to setting up simple DTN demo. The demo involves Android device and APs running OpenWRT. Android DTN-App can at least send GPS data to a receiving DTN-App installed on OpenWRT.
Openwrt dev
Install ibrdtn
opkg update opkg list | grep ibrdtn opkg install ibrdtnd ibrdtn ibrdtn-tools
configure the daemon via /etc/config/ibrdtn you have to start/stop it via /etc/init.d/ibrdtn start|stop.
Setup WLAN AP / Ad-hoc
Create WiFi Interface
Edit /etc/config/network and define a new interface section:
config 'interface' 'wlan0'
option 'proto' 'static'
option 'ipaddr' '10.0.0.1'
option 'netmask' '255.255.255.0'
Enable Wireless (disabled by default)
Edit /etc/config/wireless
config wifi-device radio0
option type mac80211
option channel 11
option hwmode 11g
option path 'pci0000:00/0000:00:1c.1/0000:02:00.0/0000:03:07.0/0000:07:00.0'
option htmode HT20
# REMOVE THIS LINE TO ENABLE WIFI:
option disabled 0 <---------- HERE
config wifi-iface
option device radio0
option network wlan0
option mode adhoc
option ssid openwireless.org
option encryption none
Start / Stop Wifi
wifi (up - default) wifi up (devicename) wifi down (devicename)
Regenerate Configuration
To rebuild the configuration file, e.g. after installing a new wireless driver, remove the existing wireless configuration (if any) and use the wifi detect command with stdout redirected to the /etc/config/wireless file:
rm -f /etc/config/wireless wifi detect > /etc/config/wireless wifi detect > /etc/config/wireless
DHCP for WiFi-AP Mode
a new dhcp pool must be defined in /etc/config/dhcp:
config 'dhcp' 'wlan0'
option 'interface' 'wlan0'
option 'start' '50'
option 'limit' '200'
option 'leasetime' '1h'
If DHCP not working, check:
config 'dnsmasq'
list 'interface' 'lan'
list 'interface' 'guest'
Configure WiFi Firewall
config 'zone'
option 'name' 'guest'
option 'network' 'guest'
option 'input' 'REJECT'
option 'forward' 'REJECT'
option 'output' 'ACCEPT'
# Allow Guest -> Internet
config 'forwarding'
option 'src' 'guest'
option 'dest' 'wan'
# Allow DNS Guest -> Router
# Client DNS queries ordinate from dynamic UDP ports (>1023)
config 'rule'
option 'name' 'Allow DNS Queries'
option 'src' 'guest'
option 'dest_port' '53'
option 'proto' 'tcpudp'
option 'target' 'ACCEPT'
# Allow DHCP Guest -> Router
# DHCP communication uses UDP ports 67-68
config 'rule'
option 'name' 'Allow DHCP request'
option 'src' 'guest'
option 'src_port' '67-68'
option 'dest_port' '67-68'
option 'proto' 'udp'
option 'target' 'ACCEPT'
Configure WiFi Bandwidth
Apply changes
Enable the new wireless network
/etc/init.d/network restart
Restart the firewall
/etc/init.d/firewall restart
Restart the DHCP service
/etc/init.d/dnsmasq restart
Start traffic shaping
/etc/init.d/wshaper start
Make traffic shaping permanent
/etc/init.d/wshaper enable
WiFi Key
http://wiki.openwrt.org/doc/uci/wireless/encryption
opkg install wpad-mini vim /etc/config/wireless config wifi-iface option device 'radio0' option network 'wlan0' option mode 'ap' option ssid 'IMARSU-AP' option encryption 'psk2' option key 'imademo123' <------ min 8 max 64
Open firewall ports
vim /etc/config/firewall
# add this
#Allow videos control on wan
config rule
option src wan
option dest_port 4000:5000
option proto tcp
option target ACCEPT
#Allow MCAST
config rule
option name 'Allow IPMG'
option src wan
option proto igmp
option target ACCEPT
config rule
option name 'Allow Mcast FWD'
option src wan
option proto udp
option dest lan
option dest_ip 224.0.0.0/4
option target ACCEPT
option family ipv4
config rule
option name 'Allow Mcast INPUT'
option src wan
option proto udp
option dest_ip 224.0.0.0/4
option target ACCEPT
option family ipv4
Multicast forwading
With IGMP snooping, multicast forwarding is disabled for bridges. One pure bridge solution is to disable multicast_snooping.
Add the following in /etc/rc.local
echo “0”
> /sys/devices/virtual/net/br-lan/bridge/multicast_snooping
Replace br-lan with your actual bridge interface, sometimes also called br0.
This will forward all multicast packets to all ports on your bridge, making igmpproxy or udpxy unnecessary. In large networks, this may not be desirable.
How to add iptables rules???
OpenVPN to DAI
Install openvpn-openssl: kernel dependency
opkg install openvpn-openssl --force-depends
Test Connection
dtnping dtn://hostname/echo
DAI router openvpn settings
root@voyage:~# cat /etc/openvpn/MESSSE-UMTS.conf client dev tun remote openvpn.dai-labor.de 1194 udp remote-cert-tls server resolv-retry infinite nobind ;user nobody ;group nobody persist-key persist-tun ;comp-lzo fragment 1300 cipher BF-CBC verb 3 mute 5 <cert> -----BEGIN CERTIFICATE----- MIIEVjCCAz6gAwIBAgIJAP1gg2v3Nw5jMA0GCSqGSIb3DQEBBQUAMIGIMQswCQYD VQQGEwJERTEPMA0GA1UECBMGQmVybGluMRIwEAYDVQQKEwlEQUktTGFib3IxFzAV BgNVBAsTDkFkbWluaXN0cmF0aW9uMRcwFQYDVQQDEw5EQUkgT3BlblZQTiBDQTEi MCAGCSqGSIb3DQEJARYTYWRtaW5zQGRhaS1sYWJvci5kZTAeFw0xMzA0MTkxMzMw MzZaFw0xODA0MTgxMzMwMzZaMGAxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZCZXJs aW4xEjAQBgNVBAoTCURBSS1MYWJvcjEXMBUGA1UECxMOQWRtaW5pc3RyYXRpb24x EzARBgNVBAMTCk1FU1NFLVVNVFMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB ANwIsP7/JfZU6/QjOYTtxIKHhBx4y1Q9ze6FORgZ3PywfPFkbz2qVA/EdarF8KMJ bfn+S3oHKZqJ4ZpdFSOlwNoKYbn+wlrGiy4e2DWXMgZojVoyik4BWWRQAJnKXrSB Sa4D8gugQpNHzY3Pnpa4foiYypRD1uY+Q6h1KGYqXfobAgMBAAGjggFsMIIBaDAJ BgNVHRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIHgDALBgNVHQ8EBAMCA4gwEwYDVR0l BAwwCgYIKwYBBQUHAwIwHQYDVR0OBBYEFEZxgBxgEVzNwMu5+MaPFTCar9OHMIG9 BgNVHSMEgbUwgbKAFPDpi7xCdYsnihU2BK38MhYy+GEVoYGOpIGLMIGIMQswCQYD VQQGEwJERTEPMA0GA1UECBMGQmVybGluMRIwEAYDVQQKEwlEQUktTGFib3IxFzAV BgNVBAsTDkFkbWluaXN0cmF0aW9uMRcwFQYDVQQDEw5EQUkgT3BlblZQTiBDQTEi MCAGCSqGSIb3DQEJARYTYWRtaW5zQGRhaS1sYWJvci5kZYIJAP1gg2v3Nw4KMAkG A1UdEgQCMAAwPAYJYIZIAYb4QgEEBC8WLWh0dHA6Ly9pbnRlcm4uZGFpLWxhYm9y LmRlL2NhL29wZW52cG4tY3JsLnBlbTANBgkqhkiG9w0BAQUFAAOCAQEAeYOzBH8H qs5U1iYaz7RU2Xv8o/wKffu/MuCInW8tv29N2QXNvuUv6MxRGxyaMSxHPB3xjAD5 5u4ee/Ajia07DjmFjIKD1tJOARni7Z0PgAUevPwCMmQawKomGsnUBGUL0mPBkzv0 6JKx2ssJ8qZmdZjb70nMpgjQnXC/lOvKEwuMDo6xyKGYFxIqqjh/m5S1PuqC0Ke5 KSoQuSMwe16C4cedM+jn6CR+M6eT5nUgQB3oJUgyfUqjnmKfgHOsKZAp8GyWHNKF IfTxdkTLGlhCwu0NPFqfEx7PB51QFFwxMDJYXH45JUuODjL7El4ZBc8jpicLga3u 014EvHCAMK4K7g== -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANwIsP7/JfZU6/Qj OYTtxIKHhBx4y1Q9ze6FORgZ3PywfPFkbz2qVA/EdarF8KMJbfn+S3oHKZqJ4Zpd FSOlwNoKYbn+wlrGiy4e2DWXMgZojVoyik4BWWRQAJnKXrSBSa4D8gugQpNHzY3P npa4foiYypRD1uY+Q6h1KGYqXfobAgMBAAECgYBV/juWXQdsH0JcFswrDHXJgcb7 DaaBlOn/tydaKPl59EvQV602D3Rs+R33kQZ74XqOwnijB1uWHx8BojFZzjTxCJZS uzosx7XpU9Q2r/pa3r1E3o88glaJ58CC6GIF35Wmc+5TAeZP4q40kyG7S9xc0Pln cKrQD3rXPp7f2+Q70QJBAPSn63mhWAtPSxLS/eEdoSfq/r8Hlta4CkqhHM4Y4Zow fGuiCfgd97VCa2p+DtIp8l1T6EnhVkK8dwUTHjw0NYMCQQDmPIHVXn/WyHSEA5fh aEEjzrVoQVkWq4EJy+0zE1teCvNZy+d3xjze37LohG0Ed/Euxx3l2M9MJezeN0yF NJ2JAkEAxOb0fDKfUpLhn+fRzkDzd9YIaqRoAK2kEsYyEakywM6vBE0oatlriCVJ oC6OLRT3a6dhNzy1GQbnX10wo1F9kwJBAMrLtRi5+iS3wFmfyKIU8HuX0ZYZKV2c hzaX10DL5gi54IvR3PpVNLyjkbTZICV1eI1Zee5AwKc0KKW7U71pEPECQBZzgbrh gfoNbeipYXGKgcJGuPL/bWodZCahM81tvlJ9TCaRo4FoKsBNQFv7iPCUwnAjIJzv O80/jm+A6BuVPno= -----END PRIVATE KEY----- </key> <ca> -----BEGIN CERTIFICATE----- MIIExjCCA66gAwIBAgIJAP1gg2v3Nw4KMA0GCSqGSIb3DQEBBQUAMIGIMQswCQYD VQQGEwJERTEPMA0GA1UECBMGQmVybGluMRIwEAYDVQQKEwlEQUktTGFib3IxFzAV BgNVBAsTDkFkbWluaXN0cmF0aW9uMRcwFQYDVQQDEw5EQUkgT3BlblZQTiBDQTEi MCAGCSqGSIb3DQEJARYTYWRtaW5zQGRhaS1sYWJvci5kZTAeFw0wODA3MjMxNTQ5 MzVaFw0xODA3MjExNTQ5MzVaMIGIMQswCQYDVQQGEwJERTEPMA0GA1UECBMGQmVy bGluMRIwEAYDVQQKEwlEQUktTGFib3IxFzAVBgNVBAsTDkFkbWluaXN0cmF0aW9u MRcwFQYDVQQDEw5EQUkgT3BlblZQTiBDQTEiMCAGCSqGSIb3DQEJARYTYWRtaW5z QGRhaS1sYWJvci5kZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnZ 7NotpE043LU/E/8pKX6h7EAmLfvPDcKU3/O+4vw0R+8GN7lUxACDQa734/Ykky6S dq4rsKtnpBvk7uM/BqgSNY3muOcChp8mzDjnYx30hQVYv92V6o7LoG9V+LybGVrI 9IbL0K4Rpd0sYuXt607QGxwV+y686wwIngMu42hBGkJodnjWa0h/7WWOSfSmg7W4 XxNkBzjY+ey7A6pO30FNDdFjADeCgVrfm50ZVKGJBGSTQ4fv9jReGp+7GBUnmdho g86su/72WtjDii7X0Cwexmd24vKlClDNcOzwNF+C8XdFPpHWSLNVOX7Np/rI5Bb5 VBbOx7ipSMftb4a2DbkCAwEAAaOCAS8wggErMB0GA1UdDgQWBBTw6Yu8QnWLJ4oV NgSt/DIWMvhhFTCBvQYDVR0jBIG1MIGygBTw6Yu8QnWLJ4oVNgSt/DIWMvhhFaGB jqSBizCBiDELMAkGA1UEBhMCREUxDzANBgNVBAgTBkJlcmxpbjESMBAGA1UEChMJ REFJLUxhYm9yMRcwFQYDVQQLEw5BZG1pbmlzdHJhdGlvbjEXMBUGA1UEAxMOREFJ IE9wZW5WUE4gQ0ExIjAgBgkqhkiG9w0BCQEWE2FkbWluc0BkYWktbGFib3IuZGWC CQD9YINr9zcOCjAMBgNVHRMEBTADAQH/MDwGCWCGSAGG+EIBBAQvFi1odHRwOi8v aW50ZXJuLmRhaS1sYWJvci5kZS9jYS9vcGVudnBuLWNybC5wZW0wDQYJKoZIhvcN AQEFBQADggEBAEcvD0WJ8LIwPalNS6MEZjcyWt9366ZbgqwjbPr6GVa0TA1oLQx5 XyI4vXhRO5PEeB1Wl2lLvwiPHkKoDx90unn9yVvHlLsMTTBDqxXBy7qbRBy3Gv9G zZILGkILeD7M/PVXkQbnhqzOKol7yb1H/9Es6q6He79V8kyZSr+/XmvFeA2ZBch0 a4LjMCxMZjKgVelNMmVS471w9g3T+1Df5I6ccwg69oYEza3sEj9xZghVPSCeGmIL CFTmsFVmo4kmSmTUbsm2b7rFCtP3rYsMjA1ISlIAuMdYLuIVO+dywrmbgLQrgVDj Q80MCY0kFOMiDXYCVKDAIo+asOmLvRfBXec= -----END CERTIFICATE----- </ca>
Android dev
OpenWRT App dtnimarecv
This DTN-App receives GPS data from Smartphone and forward the data to GPSInfo-Agent on platform. The communication to GPSInfo-Agent is simple TCP, which can be later replaced by more advanced method e.g., ICN.
Source on Fedora
Copy apps from “ibrdtn/tools” as starting:
cp -rp $ibrdtn_repo/ibrdtn/tools $ibrdtn_ws/ibrdtn_imaapp cd $ibrdtn_ws/ibrdtn_imaapp
Prepare source for dtnimarecv app:
cp src/dtnrecv.cpp src/dtnimarecv.cpp vim Makefile.ac # search for dtnrecv and copy to dtnimarecv ./autogen.sh
Compile source:
./configure --help ./configure --prefix=/home/dang/data/src/01_ima_ws/60_ibr_dtn/ibrdtn-prefix --with-ibrcommon=/home/dang/data/src/01_ima_ws/60_ibr_dtn/ibrdtn-repo/ibrcommon --with-ibrdtn=/home/dang/data/src/01_ima_ws/60_ibr_dtn/ibrdtn-repo/ibrdtn/ibrdtn <---- NOTE: ibrdtn_src make install OK...
Test
Start dtnd and dtnimarecv:
cd $ibrdtn_ws source ibrdtn-env.rc dtnd -c ibrdtnd.conf -i wlp3s0: -d 9 dtnimarecv --name gps
Start Android IMADTNApp with dest set to “dtn:\/\/localhost.localdomain\/gps”
Sent Lon/Lat from Android
Observe on dtnimarecv console:
dtnimarecv --name gps Lat:52.512808Lon:13.322360
Creating OpenWRT app
Prepare workspace:
cd /home/dang/data/src/01_ima_ws/ima_carpc_ws/carpcd_dev_ws/ima_pj/openwrt-feed/branches/x86_64_dev/packages/ ls -la ima-carpc libdaiutil libllcp liboonet libphidget log4cxx nfc-client README.md testphidget yajl mkdir ibrdtn-imaapp cp ima-carpc/Makefile ibrdtn-imaapp/
Copy Fedora source to openWRT package:
cp -rp /home/dang/data/src/01_ima_ws/60_ibr_dtn/ibrdtn_imaapp ibrdtn-imaapp/src
Dev imadtn app for OpenWRT
x.1 Branch Feature -------------------- * Merge with trunk 20151201 * Merge with datapipeline * Developing imadtnapp x.2 Branch Status -------------------- Segfault with pipeline
Fix Makefile and ibrdtn-imaapp Source
Init script /etc/init.d/dtnimaapp
Platform app
Test run
Edit config file
interface ethxx forwarding flooding
dtnping dtn://hostname/echo
Work-log
2015-12-01
TODO:
- DONE: Turn ibrdtn-imaapp to openwrt app.
- /home/dang/data/src/01imaws/imacarpcws/carpcddevws/imapj/openwrt-feed/branches/openwrtdtnimaapp/packages/ima-carpc/src
- This branch compiled and dtnimaapp runs on Owrt
- startup script using procd
- Segfault pipeline
- ima-carpc compiled with pipeline?
2014-11-15/19
DONE
- Install Openwrt AP.
- OpenWRT app receiving GPS data from Android app
- Dev on Fedora: /home/dang/data/src/01imaws/60ibrdtn/ibrdtnimaapp * OpenWRT x8664 source: /home/dang/data/src/01imaws/imacarpcws/carpcddevws/imapj/openwrt-feed/branches/x8664_dev/packages/ibrdtn-imaapp
- Feature: receive DTN package from Android containing GPS JSON.
- Forward JSON to ima-server.. successfully tested.
- Android app uses JSONParser util from Transport Adaptor. Create JSON from JavaObject completed.
2014-11-12/13/14
- Start with Android
- Android app sending GPS data… done
- Start with Owrt… done
- configure AP mode… done
- install, configure ibr-dtn… done
- using /home/dang/data/src/01imaws/imacarpcws/carpchwopenwrt/buildroot/openwrtexperiment to build
Creating openwrt feed for ibr-dtnibrdtn is already in the OpenWRT package feed.- Test DTN with whisper app. Turn off DTN on android 1, send msg from android 2 over IMARSU-AP, turn off adnroid 2, turn on android 1. OK!