Manual:Switch Chip Features

From MikroTik Wiki
Revision as of 13:56, 24 October 2018 by Arturszon (talk | contribs) (Bridge Hardware Offloading)
Jump to: navigation, search
Version.png

Applies to RouterOS: v6.0 +

Introduction

There are several types of switch chips on Routerboards and they have a different set of features. Most of them (from now on "Other") have only basic "Port Switching" feature, but there are few with more features:

Capabilities of switch chips:

FeatureQCA8337Atheros8327Atheros8316Atheros8227Atheros7240ICPlus175DMT7621RTL8367Other
Port Switchingyesyesyesyesyesyesyesyesyes
Port Mirroringyesyesyesyesyesyesyesyesno
TX limityesyesyesyesyesnononono
RX limityesyesnonononononono
Host table2048 entries2048 entries2048 entries1024 entries2048 entriesno2048 entries2048 entriesno
Vlan table4096 entries4096 entries4096 entries4096 entries16 entriesnononono
Rule table92 rules92 rules32 rulesnononononono
Icon-note.png

Note: Cloud Router Switch (CRS) series devices have highly advanced switch chips built-in, they support wide variety of features. For more details about switch chip capabilities on CRS1xx/CRS2xx series devices check the CRS1xx/CRS2xx series switches manual, for CRS3xx series devices check the CRS3xx series switches manual.


RouterBoard Switch-chip description
RB4011iGS+ RTL8367 (ether1-ether5); RTL8367 (ether6-ether10);
RB1100AHx4 RTL8367 (ether1-ether5); RTL8367 (ether6-ether10); RTL8367 (ether11-ether13)
RB750Gr3 (hEX), RB760iGS (hEX S) MT7621 (ether1-ether5)
RBM33G MT7621 (ether1-ether3)
RB3011 series QCA8337 (ether1-ether5); QCA8337 (ether6-ether10)
RB OmniTik ac series QCA8337 (ether1-ether5)
RB941-2nD (hAP lite) Atheros8227 (ether1-ether4)
RB951Ui-2nD (hAP); RB952Ui-5ac2nD (hAP ac lite); RB750r2 (hEX lite); RB750UPr2 (hEX PoE lite); RB750P-PBr2 (PowerBox); RB750P r2; RBOmniTikU-5HnDr2 (OmniTIK 5); RBOmniTikUPA-5HnDr2 (OmniTIK 5 PoE) Atheros8227 (ether1-ether5)
RB750Gr2 (hEX); RB962UiGS-5HacT2HnT (hAP ac); RB960PGS (hEX PoE); RB960PGS-PB (PowerBox Pro) QCA8337 (ether1-ether5)
RB953GS Atheros8327 (ether1-ether3+sfp1)
RB850Gx2 Atheros8327 (ether1-ether5) with ether1 optional [more]
RB2011 series Atheros8327 (ether1-ether5+sfp1); Atheros8227 (ether6-ether10)
RB750GL; RB751G-2HnD; RB951G-2HnD; RBD52G-5HacD2HnD (hAP ac²) Atheros8327 (ether1-ether5)
cAP ac Atheros8327 (ether1-ether2)
RB1100AH Atheros8327 (ether1-ether5); Atheros8327 (ether6-ether10)
RB1100AHx2 Atheros8327 (ether1-ether5); Atheros8327 (ether6-ether10)
CCR1009 series Atheros8327 (ether1-ether4)
RB493G Atheros8316 (ether1+ether6-ether9); Atheros8316 (ether2-ether5)
RB435G Atheros8316 (ether1-ether3) with ether1 optional [more]
RB450G Atheros8316 (ether1-ether5) with ether1 optional [more]
RB450Gx4 Atheros8327 (ether1-ether5)
RB433GL Atheros8327 (ether1-ether3)
RB750G Atheros8316 (ether1-ether5)
RB1200 Atheros8316 (ether1-ether5)
RB1100 Atheros8316 (ether1-ether5); Atheros8316 (ether6-ether10)
DISC Lite5 Atheros8227 (ether1)
RBmAP2nD Atheros8227 (ether1-ether2)
RBmAP2n Atheros7240 (ether1-ether2)
RB750 Atheros7240 (ether2-ether5)
RB750UP Atheros7240 (ether2-ether5)
RB751U-2HnD Atheros7240 (ether2-ether5)
RB951-2n Atheros7240 (ether2-ether5)
RB951Ui-2HnD Atheros8227 (ether1-ether5)
RB433 series ICPlus175D (ether2-ether3); older models had ICPlus175C
RB450 ICPlus175D (ether2-ether5); older models had ICPlus175C
RB493 series ICPlus178C (ether2-ether9)
RB816 ICPlus178C (ether1-ether16)


Command line config is under /interface ethernet switch menu. This menu contains a list of all switch chips present in system, and some sub-menus as well. /interface ethernet switch menu list item represents a switch chip in system:

