openNDS / mesh11sd

Mesh11sd is a dynamic parameter configuration daemon for 802.11s mesh networks.
GNU General Public License v2.0
31 stars 8 forks source link

A few questions about optimal setup #86

Closed LoneWolff7 closed 1 month ago

LoneWolff7 commented 1 month ago

My home network topology is like this NanoPi R2S -> Archer C6 AP -> D-Link Repater AP

NanoPi R2S does routing and the Archer and repeater are setup as dumb ap. So for mesh I installed the necessary packages and manually set up the mesh interfaces in luci in both dumb APs.

Then installed mesh11sd and left it in manual configuration mode.

This is the output of mesh11sd status

On main AP Archer C6

root@AP1:~# mesh11sd status
{
  "setup":{
    "version":"4.0.1",
    "enabled":"1",
    "procd_status":"inactive",
    "portal_detect":"1",
    "portal_detect_threshold":"0",
    "portal_channel":"default",
    "channel_tracking_checkinterval":"30",
    "mesh_basename":"m-11s-",
    "auto_config":"0",
    "auto_mesh_network":"lan",
    "auto_mesh_band":"5g",
    "auto_mesh_id":"92d490daf46cfe534c56ddd669297e",
    "mesh_gate_enable":"1",
    "mesh_leechmode_enable":"0",
    "mesh_gate_encryption":"0",
    "txpower":"20",
    "mesh_path_cost":"10",
    "mesh_path_stabilisation":"1",
    "checkinterval":"10",
    "interface_timeout":"10",
    "ssid_suffix_enable":"1",
    "debuglevel":"1"
  },
  "interfaces":{
    "mesh0":{
      "mesh_retry_timeout":"100",
      "mesh_confirm_timeout":"100",
      "mesh_holding_timeout":"100",
      "mesh_max_peer_links":"99",
      "mesh_max_retries":"3",
      "mesh_ttl":"31",
      "mesh_element_ttl":"31",
      "mesh_auto_open_plinks":"0",
      "mesh_hwmp_max_preq_retries":"4",
      "mesh_path_refresh_time":"1000",
      "mesh_min_discovery_timeout":"100",
      "mesh_hwmp_active_path_timeout":"5000",
      "mesh_hwmp_preq_min_interval":"10",
      "mesh_hwmp_net_diameter_traversal_time":"50",
      "mesh_hwmp_rootmode":"0",
      "mesh_hwmp_rann_interval":"5000",
      "mesh_gate_announcements":"0",
      "mesh_fwding":"1",
      "mesh_sync_offset_max_neighor":"50",
      "mesh_rssi_threshold":"-71",
      "mesh_hwmp_active_path_to_root_timeout":"6000",
      "mesh_hwmp_root_interval":"5000",
      "mesh_hwmp_confirmation_interval":"2000",
      "mesh_power_mode":"active",
      "mesh_awake_window":"10",
      "mesh_plink_timeout":"0",
      "mesh_connected_to_gate":"0",
      "mesh_nolearn":"0",
      "mesh_connected_to_as":"0",
      "mesh_id":"my-mesh-id",
      "device":"radio1",
      "channel":"36",
      "tx_packets":"329735",
      "tx_bytes":"410895304",
      "rx_packets":"219007",
      "rx_bytes":"195260609",
      "this_node":"Main AP MAC",
      "active_peers":"1",
      "peers":{
        "Repeater mesh MAC":{
          "next_hop":"Repeater MAC",
          "hop_count":"1",
          "path_change_count":"1",
          "metric":"19"
        }
      },
      "active_stations":"4",
      "stations":{
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        }
      }
    }
  }
}

On Repeater

