CAPsMAN - CAP VLAN configuration example on help.mikrotik.com

Well, you (and mkx) probably assume that I have a deep understanding of how this stuff works (rest assured I don't).

I am trying to understand from the base, and I need to do this step by step, building from the base up, a layer at the time.

So you both provided more complex setups than the reference, and the only way for me to - maybe - understand your configurations is to remove the added complexities, one by one, and at my own pace and with my own methods, until I have something EXACTLY comparable to the base example and from that re-add the complexities.

But even if right now your posts are going whoosh well over my head, I will get there, before or later, so, please do post your considerations. :slightly_smiling_face:

You probably have a typo on the third line of the /interface wifi provisioning, should be "CAP_AC.*" :woozy_face:

I can relate to that.

When it comes to Capsman I poked around after reading and watching different approaches and came up with working setup somehow. I wouldn’t dare sharing it to be laughed at.
What really helped me a lot is Claude LLM, in my opinion is it’s the most efficient approach to sort through mikrotik related pieces of information here and there

@jaclaz
learn and understand outputs:

system logging add topics=caps,debug action=memory
system logging add topics=wireless,debug action=memory
interface wifi print detail
interface wifi radio print detail
interface wifi provisioning print detail
interface wifi cap print
interface wifi capsman print
interface bridge print detail
interface bridge port print detail
interface bridge vlan print detail

To have only the logs for caps / wireless:

log print detail without-paging show-ids where topics~caps,wireless 

OK, attached something.

Still very far from being useful, but a little step in the (hopefully right) direction.

I tokenized the configuration posted here by pmastal:
CAPsMAN - CAP VLAN configuration example on help.mikrotik.com - #4 by pmastal

Corrected a few typos (for sure "-"<->"_", "lab"<->"lan", but possibly some more I don't recall) and missing items and re-organized variables and names of things in a "unified" way.

As-is the thingy only works if ALL the variables are defined, it completely misses the logic needed to:

  1. have only one or two wifi SSID's (i.e. only MAIN or only MAIN and GUEST)
  2. have NOT a vlan for mgmt
  3. the bridge configuration on CAPSMAN uses this (still not understood by me) ether2-trunk interface
  4. the logic for tagged and untagged ports in bridges is completely missing, values are at the moment "fixed"
    Capsman_work_in_progress01.zip (31.0 KB)

Also it has to be understood (by me) how in practice the MACs are to be generated/attributed.

Nice

Let it be.

What does "ALL the variables are defined " mean to you?

It is also possible to manage it by configuring its provisioning settings.

On the forum, you can always find info - the best to have for VLAN config - separate VLAN for management. It helps to catch issues, especially if you misconfigure VLANs and start troubleshooting. Also, security is a good idea.

Do you understand the name TRUNK? In my configuration, the interface ether2-trunk is named and indicates that it is used as the trunk. Please check: Basic VLAN switching - RouterOS - MikroTik Documentation . There is a picture at https://help.mikrotik.com/docs/download/attachments/103841826/700px-Basic_vlan_switching.jpg?version=1&modificationDate=1653919551273&api=v2 that shows the name "trunk port". For me, 'the CAPsMAN is also a router, and I'm connecting CAPsMAN (ether2-trunk )<-> CAP (ether1-trunk).

What is missing? What is "fixed"?

And here is the "magic" point for WiFi configuration.

If you want to mix AC and AX configurations in your network, the problem is how to be sure you connect to the SSID <=> VLAN.

In the Mikrotik example configuration, you have only 2 SSIDs <=> 2 VLANs. By default, the ORDER of the master-configuration=MAIN and the slave-configurations=GUEST is the same, with action=create-dynamic-enabled.

Now, if you have 2 CAP AC devices + CAPsMAN, prepare the configuration according to Mikrotik's help for VLANs (forget about the AC), but create provisioning:

  1. CAP 1 -> master=MAIN, slave=GUEST
  2. CAP 2 -> master=GUEST slave=MASTER

Also, on both CAPs, create the same bridge port:

/interface bridge port
add bridge=bridgeLocal interface=wifi1 pvid=10
add bridge=bridgeLocal interface=wifi21 pvid=20
add bridge=bridgeLocal interface=wifi2 pvid=10
add bridge=bridgeLocal interface=wifi22 pvid=20

Check what happened when you connected to CAP1 and to CAP2. What VLANs do you get for your device?
You will be surprised. The next surprise will be when you add another SSID :).

By my tests and experiments, I have figured out that the critical case is to have

  1. correct bindings between SSID <=> wifi_interface <=> VLAN_ID
  2. provisioning order corresponding to the wifi_interface order to the above point.

If you have more than 2 SSIDs, you do not have control over the slave (virtual) interfaces bindings. Also, when action=create-dynamic-enabled on CAPsMAN, you will have a headache. Please test it :).