[admin@MikroTik] /interface ethernet switch> print
Flags: I - invalid
 #   NAME     TYPE         MIRROR-SOURCE   MIRROR-TARGET
 0   switch1  Atheros-8316 ether2          none

Depending on switch type there might be available or not available some configuration capabilities.

Atheros8316 packet flow diagram

Features

Port Switching

Switching feature allows wire speed traffic passing among a group of ports, like the ports were a regular ethernet switch. You configure this feature by setting a "master-port" property to one ore more ports in /interface ethernet menu. A 'master' port will be the port through which the RouterOS will communicate to all ports in the group. Interfaces for which the 'master' port is specified become inactive - no traffic is received on them and no traffic can be sent out.

For example consider a router with five ethernet interfaces:

[admin@MikroTik] > interface ethernet print
Flags: X - disabled, R - running, S - slave
 #    NAME      MTU   MAC-ADDRESS       ARP        MASTER-PORT      SWITCH
 0 R  ether1    1500  00:0C:42:3E:5D:BB enabled
 1    ether2    1500  00:0C:42:3E:5D:BC enabled    none             switch1
 2    ether3    1500  00:0C:42:3E:5D:BD enabled    none             switch1
 3    ether4    1500  00:0C:42:3E:5D:BE enabled    none             switch1
 4 R  ether5    1500  00:0C:42:3E:5D:BF enabled    none             switch1

And you configure a switch containing three ports ether3, ether4 and ether5:

[admin@MikroTik] /interface ethernet> set ether4,ether5 master-port=ether3
[admin@MikroTik] /interface ethernet> print
Flags: X - disabled, R - running, S - slave
 #    NAME      MTU   MAC-ADDRESS       ARP        MASTER-PORT      SWITCH
 0 R  ether1    1500  00:0C:42:3E:5D:BB enabled
 1    ether2    1500  00:0C:42:3E:5D:BC enabled    none             switch1
 2 R  ether3    1500  00:0C:42:3E:5D:BD enabled    none             switch1
 3  S ether4    1500  00:0C:42:3E:5D:BE enabled    ether3           switch1
 4 RS ether5    1500  00:0C:42:3E:5D:BF enabled    ether3           switch1

ether3 is now the master port of the group. Note: you can see that previously a link was detected only on ether5, but now as the ether3 is a 'master' the running flag is propagated to master port.

Switch1.png

In essence this configuration is the same as if you had a RouterBoard with 3 ethernet interfaces with ether3 connected to ethernet switch that has 4 ports:

Switch2.png

A more general diagram of RouterBoard with switch chip that has 5 port switch chip:

Switch3.png

Here you can see that, a packet that gets received by one of the ports always passes through the switch logic at first. Switch logic decides to which ports the packet should be going to. Passing packet 'up' or giving it to RouterOS is also called sending it to switch chips 'cpu' port. That means that at the point switch forwards the packet to cpu port the packet starts to get processed by RouterOS as some interfaces incoming packet. While the packet does not have to go to cpu port it is handled entirely by switch logic and does not require any cpu cycles and happen at wire speed for any frame size.

Bridge Hardware Offloading

Since RouterOS v6.41 there are user interface changes which convert RouterBoard master-port configuration into a bridge with hardware offloading. From now on bridges will handle all Layer2 forwarding and the use of switch chip (hw-offload) will automatically turn on if appropriate conditions are met. The rest of RouterOS Switch features remain untouched in usual menus. By default all newly created bridge ports have hw=yes option and it allows enabling of hw-offload when possible. If such functionality is not required, it can be disabled by /interface bridge port set hw=no on bridge port to have completely software operated bridging.

Icon-note.png

Note: Downgrading to previous RouterOS versions will not restore master-port configuration. The bridge with no hw-offload will appear instead and master-port configuration will have to be redone from the beginning.


Following table states what features currently keeps bridge hardware offloading enabled on certain RouterBOARD and switch chip models.

Notes:

  • Enabling this feature maintains hw-offload: +
  • Enabling this feature turns off hw-offload: -
RouterBoard/[Switch Chip] Model Features in Switch menu Bridge STP/RSTP Bridge MSTP Bridge IGMP Snooping Bridge DHCP Snooping Bridge VLAN Filtering Bonding
CRS3xx series + + + + + + +
CRS1xx/CRS2xx series + + - + 1 + 1 - -
[QCA8337] + + - - + 2 - -
[AR8327] + + - - + 2 - -
[AR8227] + + - - + 2 - -
[AR8316] + + - - + 2 - -
[AR7240] + + - - + 2 - -
[MT7621] + - - - + - -
[RTL8367] + - - - + - -
[ICPlus175D] + - - - + - -

NOTES:

  1. Feature will not work properly in VLAN switching setups, you must make sure that required packet are sent out with the correct VLAN tag using ACL rules.
  2. DCHP Snooping will not work properly with VLAN switching


  • Port switching with master-port configuration before v6.41
