NV9000 protocol for router control is supported in Helm, RouteMaster and RouteMaster VR.
RouteMaster uses the protocol for both outgoing and incoming connections, allowing third-party systems using NV9000 to control RouteMaster. Helm uses it for outgoing connections to control routers.
NV9000 is only supported via TCP/IP. The standard port number for NV9000 protocol is 9193. However, Helm and RouteMaster can be configured for any port.
Levels
NV9000 protocol supports 32 levels. However, unlike other protocols, each level has separate source and destination mnemonics. Rascular Products do not support this and currently show mnemonics from a single specified level (see the PrimaryLevel option).
Lock and Protect
NV900 supports per-level lock and protect – which RouteMaster does not fully support yet. When locking or unlocking an output with RouteMaster, all levels will be affected. RouteMaster 2.6.0.4 onwards allows selection of the level which RouteMaster considers the overall ‘lock’ for the output via the LockTallyLevels property. This defaults to the first level on the router.
Physical Ports vs. Device IDs
The NV9000 protocol has two modes of operation:
- Physical Ports: Control is by port number, which directly corresponds to physical connectors on each router.
- Device ID: NV9000 maintains a database which exposes numeric Device IDs, and hides the underlying mapping to ports.
Because Device IDs are not necessarily sequential, they’re a poor fit for RouteMaster and Helm’s matrix-based control model, so we strongly recommend that Port-based control (the default) is used. In Helm, setting the UsePhysicalPorts router property to false switches to using Device IDs. In this mode it’s possible to create a mapping file which assigns specific IDs to RouteMaster’s matrix-based numbering.
When using NV9000 as a client protocol with RouteMaster, both Device ID and Port modes can be used. In this case, Device IDs map directly to port numbers.
Supported and Required Commands
This table details the commands used for outgoing connections, and the commands supported for incoming connections. If a command is not listed here, it’s not currently used or supported.
Physical Port control
| Command | Outgoing | Incoming | Notes |
| Take Input to Output (0x3001) | Yes | Yes | |
| Lock/Protect Port (0x3003) | Yes | Yes | |
| Register for Port changes (0x3005) | Yes | Yes | |
| Get Physical Crosspoint Status (0x3007) | Yes | Yes | |
| Get Physical LPR status (0x3009) | Yes | ||
| Execute System Salvo (0x300A) | Yes | Yes | |
| Get Physical Levels (0x3014) | Yes | Yes | |
| Get Mnemonics for Ports (0x3015) | Yes | Yes | Mnemonics for the Primary Level (typ. Level 0) are always requested. For incoming commands, the level ID is ignored. |
| Get Extended Mnemonics for Ports (0x3025) | Yes | Yes | Only if ExtendedNames is set true. |
Device ID control
| Command | Outgoing | Incoming | Notes |
| Take Source to Destination (0x3000) | Yes | Yes | |
| Lock/Protect Device (0x3002) | Yes | ||
| Register For Changes to Device (0x3004) | Yes | Yes | |
| Fire Salvo (0x300A) | Yes | Yes | |
| Get Mnemonics (0x3012) | Yes | Yes | |
| Get Physical Levels (0x3014) | Yes | Yes | |
| Get Simple Device Status (0x3017) | Yes | Yes |
Special Properties
For outgoing TCP/IP connections, the following properties can be set directly in Helm Designer, or in the RouteMaster configuration file.
| UsePhysicalPorts | Boolean, defaults to True | Use Port-base control if true, ID-based control if false. |
| UserID | Defaults to zero | Indicates the ID of the controlling device to NV9000. |
| PortIDOffset | Defaults to one | Allows an offset to be applied to input/output Port IDs used by the protocol. Some NV9000 implementations (including GV Orbit) number ports from zero rather than one. |
| ExtendedNames | Boolean, Defaults to True | Uses full names from NV9000. If false, names are restricted to 8-character mnemonics. |
| IgnoreDisconnects | Boolean, Defaults to True | When true, ignore any tallies with negative source or destination, which typically corresponds to a disconnected output, as RouteMaster does not support this directly. |
| LockTallyLevels | String, defaults to All Levels | Determine which level(s) are used to determine lock/unlock status of an output. e.g. “L2” would mean lock tallies other than from Level 2 will be ignored. |
