Mikrotik stuff has plenty of its own quirks, I'll note them down here.
Contents
Bridging and VLANs
Bridging with VLANs is complicated on Mikrotik. I don't really get why there's /interface/vlan and /interface/bridge/vlan and why it matters, but it does. It's also important to note that this stuff can be hardware-offloaded, depending on the switch chip in your particular device. For this reason, you need to know what you've got, what you're doing, and whether you need to care about offload.
Aha, this explanation helps a lot! https://forum.mikrotik.com/viewtopic.php?t=173692&sid=c7f67d4cb39505bd9a25cf61b5dfefe8
The gist is that the bridge can be tagged because that's really the router-facing port on a bridge (a switch), if you had a switch connected to a router. A device hosting a bridge doesn't have to participate in the network above L2, but if you want it to, that's when it matters. So /interface/bridge/vlan ports are just about whether a port is tagged or untagged on the bridge, which affects how traffic floods across the bridge.
If you want the device to participate in the bridge, it has a "port" on the bridge as well - it's "the bridge", which is why you can apply tags to the bridge. In that case you tag it up, but there's nothing "attached to the port yet", it just has tags added/stripped when packets egress/ingress it.
That's when you define an /interface/vlan, and plop it on top of the bridge - much like how in Linux you can have eth0 and eth0.241, the latter is the tagged version of the underlying eth0 interface.
SFPs
If you've got one plugged in you can check it's info/stats.
{ :local iflist [find where default-name~"(sfp|combo|ether)"] :foreach if in=$iflist do={ :local ifname [get $if name] :local nicename [:pick "$ifname " 0 13] :local ifmon [monitor $ifname once as-value] :local sfppresent ($ifmon->"sfp-module-present") :local sfpmodel ($ifmon->"sfp-vendor-part-number") :if ($sfppresent = true) do={:put "$nicename --> $sfpmodel"} else={:put "$nicename --> <empty>" } } }
You can just run this on the terminal. Here's an example from helena, where I've connected its SFP port to the Unifi switch for a 1G uplink trunk.
[furinkan@helena] > /interface/ethernet/ [furinkan@helena] /interface/ethernet> { {... :local iflist [find where default-name~"(sfp|combo|ether)"] {... :foreach if in=$iflist do={ {{... :local ifname [get $if name] {{... :local nicename [:pick "$ifname " 0 13] {{... :local ifmon [monitor $ifname once as-value] {{... :local sfppresent ($ifmon->"sfp-module-present") {{... :local sfpmodel ($ifmon->"sfp-vendor-part-number") {{... :if ($sfppresent = true) do={:put "$nicename --> $sfpmodel"} else={:put "$nicename --> <empty>" } {{... } {... } core-uplink --> <empty> kalina --> <empty> persica1 --> <empty> persica2 --> <empty> persica3 --> <empty> sfp1 --> SFPP-PC015