[admin@MikroTik] > interface ethernet export 
/interface ethernet
set [ find default-name=ether3 ] master-port=ether2
set [ find default-name=ether4 ] master-port=ether2
set [ find default-name=ether5 ] master-port=ether2
[admin@MikroTik] > 

[admin@MikroTik] > interface ethernet print 
Flags: X - disabled, R - running, S - slave 
 #    NAME             MTU MAC-ADDRESS       ARP             MASTER-PORT          SWITCH         
 0 R  ether1        <small style="font-size:60%;">1</small>  1500 D4:CA:6D:E2:64:64 enabled         none                 switch1        
 1 R  ether2          1500 D4:CA:6D:E2:64:65 enabled         none                 switch1        
 2 RS ether3          1500 D4:CA:6D:E2:64:66 enabled         ether2               switch1        
 3 RS ether4          1500 D4:CA:6D:E2:64:67 enabled         ether2               switch1        
 4 RS ether5          1500 D4:CA:6D:E2:64:68 enabled         ether2               switch1                     
  • Port switching with bridge configuration and enabled hw-offload since v6.41
[admin@MikroTik] > interface bridge export 
/interface bridge
add name=bridge1 igmp-snooping=no  protocol-mode=none
/interface bridge port
add bridge=bridge1 interface=ether2 hw=yes
add bridge=bridge1 interface=ether3 hw=yes
add bridge=bridge1 interface=ether4 hw=yes
add bridge=bridge1 interface=ether5 hw=yes

[admin@MikroTik] > interface bridge port print 
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload 
 #     INTERFACE              BRIDGE              HW  PVID PRIORITY  PATH-COST INTERNAL-PATH-COST    HORIZON
 0   H ether2                 bridge1             yes    1     0x80         10                 10       none
 1   H ether3                 bridge1             yes    1     0x80         10                 10       none
 2   H ether4                 bridge1             yes    1     0x80         10                 10       none
 3   H ether5                 bridge1             yes    1     0x80         10                 10       none

Switch All Ports Feature

Ether1 port on RB450G/RB435G/RB850Gx2 has a feature that allows it to be removed/added to the default switch group. By default ether1 port will be included in the switch group. This configuration can be changed with /interface ethernet switch set switch1 switch-all-ports=no

  • switch-all-ports=yes/no -

"yes" means ether1 is part of switch and supports switch grouping, and all other advanced Atheros8316/Atheros8327 features including extended statistics (/interface ethernet print stats).

"no" means ether1 is not part of switch, effectively making it as stand alone ethernet port, this way increasing its throughput to other ports in bridged, and routed mode, but removing the switching possibility on this port.

Switch4.png

Port Settings

Properties under this menu are used to configure VLAN switching and filtering options for switch chips that support a VLAN Table. These properties are only available to switch chips that have VLAN Table support, check the Switch Chip Features table to make sure your device supports such a feature.

Icon-warn.png

Warning: Ingress traffic is considered as traffic that is being sent IN a certain port, this port is sometimes called ingress port. Egress traffic is considered as traffic that is being sent OUT of a certain port, this port is sometimes called egress port. Distinguishing them is very important in order to properly set up VLAN filtering since some properties apply only to either ingress or egress traffic.


Sub-menu: /interface ethernet switch port


Property Description
vlan-mode (check | disabled | fallback | secure; Default: disabled) Changes the VLAN lookup mechanism against the VLAN Table for ingress traffic.
  • disabled - disables checking against the VLAN Table completely for ingress traffic. No traffic is dropped when set on ingress port.
  • fallback - checks tagged traffic against the VLAN Table for ingress traffic, forwards all untagged traffic. If ingress traffic is tagged and egress port is not found in the VLAN table for the appropriate VLAN ID, then traffic is dropped. If a VLAN ID is not found in the VLAN Table, then traffic is forwarded. Used to allow known VLANs only in specific ports.
  • check - checks tagged traffic against the VLAN Table for ingress traffic, drops all untagged traffic. If ingress traffic is tagged and egress port is not found in the VLAN table for the appropriate VLAN ID, then traffic is dropped.
  • secure - checks tagged traffic against the VLAN Table for ingress traffic, drops all untagged traffic. Both ingress and egress port must be found in the VLAN Table for the appropriate VLAN ID, otherwise traffic is dropped.
vlan-header (add-if-missing | always-strip | leave-as-is; Default: leave-as-is) Sets action which is performed on the port for egress traffic.
  • add-if-missing - adds a VLAN tag on egress traffic and uses default-vlan-id from the ingress port. Should be used for trunk ports.
  • always-strip - removes a VLAN tag on egress traffic. Should be used for access ports.
  • leave-as-is - does not add nor removes a VLAN tag on egress traffic. Should be used for hybrid ports.
