The part I will agree with you on is that I don't understand what is preventing them from unifying the front-end VLAN config interface as much as possible across the different models of switch chips used in the different products. I understand that not all switch chips support all of the same features, but still...you should be able to abstract away as much of the implementation details as possible behind a common interface. Why do some Atheros/Qualcomm chips require mucking around with /interface/ethernet/switch, and CRS1xx/2xx also involve /interface/ethernet/switch but with a *completely* different interface, but CRS3xx/5xx allows you to just use the same /interface/bridge abstraction that you use when configuring a software bridge? Why can't all of the switch chips just take their marching orders from /interface/bridge?
Aside them that, I am fairly happy with the current /interface/bridge model...it makes logical enough sense to me. So as long as I limit myself to CRS3xx/CRS5xx/CCR2xxx hardware, or am fine with just a software bridge, I'm golden.
There are, admittedly, a couple of glaring shortcomings with even the current implementation, the primary one (in my opinion) being that you can only ever manipulate one kind/ethertype of tag. So if you have a need to filter based on C-tag (0x8100) for most trunk ports, but also want to designate one or more ports as QinQ (or, more accurately, "QinAD") and so filter on S-tag (0x88a8), this is impossible as far as I know. You have to pick one or the other. However, with the new tag-stacking feature on ROS 7, you can do true "QinQ" (or "Ctag-in-Ctag"), which probably satisfies most people's requirements. If you DO configure the bridge to filter on 0x88a8, though, it will automatically treat frames with 0x8100 tags on them as "untagged", so tag-stacking does just automatically work with no extra config.
Managing interface Vlans ( mode access vlan and/or mode 802.1q trunk - and configuring what vlans are allowed to go through Trunk interfaces is ( at this time ) very difficult for most admins to understand how Mikrotik SwOS and ROS does port management.
I tried to provide a summary of this recently for RouterOS in a different thread that I'll re-echo here:
- To configure an access port, all you need to do is change the PVID of that interface in /interface/bridge/port
- To configure a trunk port, you add a given interface to the "tagged" list of a defined VLAN under /interface/bridge/vlan
Also depending on if the OS is SwOS or ROS , things are different again.
These are two completely different software platforms, so I'll give them a pass on this.
Also depending on which ROS version ( 6 or 7 ) things are different again.
Not that much different? In any case, things changing is a way of life, like it or not...whatever changes that they have made to the switch config UI in ROS 7, they're not going to go and back-port those to ROS 6.
Also there is no single winbox/Web interface that allows you to see all port settings.
/interface/bridge/vlan is pretty comprehensive. I can't think of anything that you can't see there at a glance with respect to what ports are getting trunked which VLANs. Any access ports that you configured by setting a port's PVID also shows up here, with the interface showing up under the "current-untagged" list for that VLAN-ID.
I wish to make a Feature-Request for all basic port settings to be on one simple single page ( and one single area in a CLI export ).
So basically a "Quick Set" for VLAN config on switches? It's not an entirely terrible idea, admittedly, but...you just got finished complaining about too many different ways to configure VLANs across different MT platforms and ROS versions, did you not? And now you want to introduce yet another different way?
I am reminded of
this comic.
Configure ether1 as an 802.1q trunk and allow all vlans
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=2-4094 tagged=ether1
Configure ether2 as mode-access on Vlan-10
/interface/bridge/port/set [find interface=ether2] pvid=10
Configure ether3 as an 802.1q trunk interface and only allow vlans 10,20, 50, 200, 210
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=10,20,50,200,210 tagged=ether3
Configure ether4 as an 802.1q trunk interface and block/deny vlans 11,22,55,220,215
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=2-10,12-21,23-54,56-214,216-219,221-4094 tagged=ether4
Are you maybe starting to get the flavor of this a little bit?
(It's important to note that valid IDs for a trunk port are basically a whitelist on ROS, while on other switches you may be used to a trunk port allowing all IDs by default until you explicitly remove some.)
Configure ether5 as a Q-in-Q interface - vlan(s) in vlan
/interface/bridge/port/set [find interface=ether5] tag-stacking=yes
Configure ether6 as an S-Tag and.or C-Tag to/from any network device
Ambiguous what exactly you mean here. As mentioned earlier, you can't mix S-tag filtering and C-tag filtering on MT switches (that I know of). Whatever VLAN tag ethertype you filter on, it will ignore all others and just treat those as if they are "untagged". If you truly need to deal with S-tags, though, you would:
/interface/bridge/set bridge1 ether-type=0x88a8
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=2-4094 tagged=ether6
If you are content with just using C-tag ethertype as if it were an S-tag, though, then I'm guessing you want this?:
/interface/bridge/port/set [find interface=ether6] tag-stacking=yes
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=2-4094 tagged=ether6
Configure ether7 as a trunk & set a native vlan & configure what vlans may pass through that port
Configure ether7 as a trunk + what VLANs "may pass through" (get trunked by) that port...it's the same as all of the previous ones:
/interface/bridge/vlan/add bridge=bridge1 vlan-ids=<your_allowed_VLAN-ID_list> tagged=ether7
...and then set that same trunk port's native VLAN:
/interface/bridge/port/set [find interface=ether7] pvid=<your_desired_native_VLAN-ID>
So, to sum up:
- Any port where you don't add a "tagged=" attribute to a VLAN for it under /interface/bridge/vlan is de-facto an access port
- Any port where you add it to a "tagged=" attribute to one or more VLANs under /interface/bridge/vlan is de-facto a trunk port (actually a hybrid port, since it will by default continue to pass VID 1 as untagged, at least unless/until you set the native VLAN for that same port)
- Setting "pvid=" property for a port under /interface/bridge/port sets the access VLAN for an access port, and the native VLAN for a trunk port
Seems pretty simple, really.
The disclaimer, of course, is that this is all true
as long as you are using anything except for the old CRS1xx/2xx, or one of the residential/SOHO router models that has some low-end 5-port switch chip in it (so, basically, the models that don't have Marvell switch chips in them are the oddballs). But friends don't let friends use CRS1xx/2xx anyway.
