#!/bin/sh
+# Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
+# Licensed under the GNU General Public License (GPL) v3
+# This script monitors the local internet gateway
+
+. /lib/functions/network.sh
+
+#Exit if this script is already running
+pid="$(pidof ff_olsr_test_gw.sh)"
+if [ ${#pid} -gt 5 ]; then
+ logger -t gwcheck "Gateway check script is already running, exit now"
+ exit 1
+fi
#check if dyngw_plain is installed and enabled, else exit
dyngwplainlib=`uci show olsrd |grep dyn_gw_plain |awk {' FS="."; print $1"."$2 '}`
exit 1
fi
else
- echo "dyngw_plain not found in olsrd config, exit"
exit 1
fi
+#Exit if this script is already running
+pid="$(pidof ff_olsr_test_gw.sh)"
+if [ ${#pid} -gt 5 ]; then
+ logger -p debug -t gwcheck "Gateway check script is already running, exit now"
+ exit 1
+fi
-# check if we have a defaultroute with metric=0 in one of these tables: main table and gw-check table.
-# If not exit here.
+# exit if there is no defaultroute with metric=0 in main or gw-check table.
defroutemain="$(ip r s |grep default |grep -v metric)"
defroutegwcheck="$(ip r s t gw-check |grep default |grep -v metric)"
if [ -z "$defroutegwcheck" -a -z "$defroutemain" ]; then
echo 0
break
else
- logger -t gw-check "Could not get test file from http://$t/conntest.html"
+ logger -p debug -t gw-check "Could not fetch http://$t/conntest.html"
fi
done
}
+resolve() {
+ echo "$(nslookup $1 2>/dev/null |grep 'Address' |grep -v '127.0.0.1' |awk '{ print $3 }')"
+}
+
+get_dnsservers() {
+ # this gets all dns servers for the wan interface. If ubus is not present (like on older
+ # openwrt versions before Attitude fallback to get these from /var/state/network.
+
+ dns=""
+ if [ -x /bin/ubus ]; then
+ network_get_dnsserver dns wan
+ else
+ dns="$(grep network.wan.resolv_dns /var/state/network | cut -d "=" -f 2)"
+ fi
+}
+
iw=$(check_internet)
+
if [ "$iw" == 0 ]; then
# check if we have a seperate routing table for our tests.
# If yes, move defaultroute to normal table and delete table gw-check
+ # Also delete ip rules to use table gw-check for our testhosts and wan dns servers
+
if [ -n "$defroutegwcheck" ]; then
ip r a $defroutegwcheck
ip r d $defroutegwcheck t gw-check
- ip ru del fwmark 0x2 lookup gw-check
for host in $testserver; do
- iptables -t mangle -D OUTPUT -d $host -p tcp --dport 80 -j MARK --set-mark 0x2
+ ips="$(resolve $host)"
+ for ip in $ips; do
+ [ -n "$(ip ru s | grep "to $ip lookup gw-check")" ] && ip rule del to $ip table gw-check
+ done
+ done
+
+ get_dnsservers
+ for d in $dns; do
+ [ -n "$(ip ru s | grep "to $d lookup gw-check")" ] && ip rule del to $d table gw-check
done
+
+ #ip r d default via 127.0.0.1 metric 100000
logger -t gw-check "Internet is available again, restoring default route ( $defroutegwcheck)"
fi
else
# Check failed. If we have a defaultroute with metric=0 and it is already in table gw-check then do nothing.
# If there is a defaultroute with metric=0 then remove it from the main routing table and add to table gw-check.
+ # Also setup ip rules to use table gw-check for our testhosts and wan dns servers
+
if [ -z "$(ip ru s | grep gw-check)" -a -n "$defroutemain" ]; then
- ip rule add fwmark 0x2 lookup gw-check
- for host in $testserver; do
- iptables -t mangle -I OUTPUT -d $host -p tcp --dport 80 -j MARK --set-mark 0x2
- done
ip r a $defroutemain table gw-check
ip r d $defroutemain
- logger -t gw-check "Internet is not available, deactivating the default route ( $defroutemain)"
fi
+ for host in $testserver; do
+ ips="$(resolve $host)"
+ for ip in $ips; do
+ [ -z "$(ip ru s | grep "to $ip lookup gw-check")" ] && ip rule add to $ip table gw-check
+ done
+ done
+ get_dnsservers
+ for d in $dns; do
+ [ -z "$(ip ru s | grep "to $d lookup gw-check")" ] && ip rule add to $d table gw-check
+ done
+ #ip r a default via 127.0.0.1 metric 100000
+ logger -t gw-check "Internet is not available, deactivating the default route ( $defroutemain)"
fi
-.high_res_only{
- display:none !important;
-}
-
-#main_bg_pattern {
- position:absolute;
- background: url(images/PF_background_pattern.png) repeat-x;
- top:0px;
- left:0px;
- width:980px;
- z-index:0;
-}
-
-#main_bg {
- min-height:2000px;
-}
-
-#heading{
- margin-left:285px !important;
-}
-
#header{
padding-left:0px !important;
padding-bottom:24px;
}
-#menubar{
- font-size:35px;
-}
-
-
- #maincontent .multiColumn {
- margin:1em 0px;
- width:100%;
- }
-
- #maincontent .multiColumn .first{
- width:100% !important;
- float:none !important;
- display:block !important;
- padding-right:0px;
- }
-
- #maincontent .multiColumn .second{
- width:100% !important;
- float:none !important;
- display:block !important;
- padding-right:0px;
- }
- #maincontent .multiColumn .terminateMultiColumn{
- clear:both;
- float:none;
- display:block;
- text-align:left !important;
- padding-top:2em;
- }
-
- #maincontent ul{
- margin-bottom:1em;
- }
-
-
-
-
-
-#sidebar_container{
- display:none;
-}
-
-#adbar_low_res_container{
- display:block !important;
-}
-#main_content_container{
- margin-top:50px !important;
+.header_left{
+ max-width: 100%;
}
-.lt_spec{
- padding:0px;
- width:54px;
- height:42px;
- background:transparent url(images/lt_round.png) no-repeat 0% 0% !important;
+#mainlogo {
+ max-width: 90%;
}
#content {
}
#maincontent{
- font-size:25px!important;
- line-height:40px;
+ font-size:1.2em;
+ line-height:1.5em;
}
input[type=submit],
display:inline !important;
float:none !important;
padding:10px 30px !important;
- margin: 0px 10px !important;
- font-size:25px !important;
- font-family: impact, sans-serif !important;
- background:#ff8800 none !important;
- border-color:#000000 !important;
+ margin: 10px 10px 10px 0 !important;
}
.cbi-input-text,
.cbi-input-user,
.cbi-input-password{
display:block !important;
- font-size:25px !important;
margin: 0 !important;
padding:0 !important;
}
.cbi-value-field{
- font-size:25px;
margin:0 !important;
margin-bottom: 1em !important;
width:100% !important;
.cbi-section legend{
white-space:normal !important;
}
-.cbi-section code{
- font-size:24px;
-}
.cbi-value-title{
- font-size:25px;
font-weight:bold;
float:none !important;
}
+
+img {
+ max-width:100%;
+}
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
<link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" />
+<link rel="stylesheet" media="only screen and (max-width: 854px)" href="<%=media%>/smallscreen.css" type="text/css" />
<link rel="stylesheet" media="handheld" href="<%=media%>/mobile.css" type="text/css" />
<!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie7.css" /><![endif]-->
<% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" />
<%= css %>
</style>
<% end -%>
+<meta name="viewport" content="initial-scale=1.0">
<script type="text/javascript" src="<%=resource%>/xhr.js"></script>
<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. translate(tostring(node.title)) or '')) %> - LuCI</title>
</div>
<%else%>
<div class="header_left">
- <a href="<%=hp%>"><img src="<%=logo%>" alt="Logo" /></a>
+ <a href="<%=hp%>"><img src="<%=logo%>" id="mainlogo" alt="Logo" /></a>
<%if show_comm then%>
<a href="<%=hp%>"><%=community%></a>
<br/>
<%end%>
- <div class = "spacer"></div>
</div>
<div class="header_right">
<%=luci.version.distversion%><br />
<span id="xhr_poll_status_off" style="display:none"><%:off%></span>
</span>
</div>
+ <div class="clear"></div>
+
<%end%>
</div>