default-vlan-id (auto | integer: 0..4095; Default: auto) Adds a VLAN tag with the specified VLAN ID on all untagged ingress traffic on a port, should be used with vlan-header set to always-strip on a port to configure the port to be the access port. For hybrid ports default-vlan-id is used to tag untagged traffic. If two ports have the same default-vlan-id, then VLAN tag is not added since the switch chip assumes that traffic is being forwarded between access ports.


Icon-note.png

Note: Atheros8327 switch chips ignore the vlan-header property and uses the default-vlan-id property to determine which ports are access ports. For Atheros8327 switch chips the vlan-header is set to leave-as-is and cannot be changed while the default-vlan-id property should only be used on access ports to tag all ingress traffic.


VLAN Forwarding

Both vlan-mode and vlan-header along with the VLAN Table can be used to configure VLAN tagging, untagging and filtering, there are multiple combinations that are possible, each achieving a different result. Below you can find a table of what kind of traffic is going to be sent out through an egress port when a certain traffic is received on an ingress port for each VLAN Mode.

NOTES:

  • L - vlan-header is set to leave-as-is
  • S - vlan-header set to always-strip
  • A - vlan-header set to add-if-missing
  • U - Untagged traffic is sent out
  • T - Tagged traffic is sent out, tag is already present on ingress port
  • TA - Tagged traffic is sent out, tag was added on ingress port
  • DI - Traffic is dropped on ingress port because of mode selected in vlan-mode
  • DE - Traffic is dropped on egress port because egress port was not found in the VLAN Table
  • VID match - VLAN ID from the VLAN tag for ingress traffic is present in the VLAN Table
  • Port match - Ingress port is present in the VLAN Table for the appropriate VLAN ID
VLAN Mode = disabled Egress port not present in VLAN Table Egress port is present in VLAN Table
L S A L S A
Untagged traffic U U TA U U TA
Tagged traffic; no VID match T U T
Tagged traffic; VID match; no Port match T U T T U T
Tagged traffic; VID match; Port match T U T T U T


VLAN Mode = fallback Egress port not present in VLAN Table Egress port is present in VLAN Table
L S A L S A
Untagged traffic U U TA U U TA
Tagged traffic; no VID match T U T
Tagged traffic; VID match; no Port match DE DE DE T U T
Tagged traffic; VID match; Port match DE DE DE T U T
VLAN Mode = check Egress port not present in VLAN Table Egress port is present in VLAN Table
L S A L S A
Untagged traffic
Tagged traffic; no VID match DI DI DI
Tagged traffic; VID match; no Port match DE DE DE T U T
Tagged traffic; VID match; Port match DE DE DE T U T
VLAN Mode = secure Egress port not present in VLAN Table Egress port is present in VLAN Table
L S A L S A
Untagged traffic
Tagged traffic; no VID match DI DI DI
Tagged traffic; VID match; no Port match DI DI DI DI DI DI
Tagged traffic; VID match; Port match DE DE DE T U T

Port Mirroring

Port mirroring lets switch 'sniff' all traffic that is going in and out of one port (mirror-source) and send a copy of those packets out of some other port (mirror-target). This feature can be used to easily set up a 'tap' device that receives all traffic that goes in/out of some specific port. Note that mirror-source and mirror-target ports have to belong to same switch. (See which port belong to which switch in /interface ethernet menu). Also mirror-target can have a special 'cpu' value, which means that 'sniffed' packets should be sent out of switch chips cpu port. Port mirroring happens independently of switching groups that have or have not been set up.

  • Port mirroring configuration example:
/interface ethernet switch
set switch1 mirror-source=ether2 mirror-target=ether3
Icon-warn.png

Warning: If you set mirror-source as a Ethernet port for a device with at least two switch chips and these mirror-source ports are in a single bridge while mirror-target for both switch chips are set to send the packets to the CPU, then this will result in a loop, which can make your device inaccessible.


Hosts Table

Basically the hosts table represents switch chips internal mac address to port mapping. It can contain two kinds of entries: dynamic and static. Dynamic entries get added automatically, this is also called a learning process: when switch chip receives a packet from certain port, it adds the packets source mac address X and port it received the packet from to host table, so when a packet comes in with destination mac address X it knows to which port it should forward the packet. If the destination mac address is not present in host table then it forwards the packet to all ports in the group. Dynamic entries take about 5 minutes to time out. Learning is enabled only on ports that are configured as part of switch group. So you won't see dynamic entries if you have not specified some 'master-ports'. Also you can add static entries that take over dynamic if dynamic entry with same mac-address already exists. Also by adding a static entry you get access to some more functionality that is controlled via following params:

  • copy-to-cpu=yes/no - a packet can be cloned and sent to cpu port
  • redirect-to-cpu=yes/no - a packet can be redirected to cpu port
  • mirror=yes/no - a packet can be cloned and sent to mirror-target port configured in "/interface ethernet switch"
  • drop=yes/no - a packet with certain mac address coming from certain ports can be dropped