root@AP2:~# mesh11sd status
{
  "setup":{
    "version":"4.0.1",
    "enabled":"1",
    "procd_status":"running",
    "portal_detect":"1",
    "portal_detect_threshold":"0",
    "portal_channel":"default",
    "channel_tracking_checkinterval":"30",
    "mesh_basename":"m-11s-",
    "auto_config":"0",
    "auto_mesh_network":"lan",
    "auto_mesh_band":"5g",
    "auto_mesh_id":"92d490daf46cfe534c56ddd669297e",
    "mesh_gate_enable":"1",
    "mesh_leechmode_enable":"0",
    "mesh_gate_encryption":"0",
    "txpower":"18",
    "mesh_path_cost":"10",
    "mesh_path_stabilisation":"1",
    "checkinterval":"10",
    "interface_timeout":"10",
    "ssid_suffix_enable":"1",
    "debuglevel":"1"
  },
  "interfaces":{
    "mesh0":{
      "mesh_retry_timeout":"100",
      "mesh_confirm_timeout":"100",
      "mesh_holding_timeout":"100",
      "mesh_max_peer_links":"16",
      "mesh_max_retries":"3",
      "mesh_ttl":"31",
      "mesh_element_ttl":"31",
      "mesh_auto_open_plinks":"0",
      "mesh_hwmp_max_preq_retries":"4",
      "mesh_path_refresh_time":"1000",
      "mesh_min_discovery_timeout":"100",
      "mesh_hwmp_active_path_timeout":"5000",
      "mesh_hwmp_preq_min_interval":"10",
      "mesh_hwmp_net_diameter_traversal_time":"50",
      "mesh_hwmp_rootmode":"4",
      "mesh_hwmp_rann_interval":"5000",
      "mesh_gate_announcements":"1",
      "mesh_fwding":"1",
      "mesh_sync_offset_max_neighor":"50",
      "mesh_rssi_threshold":"-71",
      "mesh_hwmp_active_path_to_root_timeout":"6000",
      "mesh_hwmp_root_interval":"5000",
      "mesh_hwmp_confirmation_interval":"2000",
      "mesh_power_mode":"active",
      "mesh_awake_window":"10",
      "mesh_plink_timeout":"0",
      "mesh_connected_to_gate":"1",
      "mesh_nolearn":"0",
      "mesh_connected_to_as":"0",
      "mesh_id":"my-mesh-id",
      "device":"radio1",
      "channel":"auto",
      "tx_packets":"222645",
      "tx_bytes":"205363737",
      "rx_packets":"333008",
      "rx_bytes":"396905151",
      "this_node":"Repeater mesh MAC",
      "active_peers":"1",
      "peers":{
        "Main AP mesh MAC":{
          "next_hop":"Main AP MAC",
          "hop_count":"1",
          "path_change_count":"1",
          "metric":"120"
        }
      },
      "active_stations":"5",
      "stations":{
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        },
        "xx:xx:xx:xx:xx:xx":{
          "proxy_node":"xx:xx:xx:xx:xx:xx"
        }
      }
    }
  }
}

I’ve omitted some information for privacy reasons.

This mesh setup is working flawlessly for me, only wanted to confirm if it’s setup the right way.

bluewavenet commented 1 month ago

@LoneWolff7 Well if it is working flawlessly for you then it is good enough for your current use case ;-)

It isn't clear from your description, but indicated by your mesh11sd status outputs that the mesh is only between:

Archer C6 AP -> D-Link Repater AP

Hint: Enclose multi line blocks of pre-formatted text between two sets of 3 backticks - I edited your post to correct the format.

