Manual:Switch Chip Features
From MikroTik Wiki
In this topic we will talk about switch chip features that are implemented in RouterOS (complete set of features implemented starting v4.0)
Presently we use several types of switch chips on our 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:
|Host table||2048 entries||2048 entries||1024 entries||2048 entries||no||no|
|Vlan table||4096 entries||4096 entries||4096 entries||16 entries||no||no|
|Rule table||32 rules||92 rules||no||no||no||no|
Atheros8316 is present on RB493G(ether1+ether6-ether9, ether2-ether5), RB1200(ether1-ether5), RB450G(all ports with ether1 optional[more]), RB435G(all ports with ether1 optional[more]), RB750G and RB1100(ether1-ether5, ether6-ether10).
Atheros8327 is present on RB2011 series(ether1-ether5+sfp1) RB750GL, RB751G-2HnD, RB951G-2HnD and RB1100AH, RB1100AHx2(ether1-ether5, ether6-ether10).
Atheros8227 is present on RB2011 series(ether6-ether10).
Atheros7240 is present on RB750(ether2-ether5), RB750UP(ether2-ether5), RB751U-2HnD(ether2-ether5) and RB951-2n.
ICPlus175D is present on newest versions of RB450(ether2-ether5) and RB433 series(ether2-ether3).
ICPlus175C is present on some RB450(ether2-ether5) and some RB433 series(ether2-ether3).
ICPlus178C is present on RB493 series(ether2-ether9) and RB816.
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.
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.
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:
A more general diagram of RouterBoard with switch chip that has 5 port switch chip:
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.
Ether1 port on RB450G 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 features including extended statistics (
/interface ethernet print stats).
"no" means ether1 is not part of switch, effectivly making it as stand alone ethernet port, this way increasing its troughtput to other ports in bridged, and routed mode, but removing the switching possibility on this port.
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 switch port 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.
Basically the 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 tables 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 also take into account the mac addresses learned or manually added in host table.
Packets without vlan tag are treated just like if they had a vlan tag with vlan id = 0. 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 vlan id set to 0.
Vlan-header option (configured in
/interface ethernet switch port) sets the VLAN tag mode on egress port. This option works only with Atheros 8316 switch chip 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 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) - 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 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.
Example - 802.1Q Trunking with Atheros 8316
Routerboards with Atheros 8316 switch chips can be used for 802.1Q Trunking. In this example ether2,ether3 and ether4 interfaces are access ports, while ether5 is trunk port. VLAN-IDs for each access port: ether2 - 200, ether3 - 300, ether4 - 400.
- Assign vlan-mode and vlan-header mode on egress for each port. Set vlan-mode=secure to ensure strict use of VLAN table. Set vlan-header=always-strip for access ports - it removes VLAN header from frame when it leaves the switch chip. Set vlan-header=add-if-missing for trunk port - it adds VLAN header to untagged frames.
/interface ethernet switch port set 1 vlan-header=always-strip vlan-mode=secure set 2 vlan-header=always-strip vlan-mode=secure set 3 vlan-header=always-strip vlan-mode=secure set 4 vlan-header=add-if-missing vlan-mode=secure
- Specify forwarding rules for access and trunk ports. Default VLAN-ID will be changed for untagged frames entering access port before they will be forwarded to trunk port. Frames received on trunk port will be forwarded to appropriate access ports according to their VLAN-ID.
/interface ethernet switch rule add new-dst-ports=ether2 ports=ether5 switch=switch1 vlan-header=present vlan-id=200 add new-dst-ports=ether3 ports=ether5 switch=switch1 vlan-header=present vlan-id=300 add new-dst-ports=ether4 ports=ether5 switch=switch1 vlan-header=present vlan-id=400 add new-dst-ports=ether5 new-vlan-id=200 ports=ether2 switch=switch1 vlan-header=not-present add new-dst-ports=ether5 new-vlan-id=300 ports=ether3 switch=switch1 vlan-header=not-present add new-dst-ports=ether5 new-vlan-id=400 ports=ether4 switch=switch1 vlan-header=not-present
- Add VLAN table entries to allow frames with specific VLAN-IDs on ingress port.
/interface ethernet switch vlan add ports=ether5 switch=switch1 vlan-id=200 add ports=ether5 switch=switch1 vlan-id=300 add ports=ether5 switch=switch1 vlan-id=400 add ports=ether2,ether3,ether4 switch=switch1 vlan-id=0