For the "mac-address=4A:xx:xx:xx:xx:13", if you tested the above ideas, you can see what is happening when the "wifi" in CAPsMAN is created dynamically when you are on the CAP switch, the

/interface wifi cap enable=...

many times, you understand the problem.
So, this is why I'm generating and hardcoding some info, for example:

4A:xx:zz:ww:yy:yy

where:zz -> CAP number (max 99)
yy:yy -> VLAN_ID (4 digits)
ww -> wifi interface number

It only depends on your invention. I simply used "coding" wifiNumber + VLAN_ID (last digit).

I found some 90 "tokens" (settings) in the configuration that are "variable" and that can be (and are in the sheet) derived (auto-calculated) from 18 "base" variables (or choices).
As is, to produce the originally posted configurations equivalent "all 18 of them" need to be defined, these include:

  1. a VLAN and a SSID for "MAIN"
  2. a VLAN and a SSID for "GUEST"
  3. a VLAN and a SSID for "IOT"
  4. a VLAN for "MGMT"

Since it is not (yet) illegal to have NOT VLANs and some people may want to (examples):

  1. have just a "MAIN" SSID, NO VLANs
  2. have "MAIN" and "GUEST" BUT NOT "IOT", NOR a "MGMT" VLAN
  3. ....
    I.e. the ultimate goal (mine) is to have a basic configuration to which the users can optionally add VLANs and SSID's (slave radios) as they see fit.

You mean "the thing on the opposite side of the hood (bonnet)"? :wink:

"ether2-trunk" does not exist "in nature", so a line needs to be added to the configuration like:

/interface ethernet 
set [ find default-name=ether2 ] name=ether2-trunk

then, EITHER the CapAX OR the CapAC can be connect to it, so you will need another interface, like:

/interface ethernet 
set [ find default-name=ether3 ] name=ether3-trunk

and - as I see it - the choice of using ether2 and ether3 should be given to the user, on a RB5009 (say) I would use ether6 for the CapAC and ether7 for the CapAX.
Personally (but not necessarily I am right) re-naming interfaces is largely an exercise in futility, but I do understand why some people like that.

About MAC's, if I get you correctly, you just "invent" them.
I have to think about this, choosing an original routerboard.com MAC prefix (OUI) seems to me preferrable:
https://www.netify.ai/resources/macs/brands/mikrotik

If we take (say) D0:EA:11 as base, we can still have three custom fields:
D0:EA:11:xx:yy:zz
where:
xx = CAP number (even if the field is hex, one could use pseudo-decimal and have 1-99)
yy = VLAN number (even if the field is hex, one could use pseudo-decimal and have 2[1]-99)
zz = wifi interface number (even if the field is hex, one could use pseudo-decimal and have 1-99)
They seem enough to me.
Using hex (at the cost of making it less readable) might be an alternative, but I don't think it is needed, unless it provides a way out in the (hopefully rare) case of a MAC conflict.

[1] to respect Rules #1 and #2 of Mikrotik Club :wink:

@jaclaz

What do you want to achieve?
Where is the discussion going?

Are we on the network or the car forum?