copy-to-cpu, redirect-to-cpu, mirror actions are performed for packets which destination mac matches mac address specified in entry drop action is performed for packets which source mac address matches mac address specified in entry

Another possibility for static entries is that mac address can be mapped to more that one port, including 'cpu' port.

VLAN Table

Vlan table specifies certain forwarding rules for packets that have specific 802.1q tag. Those rules are of higher priority than switch groups configured using 'master-port' property. Basically the table contains entries that map specific vlan tag ids to a group of one or more ports. Packets with vlan tags leave switch chip through one or more ports that are set in corresponding table entry. The exact logic that controls how packets with vlan tags are treated is controlled by vlan-mode parameter that is changeable per switch port in /interface ethernet switch port menu. Vlan-mode can take following values:

  • disabled - ignore vlan table, treat packet with vlan tags just as if they did not contain a vlan tag;
  • fallback - the default mode - handle packets with vlan tag that is not present in vlan table just like packets without vlan tag. Packets with vlan tags that are present in vlan table, but incoming port does not match any port in vlan table entry does not get dropped.
  • check - drop packets with vlan tag that is not present in vlan table. Packets with vlan tags that are present in vlan table, but incoming port does not match any port in vlan table entry does not get dropped.
  • secure - drop packets with vlan tag that is not present in vlan table. Packets with vlan tags that are present in vlan table, but incoming port does not match any port in vlan table entry get dropped.


Vlan tag id based forwarding takes into account the MAC addresses dynamically learned or manually added in the host table. QCA8337 and AR8327 switch-chips also support Independent VLAN learning (IVL) which does the learning based on both MAC addresses and VLAN IDs thus allowing the same MAC to be used in multiple VLANs. The option "independent-learning" in VLAN table entries enables this feature.


Packets without vlan tag are treated just like if they had a vlan tag with port default-vlan-id. This means that if "vlan-mode=check or secure" to be able to forward packets without vlan tags you have to add a special entry to vlan table with the same vlan id set according to default-vlan-id.


Vlan-header option (configured in /interface ethernet switch port) sets the VLAN tag mode on egress port. Starting from RouterOS version 6 this option works with QCA8337, AR8316, AR8327, AR8227 and AR7240 switch chips and takes the following values:

  • leave-as-is - packet remains unchanged on egress port;
  • always-strip - if VLAN header is present it is removed from the packet;
  • add-if-missing - if VLAN header is not present it is added to the packet.

Rule Table

Rule table is very powerful tool allowing wire speed packet filtering, forwarding and vlan tagging based on L2,L3,L4 protocol header field condition.

Each rule contains a conditions part and an action part. Action part is controlled by following parameters:

  • copy-to-cpu=yes/no - clones matching packets and sends them to cpu port;
  • redirect-to-cpu=yes/no - redirects matching packets to cpu port;
  • mirror=yes/no - clones matching packets and send them to mirror-target port;
  • new-dst-ports - if set forces the destination port to be as specified, multiple ports allowed, including cpu port. Non obvious feature of this parameter is to pass empty list of ports to drop matching packets;
  • new-vlan-id (only applies to Atheros8316) - if specified changes the vlan tag id, or add new vlan tag if one was not present;
  • new-vlan-priority - if specified changes the vlan tag priority bits;
  • rate (only applies to Atheros8327/QCA8337) - Sets limitation (bits per second) for all matched traffic. Can only be applied to first 32 rule slots.

Conditions part is controlled by rest of parameters:

  • ports - match port that packet came in from (multiple ports allowed);
  • mac layer conditions
    • dst-mac-address - match by destination mac address and mask;
    • src-mac-address - ...;
    • vlan-header - match by vlan header presence;
    • vlan-id (only applies to Atheros8316) - match by vlan tag id;
    • vlan-priority (only applies to Atheros8316) - match by priority in vlan tag;
    • mac-protocol - match by mac protocol (skips vlan tags if any);
  • ip conditions
    • dst-address - match by destination ip and mask;
    • src-address - match by source ip and mask;
    • dscp - match by ip dscp field;
    • protocol - match by ip protocol;
  • ipv6 conditions
    • dst-address6 - match by destination ip and mask;
    • src-address6 - match by source ip and mask;
    • flow-label - match by ipv6 flow label;
    • traffic-class - match by ipv6 traffic class;
    • protocol - match by ip protocol;
  • L4 conditions
    • src-port - match by tcp/udp source port range;
    • dst-port - match by tcp/udp destination port range;

IPv4 and IPv6 specific conditions cannot be present in same rule. Menu contains ordered list of rules just like in /ip firewall filter. Due to the fact that the rule table is processed entirely in switch chips hardware there is limitation to how many rules you may have. Depending on the amount of conditions (MAC layer, IP layer, IPv6, L4 layer) you use in your rules the amount of active rules may vary from 8 to 32 for Atheros8316 switch chip and from 24 to 96 for Atheros8327/QCA8337 switch chip. You can always do /interface ethernet switch rule print after modifying your rule set to see that no rules at the end of the list are 'invalid' which means those rules did not fit into the switch chip.