I note you have on the Archer C6 (the mesh portal, ie the node with the ethernet upstream Internet connection:

"mesh_hwmp_rootmode":"4",

"mesh_gate_announcements":"0",

"mesh_connected_to_gate":"0", and "mesh_connected_to_as":"0",

In the current use case, these settings are fine, but if you were to add a third node, you would likely encounter problems as this device acting as portal will not advertise itself on HWMP correctly.

The correct parameters should be:

"mesh_hwmp_rootmode":"4",

"mesh_gate_announcements":"1",

"mesh_connected_to_gate":"1", and "mesh_connected_to_as":"1",

Similarly on the D-Link (a mesh gate[way]) you have:

"mesh_hwmp_rootmode":"4",

"mesh_gate_announcements":"1",

"mesh_connected_to_gate":"1", and "mesh_connected_to_as":"0",

This is ok, but "mesh_hwmp_rootmode":"4", will result in more HWMP management traffic than is needed. A better setting for a normal mesh gate would be "mesh_hwmp_rootmode":"2",

In your current use case of just two meshnodes, "mesh_hwmp_rootmode":"0", would be even better on this device.

But like I said, in your use case of just two meshnodes, what you have is ok.

Note that in "manual mode", auto channel tracking is disabled and you have channel set to auto. Should the wireless drive change channels, the mesh will break. On 5GHz, this is unlikely if both are set to auto, as this means the default of channel 36 is nearly always chosen. It would be safer to specifically set channel 36 on both meshnodes.

Finally note that mesh11sd v4.1.0 was released over the weekend and should now be available on the OpenWrt feeds. If not yet available, it is just the buildbots being a bit slow, so give it a few hours....

LoneWolff7 commented 1 month ago

Thanks @bluewavenet for the very in-depth reply, I’ve updated my config as you suggested,

On Archer

"interfaces":{
    "mesh0":{
      "mesh_retry_timeout":"100",
      "mesh_confirm_timeout":"100",
      "mesh_holding_timeout":"100",
      "mesh_max_peer_links":"16",
      "mesh_max_retries":"3",
      "mesh_ttl":"31",
      "mesh_element_ttl":"31",
      "mesh_auto_open_plinks":"0",
      "mesh_hwmp_max_preq_retries":"4",
      "mesh_path_refresh_time":"1000",
      "mesh_min_discovery_timeout":"100",
      "mesh_hwmp_active_path_timeout":"5000",
      "mesh_hwmp_preq_min_interval":"10",
      "mesh_hwmp_net_diameter_traversal_time":"50",
      "mesh_hwmp_rootmode":"4",
      "mesh_hwmp_rann_interval":"5000",
      "mesh_gate_announcements":"1",
      "mesh_fwding":"1",
      "mesh_sync_offset_max_neighor":"50",
      "mesh_rssi_threshold":"-70",
      "mesh_hwmp_active_path_to_root_timeout":"6000",
      "mesh_hwmp_root_interval":"5000",
      "mesh_hwmp_confirmation_interval":"2000",
      "mesh_power_mode":"active",
      "mesh_awake_window":"10",
      "mesh_plink_timeout":"0",
      "mesh_connected_to_gate":"1",
      "mesh_nolearn":"0",
      "mesh_connected_to_as":"1",
      "mesh_id":"my-mesh-id",
      "device":"radio1",
      "channel":"36",

On Repeater

"interfaces":{
    "mesh0":{
      "mesh_retry_timeout":"100",
      "mesh_confirm_timeout":"100",
      "mesh_holding_timeout":"100",
      "mesh_max_peer_links":"16",
      "mesh_max_retries":"3",
      "mesh_ttl":"31",
      "mesh_element_ttl":"31",
      "mesh_auto_open_plinks":"0",
      "mesh_hwmp_max_preq_retries":"4",
      "mesh_path_refresh_time":"1000",
      "mesh_min_discovery_timeout":"100",
      "mesh_hwmp_active_path_timeout":"5000",
      "mesh_hwmp_preq_min_interval":"10",
      "mesh_hwmp_net_diameter_traversal_time":"50",
      "mesh_hwmp_rootmode":"0",
      "mesh_hwmp_rann_interval":"5000",
      "mesh_gate_announcements":"1",
      "mesh_fwding":"1",
      "mesh_sync_offset_max_neighor":"50",
      "mesh_rssi_threshold":"-70",
      "mesh_hwmp_active_path_to_root_timeout":"6000",
      "mesh_hwmp_root_interval":"5000",
      "mesh_hwmp_confirmation_interval":"2000",
      "mesh_power_mode":"active",
      "mesh_awake_window":"10",
      "mesh_plink_timeout":"10",
      "mesh_connected_to_gate":"1",
      "mesh_nolearn":"0",
      "mesh_connected_to_as":"0",
      "mesh_id":"my-mesh-id",
      "device":"radio1",
      "channel":"36",

The setting portal_detect is set to 1 on both the Main AP and the Repeater, should that be changed to 2 for the Repeater? As the Readme mentions this

NOTE: If the setup option portal_detect is set to 2, the meshnode will be forced into Peer mode, ignoring any any upstream wan feed.

Can you explain what the different hwmp_root_mode parameters do? As it isn’t specified in the readme.

bluewavenet commented 1 month ago

@LoneWolff7

The setting portal_detect is set to 1 on both the Main AP and the Repeater, should that be changed to 2 for the Repeater?

The setting portal_detect has no effect when auto_config is set to 0.

Can you explain what the different hwmp_root_mode parameters do?

HWMP (Hybrid Wireless Mesh Protocol) is the layer 2 routing protocol used by default in 802.11s mesh networks.

The root mode determines how a mesh node contributes to the routing within the backhaul.

Note: "Routing" means the mechanism by which layer 2 packets are directed within the backhaul. It has nothing to do with IP routing which is at layer 3 .

Every meshnode is a "root" ie it is an active part of the backhaul. HWMP defines 4 types of root:

_Note hwmp_rootmode = 1 is reserved and not defined

There are 3 basic node types (with numerous sub-types):

Typically:

Hopefully this clarifies things a little....

LoneWolff7 commented 1 month ago

Thanks once again @bluewavenet for the in-detailed reply, really appreciate it. May I suggest you add the rootmode option description to the Readme.

After changing hwmp_rootmode to 0 I’ve noticed reduced throughput on the Repeater, when I’m in good range of the repeater the speeds don’t go above 50 Mbps, when earlier it used to go above 100 Mbps.

root@AP2:~# iwinfo
mesh0     ESSID: "my-mesh-id"
          Access Point: xx:xx:xx:xx:xx:xx
          Mode: Mesh Point  Channel: 36 (5.180 GHz)  HT Mode: VHT80
          Center Channel 1: 42 2: unknown
          Tx-Power: 18 dBm  Link Quality: 54/70
          Signal: -57 dBm  Noise: unknown
          Bit Rate: 585.1 MBit/s
          Encryption: WPA3 SAE (CCMP)
          Type: nl80211  HW Mode(s): 802.11ac/n
          Hardware: 14C3:7662 14C3:7662 [MediaTek MT76x2E]
          TX power offset: none
          Frequency offset: none
          Supports VAPs: yes  PHY name: phy1

phy1-ap0  ESSID: "My-SSID"
          Access Point: xx:xx:xx:xx:xx:xx
          Mode: Master  Channel: 36 (5.180 GHz)  HT Mode: VHT80
          Center Channel 1: 42 2: unknown
          Tx-Power: 18 dBm  Link Quality: unknown/70
          Signal: unknown  Noise: unknown
          Bit Rate: unknown
          Encryption: WPA2 PSK (CCMP)
          Type: nl80211  HW Mode(s): 802.11ac/n
          Hardware: 14C3:7662 14C3:7662 [MediaTek MT76x2E]
          TX power offset: none
          Frequency offset: none
          Supports VAPs: yes  PHY name: phy1

wlan0     ESSID: unknown
          Access Point: xx:xx:xx:xx:xx:xx
          Mode: Client  Channel: unknown (unknown)  HT Mode: NOHT
          Center Channel 1: unknown 2: unknown
          Tx-Power: 20 dBm  Link Quality: unknown/70
          Signal: unknown  Noise: unknown
          Bit Rate: unknown
          Encryption: unknown
          Type: nl80211  HW Mode(s): 802.11b/g/n
          Hardware: embedded [MediaTek MT7628]
          TX power offset: none
          Frequency offset: none
          Supports VAPs: yes  PHY name: phy0
bluewavenet commented 1 month ago

@LoneWolff7

May I suggest you add the rootmode option description to the Readme.

You may indeed suggest this. A good idea. I'll put it on the ToDo list ;-)

After changing hwmp_rootmode to 0 I’ve noticed reduced throughput on the Repeater, when I’m in good range of the repeater the speeds don’t go above 50 Mbps, when earlier it used to go above 100 Mbps.

I doubt if changing rootmode will have this effect. It could be any of a number of unrelated issues eg radio interference.

Without seeing your detailed configs, it is difficult to come to any conclusions.

What happens if you set rootmode to 2?

Some points to note:

PS. What is the purpose of wlan0 in client mode?

LoneWolff7 commented 1 month ago

@bluewavenet Do we need to set some parameters before running auto config mode? I remember trying it on my Repeater before and it left my repeater unresponsive, I couldn’t even access it from either luci or ssh.

What is the purpose of wlan0 in client mode?

I have the 2.4 GHz radio disabled as it’s way too much crowded here.

bluewavenet commented 1 month ago

@LoneWolff7 auto_config means AUTOMATIC config. You must remove ALL mesh config from /etc/config/wireless. auto_config creates dynamic configuration, but Luci creates a static configuration, it does not understand a dynamic config, so you will not normally see the mesh in Luci when in auto_config mode.

it left my repeater unresponsive, I couldn’t even access it from either luci or ssh.

In auto_config mode, access is via ipv6 either directly or via the mesh11sd connect cli command.

In auto_config mode, remember it is AUTOMATIC, so you do not even configure as a "dumb ap".

It might be useful to read: https://openwrt.org/docs/guide-user/network/wifi/mesh/rapiddeployment This would be ideal for your use case.

It would also be useful to read: https://openwrt.org/docs/guide-user/network/wifi/mesh/mesh11sd

Can you qualify this? If neighbours are pushing signals in the -50dBm range or stronger it can cause problems, but this is very unlikely in my experience.

What is your country code? Pretty much everywhere you can now use mesh on HT40 or HE40 on channel 13. I would be surprised if this does not work extremely well for you despite neighbours.

See: https://en.wikipedia.org/wiki/List_of_WLAN_channels

LoneWolff7 commented 1 month ago

@bluewavenet I’m in India so yes channel 13 is available to me on the 2.4 GHz band.

As you suggested, I removed the 5 GHz mesh backhaul and started one on the 2.4 GHz radio with chan 13, 40 MHz width, and performance has been great after that. Thank you for helping me out.

Just one last question,

In case of auto_config mode I shouldn’t even change the default lan ip address of Repeater and then run mesh11sd connect on my main ap to set it up, have I understood it right here?

bluewavenet commented 1 month ago

@LoneWolff7

In case of auto_config mode I shouldn’t even change the default lan ip address of Repeater and then run mesh11sd connect on my main ap to set it up, have I understood it right here?

You misunderstand. Auto config does everything for you. Auto config nodes detect whether they are portals or nodes. A portal (has a wan port connection upstream to the Internet) uses the default network config defined ip address. A peer (does not have an upstream wan port connection), sets itself up as a bridge and uses dhcp4 to get itself an ipv4 address.

Yes you can connect to a peer using mesh11sd connect (works via ssh on ipv6), but by default you do not have to do any configuration _(because it is autoconfig!)

You might want to do a bit of tuning on peers in some circumstances, but if the portal logs show the link is stable, there is no need.