A way to have a "configuration builder/helper":
a. a CAPSMAN (without "its own" wifi radios)
OR:
b. a CAPSMAN (with "its own" wifi radios)
AND
c. any[1] number of CAPs (AC)
AND
d. any [1] number of CAPs (AX)
with the options to have ALL of these:
e. VLAN for MAIN
f. VLAN for GUEST
g.VLAN for IOT
h. VLAN for MGMT
j. other custom VLANs
OR:
k. any subset of the VLANs #e to #j, including subset 0 (No VLANs at all, only a MAIN SSID)

Wherever we bring it. :slightly_smiling_face:
We have ample margins for digression, as long as before or later we get back to the above topic.

Right now? On the network forum, but at the time I wrote that I was on the sarcasm forum :astonished_face:.

[1] For a decently small value of any, let's say up to 9 CAPs

@jaclaz

What you wish to achieve is ok, but not if the format of what you present in an Excel file causes problems.

Please remember that some configuration entries can be generated almost statically. Part of them has to be created dynamically.

In Excel, you also need to add, for example, a configuration for "/ip ....."

Yep, it must be found a good compromise between freedom of the user to change parameters and the inflexibility of a template.

About the different versions, besides a "smart" dynamic auto-magical multi-choice, should it be too complex to implement, nothing prevents from making more than one template, one for each of the listed configurations.

I am not expecting to create something that a complete newbie would be able to use to have a complete configuration with all the possible crazy settings, only something that can be use as a (hopefully) working base, without the possible typos.

As we have seen, the ratio between "settings" and "base choices" is 4:1 or 5:1, so the risk of a typo is very high when going "freehand".

You are writing everything on one Excel sheet. It makes a mess.

Consider separation of:

  1. Settings/variables on one.
    1. define how many SIDs are needed - has to be dynamic
    2. combine network name <- > VLANs <-> SID <-> Passphrase
  2. Definition of abbreviations:
    1. br
    2. cfg
    3. sec
    4. dp
    5. wifi1
    6. wifi2
    7. vlan
    8. steering
  3. Device Names for router/caps abbreviations
  4. WiFi parameters

Sheets for

  1. description idea what is what
  2. router configuration
  3. CAPsMAN for AX + AC
  4. CAP AX + AC as it will be "the same"
  5. CAPsMAN for AX only
  6. CAP AX as a single - it can be set up differently
  7. CAPsMAN for AC only
  8. CAP AC as a single - it can be set up differently

Then you can have a generator.

It usually works the other way round, in my experience.
You first build something that works.
Then you make it pretty (or prettier).
Abbreviations are already defined (but can be of course modified and the area can be moved):

Column 1 Column 2 Column 3
The scheme is prefix_Name or - when useful - prefix_Name_vlan#
The prefix is what the thing is.
Name is one of the custom fields
vlan (where applicable) is the suffix corresponding vlan number
Prefixes:
br bridge
cfg configuration
sec security
dp datapath
wifi1 the first wifi interface, usually the 2.4 GHz one, but it depends on the device in use
wifi2 the second wifi interface, usually the 5 GHz one, but it depends on the device in use
vlan vlan interface

I am attaching something else, not a lot of progress, but added MAC generation and some conditional behaviour.

Capsman_work_in_progress02.zip (35.3 KB)

Ok, all waiting for the final version.

Another little step forward.
Capsman_work_in_progress03.zip (37.7 KB)

Now it contains (should contain) the logic to allow choosing to have 1-3 SSIDs and 0-4 VLANs.

Next step will be to add provisions for automatic generation of:

/ip address
/ip dhcp client

for both CAPsMAN and CAPs

And:

/ip dhcp server
/ip pool
/ip dhcp-server network

on CAPsMAN for the various VLANs.

I think that using a /24 subnet (fixed) will be enough (covering - say - 99% of setups), with the scheme 192.168.<VLAN#>.0
So:
Base (no VLANs) 192.168.88.0/24
VLAN 10 192.168.10.0/24
VLAN 20 192.168.20.0/24
VLAN 30 192.168.30.0/24
VLAN 40 192.168.40.0/24
(please do not use VLAN 88, besides VLAN 1 :wink:)