Port isolation

Since RouterOS v6.43 it is possible to create an uplink port and isolated ports. Such a configuration allows each device connected to a switch port to be isolated from other ports and these isolated ports are only capable of communicating with other devices through the uplink port. This kind of configuration can also be called Private VLAN configuration, the Switch will forward all Ethernet frames directly to the uplink port allowing the Router to filter unwanted packets and limit access between devices that are behind switch ports.

Alt text
Switch port isolation

To configure switch port isolation, you need to switch all required ports:

/interface bridge
add name=bridge1 protocol-mode=none
/interface bridge port
add interface=sfp1 bridge=bridge1 hw=yes
add interface=ether1 bridge=bridge1 hw=yes
add interface=ether2 bridge=bridge1 hw=yes
add interface=ether3 bridge=bridge1 hw=yes

Override the egress port for each switch port that needs to be isolated (excluding the uplink port):

/interface ethernet switch port-isolation
set ether1 forwarding-override=sfp1
set ether2 forwarding-override=sfp1
set ether3 forwarding-override=sfp1
Icon-note.png

Note: It is possible to set multiple uplink ports for a single switch chip, this can be done by specifying multiple interfaces and separating them with a comma.


Statistics

Some switch chips are capable of reporting statistics, this can be useful to monitor how many packets are sent to the CPU from the built-in switch chip. These statistics can also be used to monitor CPU Flow Control. You can find an example of switch chip's statistics below:

[admin@MikroTik] > /interface ethernet switch print stats

                      name:      switch1
            driver-rx-byte:  221 369 701
          driver-rx-packet:    1 802 975
            driver-tx-byte:   42 621 969
          driver-tx-packet:      310 485
                  rx-bytes:  414 588 529
                 rx-packet:    2 851 236
              rx-too-short:            0
               rx-too-long:            0
              rx-broadcast:    1 040 309
                  rx-pause:            0
              rx-multicast:      486 321
              rx-fcs-error:            0
            rx-align-error:            0
               rx-fragment:            0
                rx-control:            0
             rx-unknown-op:            0
           rx-length-error:            0
             rx-code-error:            0
          rx-carrier-error:            0
                 rx-jabber:            0
                   rx-drop:            0
                  tx-bytes:   44 071 621
                 tx-packet:      312 597
              tx-too-short:            0
               tx-too-long:        8 397
              tx-broadcast:        2 518
                  tx-pause:        2 112
              tx-multicast:        7 142
    tx-excessive-collision:            0
     tx-multiple-collision:            0
       tx-single-collision:            0
     tx-excessive-deferred:            0
               tx-deferred:            0
         tx-late-collision:            0
        tx-total-collision:            0
                   tx-drop:            0
                 tx-jabber:            0
              tx-fcs-error:            0
                tx-control:        2 112
               tx-fragment:            0
                  tx-rx-64:        6 646
              tx-rx-65-127:    1 509 891
             tx-rx-128-255:    1 458 299
             tx-rx-256-511:      178 975
            tx-rx-512-1023:          953
           tx-rx-1024-1518:          672
            tx-rx-1519-max:            0

Some devices have multiple CPU cores that are directly connected to a built-in switch chip using separate data lanes. These devices can report which data lane was used to forward the packet from or to the CPU port from the switch chip. For such devices an extra line is added for each row, the first line represents data that was sent using the first data lane, the second line represent data that was sent using the second data line and so on. You can find an example of switch chip's statistics for a device with multiple data lanes connecting the CPU and the built-in switch chip:

[admin@MikroTik] > /interface ethernet switch print stats
                  name:      switch1
        driver-rx-byte:  226 411 248
                                   0
      driver-rx-packet:    1 854 971
                                   0
        driver-tx-byte:   45 988 067
                                   0
      driver-tx-packet:      345 282
                                   0
              rx-bytes:  233 636 763
                                   0
             rx-packet:    1 855 018
                                   0
          rx-too-short:            0
                                   0
           rx-too-long:            0
                                   0
              rx-pause:            0
                                   0
          rx-fcs-error:            0
                                   0
           rx-overflow:            0
                                   0
              tx-bytes:   47 433 203
                                   0
             tx-packet:      345 282
                                   0
    tx-total-collision:            0
                                   0

Setup Examples

Icon-note.png

Note: Make sure you have added all needed interfaces to the VLAN table when using secure vlan-mode. For routing functions to work properly on the same device through ports that use secure vlan-mode, you will need to allow access to the CPU from those ports, this can be done by adding the switchX-cpu interface itself to the VLAN table. Examples can be found at the Management port section.


Icon-warn.png

