Here's my working setup. It consists of:
- CAPsMAN device, running on a wired-only router (it's a hAP ac2 acually, but doesn't have wifi-qcom-ac driver installed, so that makes it wired-only)
- AC device - Audience as CAP device. It has wifi-qcom-ac driver installed.
- AX device - wAP ax as CAP device. It has wifi-qcom driver installed
All devices are currently running ROS 7.21.4 (long-term). CAPs were upgraded from CAPsMAN (I've downloaded required packages and put it on CAPsMAN before upgrading CAPsMAN device).
I'm running a few VLANs, there are two VLANs relevant to WiFi setup: main LAN (VLAN ID 42) and guest access (VLAN ID 41).
I've set up VLANs on CAPsMAN on swithc chip, so bridge is not VLAN-aware.
Here's relevant part configuration of wired part of CAPsMAN:
/interface ethernet
set [ find default-name=ether1 ] name=ether1-trunk
...
/interface ethernet switch port
set 0 vlan-mode=secure
...
set 5 vlan-mode=secure # this is switch-cpu "port"
/interface ethernet switch vlan
...
add independent-learning=yes ports=switch1-cpu,ether1-trunk switch=switch1 vlan-id=99
add independent-learning=yes ports=switch1-cpu,ether1-trunk switch=switch1 vlan-id=42
add independent-learning=yes ports=switch1-cpu,ether1-trunk switch=switch1 vlan-id=41
/interface bridge
add admin-mac=BA:69:F4:xx:yy:zz auto-mac=no name=bridge
/interface bridge port
add bridge=bridge interface=ether1-trunk
/interface vlan
add interface=bridge name=vlan-41 vlan-id=41
add interface=bridge name=vlan-42 vlan-id=42
add interface=bridge name=vlan-99 vlan-id=99
And then the WiFi CAPsMAN part of config ...
I'm setting APs with statically configured frequencies and I'm setting them up in /interface/wifi/channel ... which I'm not including as it's not relevant to the discussion.
First the part which is common for both AX and AC CAP clients:
/interface wifi security
add authentication-types=wpa2-psk,wpa3-psk connect-priority=0/1 dh-groups=19,20,21 \
disable-pmkid=yes encryption=ccmp,ccmp-256 ft=yes ft-over-ds=no \
ft-preserve-vlanid=no group-key-update=5m name=wpa2wpa3 wps=disable \
passphrase=<redacted>
/interface wifi capsman
set enabled=yes interfaces=vlan-99 package-path=usb1/packages upgrade-policy=suggest-same-version
Here's part, relevant for AX clients (which can deal with VLAN settings on datapath):
/interface wifi datapath
add bridge=bridge comment=LAN name=datapath42 vlan-id=42
add bridge=bridge client-isolation=yes comment="guest WiFi" name=datapath41 vlan-id=41
/interface wifi configuration
add channel=2GHz-13 comment="2GHz ch13 42" country=<redacted> datapath=datapath42 \
mode=ap multicast-enhance=enabled name=2GHz-13-42 security=wpa2wpa3 ssid=mkxNet
add channel=5GHz-52 comment="5GHz ch52 42" country=<redacted> datapath=datapath42 \
mode=ap multicast-enhance=enabled name=5GHz-52-42 security=wpa2wpa3 ssid=mkxNet
add datapath=datapath41 mode=ap multicast-enhance=enabled name=slave-41 \
ssid="I\E2\9D\A4MikroTik"
/interface wifi provisioning
# single SSID on 2GHz interface
# MAC belongs to wAP ax 2GHz interface
add action=create-enabled comment="wAP 2Ghz" master-configuration=2GHz-13-42 \
radio-mac=F4:1E:57:aa:bb:cc
# 2 SSIDs on 5GHz interface, master configuration is same SSID as on 2GHz interface,
# slave is guest SSID; MAC belongs to wAP ax 5GHz interface
add action=create-enabled comment="wAP 5Ghz" master-configuration=5GHz-52-42 \
radio-mac=F4:1E:57:aa:bb:cd slave-configurations=slave-41
The above portion of config makes configuration on wAP ax working. Note: setting provisioning action=create-enabled is not necessary, I'm using it to get persistent interfaces (on CAPsMAN as well) so I can change interface names on CAPsMAN to more descriptive ones.
Other relevant configuration, set on (each) wAP ax (or any other AX) client, includes:
/interface bridge
add admin-mac=F6:1E:57:xy:yz:zw auto-mac=no frame-types=admit-only-vlan-tagged name=bridge vlan-filtering=yes
/interface bridge port
add bridge=bridge frame-types=admit-only-vlan-tagged interface=ether1
/interface bridge vlan
add bridge=bridge comment=MGMT tagged=bridge,ether1 vlan-ids=99
add bridge=bridge tagged=ether1 vlan-ids=42
add bridge=bridge tagged=ether1 vlan-ids=41
/interface wifi configuration
add manager=capsman name=capsman
/interface wifi cap
set discovery-interfaces=vlan-99 enabled=yes
/interface wifi datapath
add bridge=bridge name=default
And now the Audience part of configuration ... which is pretty much more complicated. Partially as it's got 3 radios and (unlike on wAP ax) the guest SSID runs on its own physical radio. But the main complexity is in VLAN setup.
Here's the CAPsMAN configuration, specific for AC CAP:
/interface wifi datapath
add bridge=bridge client-isolation=yes comment="no VLAN ID" name=datapath-noVID
/interface wifi configuration
add channel=2GHz-9 comment="2GHz ch9 no VLAN ID" country=<redacted> datapath=datapath-noVID \
mode=ap multicast-enhance=enabled name=2GHz-9-noVID security=wpa2wpa3 ssid=mkxNet
add channel=5GHz-low-20 comment="5GHz low guest no VLAN ID" country=<redacted> \
datapath=datapath-noVID mode=ap multicast-enhance=enabled name=5GHz-low-41-novid ssid="I\E2\9D\A4MikroTik"
add channel=5GHz-100 comment=5GHz-100-noVID country=<redacted> datapath=datapath-noVID \
mode=ap multicast-enhance=enabled name=5GHz-100-noVID security=wpa2wpa3 ssid=mkxNet
...
/interface wifi provisioning
add action=create-enabled comment="Audience 2GHz" master-configuration=2GHz-9-noVID radio-mac=2C:C8:1B:bb:cc:de
add action=create-enabled comment="Audience 5GHz low" master-configuration=5GHz-low-41-novid radio-mac=2C:C8:1B:bb:cc:dd
add action=create-enabled comment="Audience 5GHz high" master-configuration=5GHz-100-noVID radio-mac=2C:C8:1B:bb:cc:df
There are two main points of the AC-specific part of config:
- use of datapath profile without vlan-id set
- use of action-create-enabled on provisioning rules (the relevance will become apparent below).
Other relevant configuration, set on (each) Audience (or any other AC) client, includes:
/interface bridge
add admin-mac=2E:C8:1B:bb:cc:ae auto-mac=no frame-types=admit-only-vlan-tagged \
name=bridge vlan-filtering=yes
/interface bridge port
add bridge=bridge frame-types=admit-only-vlan-tagged interface=ether1
add bridge=bridge frame-types=admit-only-untagged-and-priority-tagged interface=wifi1 pvid=42
add bridge=bridge frame-types=admit-only-untagged-and-priority-tagged interface=wifi2 pvid=41
add bridge=bridge frame-types=admit-only-untagged-and-priority-tagged interface=wifi3 pvid=42
/interface bridge vlan
add bridge=bridge comment=MGMT tagged=bridge,ether1 vlan-ids=99
add bridge=bridge comment=LAN tagged=ether1 vlan-ids=42
add bridge=bridge comment=guest tagged=ether1 vlan-ids=41
...
/interface wifi cap
set discovery-interfaces=vlan-99 enabled=yes slaves-static=yes
/interface wifi configuration
add manager=capsman name=capsman
Notes:
- there's no datapath defined as there's no need for it ... and the reason is in the next bullet:
- since CAPsMAN provisioning includes action-create-enabled, it'll enable (or create in case of slave interfaces) interface on CAP ... and these interfaces will be persistent (unlike default action, which is create-dynamic-enabled and those interfaces are not persistent). Which makes it possible to manually add them as bridge port on CAP device ... which in turn allows for setup the VLAN properties of these interfaces.
The end effect on AX CAP client is this:
[user@wapax] /interface/bridge/port> print
Flags: D - DYNAMIC
Columns: INTERFACE, BRIDGE, HW, HORIZON, TRUSTED, FAST-LEAVE, BPDU-GUARD, EDGE,
POINT-TO-POINT, PVID, FRAME-TYPES
# INTERF BRIDGE HW HORI TR FA BP EDGE POIN PVID FRAME-TYPES
0 ether1 bridge yes none no no no auto auto 1 admit-only-vlan-tagged
1 D wifi1 bridge none no no no auto no 42 admit-all
2 D wifi2 bridge none no no no auto no 42 admit-all
3 D wifi7 bridge none no no no auto no 41 admit-all
[user@wapax] /interface/bridge/vlan> print
Flags: D - DYNAMIC
Columns: BRIDGE, VLAN-IDS, CURRENT-TAGGED
# BRIDGE VLAN-IDS CURRENT-TAGGED
;;; MGMT
0 bridge 99 bridge
ether1
1 bridge 42 ether1
2 bridge 41 ether1
;;; added by wifi
5 D bridge 42 wifi2
Note the "D" flag on all wifi bridge ports ... which means they were added as bridge ports dynamically, due to CAPsMAN privisioning and properly used datapath.
AFAIK this kind of setup is slightly wrong ... because wifi-qcom driver is actually tagging frames (either with vlan-id as set on datapath or using VID value set in access-list or ...) but bridge port still has PVID set.
The weird part is print out of /interface/bridge/vlan (yes, it's missing items #3 and #4 because they're irrelevant to shown configuration). It's missing entries for wifi1 (should be tagged with VID 42) and wifi7 (should be tagged with VID 41).
I guess it's a bit harder to make things correct, specially with /interface/bridge/vlan settings if we allow manual settings of VID other than in datapath.
And on AC CAP client it's like this:
[user@audience] /interface/bridge/port> print
Flags: I - INACTIVE
Columns: INTERFACE, BRIDGE, HW, HORIZON, TRUSTED, FAST-LEAVE, PATH-COST, INTERNAL-PATH-COST, BPDU-GUARD, EDGE,
POINT-TO-POINT, PVID, FRAME-TYPES
# INTERFACE BRIDGE HW HORIZON TR FA PA IN BP EDGE POIN PVID FRAME-TYPES
0 ether1 bridge yes none no no 10 10 no auto auto 1 admit-only-vlan-tagged
1 wifi2 bridge none no no no auto auto 41 admit-only-untagged-and-priority-tagged
2 wifi1 bridge none no no no auto auto 42 admit-only-untagged-and-priority-tagged
3 wifi3 bridge none no no no auto auto 42 admit-only-untagged-and-priority-tagged
[user@audience] /interface/bridge/vlan> print
Flags: D - DYNAMIC
Columns: BRIDGE, VLAN-IDS, CURRENT-TAGGED, CURRENT-UNTAGGED
# BRIDGE VLAN-IDS CURRENT-TAGGED CURRENT-UNTAGGED
;;; MGMT
0 bridge 99 bridge
ether1
;;; LAN
1 bridge 42 ether1
;;; guest
2 bridge 41 ether1
;;; added by vlan on bridge
3 D bridge 42 bridge
;;; added by pvid
4 D bridge 42 wifi1
wifi3
;;; added by pvid
5 D bridge 41 wifi2
Note the frame-types and lack of "D" flag. And note the "completeness" of VLAN setup 