Opennet Firmware
 Alle Dateien Funktionen Variablen Gruppen Seiten
mesh_openvpn_updown.sh
gehe zur Dokumentation dieser Datei
1 #!/bin/sh
2 #
3 # Opennet Firmware
4 #
5 # Copyright 2015 Lars Kruse <devel@sumpfralle.de>
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 # http://www.apache.org/licenses/LICENSE-2.0
12 #
13 
14 
15 . "${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
16 
17 
18 get_netname() {
19  local ifname="$1"
20  echo "$ifname" | sed 's/[^0-9a-zA-Z]/_/g'
21 }
22 
23 
24 setup_mesh_interface() {
25  local ifname="$1"
26  local netname
27  netname=$(get_netname "$ifname")
28  uci set "network.${netname}=interface"
29  uci set "network.${netname}.proto=none"
30  # wir duerfen das Interface nicht via uci hinzufuegen - andernfalls verliert das Interface durch netifd seine Konfiguration
31  # siehe https://lists.openwrt.org/pipermail/openwrt-devel/2015-June/033501.html
32  #uci set "network.${netname}.ifname=$ifname"
33  ubus call network reload
34  add_interface_to_zone "$ZONE_MESH" "$netname"
35  apply_changes network firewall
36  # indirekte Interface/Network-Zuordnung (siehe obigen Mailinglisten-Beitrag)
37  # Auf diesem Weg bleibt die IP-Konfiguration des Device erhalten.
38  local ubus_dev="network.interface.${netname}"
39  ubus call "$ubus_dev" add_device '{ "name": "'$ifname'" }'
40  # die obige ubus-Aktion wird nebenlaeufig abgearbeitet - wir muessen das Ergebnis abwarten
41  ubus -t 10 wait_for "$ubus_dev"
42  # expliziter olsrd-Neustart: eventuell sind noch Fragmente alter tap-Devices in
43  # der olsrd-Konfiguration eingetragen. Diese verhindern einen olsrd-Neustart,
44  # da es scheinbar keine Änderung gab.
45  /etc/init.d/olsrd restart
46  # ohne dieses explizite reload reagiert die firewall seltsamerweise nicht auf die neuen Interfaces
47  /etc/init.d/firewall reload
48  # iu Kuerze moege die olsr-Interface-Liste neu erstellt werden (inkl. des neuen Interface)
49  echo "on-function update_olsr_interfaces" | schedule_task
50 }
51 
52 
53 cleanup_mesh_interface() {
54  local ifname="$1"
55  local netname
56  netname=$(get_netname "$ifname")
57  del_interface_from_zone "$ZONE_MESH" "$netname"
58  uci_delete "network.${netname}"
59  apply_changes network firewall
60 }
61 
62 
63 log_openvpn_events_and_disconnect_if_requested "mesh-openvpn-connections"
64 
65 
66 case "$script_type" in
67  up)
68  setup_mesh_interface "$dev"
69  ;;
70  down)
71  cleanup_mesh_interface "$dev"
72  ;;
73 esac 2>&1 | logger -t mesh-updown
74 
75 exit 0
uci_delete(uci_path)
Lösche ein UCI-Element.
Definition: uci.sh:38
add_interface_to_zone()
Fuege ein logisches Netzwerk-Interface zu einer Firewall-Zone hinzu.
Definition: network.sh:39
log_openvpn_events_and_disconnect_if_requested()
Allgemeines Ereignisbehandlung fuer openvpn-Verbindungen: Logging und eventuell Dienst-Bereinigung (n...
Definition: openvpn.sh:59
del_interface_from_zone()
Entferne ein logisches Interface aus einer Firewall-Zone.
Definition: network.sh:42