Skip to content
bcopeland edited this page Mar 15, 2013 · 9 revisions

Implementation

The changes add a new global list, mesh_bss_list, to net/mac80211/mesh.c. The list keeps track of all locally registered mac80211-based mesh configurations. The configuration information is stored in the struct mesh_local_bss:

struct mesh_local_bss {
   u8 mesh_id[IEEE80211_MAX_SSID_LEN];
   u8 mesh_id_len;
   u8 sync_method;
   u8 path_sel_proto;
   u8 path_metric;
   bool is_secure;

   bool can_share;

   struct list_head list;
   struct list_head if_list;
};

Each struct mesh_local_bss contains a list of interfaces in if_list which are struct ieee80211_sub_if_data (sdata) instances. These interfaces have elected to forward frames among the other interfaces with the same mesh parameters. Each such interface also maintains a pointer back to the mesh_local_bss.

Outbound path: For unicast frames, mpath_lookup(), called from mesh_nexthop_resolve(), has been modified to look for the next hop on all interfaces. Multicast packets originating at a given interface are retransmitted on all other interfaces in ieee80211_xmit() via mesh_local_bss_forward().

Forwarding path: Any ingress frames received on an interface are forwarded in the usual manner, through mesh_nexthop_lookup() and mesh_path_lookup(). Since the latter checks all interfaces for the next hop, the proper interface will be selected. Multicast frames are

Path selection: Path action frames are forwarded through mesh_path_frame_sel_tx(), which now also uses mesh_local_bss_forward().

HOWTO

If a mesh is joined on the local host, and the

Code

linux

To test the multi channel MBSS operation, you just need our custom linux kernel:

repo: [email protected]:cozybit/open80211s.git branch: ft-multi-if

iw (optional)

A new iw is not required since the kernel will enable forwarding between matching meshIDs by default, but in case disabling this feature is necessary, check out:

repo: [email protected]:cozybit/iw.git branch: ft-mbss-sharing

Here we assume the reader is familiar with the build and installation process for the above.

Operation

MBSS sharing across mesh interfaces is enabled by default. To disable this sharing, add the new mesh setup parameter share {on, off} while joining a mesh ID:

$ iw wlan0 mesh join meshtest share off

Now wlan0 will be in an isolated mesh from other interfaces on the same system, even if they share the same meshID.

Otherwise path selection information sharing and frame forwarding will take place between interfaces sharing the meshID meshtest.

Example

You will need 3 mesh nodes, where at least one of them has 2 physical radios. We'll call these node_1, node_2, and node_3.

As an example, let's simulate the following linear topology using multi-channel MBSS:

node_1(0) <-----> [node_2(0), node_2(1)] <-----> node_3(0)

The radio pairs (node_1(0), node_2(0)) and (node_2(1), node_3(0)) are on orthogonal channels as a means of enforcing a certain link topology.

link setup

node_1


$ iw wlan0 set type mp
$ iw wlan0 set channel 1
$ ip link set wlan0 up
$ iw wlan0 mesh join meshtest
$ ip addr add 10.10.10.1/24 dev wlan0

node_2


$ iw wlan0 set type mp
$ wi wlan1 set type mp
$ iw wlan0 set channel 1
$ iw wlan1 set channel 149
$ ip link set wlan0 up
$ ip link set wlan1 up
$ iw wlan0 mesh join meshtest
$ iw wlan1 mesh join meshtest

node_3


$ iw wlan0 set type mp
$ iw wlan0 set channel 149
$ ip link set wlan0 up
$ iw wlan0 mesh join meshtest
$ ip addr add 10.10.10.2/24 dev wlan0

Now you can ping node_3 from node_1 through node_2!

Throughput Comparison


TEST             THROUGHPUT(Mb/s)        LOSS(%)       
test_0_single_hop_ab      50.297904         2.312000      
test_0_single_hop_cd      90.572187         5.503000      
test_1_sim_single_hop_ab      50.438602         2.114000      
test_1_sim_single_hop_cd      84.963941         11.084000      
test_2_bridge      50.387604         0.787000      
test_3_mmbss      47.781674         4.927000      
test_4_same_ch_mhop      23.414351         5.893000      

Known Issues