Syntax highlighting and completions for Sublime Text

I’m happy to introduce the missing support for syntax highlighting and completions in the Sublime Text editor.

Features:

  • Highlight comments, strings, parameters, variable storage modifiers and commands
  • Highlight errors like trailing symbols before the comment sign
  • Completions for most parameters and commands
  • Snippets for all loops and control statements

ToDo:

  • Add proper support for line continuation
  • Provide completions depending on the parameter

The package is available via Package Control or you can download it from github.
Screen Shot 2014-02-14 at 17.17.54.png

Awesome!

Sent from my SCH-I545 using Tapatalk

wow this is great! thanks

Now all we need is debugging… :slight_smile:

Sweet! :sunglasses:

Does Sublime Text allow dynamic generation of completion suggestions? If so, it would be pretty cool if you also connect to a user defined RouterOS and parse all commands/menus/values from the output of “?”.

I’m not very experienced with the Mikrotik language itself. Could you point me to description of the feature you’re talking about?

When you are at a terminal (including SSH), at any point you can type “?” to see the possible menus and commands from that context.

If you’ve just logged in, and type “?”, you see the commands and menus from the root menu, then if you type “/export ?”, you’ll see the arguments from the root menu’s export command, etc. If the terminal supports colors, you can differentiate between commands and menus via their color.

If you can connect via SSH, write “?” as input, and parse the output, you’ll essentially be getting a list that you can then base suggestions on. But again, this assumes Sublime Text allows you to construct such lists dynamically, as opposed to from static files (as currently seen in your GitHub repo).

This feature is briefly described in the list of global commands, and at the top when you start a terminal session.

At some point it would be cool to add the new switch chip menu from the crs.

Sent from my SCH-I545 using Tapatalk

If you give me a tree of all commands available via that menu, I’ll add them to the package.
export verbose outputs most of the available commands and parameters.

One of the goals is to highlight most common syntax errors like spaces after the equation symbol.
Feel free to request such features.

Sublime Text know nothing about how Mikrtoik interprets its scripts. Instead it sees your scripts as a bunch of words and it will provide completions for the words you already have in file. If you want to have these words in other files, you need something like the SublimeAllAutoComplete package.

As far as I understand the feature you’re asking about needs a standalone interpreter of Mikrotik scripts inside a Sublime Text package.

No, it doesn’t.

It does however require a programming code (as opposed to the current declarative code) that will connect to the router via SSH, and parse the SSH output to generate completion files. That’s not the same as having an interpreter (since a “?” doesn’t tell you how the command will be executed or the result of it - it just tells you its syntax), but indeed requires a different approach from the current one.

Here is the CRS Switch stuff. Thanks for adding it.

The commands are from the wiki page at:
http://wiki.mikrotik.com/wiki/Manual:CRS_features


