Opennet Firmware
on-configure-network
gehe zur Dokumentation dieser Datei
1#!/bin/sh
2#
3# Konfiguriere uebliche Opennet-Interfaces sowie ein lokales Interface.
4#
5# Dieses Skript wird nur ein einziges Mal nach einem Upgrade oder der Erstinstallation ausgefuehrt:
6# http://wiki.openwrt.org/doc/uci#defaults
7#
8
9
10# shellcheck source=opennet/packages/on-core/files/usr/lib/opennet/on-helper.sh
11. "${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
12
13
14OPENWRT_DEFAULT_LOCAL_IP=192.168.1.1
15
16
17configure_local_network() {
18 local uci_prefix="network.$NETWORK_LOCAL"
19 # wurde die Standard-IP bereits veraendert?
20 [ "$(uci_get "${uci_prefix}.ipaddr")" != "$OPENWRT_DEFAULT_LOCAL_IP" ] && return 0
21 uci set "${uci_prefix}.ipaddr=$(get_on_core_default lan_ipaddr)"
22 uci set "${uci_prefix}.netmask=$(get_on_core_default lan_netmask)"
23}
24
25
26configure_opennet_zone() {
27 local uci_prefix
28 # Forwarding (die letzte Aktion dieses Ablaufs) existiert? Keine Aenderungen ...
29 [ -n "$(find_first_uci_section "firewall" "forwarding" "src=$ZONE_MESH" "dest=$ZONE_MESH")" ] && return 0
30 uci_prefix=$(find_first_uci_section "firewall" "zone" "name=$ZONE_MESH")
31 # Zone anlegen, falls leer
32 [ -z "$uci_prefix" ] && uci_prefix=firewall.$(uci add firewall zone)
33 uci set "$uci_prefix=zone"
34 uci set "$uci_prefix.name=$ZONE_MESH"
35 # Opennet-APs bieten ueblicherweise keine privaten Dienste an
36 uci set "$uci_prefix.input=ACCEPT"
37 # ausgehende Pakete sind OK
38 uci set "$uci_prefix.output=ACCEPT"
39 # Verkehr aus dem opennet-Netz darf nicht in lokale oder tunnel-Netze
40 uci set "$uci_prefix.forward=REJECT"
41 # via "masq_src" ersetzen wir die ehemalige "/etc/firewall.opennet" fuer Quell-basiertes Masquerading
42 add_zone_forward "$ZONE_LOCAL" "$ZONE_MESH"
43 # intra-Zone-Verkehr muss explizit erlaubt werden
44 add_zone_forward "$ZONE_MESH" "$ZONE_MESH"
45}
46
47
48configure_olsr_radio() {
49 trap 'error_trap configure_olsr_radio "$*"' EXIT
50 local iface_index="$1"
51 local iface_logical="$2"
52 local iface_device="$3"
53
54 local uci_wifi="wireless.@wifi-iface[$iface_index]"
55 local uci_radio
56 local radio_band
57 local bssid
58 uci_radio="wireless.$(uci_get "${uci_wifi}.device")"
59 radio_band=$(uci_get "${uci_radio}.band")
60 htmode=$(uci_get "${uci_radio}.htmode")
61 bssid=$(get_on_core_default wifi_bssid)
62
63 uci set "${uci_wifi}.network=$iface_logical"
64 uci set "${uci_wifi}.device=$iface_device"
65
66 uci set "wireless.radio${iface_index}.country=$(get_on_core_default wifi_country)"
67 uci_delete "wireless.radio${iface_index}.disabled"
68
69 # typ-spezifische Attribute
70 if echo "$radio_band" | grep -q "5g"; then
71 # 5 GHz: kein Mesh-Modus verfuegbar
72 uci set "${uci_wifi}.ssid=$(get_on_core_default wifi_ssid_5ghz)"
73 uci set "${uci_wifi}.mode=$(get_on_core_default wifi_mode_5ghz)"
74 # Use one (random) indoor channel and multiple outdoor channels.
75 # Indoor channel: as fallback otherwise wireless scans fail (ap + DFS channel -> no scan)
76 # Outdoor channels: remove TDWR channels + bandwidth
77 indoor_channel=$(( 36 + 4 * $(get_random 4) ))
78 uci set "${uci_radio}.channel=$indoor_channel"
79 uci set "${uci_radio}.chanlist=$indoor_channel $(get_on_core_default wifi_outdoor_chanlist_5ghz)"
80 # Fix 11ac default bandwidth
81 if [ "$htmode" = "VHT80" ]; then
82 uci set "${uci_radio}.htmode=VHT20"
83 fi
84 uci set "${uci_wifi}.isolate=1"
85 # wir wollen einfache Interface Namen haben (wlan0,wlan1) und keine kryptischen Namen (phy-ap0,phy-sta0,...)
86 uci set "${uci_wifi}.ifname=wlan${iface_index}"
87 else
88 # 2,4 GHz: Ad-hoc-Modus
89 uci set "${uci_wifi}.ssid=$(get_on_core_default wifi_ssid)"
90 uci set "${uci_wifi}.mode=$(get_on_core_default wifi_mode)"
91 [ -n "$bssid" ] && uci set "${uci_wifi}.bssid=$bssid"
92 uci set "${uci_radio}.channel=$(get_on_core_default wifi_channel)"
93 # wir wollen einfache Interface Namen haben (wlan0,wlan1) und keine kryptischen Namen (phy-ap0,phy-sta0,...)
94 uci set "${uci_wifi}.ifname=wlan${iface_index}"
95 fi
96 return
97}
98
99
100configure_olsr_single_interface() {
101 trap 'error_trap configure_olsr_single_interface "$*"' EXIT
102 local iface_logical="$1"
103 local iface_addr="$2"
104 local iface_netmask="$3"
105 local iface_device="$4"
106
107 # configure on_wifi
108 uci set "network.${iface_logical}=interface"
109 uci set "network.${iface_logical}.proto=static"
110 uci set "network.${iface_logical}.netmask=$iface_netmask"
111 uci set "network.${iface_logical}.defaultroute=0"
112 uci set "network.${iface_logical}.peerdns=0"
113 uci set "network.${iface_logical}.ipaddr=$iface_addr"
114
115 # disable dhcp on on_wifi
116 uci set "dhcp.${iface_logical}=dhcp"
117 uci set "dhcp.${iface_logical}.interface=${iface_logical}"
118 uci set "dhcp.${iface_logical}.dynamicdhcp=0"
119 uci set "dhcp.${iface_logical}.ignore=1"
120}
121
122
123configure_olsr_interfaces() {
124 trap 'error_trap configure_olsr_interfaces "$*"' EXIT
125
126 # diese Aktion ist bereits abgeschlossen
127 uci -q show "network" | grep -q '^network\.on_eth_0\.' && return 0
128
129 local on_id
130 local on_ipschema
131 local on_netmask
132 on_id=$(uci_get on-core.settings.on_id "$(get_on_core_default on_id_preset)")
133 on_ipschema=$(get_on_core_default on_ipschema)
134 on_netmask=$(get_on_core_default on_netmask)
135 local on_ipaddr
136 local iface_phys
137 local iface_logical
138
139 # Erstelle wifi config in uci, falls noch keine vorhanden ist
140 /sbin/wifi config
141
142 local iface_index=0
143 while [ -n "$(uci_get "wireless.@wifi-iface[${iface_index}]")" ]; do
144 on_ipaddr=$(get_on_ip "$on_id" "$on_ipschema" "$iface_index")
145 iface_wifi_device=$(uci_get "wireless.@wifi-iface[${iface_index}].device")
146 iface_logical=on_wifi_$iface_index
147
148 configure_olsr_single_interface "$iface_logical" "$on_ipaddr" "$on_netmask" "$iface_wifi_device"
149 configure_olsr_radio "$iface_index" "$iface_logical" "$iface_wifi_device"
150
151 add_interface_to_zone "$ZONE_MESH" "$iface_logical"
152
153 iface_index=$((iface_index + 1))
154 done
155
156 for iface_logical in "on_eth_0" "on_eth_1"; do
157 on_ipaddr=$(get_on_ip "$on_id" "$on_ipschema" "$iface_index")
158 iface_phys=none
159 configure_olsr_single_interface "$iface_logical" "$on_ipaddr" "$on_netmask" "$iface_phys"
160 add_interface_to_zone "$ZONE_MESH" "$iface_logical"
161 iface_index=$((iface_index + 1))
162 done
163}
164
165
166# jede Funktion sollte selbst pruefen, ob ihre Aktion bereits abgeschlossen ist
167configure_local_network
168configure_opennet_zone
169configure_olsr_interfaces
170
171apply_changes network wireless dhcp firewall
done
Definition: core.sh:85
add_interface_to_zone()
Fuege ein logisches Netzwerk-Interface zu einer Firewall-Zone hinzu.
Definition: network.sh:47
uci_delete(uci_path)
Lösche ein UCI-Element.
Definition: uci.sh:46