For simplicity and to give some consistency to IP assignment, I am thinking of:
CAPsMAN to be device #1 (thus renamed to CAPsMAN#1) have .1 assignment (static)
CAP_AC to be device #2 (thus renamed to CAP#2_AC) have .2 assignment (static)
CAP_AX to be device #3 (thus renamed to CAP#3_AX) have .3 assignment (static)

And (for the ip pool) use .10-.254 (fixed), I don't think that "losing" (potentially) some 7 addresses out of 254 can be an issue, and the very few people needing more than 9 CAPs can well change the pool range manually.

Ok, we have something that may - at least partially - work.

There is no provision for a CAPsMAN that has also its own radios (but adding it in a later version/release should be relatively easy).

There might be omissions and also both logical/conceptual and implementation mistakes.

But at least it looks readable, documented and usable.

I am posting the generated configurations of the three devices, CAPsMAN, CAP_AC and CAP_AX for those that can read and understand directly configurations and don't want to play with the spreadsheet.

# CAPsMAN#1

/ip dhcp-server
add address-pool=pool_default interface=br_CAPsMAN#1 name=dhcp_default
add address-pool=pool_MAIN_10 interface=vlan_MAIN_10 name=dhcp_MAIN_10
add address-pool=pool_GUEST_20 interface=vlan_GUEST_20 name=dhcp_GUEST_20
add address-pool=pool_IOT_30 interface=vlan_IOT_30 name=dhcp_IOT_30
add address-pool=pool_MGMT_40 interface=vlan_MGMT_40 name=dhcp_MGMT_40

/ip pool
add name=pool_default ranges=192.168.44.10-192.168.44.254
add name=pool_MAIN_10 ranges=192.168.10.10-192.168.10.254
add name=pool_GUEST_20 ranges=192.168.20.10-192.168.20.254
add name=pool_IOT_30 ranges=192.168.30.10-192.168.30.254
add name=pool_MGMT_40 ranges=192.168.40.10-192.168.40.254

/ip dhcp-server network
add address=192.168.44.0/24 dns-server=192.168.44.1,8.8.8.8,8.8.4.4 gateway=192.168.44.1 comment=default
add address=192.168.10.0/24 dns-server=192.168.10.1,8.8.8.8,8.8.4.4 gateway=192.168.10.1 comment=MAIN_10
add address=192.168.20.0/24 dns-server=192.168.20.1,8.8.8.8,8.8.4.4 gateway=192.168.20.1 comment=GUEST_20
add address=192.168.30.0/24 dns-server=192.168.30.1,8.8.8.8,8.8.4.4 gateway=192.168.30.1 comment=IOT_30
add address=192.168.40.0/24 dns-server=192.168.40.1,8.8.8.8,8.8.4.4 gateway=192.168.40.1 comment=MGMT_40

/interface wifi channel
add disabled=no name=dfs skip-dfs-channels=10min-cac

/interface wifi security
add authentication-types=wpa2-psk,wpa3-psk disable-pmkid=yes disabled=no ft=yes ft-over-ds=yes management-protection=required name=sec_MAIN_10 wps=disable passphrase=pwdforMAIN
add authentication-types=wpa2-psk,wpa3-psk disable-pmkid=yes disabled=no ft=yes ft-over-ds=yes management-protection=required name=sec_GUEST_20 passphrase=pwdforGUEST
add authentication-types=wpa2-psk,wpa3-psk disable-pmkid=yes disabled=no ft=yes ft-over-ds=yes management-protection=required name=sec_IOT_30 wps=disable passphrase=pwdforIOT

/interface wifi steering
add disabled=no name=steering1 rrm=yes wnm=yes

/interface wifi configuration
add channel=dfs country=Latvia disabled=no name=cfg_MAIN_10 security=sec_MAIN_10 ssid=MAIN steering=steering1
add channel=dfs country=Latvia disabled=no name=cfg_GUEST_20 security=sec_GUEST_20 ssid=GUEST steering=steering1
add channel=dfs country=Latvia disabled=no name=cfg_IOT_30 security=sec_IOT_30 ssid=IOT steering=steering1

/interface wifi capsman
set enabled=yes interfaces=vlan_MGMT_40 require-peer-certificate=no upgrade-policy=none