Here is the export from /interface ethernet switch:
/interface ethernet switch
set bridge-type=service-vlan-bridge bypass-l2-security-check-filter-for=“”
bypass-vlan-ingress-filter-for=“”
drop-if-invalid-or-src-port-not-member-of-vlan-on-ports=“”
drop-if-no-vlan-assignment-on-ports=“” egress-mirror-ratio=1/1
egress-mirror0-enable=yes egress-mirror0-format=modified
egress-mirror0-port=switch1-cpu egress-mirror0-port=switch1-cpu
egress-mirror1-enable=yes egress-mirror1-format=modified
egress-sampling-ratio=1/1 fdb-uses=mirror0 forward-invalid-vlan=yes
ingress-mirror-ratio=1/1 ingress-mirror0-enable=yes
ingress-mirror0-format=modified ingress-mirror0-port=switch1-cpu
ingress-mirror1-enable=yes ingress-mirror1-format=modified
ingress-mirror1-port=switch1-cpu invalid-vlan-lookup-mode=ivl
ipv4-multicast-lookup-mode=dst-mac-and-vid-always mac-level-isolation=no
mirror-egress-if-ingress-mirrored=no mirror-tx-on-mirror-port=no
mirrored-packet-drop-precedence=green mirrored-packet-qos-priority=0
name=switch1 override-existing-when-ufdb-full=no unicast-fdb-timeout=5m
use-cvid-in-one2one-vlan-lookup=yes use-svid-in-one2one-vlan-lookup=no
vlan-level-isolation=no vlan-uses=mirror0
/interface ethernet switch dscp-qos-map
set 0 dei=0 drop-precedence=green pcp=0 priority=1
set 1 dei=0 drop-precedence=green pcp=0 priority=0
set 2 dei=0 drop-precedence=green pcp=0 priority=0
set 3 dei=0 drop-precedence=green pcp=0 priority=0
set 4 dei=0 drop-precedence=green pcp=0 priority=0
set 5 dei=0 drop-precedence=green pcp=0 priority=0
set 6 dei=0 drop-precedence=green pcp=0 priority=0
set 7 dei=0 drop-precedence=green pcp=0 priority=0
set 8 dei=0 drop-precedence=green pcp=0 priority=1
set 9 dei=0 drop-precedence=green pcp=0 priority=0
set 10 dei=0 drop-precedence=green pcp=0 priority=0
set 11 dei=0 drop-precedence=green pcp=0 priority=0
set 12 dei=0 drop-precedence=yellow pcp=0 priority=0
set 13 dei=0 drop-precedence=green pcp=0 priority=0
set 14 dei=0 drop-precedence=red pcp=0 priority=0
set 15 dei=0 drop-precedence=green pcp=0 priority=0
set 16 dei=0 drop-precedence=green pcp=0 priority=2
set 17 dei=0 drop-precedence=green pcp=0 priority=0
set 18 dei=0 drop-precedence=green pcp=0 priority=2
set 19 dei=0 drop-precedence=green pcp=0 priority=0
set 20 dei=0 drop-precedence=yellow pcp=0 priority=2
set 21 dei=0 drop-precedence=green pcp=0 priority=0
set 22 dei=0 drop-precedence=red pcp=0 priority=2
set 23 dei=0 drop-precedence=green pcp=0 priority=0
set 24 dei=0 drop-precedence=green pcp=0 priority=2
set 25 dei=0 drop-precedence=green pcp=0 priority=0
set 26 dei=0 drop-precedence=green pcp=0 priority=2
set 27 dei=0 drop-precedence=green pcp=0 priority=0
set 28 dei=0 drop-precedence=yellow pcp=0 priority=2
set 29 dei=0 drop-precedence=green pcp=0 priority=0
set 30 dei=0 drop-precedence=red pcp=0 priority=2
set 31 dei=0 drop-precedence=green pcp=0 priority=0
set 32 dei=0 drop-precedence=green pcp=0 priority=2
set 33 dei=0 drop-precedence=green pcp=0 priority=0
set 34 dei=0 drop-precedence=green pcp=0 priority=2
set 35 dei=0 drop-precedence=green pcp=0 priority=0
set 36 dei=0 drop-precedence=yellow pcp=0 priority=2
set 37 dei=0 drop-precedence=green pcp=0 priority=0
set 38 dei=0 drop-precedence=red pcp=0 priority=2
set 39 dei=0 drop-precedence=green pcp=0 priority=0
set 40 dei=0 drop-precedence=green pcp=0 priority=2
set 41 dei=0 drop-precedence=green pcp=0 priority=0
set 42 dei=0 drop-precedence=green pcp=0 priority=0
set 43 dei=0 drop-precedence=green pcp=0 priority=0
set 44 dei=0 drop-precedence=green pcp=0 priority=0
set 45 dei=0 drop-precedence=green pcp=0 priority=0
set 46 dei=0 drop-precedence=green pcp=0 priority=3
set 47 dei=0 drop-precedence=green pcp=0 priority=0
set 48 dei=0 drop-precedence=green pcp=0 priority=2
set 49 dei=0 drop-precedence=green pcp=0 priority=0
set 50 dei=0 drop-precedence=green pcp=0 priority=0
set 51 dei=0 drop-precedence=green pcp=0 priority=0
set 52 dei=0 drop-precedence=green pcp=0 priority=0
set 53 dei=0 drop-precedence=green pcp=0 priority=0
set 54 dei=0 drop-precedence=green pcp=0 priority=0
set 55 dei=0 drop-precedence=green pcp=0 priority=0
set 56 dei=0 drop-precedence=green pcp=0 priority=2
set 57 dei=0 drop-precedence=green pcp=0 priority=0
set 58 dei=0 drop-precedence=green pcp=0 priority=0
set 59 dei=0 drop-precedence=green pcp=0 priority=0
set 60 dei=0 drop-precedence=green pcp=0 priority=0
set 61 dei=0 drop-precedence=green pcp=0 priority=0
set 62 dei=0 drop-precedence=green pcp=0 priority=0
set 63 dei=0 drop-precedence=green pcp=0 priority=0
/interface ethernet switch port
set 0 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 1 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 2 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 3 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 4 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 5 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 6 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 7 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 8 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 9 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 10 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 11 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 12 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 13 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 14 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 15 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 16 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 17 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 18 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 19 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 20 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 21 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 22 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 23 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 24 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=30 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no
set 25 action-on-restricted-unknown-sa=forward action-on-static-station-move=
forward allow-multicast-loopback=no allow-unicast-loopback=no
default-customer-pcp=0 default-service-pcp=0 drop-counter-config=“”
drop-when-ufdb-entry-sa-drop=no
dynamic-mac-move-is-restricted-unknown-sa=no egress-customer-tpid=0x8100
egress-mirror-to=mirror0 egress-mirroring=no egress-pcp-propagation=no
egress-sampling=no egress-service-tpid=0x88A8 egress-vlan-lookup=
according-to-egress-vlan-type egress-vlan-mode=unmodified
egress-vlan-type=edge-port filter-priority-tagged-frame=no
filter-tagged-frame=no filter-untagged-frame=no ingress-customer-tpid=
0x8100 ingress-mirror-to=mirror0 ingress-mirroring=no
ingress-mirroring-according-to-vlan=no ingress-sampling=no
ingress-sampling-mode=all-frames-without-mac-error
ingress-sampling-ratio=1/1 ingress-service-tpid=0x88A8 ingress-vlan-type=
edge-port isolation-profile=31 !learn-limit learn-restricted-unknown-sa=
yes mac-based-customer-vlan-for=none mac-based-service-vlan-for=none
mac-based-vlan-translate=no mac-vlan-type=edge-port
pcp-propagation-for-initial-pcp=no per-queue-scheduling=“wrr-group1:1,wrr-
group1:2,wrr-group1:4,strict-priority:0,wrr-group0:0,wrr-group0:0,wrr-grou
p0:0,wrr-group0:0” policy-drop-counter-includes=“” priority-to-queue=
0-15:0,1:1,2:2,3:3 qos-change-dei=no qos-change-dscp=no qos-change-pcp=no
qos-dscp-to-dscp-mapping=no qos-pcp-dei-map-dei=0-15:0
qos-pcp-dei-map-drop-precedence=0-15:green qos-pcp-dei-map-dscp=0-15:0
qos-pcp-dei-map-pcp=0-15:0 qos-pcp-dei-map-priority=0-15:0
qos-scheme-precedence=pcp-based queue-custom-drop-counter0-includes=“”
queue-custom-drop-counter1-includes=“”
secure-static-mac-move-is-restricted-unknown-sa=no