Warning: When allowing access to the CPU, you are allowing access from a certain port to the actual router/switch, this is not always desirable. Make sure you implement proper firewall filter rules to secure your device when access to the CPU is allowed from a certain VLAN ID and port, use firewall filter rules to allow access to only certain services.


Icon-note.png

Note: It is possible to use the built-in switch chip and the CPU at the same time to create a Switch-Router setup, where a device acts as a switch and as a router at the same time. You can find a configuration example in the Switch-Router guide.


VLAN Example 1 (Trunk and Access Ports)

Routerboards with Atheros switch chips can be used for 802.1Q Trunking. This feature in RouterOS version 6 is supported by QCA8337, AR8316, AR8327, AR8227 and AR7240 switch chips.
In this example ether3,ether4 and ether5 interfaces are access ports, while ether2 is a trunk port. VLAN IDs for each access port: ether3 - 200, ether4 - 300, ether5 - 400.

Ath1.png
  • Create a group of switched ports by selecting one master-port and setting it for other ports.
# pre-v6.41 master-port configuration

/interface ethernet
set ether3 master-port=ether2
set ether4 master-port=ether2
set ether5 master-port=ether2

# post-v6.41 bridge hw-offload configuration

/interface bridge
add name=bridge1 igmp-snooping=no protocol-mode=none
/interface bridge port
add bridge=bridge1 interface=ether2 hw=yes
add bridge=bridge1 interface=ether3 hw=yes
add bridge=bridge1 interface=ether4 hw=yes
add bridge=bridge1 interface=ether5 hw=yes
  • Add VLAN table entries to allow frames with specific VLAN IDs between ports.
/interface ethernet switch vlan
add ports=ether2,ether3 switch=switch1 vlan-id=200
add ports=ether2,ether4 switch=switch1 vlan-id=300
add ports=ether2,ether5 switch=switch1 vlan-id=400
  • Assign "vlan-mode" and "vlan-header" mode for each port and also "default-vlan-id" on ingress for each access port.

Setting "vlan-mode=secure" ensures strict use of VLAN table.
Setting "vlan-header=always-strip" for access ports removes VLAN header from frame when it leaves the switch chip.
Setting "vlan-header=add-if-missing" for trunk port adds VLAN header to untagged frames.
"Default-vlan-id" specifies what VLAN ID is added for untagged ingress traffic of the access port.

/interface ethernet switch port
set ether2 vlan-mode=secure vlan-header=add-if-missing
set ether3 vlan-mode=secure vlan-header=always-strip default-vlan-id=200
set ether4 vlan-mode=secure vlan-header=always-strip default-vlan-id=300
set ether5 vlan-mode=secure vlan-header=always-strip default-vlan-id=400

VLAN Example 2 (Trunk and Hybrid Ports)

VLAN Hybrid ports which can forward both tagged and untagged traffic are supported only by some Gigabit switch chips (QCA8337, AR8327)

Ath2.png
  • Create a group of switched ports.
# pre-v6.41 master-port configuration

/interface ethernet
set ether3 master-port=ether2
set ether4 master-port=ether2
set ether5 master-port=ether2

# post-v6.41 bridge hw-offload configuration

/interface bridge
add name=bridge1 igmp-snooping=no protocol-mode=none
/interface bridge port
add bridge=bridge1 interface=ether2 hw=yes
add bridge=bridge1 interface=ether3 hw=yes
add bridge=bridge1 interface=ether4 hw=yes
add bridge=bridge1 interface=ether5 hw=yes
  • Add VLAN table entries to allow frames with specific VLAN IDs between ports.
/interface ethernet switch vlan
add ports=ether2,ether3,ether4,ether5 switch=switch1 vlan-id=200
add ports=ether2,ether3,ether4,ether5 switch=switch1 vlan-id=300
add ports=ether2,ether3,ether4,ether5 switch=switch1 vlan-id=400
  • In switch port menu set "vlan-mode" on all ports and also "default-vlan-id" on planned hybrid ports.

"Vlan-mode=secure" will ensure strict use of VLAN table.
"Default-vlan-id" will define VLAN for untagged ingress traffic on port.
In Gigabit switch chips when "vlan-mode=secure", it ignores switch port "vlan-header" options. VLAN table entries handle all the egress tagging/untagging and works as "vlan-header=leave-as-is" on all ports.
It means what comes in tagged, goes out tagged as well, only "default-vlan-id" frames are untagged at the egress of port.

/interface ethernet switch port
set ether2 vlan-mode=secure vlan-header=leave-as-is
set ether3 vlan-mode=secure vlan-header=leave-as-is default-vlan-id=200
set ether4 vlan-mode=secure vlan-header=leave-as-is default-vlan-id=300
set ether5 vlan-mode=secure vlan-header=leave-as-is default-vlan-id=400

Management port configuration

In these examples there will be shown examples for multiple scenarios, but each of these scenarios require you to have switched ports. Below you can find how to switch multiple ports:

  • For RouterOS before v6.41