/interface wifi provisioning
add action=create-enabled comment=2G disabled=no master-configuration=cfg_MAIN_10 name-format=wifi_2G_%I slave-configurations=cfg_GUEST_20,cfg_IOT_30 supported-bands=2ghz-ax
add action=create-enabled comment=5G disabled=no master-configuration=cfg_MAIN_10 name-format=wifi_5G_%I slave-configurations=cfg_GUEST_20,cfg_IOT_30 supported-bands=5ghz-ax

/interface vlan
add interface=br_CAPsMAN#1 name=vlan_MAIN_10 vlan-id=10
add interface=br_CAPsMAN#1 name=vlan_GUEST_20 vlan-id=20
add interface=br_CAPsMAN#1 name=vlan_IOT_30 vlan-id=30
add interface=br_CAPsMAN#1 name=vlan_MGMT_40 vlan-id=40

/ip address
add address=192.168.44.1 interface=br_CAPsMAN#1 network=192.168.44.0
add address=192.168.10.1 interface=vlan_MAIN_10 network=192.168.10.0
add address=192.168.20.1 interface=vlan_GUEST_20 network=192.168.20.0
add address=192.168.30.1 interface=vlan_IOT_30 network=192.168.30.0
add address=192.168.40.1 interface=vlan_MGMT_40 network=192.168.40.0

/interface bridge
add frame-types=admit-only-vlan-tagged name=br_CAPsMAN#1 port-cost-mode=short protocol-mode=none pvid=40 vlan-filtering=yes

/interface bridge port
add bridge=br_CAPsMAN#1 interface=ether2 internal-path-cost=10 path-cost=10 pvid=40
add bridge=br_CAPsMAN#1 interface=ether3 internal-path-cost=10 path-cost=10 pvid=40

/interface bridge vlan
add bridge=br_CAPsMAN#1 tagged=br_CAPsMAN#1,ether2,ether3 vlan-ids=10,20,30
add bridge=br_CAPsMAN#1 tagged=br_CAPsMAN#1,ether2,ether3 vlan-ids=40

/system identity
set name=CAPsMAN#1

# CAP#2_AC
/interface wifi datapath
add bridge=br_CAP#2_AC disabled=no name=dp_MAIN_10 vlan-id=10
add bridge=br_CAP#2_AC disabled=no name=dp_GUEST_20 vlan-id=20
add bridge=br_CAP#2_AC disabled=no name=dp_IOT_30 vlan-id=30

/interface wifi
set [ find default-name=wifi1 ] configuration.manager=capsman .mode=ap datapath=dp_MAIN_10 disabled=no mac-address=00:0C:42:10:01:02 name=wifi1_MAIN_10
set [ find default-name=wifi2 ] configuration.manager=capsman .mode=ap datapath=dp_MAIN_10 disabled=no mac-address=00:0C:42:10:02:02 name=wifi2_MAIN_10
add configuration.mode=ap datapath=dp_GUEST_20 disabled=no mac-address=00:0C:42:20:13:02 master-interface=wifi1_MAIN_10 name=wifi1_GUEST_20
add configuration.mode=ap datapath=dp_IOT_30 disabled=no mac-address=00:0C:42:30:14:02 master-interface=wifi1_MAIN_10 name=wifi1_IOT_30
add configuration.mode=ap datapath=dp_GUEST_20 disabled=no mac-address=00:0C:42:20:23:02 master-interface=wifi2_MAIN_10 name=wifi2_GUEST_20
add configuration.mode=ap datapath=dp_IOT_30 disabled=no mac-address=00:0C:42:30:24:02 master-interface=wifi2_MAIN_10 name=wifi2_IOT_30

/interface wifi cap
set discovery-interfaces=vlan_MGMT_40 enabled=yes lock-to-caps-man=no slaves-static=yes

/interface vlan
add interface=br_CAP#2_AC name=vlan_MAIN_10 vlan-id=10
add interface=br_CAP#2_AC name=vlan_GUEST_20 vlan-id=20
add interface=br_CAP#2_AC name=vlan_IOT_30 vlan-id=30
add interface=br_CAP#2_AC name=vlan_MGMT_40 vlan-id=40