It does however require a programming code (as opposed to the current declarative code) that will connect to the router via SSH, and parse the SSH output to generate completion files. That’s not the same as having an interpreter (since a “?” doesn’t tell you how the command will be executed or the result of it - it just tells you its syntax), but indeed requires a different approach from the current one.

This is interesting, but I don’t think this functionality needs to be integrated in Sublime Text. Instead, one should have a shell script that connects to a given router, reads commands via “?” and then create/modify tmLanguage and sublime-completions files.

That would be cool.

That alone would be cool too. I mean, IMHO, it would be more convenient to have it right in the editor (especially if you have multiple routers, and want to switch them on the fly), but even if it’s a stand alone program, it would still be better than any “static” syntax highlighter (read: the current one and every other highlighter before it).

Wow this is awesome, just what I was looking for. - Do you accept donations? It would be nice if this stayed maintained and looked after.

Just FYI…

A while after I had posted that last message, I taught a course on networks that included MikroTik basics, and I gave students an (optional) assignment to make such an application… And because we’re talking 3rd year computer science bachelors here, guess what - one of them actually did it! Well… to be more precise, as assigned, he made an SSH-to-JSON translator.

Check it out:
https://github.com/boenrobot/ROSMenuLister
You could take the generated JSON, and transform it into hints for Sublime Text and/or other IDEs. Doing so should (at least in theory) be far easier than if you had to also do the SSH parsing.

I’ll be taking over that project, so if you have means to make it more user/developer friendly (as it surely needs to be…), feel free to send pull requests.

@ boen_robot Would be awesome if you run this script against every release of ROS and publish it e.g. as Github Release. I’ll then turn it into syntax highlighting for Sublime Text!

That’s not a good idea…

In developing this further to include hints for argument values, I’ve noticed RouterOS offers not only completions for “standard” values, but in many places, also for current state strings, such as queue names, hotspot usernames, interface names and the like… And it’s impossible to programmatically (and without heuristics) tell whether a string is a standard value or not (except the places where the values “yes” and “no” are green; That’s unambiguously standard values, compatible with a Boolean variable value).

If I pre-generate the JSON against my own (empty) VM, users would not get such string completions as part of their hints. Furthermore, they’ll see “ether1”, even if they use another name for their first Ethernet adapter… And I think using “ether1” in such cases might cause errors.

If you publish a “one click” generator for Sublime hints (which automatically invokes the SSH-to-JSON converter, and then converts the JSON to Sublime hints), users could just invoke it once against their router, and perhaps regenerate as needed.


I’m trying to refactor the convertor to be a more “on-the-fly” application, as opposed to pre-generating hints, as generating the entire JSON file takes quite a few minutes (like, around half an hour last I tested…), and most users use only a fraction of RouterOS’ features. This is a little harder then it might sound at first though, because it’s not just about invoking an arbitrary check, but “caching” the generated stuff, and making it searchable in a more efficient fashion (by making the names of menus/commands/arguments be object keys, as opposed to the current object values).

When this refactoring is done, it would become possible to create plugins for editors that generate hints on-the-fly, rather than pre-generating them, and the JSON file will simply be used as a “long term cache”. Again, I don’t know if SublimeText in particular has plugin facilities, but if it does, this would be the key to making such a plug in work. Said hypothetical plugin would tokenize each line, and lookup suggestions token by token (using the last hints to know what kind of token to lookup next), in the end generating only hints for stuff that the user actually “touches” with their scripts (and would of course also generate hints for the current cursor position), and show warnings when a token is not parsable (e.g. using a command that’s not available in the current version). The full generator would still be an option of course, so that should not deter you from making a JSON-to-SublimeText convertor “now”.