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 
14 OPENWRT_DEFAULT_LOCAL_IP=192.168.1.1
15 
16 
17 configure_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 
26 configure_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 
48 configure_olsr_radio() {
49  trap 'error_trap configure_olsr_radio "$*"' EXIT
50  local iface_index="$1"
51  local iface_logical="$2"
52  local iface_phys="$3"
53 
54  local uci_wifi="wireless.@wifi-iface[$iface_index]"
55  local uci_radio
56  local radio_hwmode
57  local bssid
58  uci_radio="wireless.$(uci_get "${uci_wifi}.device")"
59  radio_hwmode=$(uci_get "${uci_radio}.hwmode")
60  bssid=$(get_on_core_default wifi_bssid)
61 
62  uci set "${uci_wifi}.network=$iface_logical"
63  uci set "${uci_wifi}.ifname=$iface_phys"
64 
65  uci set "wireless.radio${iface_index}.country=$(get_on_core_default wifi_country)"
66  uci_delete "wireless.radio${iface_index}.disabled"
67 
68  # typ-spezifische Attribute
69  if echo "$radio_hwmode" | grep -q "a"; then
70  # 5 GHz: kein Mesh-Modus verfuegbar
71  uci set "${uci_wifi}.ssid=$(get_on_core_default wifi_ssid_5ghz)"
72  uci set "${uci_wifi}.mode=$(get_on_core_default wifi_mode_5ghz)"
73  uci set "${uci_radio}.channel=$(get_on_core_default wifi_channel_5ghz)"
74  uci set "${uci_wifi}.isolate=1"
75  else
76  # 2,4 GHz: Ad-hoc-Modus
77  uci set "${uci_wifi}.ssid=$(get_on_core_default wifi_ssid)"
78  uci set "${uci_wifi}.mode=$(get_on_core_default wifi_mode)"
79  [ -n "$bssid" ] && uci set "${uci_wifi}.bssid=$bssid"
80  uci set "${uci_radio}.channel=$(get_on_core_default wifi_channel)"
81  fi
82  return
83 }
84 
85 
86 configure_olsr_single_interface() {
87  trap 'error_trap configure_olsr_single_interface "$*"' EXIT
88  local iface_logical="$1"
89  local iface_addr="$2"
90  local iface_netmask="$3"
91  local iface_phys="$4"
92 
93  # configure on_wifi
94  uci set "network.${iface_logical}=interface"
95  uci set "network.${iface_logical}.proto=static"
96  uci set "network.${iface_logical}.ifname=$iface_phys"
97  uci set "network.${iface_logical}.netmask=$iface_netmask"
98  uci set "network.${iface_logical}.defaultroute=0"
99  uci set "network.${iface_logical}.peerdns=0"
100  uci set "network.${iface_logical}.ipaddr=$iface_addr"
101 
102  # disable dhcp on on_wifi
103  uci set "dhcp.${iface_logical}=dhcp"
104  uci set "dhcp.${iface_logical}.interface=${iface_logical}"
105  uci set "dhcp.${iface_logical}.dynamicdhcp=0"
106  uci set "dhcp.${iface_logical}.ignore=1"
107 }
108 
109 
110 configure_olsr_interfaces() {
111  trap 'error_trap configure_olsr_interfaces "$*"' EXIT
112 
113  # diese Aktion ist bereits abgeschlossen
114  uci -q show "network" | grep -q '^network\.on_eth_0\.' && return 0
115 
116  local on_id
117  local on_ipschema
118  local on_netmask
119  on_id=$(uci_get on-core.settings.on_id "$(get_on_core_default on_id_preset)")
120  on_ipschema=$(get_on_core_default on_ipschema)
121  on_netmask=$(get_on_core_default on_netmask)
122  local on_ipaddr
123  local iface_phys
124  local iface_logical
125 
126  # Erstelle wifi config in uci, falls noch keine vorhanden ist
127  /sbin/wifi config
128 
129  local iface_index=0
130  while [ -n "$(uci_get "wireless.@wifi-iface[${iface_index}]")" ]; do
131  on_ipaddr=$(get_on_ip "$on_id" "$on_ipschema" "$iface_index")
132  iface_phys=wlan$iface_index
133  iface_logical=on_wifi_$iface_index
134 
135  configure_olsr_single_interface "$iface_logical" "$on_ipaddr" "$on_netmask" "$iface_phys"
136  configure_olsr_radio "$iface_index" "$iface_logical" "$iface_phys"
137 
138  add_interface_to_zone "$ZONE_MESH" "$iface_logical"
139 
140  iface_index=$((iface_index + 1))
141  done
142 
143  for iface_logical in "on_eth_0" "on_eth_1"; do
144  on_ipaddr=$(get_on_ip "$on_id" "$on_ipschema" "$iface_index")
145  iface_phys=none
146  configure_olsr_single_interface "$iface_logical" "$on_ipaddr" "$on_netmask" "$iface_phys"
147  add_interface_to_zone "$ZONE_MESH" "$iface_logical"
148  iface_index=$((iface_index + 1))
149  done
150 }
151 
152 
153 # jede Funktion sollte selbst pruefen, ob ihre Aktion bereits abgeschlossen ist
154 configure_local_network
155 configure_opennet_zone
156 configure_olsr_interfaces
157 
158 apply_changes network wireless dhcp firewall
uci_delete(uci_path)
Lösche ein UCI-Element.
Definition: uci.sh:46
add_interface_to_zone()
Fuege ein logisches Netzwerk-Interface zu einer Firewall-Zone hinzu.
Definition: network.sh:46
done
Definition: core.sh:85