/interface bridge
add frame-types=admit-only-vlan-tagged name=br_CAP#2_AC pvid=40 vlan-filtering=yes

/interface bridge port
add bridge=br_CAP#2_AC frame-types=admit-only-vlan-tagged interface=ether1 pvid=40
add bridge=br_CAP#2_AC interface=wifi1_MAIN_10 pvid=10
add bridge=br_CAP#2_AC interface=wifi2_MAIN_10 pvid=10
add bridge=br_CAP#2_AC interface=wifi1_GUEST_20 pvid=20
add bridge=br_CAP#2_AC interface=wifi1_IOT_30 pvid=30
add bridge=br_CAP#2_AC interface=wifi2_GUEST_20 pvid=20
add bridge=br_CAP#2_AC interface=wifi2_IOT_30 pvid=30

/interface bridge vlan
add bridge=br_CAP#2_AC tagged=br_CAP#2_AC,ether1 vlan-ids=40
add bridge=br_CAP#2_AC tagged=br_CAP#2_AC,ether1 untagged=wifi1_MAIN_10,wifi2_MAIN_10 vlan-ids=10
add bridge=br_CAP#2_AC tagged=br_CAP#2_AC,ether1 untagged=wifi1_IOT_30,wifi2_IOT_30 vlan-ids=30
add bridge=br_CAP#2_AC tagged=br_CAP#2_AC,ether1 untagged=wifi1_GUEST_20,wifi2_GUEST_20 vlan-ids=20

/ip address
add address=192.168.44.2 interface=br_CAP#2_AC network=192.168.44.0
add address=192.168.10.2 interface=vlan_MAIN_10 network=192.168.10.0
add address=192.168.20.2 interface=vlan_GUEST_20 network=192.168.20.0
add address=192.168.30.2 interface=vlan_IOT_30 network=192.168.30.0
add address=192.168.40.2 interface=vlan_MGMT_40 network=192.168.40.0

/system identity
set name=CAP#2_AC

# CAP#3_AX
/interface wifi datapath
add bridge=br_CAP#3_AX disabled=no name=dp_MAIN_10 vlan-id=10
add bridge=br_CAP#3_AX disabled=no name=dp_GUEST_20 vlan-id=20
add bridge=br_CAP#3_AX disabled=no name=dp_IOT_30 vlan-id=30

/interface wifi
set [ find default-name=wifi1 ] configuration.manager=capsman .mode=ap datapath=dp_MAIN_10 disabled=no mac-address=00:0C:42:10:01:02 name=wifi1_MAIN_10
set [ find default-name=wifi2 ] configuration.manager=capsman .mode=ap datapath=dp_MAIN_10 disabled=no mac-address=00:0C:42:10:02:02 name=wifi2_MAIN_10
add configuration.mode=ap datapath=dp_GUEST_20 disabled=no mac-address=00:0C:42:20:13:02 master-interface=wifi1_MAIN_10 name=wifi1_GUEST_20
add configuration.mode=ap datapath=dp_IOT_30 disabled=no mac-address=00:0C:42:30:14:02 master-interface=wifi1_MAIN_10 name=wifi1_IOT_30
add configuration.mode=ap datapath=dp_GUEST_20 disabled=no mac-address=00:0C:42:20:23:02 master-interface=wifi2_MAIN_10 name=wifi2_GUEST_20
add configuration.mode=ap datapath=dp_IOT_30 disabled=no mac-address=00:0C:42:30:24:02 master-interface=wifi2_MAIN_10 name=wifi2_IOT_30

/interface wifi cap
set discovery-interfaces=vlan_MGMT_40 enabled=yes lock-to-caps-man=no slaves-static=yes

/interface vlan
add interface=br_CAP#3_AX name=vlan_MAIN_10 vlan-id=10
add interface=br_CAP#3_AX name=vlan_GUEST_20 vlan-id=20
add interface=br_CAP#3_AX name=vlan_IOT_30 vlan-id=30
add interface=br_CAP#3_AX name=vlan_MGMT_40 vlan-id=40

