allow mac80211 devices to be configured to do 802.11s, requires iw
authorFlorian Fainelli <florian@openwrt.org>
Thu, 26 Feb 2009 14:53:03 +0000 (14:53 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Thu, 26 Feb 2009 14:53:03 +0000 (14:53 +0000)
SVN-Revision: 14669

docs/wireless.tex
package/mac80211/files/lib/wifi/mac80211.sh

index dd6ec43..f172531 100644 (file)
@@ -107,7 +107,7 @@ config wifi-device    wifi device name
 config wifi-iface
     option network  the interface you want wifi to bridge with
     option device   wifi0, wifi1, wifi2, wifiN
 config wifi-iface
     option network  the interface you want wifi to bridge with
     option device   wifi0, wifi1, wifi2, wifiN
-    option mode     ap, sta, adhoc, monitor, or wds
+    option mode     ap, sta, adhoc, monitor, mesh, or wds
     option txpower  (deprecated) transmission power in dBm
     option ssid     ssid name
     option bssid    bssid address
     option txpower  (deprecated) transmission power in dBm
     option ssid     ssid name
     option bssid    bssid address
@@ -184,6 +184,9 @@ config wifi-iface
             \item \texttt{monitor} \\
                 Monitor mode
 
             \item \texttt{monitor} \\
                 Monitor mode
 
+           \item \texttt{mesh} \\
+               Mesh Point mode (802.11s)
+
             \item \texttt{wds} \\
                 WDS point-to-point link
 
             \item \texttt{wds} \\
                 WDS point-to-point link
 
@@ -229,6 +232,11 @@ config wifi-iface
 
 \end{itemize}
 
 
 \end{itemize}
 
+\paragraph{Mesh Point}
+
+Mesh Point (802.11s) is only supported by some mac80211 drivers. It requires the iw package
+to be installed to setup mesh links. OpenWrt creates mshN mesh point interfaces.
+
 \paragraph{Wireless Distribution System}
 
 WDS is a non-standard mode which will be working between two Broadcom devices for instance
 \paragraph{Wireless Distribution System}
 
 WDS is a non-standard mode which will be working between two Broadcom devices for instance
index 8f3ed4a..77c7976 100644 (file)
@@ -13,14 +13,14 @@ scan_mac80211() {
 
                config_get mode "$vif" mode
                case "$mode" in
 
                config_get mode "$vif" mode
                case "$mode" in
-                       adhoc|sta|ap|monitor)
+                       adhoc|sta|ap|monitor|mesh)
                                append $mode "$vif"
                        ;;
                        *) echo "$device($vif): Invalid mode, ignored."; continue;;
                esac
        done
 
                                append $mode "$vif"
                        ;;
                        *) echo "$device($vif): Invalid mode, ignored."; continue;;
                esac
        done
 
-       config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor}"
+       config_set "$device" vifs "${ap:+$ap }${adhoc:+$adhoc }${ahdemo:+$ahdemo }${sta:+$sta }${wds:+$wds }${monitor:+$monitor }${mesh:+$mesh}"
 }
 
 
 }
 
 
@@ -53,6 +53,7 @@ enable_mac80211() {
        config_get txpower "$device" txpower
 
        local first=1
        config_get txpower "$device" txpower
 
        local first=1
+       local mesh_idx=0
        for vif in $vifs; do
                ifconfig "$ifname" down 2>/dev/null
                config_get ifname "$vif" ifname
        for vif in $vifs; do
                ifconfig "$ifname" down 2>/dev/null
                config_get ifname "$vif" ifname
@@ -75,6 +76,13 @@ enable_mac80211() {
                                sleep 1
                                iwconfig "$ifname" mode ad-hoc >/dev/null 2>/dev/null
                        fi
                                sleep 1
                                iwconfig "$ifname" mode ad-hoc >/dev/null 2>/dev/null
                        fi
+                       # mesh interface should be created only for the first interface
+                       if [ "$mode" = mesh ]; then
+                               config_get mesh_id "$vif" mesh_id
+                               if [ -n "$mesh_id" ]; then
+                                       iw dev "$ifname" interface add msh$mesh_idx type mp mesh_id $mesh_id
+                               fi
+                       fi
                        sleep 1
                        iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null
                }
                        sleep 1
                        iwconfig "$ifname" channel "$channel" >/dev/null 2>/dev/null
                }
@@ -162,8 +170,14 @@ enable_mac80211() {
                                        }
                                fi
                        ;;
                                        }
                                fi
                        ;;
+                       mesh)
+                               # special case where physical interface should be down for mesh to work
+                               ifconfig "$ifname" down
+                               ifconfig "msh$mesh_idx" up
+                       ;;
                esac
                first=0
                esac
                first=0
+               mesh_idx=$(expr $mesh_idx + 1)
        done
 }
 
        done
 }