/interface ethernet
set ether2 master-port=ether1
  • For RouterOS after v6.41
/interface bridge
add name=bridge1 protocol-mode=none
/interface bridge port
add interface=ether1 bridge=bridge1 hw=yes
add interface=ether2 bridge=bridge1 hw=yes

In these examples it will be assumed that ether1 is the trunk port and ether2 is the access port, for configuration as the following:

/interface ethernet switch port
set ether1 vlan-header=add-if-missing
set ether2 default-vlan-id=100 vlan-header=always-strip
/interface ethernet switch vlan
add ports=ether1,ether2,switch1-cpu switch=switch1 vlan-id=100

Tagged

In order to make the device accessible only from a certain VLAN, you need to create a new VLAN interface on the bridge/master-port interface and assign an IP address to it:

/interface vlan
add name=MGMT vlan-id=99 interface=bridge1
/ip address
add address=192.168.99.1/24 interface=MGMT

Specify from which interfaces it is allowed to access the device:

/interface ethernet switch vlan
add ports=ether1,switch1-cpu switch=switch1 vlan-id=99
Icon-note.png

Note: Only specify trunk ports in this VLAN table entry, it is not possible to allow access to the CPU with tagged traffic through an access port since the access port will tag all ingress traffic with the specified default-vlan-id value.


When VLAN table is configured, you can enable vlan-mode=secure to limit access to the CPU:

/interface ethernet switch port
set ether1 vlan-header=add-if-missing vlan-mode=secure
set ether2 default-vlan-id=100 vlan-header=always-strip vlan-mode=secure
set switch1-cpu vlan-header=leave-as-is vlan-mode=secure

Untagged

In order to make the device accessible from the access port, create a VLAN interface with the same VLAN ID as set in default-vlan-id, for example VLAN 100, and add an IP address to it:

/interface vlan
add name=VLAN100 vlan-id=100 interface=bridge1
/ip address
add address=192.168.100.1/24 interface=VLAN100

Specify which access (untagged) ports are allowed to access the CPU:

/interface ethernet switch vlan
add ports=ether1,ether2,switch1-cpu switch=switch1 vlan-id=100
Icon-warn.png

Warning: Most commonly an access (untagged) port is accompanied with a trunk (tagged) port. In case of untagged access to the CPU, you are forced to specify both the access port and the trunk port, this gives access to the CPU from the trunk port as well. Not always this is desired and Firewall might be required on top of VLAN filtering.


When VLAN table is configured, you can enable vlan-mode=secure to limit access to the CPU:

/interface ethernet switch port
set ether1 vlan-header=add-if-missing vlan-mode=secure
set ether2 default-vlan-id=100 vlan-header=always-strip vlan-mode=secure
set switch1-cpu vlan-header=leave-as-is vlan-mode=secure

Untagged from tagged port

It is possible to allow access to the device from the trunk (tagged) port with untagged traffic. To do so, assign an IP address on the bridge/master-port interface:

/ip address
add address=10.0.0.1/24 interface=bridge1

Specify the trunk port to be able to access the CPU for the default-vlan-id for the trunk port, by default it is set to 1:

/interface ethernet switch vlan
add ports=ether1,switch1-cpu switch=switch1 vlan-id=1

When VLAN table is configured, you can enable vlan-mode=secure to limit access to the CPU:

/interface ethernet switch port
set ether1 default-vlan-id=1 vlan-header=add-if-missing vlan-mode=secure
set switch1-cpu vlan-header=leave-as-is vlan-mode=secure

Spanning Tree Protocol

Starting from RouterOS v6.38 RouterBoards support Spanning Tree Protocols on ports configured for switching. This feature is available on following switch chips: QCA8337; Atheros8327; Atheros8316; Atheros8227; Atheros7240. To enable this feature create RouterOS bridge interface and add the master-port to it.

  • Create a group of switched ports
/interface ethernet
set ether2 master-port=ether1
set ether3 master-port=ether1
set ether4 master-port=ether1
  • Create a bridge interface and add the master-port to it
/interface bridge add name=bridge1 protocol=rstp

/interface bridge port add bridge=bridge1 interface=ether1
  • Slave ports are dynamically added to the bridge only to show STP status. Forwarding through switched ports still are handled by hardware switch chip.
[admin@MikroTik] > /interface bridge port print 
Flags: X - disabled, I - inactive, D - dynamic 
 #    INTERFACE           BRIDGE           PRIORITY  PATH-COST    HORIZON
 0    ether1              bridge1              0x80         10       none
 1 ID ether2              bridge1              0x80         10       none
 2  D ether3              bridge1              0x80         10       none
 3  D ether4              bridge1              0x80         10       none
Icon-note.png

Note: Since RouterOS v6.41 the master-port configuration is removed and replaced with a more simplified bridge configuration. The same functionality can be achieved by adding ports to a bridge with hardware offloading enabled and ensuring that protocol-mode is set to RSTP.


See also