/interface bridge
add frame-types=admit-only-vlan-tagged name=br_CAP#3_AX pvid=40 vlan-filtering=yes

/interface bridge port
add bridge=br_CAP#3_AX frame-types=admit-only-vlan-tagged interface=ether1 pvid=40
add bridge=br_CAP#3_AX interface=wifi1_MAIN_10 pvid=10
add bridge=br_CAP#3_AX interface=wifi2_MAIN_10 pvid=10
add bridge=br_CAP#3_AX interface=wifi1_GUEST_20 pvid=20
add bridge=br_CAP#3_AX interface=wifi1_IOT_30 pvid=30
add bridge=br_CAP#3_AX interface=wifi2_GUEST_20 pvid=20
add bridge=br_CAP#3_AX interface=wifi2_IOT_30 pvid=30

/interface bridge vlan
add bridge=br_CAP#3_AX tagged=br_CAP#3_AX,ether1 vlan-ids=40
add bridge=br_CAP#3_AX tagged=br_CAP#3_AX,ether1 untagged=wifi1_MAIN_10,wifi2_MAIN_10 vlan-ids=10
add bridge=br_CAP#3_AX tagged=br_CAP#3_AX,ether1 untagged=wifi1_GUEST_20,wifi2_GUEST_20 vlan-ids=20
add bridge=br_CAP#3_AX tagged=br_CAP#3_AX,ether1 untagged=wifi1_IOT_30,wifi2_IOT_30 vlan-ids=30

/ip address
add address=192.168.44.3 interface=br_CAP#3_AX network=192.168.44.0
add address=192.168.10.3 interface=vlan_MAIN_10 network=192.168.10.0
add address=192.168.20.3 interface=vlan_GUEST_20 network=192.168.20.0
add address=192.168.30.3 interface=vlan_IOT_30 network=192.168.30.0
add address=192.168.40.3 interface=vlan_MGMT_40 network=192.168.40.0

/system identity
set name=CAP#3_AX

Capsman_work_in_progress08.zip (81.0 KB)

EDIT1: There is a mistake in the generator for the CAP AX in /wifi datapath, corrected the above snippet for the CAP AX and posted corrected version 8 of the sheet.

OK, I tried (and failed) to make sense of a comparison between what was created by the Generator (which should be - more or less and with all the caveats that my implementation imply - pmastal's suggested configuration) and the configuration snippets posted by mkx.
The comparison is complicated by the use of the three radios of the Audience, but besides that and the (obvious) different names of interfaces and numbering of vlans, the only thing clear to me is that the two have a VERY DIFFERENT APPROACH to make a set of CAPsMAN+CAP_AC+CAP_AX configurations.

I am attaching the comparison with "normalized" names of items (though not much useful for anything).
Generator_vs_mkx_02.zip (12.0 KB)

@pmastal
@mkx

Hey, kids, you don't wanna play with me anymore?
:cry:

My problem here is that I'm mostly reading this fotum on an android tablet ... which makes opening ZIP files and some fancy file formats a bit of a problem.

I can try a "printed" .pdf, but cannot say how readable it will be on your device.

Generator_vs_mkx_02.pdf (37.0 KB)

Something you may want to try is SpreadCE/Spread32, which does exist in an Android version (cannot say how good it is, the normal Windows version is IMHO like the third best thing in the world, after sliced bread and grub4dos), you can try the shareware version at no cost.
Of course the usual caveats for using a non-google_play tool apply, it comes in a .zip file that contains the .apk.
https://www.byedesign.co.uk/
the "registered version" is actually available on google play for a small sum, but of course, even if it is not much and I can guarantee that the "base" program is exceptionally good, it is only up to you if you could find it useful and worth the investment:
https://play.google.com/store/apps/details?id=uk.byedesign.spreadce

I wrote: "I'm waiting for your final version, but for me, your idea goes in a bit of a strange direction."

When I find spare time, I send my vision of your idea, first work and family. Later, forum.