treewide: add support for br-client

br-mesh has been renamed to br-client in recent firmware.

Implement br-client parallel to br-mesh.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Adrian Schmutzler 2021-02-22 20:13:05 +01:00
parent e4977356fc
commit bd8d0280f6
7 changed files with 32 additions and 26 deletions

View File

@ -33,7 +33,7 @@ def ban_router(mysql,dbid):
mac = mysql.findone("""
SELECT mac
FROM router_netif
WHERE router = %s AND netif = 'br-mesh'
WHERE router = %s AND (netif = 'br-mesh' OR netif = 'br-client')
""",(dbid,),"mac")
added = mysql.utcnow()
if mac:
@ -51,6 +51,8 @@ def import_nodewatcher_xml(mysql, infdict, mac, xml, banned, hoodsv2, hoodsdict,
# The following values should stay available after router reset
keepvalues = ['lat','lng','description','position_comment','contact']
brifs = ('br-mesh','br-client')
router_id = None
olddata = False
uptime = 0
@ -180,7 +182,7 @@ def import_nodewatcher_xml(mysql, infdict, mac, xml, banned, hoodsv2, hoodsdict,
akeys = []
for n in router_update["netifs"]:
nkeys.append(n["name"])
if n["name"]=='br-mesh': # Only br-mesh will normally have assigned IPv6 addresses
if n["name"] in brifs: # Only br-client will normally have assigned IPv6 addresses
akeys = n["ipv6_addrs"]
if nkeys:
@ -194,7 +196,7 @@ def import_nodewatcher_xml(mysql, infdict, mac, xml, banned, hoodsv2, hoodsdict,
if akeys:
adata = mysql.fetchall("SELECT netif, ipv6 FROM router_ipv6 WHERE router = %s",(router_id,))
for a in adata:
if a["netif"]=='br-mesh' and a["ipv6"] in akeys:
if a["netif"] in brifs and a["ipv6"] in akeys:
continue
mysql.execute("DELETE FROM router_ipv6 WHERE router = %s AND netif = %s AND ipv6 = %s",(router_id,a["netif"],a["ipv6"],))
else:

View File

@ -365,7 +365,7 @@ def wifianalhelper(router_data, headline):
for router in router_data:
if not router['mac']:
continue
if router["netif"] == 'br-mesh':
if router["netif"] == 'br-mesh' or router["netif"] == 'br-client':
s += int2mac(router["mac"]) + "|Mesh_" + router['hostname'] + "\n"
elif router["netif"] == 'w2ap':
s += int2mac(router["mac"]) + "|" + router['hostname'] + "\n"
@ -432,7 +432,7 @@ def dnsentries():
return Response(s,mimetype='text/plain')
def nodelist_helper(where = "",data=()):
# Suppresses routers without br-mesh
# Suppresses routers without br-client
mysql = FreifunkMySQL()
router_data = mysql.fetchall("""
SELECT router.id, hostname, status, hoods.id AS hoodid, hoods.name AS hood, contact, nickname, hardware, firmware, clients, lat, lng, last_contact, mac, sys_loadavg, fe80_addr
@ -440,7 +440,7 @@ def nodelist_helper(where = "",data=()):
INNER JOIN hoods ON router.hood = hoods.id
INNER JOIN router_netif ON router.id = router_netif.router
LEFT JOIN users ON router.contact = users.email
WHERE netif = 'br-mesh' {}
WHERE (netif = 'br-mesh' OR netif = 'br-client') {}
ORDER BY hostname ASC
""".format(where),data)
router_data = mysql.utcawaretuple(router_data,"last_contact")
@ -470,7 +470,7 @@ def nodelist_helper(where = "",data=()):
fastd += 1
elif netif.startswith('l2tp'):
l2tp += 1
#elif netif['netif'] == 'br-mesh' and 'mac' in netif:
#elif netif['netif'] in ('br-mesh','br-client') and 'mac' in netif:
# mac = netif["mac"]
if not router['mac']:
@ -538,7 +538,7 @@ def no_position():
@api.route('/routers')
def routers():
# Suppresses routers without br-mesh
# Suppresses routers without br-client
return jsonify(nodelist_helper())
@api.route('/routers_by_nickname/<nickname>')

View File

@ -60,7 +60,7 @@ def router_list():
LEFT JOIN (
SELECT router, blocked.mac AS blocked FROM router_netif
INNER JOIN blocked ON router_netif.mac = blocked.mac
WHERE netif = 'br-mesh'
WHERE netif = 'br-mesh' OR netif = 'br-client'
) AS b
ON router.id = b.router
{}
@ -157,7 +157,7 @@ def router_info(dbid):
netifs = []
for n in router["netifs"]:
n["ipv6_addrs"] = mysql.fetchall("""SELECT ipv6 FROM router_ipv6 WHERE router = %s AND netif = %s""",(dbid,n["netif"],),"ipv6")
if n["netif"]=="br-mesh":
if n["netif"] in ("br-mesh","br-client"):
mac = n["mac"]
netifs.append(n["netif"])
@ -206,7 +206,7 @@ def router_info(dbid):
netif = n["netif"];
desc = None
color = None
if netif == 'br-mesh':
if netif in ('br-mesh','br-client'):
desc = "Client Bridge"
elif netif == 'br-ethmesh':
desc = "Ethernet Mesh Bridge"
@ -362,7 +362,7 @@ def router_info(dbid):
mysql.close()
return redirect(url_for("index"))
else:
flash("<b>Router has no br-mesh and thus cannot be banned!</b>", "danger")
flash("<b>Router has no br-client/br-mesh and thus cannot be banned!</b>", "danger")
else:
flash("<b>You are not authorized to perform this action!</b>", "danger")
elif request.form.get("act") == "changeblocked" and mac:
@ -407,7 +407,7 @@ def router_info(dbid):
SELECT blocked.mac
FROM router_netif AS n
LEFT JOIN blocked ON n.mac = blocked.mac
WHERE n.router = %s AND n.netif = 'br-mesh'
WHERE n.router = %s AND (n.netif = 'br-mesh' OR n.netif = 'br-client')
""",(dbid,),"mac")
mysql.close()
@ -528,7 +528,7 @@ def user_info(nickname):
LEFT JOIN (
SELECT router, blocked.mac AS blocked FROM router_netif
INNER JOIN blocked ON router_netif.mac = blocked.mac
WHERE netif = 'br-mesh'
WHERE netif = 'br-mesh' OR netif = 'br-client'
) AS b
ON router.id = b.router
WHERE contact = %s

View File

@ -246,7 +246,7 @@ def gravatar_url(email):
@filters.app_template_filter('webui_addr')
def webui_addr(router_netifs):
for br_mesh in filter(lambda n: n["netif"] == "br-mesh", router_netifs):
for br_mesh in filter(lambda n: n["netif"] in ("br-mesh","br-client"), router_netifs):
for ipv6 in br_mesh["ipv6_addrs"]:
ipv6 = bintoipv6(ipv6)
if not ipv6:

View File

@ -188,8 +188,8 @@
&lt;vpn_active&gt;WAN-Uplink status, 0 or 1 [0]&lt;/vpn_active&gt;
&lt;/system_data&gt;
&lt;interface_data&gt; # List of interfaces with interface name as node name; one interface with mac address is required for identification of device
&lt;br-mesh&gt; # Example br-mesh device
&lt;name&gt;netif name [br-mesh]&lt;/name&gt;
&lt;br-client&gt; # Example br-client device
&lt;name&gt;netif name [br-client]&lt;/name&gt;
&lt;mtu&gt;MTU [1500]&lt;/mtu&gt;
&lt;mac_addr&gt;netif MAC address [aa:bb:cc:dd:ee:f1]&lt;/mac_addr&gt;
&lt;ipv4_addr&gt;Device's IPv4 address in FFF network [10.83.999.1]&lt;/ipv4_addr&gt;
@ -198,7 +198,7 @@
&lt;ipv6_link_local_addr&gt;Device's link-local address [fe80::a8bb:ccff:fedd:eef1/64]&lt;/ipv6_link_local_addr&gt;
&lt;traffic_rx&gt;Total RX traffic bytes [1033114334]&lt;/traffic_rx&gt;
&lt;traffic_tx&gt;Total TX traffic bytes [30814227528]&lt;/traffic_tx&gt;
&lt;/br-mesh&gt;
&lt;/br-client&gt;
&lt;eth0.1&gt; # Example VLAN device
&lt;name&gt;netif name [eth0.1]&lt;/name&gt;
&lt;mtu&gt;MTU [1500]&lt;/mtu&gt;

View File

@ -284,11 +284,11 @@
<div id="netstat" class="graph"></div>
</div>
<ul class="list-group" id="netif-list">
{# make sure that br-mesh is on top of the list #}
{%- for netif in router.netifs if netif.netif == 'br-mesh' %}
{# make sure that br-client is on top of the list #}
{%- for netif in router.netifs if netif.netif in ('br-client','br-mesh') %}
<li class="list-group-item active" data-name="{{ netif.netif|replace('.', '')|replace('$', '') }}">
<div class="row">
<div class="col-xs-7 col-sm-7"><h4 class="list-group-item-heading">br-mesh: <span class="netifdesc">Bridge</span></h4></div>
<div class="col-xs-7 col-sm-7"><h4 class="list-group-item-heading">{{ netif.netif }}: <span class="netifdesc">Client Bridge</span></h4></div>
<div class="col-xs-5 col-sm-5 text-right" style="text-transform: uppercase;"><h4 class="list-group-item-heading">{{ netif.mac|int2mac }}</h4></div>
</div>
<div class="row">
@ -314,7 +314,7 @@
</div>
</li>
{%- endfor %}
{%- for netif in router.netifs if netif.netif != 'br-mesh' %}
{%- for netif in router.netifs if not netif.netif in ('br-client','br-mesh') %}
<li class="list-group-item" data-name="{{ netif.netif|replace('.', '')|replace('$', '') }}">
<div class="row">
<div class="col-xs-7 col-sm-7"><h4 class="list-group-item-heading" style="{%- if netif.color -%}color:{{ netif.color }}{%- endif -%}">{{ netif.netif }}{%- if netif.description -%}: <span class="netifdesc">{{ netif.description }}</span>{%- endif %}</h4></div>
@ -468,7 +468,7 @@
load_netif_stats(netif);
$(this).addClass("active");
});
load_netif_stats("br-mesh");
load_netif_stats("br-client");
});
{%- if router.neighbours|length > 0 %}
function load_neigh_stats() {

View File

@ -6,6 +6,9 @@
#
# designed for GATEWAY FIRMWARE
#
# v1.4.7 - 2021-02-22
# - Use br-client instead of br-mesh
#
# v1.4.6 - 2018-10-17
# - Fix IPv4/IPv6 sed (leading space in match pattern)
#
@ -47,6 +50,7 @@
# Config
api_urls="https://monitoring.freifunk-franken.de/api/gwinfo" # space-separated list of addresses (api_urls="url1 url2")
batctlpath=/usr/sbin/batctl
brif=br-client
hostname="$(uci -q get system.@system[0].hostname)"
statslink="$(uci -q get gateway.@gateway[0].statslink)"
@ -67,10 +71,10 @@ for netif in $(ls /sys/class/net); do
dhcpstart=""
dhcpend=""
if [ "$netif" = "bat0" ]; then
ipv4="$(ip -4 addr show dev br-mesh | grep " 10\." | sed 's/.* \(10\.[^ ]*\/[^ ]*\) .*/\1/')"
ipv6="$(ip -6 addr show dev br-mesh | grep " fd43" | grep '::' | sed 's/.* \(fd43[^ ]*\) .*/\1/')"
ipv4="$(ip -4 addr show dev "$brif" | grep " 10\." | sed 's/.* \(10\.[^ ]*\/[^ ]*\) .*/\1/')"
ipv6="$(ip -6 addr show dev "$brif" | grep " fd43" | grep '::' | sed 's/.* \(fd43[^ ]*\) .*/\1/')"
[ "$(echo "$ipv6" | wc -l)" = "1" ] || ipv6=""
dhcpstart="$(uci -q get dhcp.mesh.start)"
dhcpstart="$(uci -q get dhcp.client.start)"
fi
echo "$comma{\"mac\":\"$mac\",\"netif\":\"$netif\",\"vpnif\":\"$batctl\",\"ipv4\":\"$ipv4\",\"ipv6\":\"$ipv6\",\"dhcpstart\":\"$dhcpstart\",\"dhcpend\":\"$dhcpend\"}" >> $tmp