Been working on this for awhile. I am running OpenWrt 8.09.2 (r18961) on a Gateworks Cambria gw2358-4. I've installed the packages and plugins for OLSRD-Luci. I believe I have OLSRD setup properly but I still keep getting "Unable to connect to the OLSR daemon!". I have the txtinfo plugin enabled. I will post the codes for my OLSRD, Network, Firewall and whatever configs i thought would be important. For testing purposes, I've only enabled 1 wifi connection. I would like to enable all 4 and run OLSRD. Please any help will be greatly appreciated.
/etc/init.d/olsrd
#!/bin/sh /etc/rc.common
# Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net>
# Special thanks to bittorf wireless ))
START=50
BIN=/usr/sbin/olsrd
CONF=/var/etc/olsrd.conf
PID=/var/run/olsrd.pid
OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 IpVersion=4 AllowNoInt:bool=1 Pollrate=0.025 TcRedundancy=2 MprCoverage=3 LinkQualityFishEye=1 LinkQualityDijkstraLimit=0+9.0 FIBMetric=flat ClearScreen:bool=1 Willingness=3 LinkQualityAging=0.1 LinkQualityAlgorithm=etx_fpm MinTCVTime=500.0'
OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host:list Net:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA::list2 hosts:list2'
OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool Ip4Broadcast HelloInterval=5.0 HelloValidityTime=40.0 TcInterval=2.0 TcValidityTime=256.0 MidInterval=18.0 MidValidityTime=324.0 HnaInterval=18.0 HnaValidityTime=108.0'
T=' '
N='
'
validate_varname() {
local varname=$1
[ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
return 0
}
validate_ifname() {
local ifname=$1
[ -z "$ifname" -o "$ifname" != "${ifname%%[!A-Za-z0-9.:_-]*}" ] && return 1
return 0
}
validate_olsrd_option() {
local str=$1
[ -z "$str" -o "$str" != "${str%%[! 0-9A-Za-z./:_-]*}" ] && return 1
return 0
}
get_ifname() {
IFNAME=
local interface=$1
validate_varname "$interface" || return 1
local ifname
config_get ifname "$interface" ifname
validate_ifname "$ifname" || return 1
IFNAME=$ifname
return 0
}
system_config() {
local cfg=$1
local cfgt
local hostname
local latlon
config_get cfgt "$cfg" TYPE
if [ "$cfgt" = "system" ]; then
config_get hostname "$cfg" hostname
hostname=${hostname:-OpenWrt}
SYSTEM_HOSTNAME=$hostname
fi
if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
config_get latlon "$cfg" latlon
IFS=" ${T}${N},"
set -- $latlon
unset IFS
SYSTEM_LAT=$1
SYSTEM_LON=$2
fi
if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
config_get latlon "$cfg" latlon
IFS=" ${T}${N},"
set -- $latlon
unset IFS
SYSTEM_LAT=$1
SYSTEM_LON=$2
fi
}
olsrd_find_config_file() {
local cfg=$1
validate_varname "$cfg" || return 0
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get OLSRD_CONFIG_FILE "$cfg" config_file
return 0
}
warning_invalid_value() {
local package=$1
validate_varname "$package" || package=
local config=$2
validate_varname "$config" || config=
local option=$3
validate_varname "$option" || option=
echo -n "Warning: Invalid value" 1>&2
if [ -n "$package" -a -n "$config" ]; then
echo -n " in option '$package.$config${option:+.}$option'" 1>&2
fi
echo ", skipped" 1>&2
return 0
}
olsrd_write_option() {
local param=$1
local cfg=$2
validate_varname "$cfg" || return 1
local option=$3
validate_varname "$option" || return 1
local value=$4
local option_type=$5
if [ "$option_type" = bool ]; then
case "$value" in
1|on|true|enabled|yes) value=yes;;
0|off|false|disabled|no) value=no;;
*) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
esac
fi
if ! validate_olsrd_option "$value"; then
warning_invalid_value olsrd "$cfg" "$option"
return 1
fi
if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
if [ "$option" != "Ip6AddrType" -a "$value" != "yes" -a "$value" != "no" ]; then
value="\"$value\""
fi
fi
echo -n "${N}$param$option $value"
return 0
}
olsrd_write_plparam() {
local param=$1
local cfg=$2
validate_varname "$cfg" || return 1
local option=$3
validate_varname "$option" || return 1
local value=$4
local option_type=$5
local _option
if [ "$option_type" = bool ]; then
case "$value" in
1|on|true|enabled|yes) value=yes;;
0|off|false|disabled|no) value=no;;
*) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
esac
fi
if ! validate_olsrd_option "$value"; then
warning_invalid_value olsrd "$cfg" "$option"
return 1
fi
IFS='-_'
set -- $option
option="$*"
unset IFS
_option="$option"
if [ "$option" = 'hosts' ]; then
set -- $value
option=$1
shift
value="$*"
fi
echo -n "${N}${param}PlParam \"$option\" \"$value\""
return 0
}
config_update_schema() {
unset IFS
local schema_varname=$1
validate_varname "$schema_varname" || return 1
local command=$2
validate_varname "$command" || return 1
local option=$3
validate_varname "$option" || return 1
local value=$4
local schema
local cur_option
case "$varname" in
*_LENGTH) return 0;;
*_ITEM*) return 0;;
esac
eval "export -n -- \"schema=\${$schema_varname}\""
for cur_option in $schema; do
[ "${cur_option%%[:=]*}" = "$option" ] && return 0
done
if [ "$command" = list ]; then
set -- $value
if [ "$#" -ge "3" ]; then
schema_entry="$option:list3"
elif [ "$#" -ge "2" ]; then
schema_entry="$option:list2"
else
schema_entry="$option:list"
fi
else
schema_entry="$option"
fi
append "$schema_varname" "$schema_entry"
return 0
}
config_write_options() {
unset IFS
local schema=$1
local cfg=$2
validate_varname "$cfg" || return 1
local write_func=$3
[ -z "$write_func" ] && output_func=echo
local write_param=$4
local schema_entry
local option
local option_length
local option_type
local default
local value
local list_size
local list_item
local list_value
local i
local position
for schema_entry in $schema; do
default=${schema_entry#*[=]}
[ "$default" = "$schema_entry" ] && default=
option=${schema_entry%%[=]*}
IFS=':'
set -- $option
unset IFS
option=$1
option_type=$2
validate_varname "$option" || continue
[ -z "$option_type" ] || validate_varname "$option_type" || continue
[ "$option_type" = internal ] && continue
config_get value "$cfg" "$option"
if [ -z "$value" ]; then
IFS='+'
set -- $default
unset IFS
value=$*
elif [ "$value" = '-' -a -n "$default" ]; then
continue
fi
[ -z "$value" ] && continue
case "$option_type" in
list) list_size=1;;
list2) list_size=2;;
list3) list_size=3;;
*) list_size=0;;
esac
if [ "$list_size" -gt 0 ]; then
config_get option_length "$cfg" "${option}_LENGTH"
if [ -n "$option_length" ]; then
i=1
while [ "$i" -le "$option_length" ]; do
config_get list_value "$cfg" "${option}_ITEM$i"
"$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
i=$((i + 1))
done
else
list_value=
i=0
for list_item in $value; do
append "list_value" "$list_item"
i=$((i + 1))
position=$((i % list_size))
if [ "$position" -eq 0 ]; then
"$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
list_value=
fi
done
[ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
fi
else
"$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
fi
done
return 0
}
olsrd_write_olsrd() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
[ "$OLSRD_COUNT" -gt 0 ] && return 0
config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
echo
OLSRD_COUNT=$((OLSRD_COUNT + 1))
return 0
}
olsrd_write_ipcconnect() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
[ "$IPCCONNECT_COUNT" -gt 0 ] && return 0
echo -n "${N}IpcConnect${N}{"
config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
echo "${N}}"
IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))
return 0
}
olsrd_write_hna4() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get netaddr "$cfg" netaddr
if ! validate_olsrd_option "$netaddr"; then
warning_invalid_value olsrd "$cfg" "netaddr"
return 0
fi
config_get netmask "$cfg" netmask
if ! validate_olsrd_option "$netmask"; then
warning_invalid_value olsrd "$cfg" "netmask"
return 0
fi
[ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
echo -n "${N}${T}$netaddr $netmask"
HNA4_COUNT=$((HNA4_COUNT + 1))
return 0
}
olsrd_write_hna6() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get netaddr "$cfg" netaddr
if ! validate_olsrd_option "$netaddr"; then
warning_invalid_value olsrd "$cfg" "netaddr"
return 0
fi
config_get prefix "$cfg" prefix
if ! validate_olsrd_option "$prefix"; then
warning_invalid_value olsrd "$cfg" "prefix"
return 0
fi
[ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
echo -n "${N}${T}$netaddr $prefix"
HNA6_COUNT=$((HNA6_COUNT + 1))
return 0
}
olsrd_write_loadplugin() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
local name
local suffix
local lat
local lon
local latlon_infile
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
config_get library "$cfg" library
if ! validate_olsrd_option "$library"; then
warning_invalid_value olsrd "$cfg" "library"
return 0
fi
if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
echo "Warning: Plugin library '$library' not found, skipped" 1>&2
return 0
fi
case "$library" in
olsrd_nameservice.*)
config_get name "$cfg" name
[ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME
config_get suffix "$cfg" suffix
[ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'
config_get lat "$cfg" lat
config_get lon "$cfg" lon
config_get latlon_infile "$cfg" latlon_infile
if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
if [ -f '/var/run/latlon.txt' ]; then
config_set "$cfg" lat ''
config_set "$cfg" lon ''
config_set "$cfg" latlon_infile '/var/run/latlon.txt'
else
config_set "$cfg" lat "$SYSTEM_LAT"
config_set "$cfg" lon "$SYSTEM_LON"
fi
fi
config_get latlon_file "$cfg" latlon_file
;;
esac
echo -n "${N}LoadPlugin \"$library\"${N}{"
config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
echo "${N}}"
return 0
}
olsrd_write_interface() {
local cfg=$1
validate_varname "$cfg" || return 0
local ignore
local interfaces
local interface
local ifnames
config_get_bool ignore "$cfg" ignore 0
[ "$ignore" -ne 0 ] && return 0
ifnames=
config_get interfaces "$cfg" interface
for interface in $interfaces; do
if validate_varname "$interface"; then
if get_ifname "$interface"; then
ifnames="$ifnames \"$IFNAME\""
else
echo "Warning: Interface '$interface' not found, skipped" 1>&2
fi
else
warning_invalid_value olsrd "$cfg" "interface"
fi
done
[ -z "$ifnames" ] && return 0
echo -n "${N}Interface$ifnames${N}{"
config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
echo "${N}}"
INTERFACES_COUNT=$((INTERFACES_COUNT + 1))
return 0
}
olsrd_update_schema() {
local command="$1"
validate_varname "$command" || return 0
local varname="$2"
validate_varname "$varname" || return 0
local value="$3"
local cfg="$CONFIG_SECTION"
local cfgt
local cur_varname
config_get cfgt "$cfg" TYPE
case "$cfgt" in
olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
esac
return 0
}
olsrd_write_config() {
OLSRD_COUNT=0
config_foreach olsrd_write_olsrd olsrd
IPCCONNECT_COUNT=0
config_foreach olsrd_write_ipcconnect IpcConnect
HNA4_COUNT=0
config_foreach olsrd_write_hna4 Hna4
[ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
HNA6_COUNT=0
config_foreach olsrd_write_hna6 Hna6
[ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
config_foreach olsrd_write_loadplugin LoadPlugin
INTERFACES_COUNT=0
config_foreach olsrd_write_interface Interface
echo
return 0
}
start() {
### check for running instance
if [ -s $PID ]; then
if kill -0 $(cat $PID) 2>&-; then
echo "there is already a running instance ($(cat $PID))"
return 1
fi
fi
### disable icmp redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
SYSTEM_HOSTNAME=
SYSTEM_LAT=
SYSTEM_LON=
config_load system
config_foreach system_config system
option_cb() {
olsrd_update_schema "option" "$@"
}
list_cb() {
olsrd_update_schema "list" "$@"
}
include /lib/network
scan_interfaces
config_load olsrd
reset_cb
OLSRD_CONFIG_FILE=
config_foreach olsrd_find_config_file olsrd
if [ -z "$OLSRD_CONFIG_FILE" ]; then
### generate config
mkdir -p ${CONF%/*}
olsrd_write_config > $CONF
if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
OLSRD_CONFIG_FILE=$CONF
fi
fi
[ -z "$OLSRD_CONFIG_FILE" ] && return 1
### start olsrd
start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f $CONF -nofork
}
stop() {
### stop olsrd
start-stop-daemon -q -p $PID -x $BIN -K
### re-enable icmp redirects
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
}
restart() {
### override generic restart because we need some time between stop and start
stop; sleep 3; start
}
/etc/config/network
config 'interface' 'loopback'
option 'ifname' 'lo'
option 'proto' 'static'
option 'ipaddr' '127.0.0.1'
option 'netmask' '255.0.0.0'
config 'interface' 'lan'
option 'ifname' 'eth0'
option 'proto' 'static'
option 'ipaddr' '192.168.1.1'
option 'netmask' '255.255.255.0'
option 'defaultroute' '0'
option 'peerdns' '0'
config 'interface' 'wan'
option 'proto' 'dhcp'
option 'ifname' 'eth1'
option 'defaultroute' '0'
option 'peerdns' '0'
config 'interface' 'vlan0'
option 'proto' 'static'
option 'ipaddr' '192.168.2.1'
option 'netmask' '255.255.255.0'
option 'defaultroute' '0'
option 'peerdns' '0'
option 'bcast' '255.255.255.255'
option 'ifname' 'ath0'
/etc/config/olsrd
config 'olsrd'
option 'IpVersion' '4'
option 'FIBMetric' 'flat'
option 'LinkQualityAlgorithm' 'etx_ff'
option 'DebugLevel' '0'
option 'Pollrate' '0.2'
option 'TcRedundancy' '2'
option 'MprCoverage' '7'
option 'LinkQualityLevel' '2'
option 'LinkQualityFishEye' '1'
option 'LinkQualityWinSize' '100'
option 'LinkQualityDijkstraLimit' '0 7.0'
option 'ClearScreen' 'yes'
option 'Willingness' '3'
config 'Interface'
option 'interface' 'vlan0'
option 'Ip4Broadcast' '255.255.255.255'
option 'HelloInterval' '5.0'
option 'HelloValidityTime' '90.0'
option 'TcInterval' '3.0'
option 'TcValidityTime' '270.0'
option 'MidInterval' '15.0'
option 'MidValidityTime' '270.0'
option 'HnaInterval' '15.0'
option 'HnaValidityTime' '90.0'
option 'AutoDetectChanges' 'yes'
option 'ignore' '0'
config 'LoadPlugin'
option 'library' 'olsrd_dyn_gw_plain.so.0.4'
config 'LoadPlugin'
option 'library' 'olsrd_nameservice.so.0.3'
option 'suffix' '.olsr'
option 'hosts_file' '/var/etc/hosts.olsr'
config 'LoadPlugin'
option 'library' 'olsrd_txtinfo.so.0.1'
option 'accept' '127.0.0.1'
config 'Hna4'
option 'netmask' '255.255.255.0'
option 'netaddr' '192.168.2.0/24'
config 'LoadPlugin'
option 'library' 'olsrd_watchdog.so.0.1'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_arprefresh.so.0.1'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_secure.so.0.5'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_dyn_gw.so.0.4'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_bmf.so.1.5.3'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_quagga.so.0.2.2'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_httpinfo.so.0.1'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_dot_draw.so.0.3'
option 'ignore' '1'
config 'LoadPlugin'
option 'library' 'olsrd_mdns.so.1.0.0'
option 'ignore' '1'
/var/etc/olsrd.conf
DebugLevel 0
IpVersion 4
AllowNoInt yes
Pollrate 0.2
TcRedundancy 2
MprCoverage 7
LinkQualityFishEye 1
LinkQualityDijkstraLimit 0 7.0
FIBMetric "flat"
ClearScreen yes
Willingness 3
LinkQualityAging 0.1
LinkQualityAlgorithm "etx_ff"
MinTCVTime 500.0
LinkQualityLevel 2
LinkQualityWinSize 100
Hna4
{
192.168.2.0/24 255.255.255.0
}
LoadPlugin "olsrd_dyn_gw_plain.so.0.4"
{
}
LoadPlugin "olsrd_nameservice.so.0.3"
{
PlParam "name" "OpenWrt"
PlParam "suffix" ".olsr"
PlParam "hosts-file" "/var/etc/hosts.olsr"
}
LoadPlugin "olsrd_txtinfo.so.0.1"
{
PlParam "accept" "127.0.0.1"
}
Interface "ath0"
{
AutoDetectChanges yes
Ip4Broadcast 255.255.255.255
HelloInterval 5.0
HelloValidityTime 90.0
TcInterval 3.0
TcValidityTime 270.0
MidInterval 15.0
MidValidityTime 270.0
HnaInterval 15.0
HnaValidityTime 90.0
}
/etc/config/firewall
config 'defaults'
option 'syn_flood' '1'
option 'input' 'ACCEPT'
option 'output' 'ACCEPT'
option 'forward' 'ACCEPT'
config 'zone'
option 'name' 'lan'
option 'input' 'ACCEPT'
option 'output' 'ACCEPT'
option 'forward' 'ACCEPT'
option 'masq' '1'
config 'zone'
option 'name' 'wan'
option 'output' 'ACCEPT'
option 'masq' '1'
option 'mtu_fix' '1'
option 'input' 'ACCEPT'
option 'forward' 'ACCEPT'
config 'forwarding'
option 'src' 'lan'
option 'dest' 'wan'
config 'rule'
option 'src' 'wan'
option 'proto' 'udp'
option 'dest_port' '68'
option 'target' 'ACCEPT'
config 'include'
option 'path' '/etc/firewall.user'
config 'zone'
option 'name' 'vlan0'
option 'input' 'ACCEPT'
option 'output' 'ACCEPT'
option 'forward' 'ACCEPT'
option 'masq' '1'