3# Konfiguriere uebliche Opennet-Interfaces sowie ein lokales Interface.
5# Dieses Skript wird nur ein einziges Mal nach einem Upgrade oder der Erstinstallation ausgefuehrt:
10# shellcheck source=opennet/packages/on-core/files/usr/lib/opennet/on-helper.sh
11.
"${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
14OPENWRT_DEFAULT_LOCAL_IP=192.168.1.1
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)"
26configure_opennet_zone() {
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"
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"
54 local uci_wifi=
"wireless.@wifi-iface[$iface_index]"
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)
63 uci set
"${uci_wifi}.network=$iface_logical"
64 uci set
"${uci_wifi}.device=$iface_device"
66 uci set
"wireless.radio${iface_index}.country=$(get_on_core_default wifi_country)"
67 uci_delete "wireless.radio${iface_index}.disabled"
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"
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}"
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}"
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"
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"
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"
123configure_olsr_interfaces() {
124 trap
'error_trap configure_olsr_interfaces "$*"' EXIT
126 # diese Aktion ist bereits abgeschlossen
127 uci -q show
"network" | grep -q
'^network\.on_eth_0\.' &&
return 0
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)
139 # Erstelle wifi config in uci, falls noch keine vorhanden ist
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
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"
153 iface_index=
$((iface_index + 1))
156 for iface_logical in "on_eth_0" "on_eth_1"; do
157 on_ipaddr=
$(get_on_ip "$on_id" "$on_ipschema" "$iface_index")
159 configure_olsr_single_interface "$iface_logical" "$on_ipaddr" "$on_netmask" "$iface_phys"
161 iface_index=
$((iface_index + 1))
166# jede Funktion sollte selbst pruefen, ob ihre Aktion bereits abgeschlossen ist
167configure_local_network
168configure_opennet_zone
169configure_olsr_interfaces
171apply_changes network wireless dhcp firewall
add_interface_to_zone()
Fuege ein logisches Netzwerk-Interface zu einer Firewall-Zone hinzu.
uci_delete(uci_path)
Lösche ein UCI-Element.