SDM

SDM is a Dante™ and AES67 enabled “software defined matrix” for nexgentec™ audio distribution solution or any other solution that uses Dante™ and/or AES67

Features

  • Software defined matrixing, channels are routed directly on the network using Dante™’s DAPI.
  • Unlimited number of Dante™ and/or AES67 devices supported.* **
  • Unlimited number of Dante™ and/or AES67 channels supported.* **
  • Creates routings from Dante™ and/or AES67 transmitter channels to Dante™ receivers.
  • Deletes routings from Dante™ receivers.
  • Supports single or batch routing operations.
  • TCP and HTTP API for 3rd party control.
  • Integrates with Symetrix SymNet devices for automated matrixing.
  • Preset support for channel map presets.
  • Syslog support

* Depends on hardware resources.
** Depends on mDNS limitations, DAPI limitations and hardware resource availability. Audinate recommends no more than 300 devices in a system.
NGT-SDM-A32 is limited to up to 32 Dante™ devices
NGT-SDM-A64 is limited to up to 64 Dante™ devices
NGT-SDM-AUNL is intended to work with up to 2500 devices, more available on request

Product Codes and Variations

  • NGT-SDM-A32BDL01 bundle contains the softwares NGT-SDM-A32, NGT-HWM and hardware NGT-SDM-APU2
  • NGT-SDM-A64BDL01 bundle contains the softwares NGT-SDM-A64, NGT-HWM and hardware NGT-SDM-APU2
  • NGT-SDM-AUBDL01 bundle contains the softwares NGT-SDM-AUNL, NGT-HWM and hardware NGT-SDM-APU2
  • NGT-SDM-APU2U1 option contains OS update service for NGT-SDM-APU2 (Yearly subscription)

NGT-SDM-APU2

  • Half rack width and one rack unit high
  • Powered with included power supply, 12V DC, about 6 to 12W depending on CPU load

![Picture](../../images/sdm_sideshow.png" title=“NGT-SDM-APU2” >}}

Subsections of SDM

Application Note

System Design

It has never been so easy to design a bespoke high performance AVOIP system. No source and zone restrictions or limitations.

Redefined Signal Flow

Picture Picture

Conclusions

  • Signal flow is highly simplified. Channels can be fed into the network from anywhere and also taken from wherever they are needed.
  • Once a limiting matrix is lacking, the number of sources and destinations can be scaled as you ever dreamed of.
  • Get rid or channel limitationd on DSP’s matrixes.

Symetrix Symnet Integration

SDM can eavesdrop on communications with Symetrix Symnet devices and act on commands accordingly Together with predefined sources and destinations in configuration files, simple control numbers are used to select sources

Sources

  • Defined in config file symnet_config_sources.toml on SDM
  • Each value of a control number can be assigned to a source with an unlimited number of channels
  • For each source a delay can be defined which is applied before switching over

Destinations

  • Defined in config file symnet_config_destinations.toml on SDM
  • Each control number can be assigned to a destination with an unlimited number of channels
  • For each destination a delay can be defined which is applied before switching off
  • A feed back control number can notify the attached control system once a switchover or switch off executed successfully
  • Several Symetrix DSPs can be monitored, in extreme cases individually for each control number

How does it work?

Lets take as example that we are connected to a DSP and listen on control number 5001

  1. Once the control number 5001 appears SDM looks up in symnet_config_destinations and finds 5001 as the destination “Lounge”
  2. The value we received is 10, SDM looks up in symnet_config_sources and finds the value as defined for source “Radio”
  3. SDM now reads all channels for “Lounge”, finds the receiver for them and gives it the instruction to receive the source channels from “Radio”
  4. When the recipient has confirmed receipt, SDM sends back confirmation of the transaction to Symetrix

Configuration

Configure SDM hardware and software properties

All configuration tasks can be done over the web interface

Info

Web interface default login

admin / nexgentec

Open a browser and enter the devices network address in the address bar, press enter

Picture Picture

Use the top menu bar to navigate to the option you want

Subsections of Configuration

Network

Status

The status of the network connections can be viewed on the status page Host > Network > Status

Picture Picture

Configuration Scenarios

Control and Dante™ Primary on the same Ethernet Interface

This is like the simplest configuration. Our interface is the first, enp1s0. All you have to do is:

  • Assign a static IP address to enp1s0 if DHCP is not wished
  • Assign a Gateway to enp1s0 if not on DHCP
  • Assign at least to enp1s0 one DNS server if not on DHCP
  • Configure SDM service to use enp1s0 as primary Dante™ interface SDM service configuration

Picture Picture

Control on Ethernet Interface, Dante™ Primary on Ethernet Interface

In this scenario we use the Ethernet interface enp1s0 for control and Ethernet interface enp2s0 for Dante™

  • Assign a static IP address to enp1s0 if DHCP is not wished
  • Assign a Gateway to enp1s0 if not on DHCP
  • Assign at least to enp1s0 one DNS server if not on DHCP
  • Assign a static IP address to enp2s0 (mandatory)
  • Configure SDM service to use enp2s0 as primary Dante™ interface SDM service configuration

Picture Picture

Control on Ethernet Interface, Dante™ Primary Port on VLAN

We would like to use the Ethernet interface enp1s0 for control and the VLAN 10 on Ethernet interface enp1s0 for Dante™

  • Assign a static IP address to enp1s0 if DHCP is not wished
  • Assign a Gateway to enp1s0 if not on DHCP
  • Assign at least to enp1s0 one DNS server if not on DHCP
  • Add a new VLAN using the + symbol. In the popup window enter the name Dante, the VLAN id 10 and as option select enp1s0. Press Add :-)
  • Assign a static IP address to VLAN Dante (mandatory)

Picture Picture

Configuration Options

Network configuration be done on the settings page Host > Network > Settings

Picture Picture

Caution

This is not an end consumer product. It requires qualified personnel to be installed If you screw up the settings the hardware have to be sent back to the manufacturer, there is no way back

Note

Points you should pay attention to

  • Never assign a Gateway to more than one connection
  • Never place more than one connection in the same IP address range
  • Use DNS servers that are reachable. SDM needs internet access for licensing purposes
  • Never leave 2 interfaces connected to the network on DHCP
Notice

Oops, I did it again!

  • If everything went wrong, try to find the device using your DHCP server. Try all available Ethernet interfaces
Info

All interfaces are on DHCP if no static address is present

Caution

Network settings page uses JavaScript Please activate it in your browser and deactivate popup blockers

Ethernet

All available Ethernet connections found on the hardware are listed. Any Ethernet interface can be added to a new bridge using the bridge symbol. The new bridge will overtake all settings from the Ethernet interface

DHCP

  • A click on the sentence true or false opens a popup window for the new setting
  • With the setting true, all statically assigned addresses are deleted and the connection to this Ethernet interface can be interrupted. Look at the leases table on your DHCP server to find out the new address
  • If the previous setting was true the popup window will let you assign a static address. This address will be immediately applied as soon as you select add

Addresses

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Gateway

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Nameservers

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

VLAN

VLAN interfaces can be added to all available Ethernet interfaces. Any VLAN interface can be added to a new bridge using the bridge symbol. The new bridge will overtake all settings from the VLAN interface

Caution

If you don’t know what a VLAN is keep away from these settings

What is a VLAN?

  • A VLAN can be removed using the trash can symbol on the same horizontal line as the VLAN name

ID

  • A click on the VLAN id opens a popup window to modify the existing VLAN id
  • A click on the interface name opens a popup window to modify the interface on which the VLAN resides

DHCP

  • A click on the sentence true or false opens a popup window for the new setting
  • With the setting true, all statically assigned addresses are deleted and the connection to this Ethernet interface can be interrupted. Look at the leases table on your DHCP server to find out the new address
  • If the previous setting was true the popup window will let you assign a static address. This address will be immediately applied as soon as you select add

Addresses

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Gateway

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Nameservers

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Bridge

A bridge contains one or multiple Ethernet and/or VLAN interfaces.

Caution

If you don’t know what a network bridge is keep away from these settings

What is a bridge?

  • A brige can be removed using the trash can symbol on the same horizontal line as the brige name

Interfaces

  • List of the included interfaces in this bridge
  • A new interface can be added with the + symbol
  • An interface can be excluded with the trash can symbol

DHCP

  • A click on the sentence true or false opens a popup window for the new setting
  • With the setting true, all statically assigned addresses are deleted and the connection to this Ethernet interface can be interrupted. Look at the leases table on your DHCP server to find out the new address
  • If the previous setting was true the popup window will let you assign a static address. This address will be immediately applied as soon as you select add

Addresses

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Gateway

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Nameservers

  • A click on the IP address opens a popup window to modify the existing address
  • Using the trash can symbol an address can be deleted
  • With the + symbol a new address can be added

Time

SDM needs a valid time to work correctly. Without time source the service is not guaranteed to work

Why is a valid time needed?

Status

The status of the time service can be viewed on the status page Host > Time > Status Picture Picture

Configuration

NTP Server

  • Insert a reachable NTP server near you

Fallback NTP Server

  • Insert another reachable NTP server near you which will be queried once the first server is unreachable

Time Zone

  • Select the time zone you are in

Picture Picture

SDM Service

SDM service features and functionality are defined in different configuration files

Editing a SDM service configuration file

Edid a config file using the web interface, for example sdm.conf

Caution

Do not edid a config file unless you are very sure what you do

Info

Web interface default login

admin / nexgentec

  1. Open a browser and enter the devices network address in the address bar, press enter

  2. Navigate to SDM -> Files -> Config Picture Picture

  3. Download the sdm.conf file

  4. Make your changes to the sdm.conf file and save as unix format text file. configuration options

  5. Upload the sdm.conf file, it will overwrite the existing one

  6. Restart SDM process, Host -> Services -> Software Defined Matrix Service (this step is not needed for .toml files) Picture Picture

Subsections of SDM Service

sdm.conf

This section describes the various configuration options sdm.conf file can contain.

Caution

Use UNIX file fomatting when editing the file

File entries must be formatted as follows:
[Section]
key=value

For example to activate syslog:
[syslog]
address=“server.example.com”
port=53
level=6
tag=“sdm”

uuid

Note

Do not delete the uuid, it identifies the sdm software. All licenses are bound to the uuid which is individual to every instance of sdm, it is like a product key for an OS

Section Key Value Example Supported Versions
uuid key 408aca84-a2b0-11eb-bcbc-0242ac130002 key=408aca84-a2b0-11eb-bcbc-0242ac130002 >v0.0.1

logLevel

Section Key Value Example Supported Versions
logLevel level 1-7 level=1 >v0.0.1

syslog

Section Key Value Example Supported Versions
syslog level 1-7 level=6 >v0.0.1
address your servers address address=“server.example.com” >v0.0.1
port 53 or custom port=53 >v0.0.1
tag sdm tag=“sdm” >v0.0.1

logAuth

Info

logAuth is for only internal usage

Section Key Value Example Supported Versions
logAuth key key="" >v0.0.1

api

Section Key Value Example Supported Versions
api jrpc2TCPInterface Any network interface jrpc2TCPInterface=“enp1s0” >v1.8.50
jrpc2TCPPort Default: 64823 jrpc2TCPPort=64823 >v1.8.50
jrpc2HTTPInterface Any network interface jrpc2HTTPInterface=“enp1s0” >v1.8.50
jrpc2HTTPPort Default: 64880 jrpc2HTTPPort=64880 >v1.8.50
jrpc2Console on/off jrpc2Console=on >v1.8.50

dante

Section Key Value Example Supported Versions
dante primary Any network interface primary=“enp1s0” >v1.8.50
secondary Any network interface secondary=“enp2s0” >v1.8.50

preset

Section Key Value Example Supported Versions
preset recallPresetIDOnStart Any preset as defined in presets_config.toml recallOnStart=1 >v1.8.50
preset recallPresetNameOnStart Any preset as defined in presets_config.toml recallOnStart=mypreset >v1.8.50
recallOnStartDelay x (seconds) recallOnStartDelay=10 >v1.8.50

ifConfig (deprecated)

Note

ifConfig is deprecated

Use api section to define interface/port for 3rd party communication and dante section to define the interfaces used for Dante™

Section Key Value Example Supported Versions
dante primary Any network interface primary=“enp1s0” <v1.8.50
secondary Any network interface secondary=“enp2s0” <v1.8.50
cmdServer Any network interface cmdServer=“enp2s0” <v1.8.50

cmdServer (deprecated)

Note

cmdServer is deprecated

Use api section to define the port for 3rd party communication

Section Key Value Example Supported Versions
cmdServer port port=48648 <v1.8.50

presets_config.toml

Presets can be recalled on start up and using the Control API

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
[[preset]]

  # ID (s) of the preset object, mandatory
  preset_id = [56, 59, 33, 38]

  # Name of the preset object, can be omitted
  preset_name = "MyPreset_1"

  # Destination object
  [preset.destination]

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000011"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 1

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000012"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 2

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000013"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 3

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.destination.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000014"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 4

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

  # Source object
  [preset.source]

    [[preset.source.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000011"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 1

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.source.channel]]

      # Dante channel name, mandatory for Dante devices
      channel_name = "SDMS0000012"

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 2

      # Dante device name, can be omitted but should not.
      node_name = "MyDanteDevice_1"

    [[preset.source.channel]]

      # AES Flow name, mandatory for AES devices
      aes_flow_name = "239.69.x.x@MyAesDevice_1"

      # AES flow slot ID for this channel (1-x), mandatory for AES devices
      aes_flow_slot_id = 1

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 3

    [[preset.source.channel]]

      # AES Flow name, mandatory for AES devices
      aes_flow_name = "239.69.x.x@MyAesDevice_1"

      # AES flow slot ID for this channel (1-x), mandatory for AES devices
      aes_flow_slot_id = 2

      # Channel index, if omitted the order of the channels below the object determines the index
      index = 4

[[preset]]

  preset_id = [26, 9, 3, 63]
  preset_name = "MyPreset_2"

  [preset.destination]

    [[preset.destination.channel]]
      channel_name = "SDMS0000021"
      index = 1
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000022"
      index = 2
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000023"
      index = 3
      node_name = "MyDanteDevice_2"

    [[preset.destination.channel]]
      channel_name = "SDMS0000024"
      index = 4
      node_name = "MyDanteDevice_2"

  [preset.source]

    [[preset.source.channel]] 
      channel_name = "SDMS0000021"  
      index = 1  
      node_name = "MyDanteDevice_2"

    [[preset.source.channel]]
      channel_name = "SDMS0000022"
      index = 2   
      node_name = "MyDanteDevice_2"

    [[preset.source.channel]]
      aes_flow_name = "239.69.x.x@MyAesDevice_2"
      aes_flow_slot_id = 1
      index = 3

    [[preset.source.channel]] 
      aes_flow_name = "239.69.x.x@MyAesDevice_2"  
      aes_flow_slot_id = 2   
      index = 4

symnet_config_sources.toml

The source config file describe the sources which are selected by a Symetrix Symnet control number value. If there is no Symetrix device present or SDM should not listen to Symetrix this file can be omitted

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example" Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
# Defaults can be omitted if all values are defined source specific.
# Source object defined values are taking precedence
[default]

  # Default delay settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence , can be omitted
  [default.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 500

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_1"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000011"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000012"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 1

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_2"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000021"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000022"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 2

[[source]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteSource_3"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000031"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_3"

  [[source.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMS0000032"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_3"

  # Object defined delay settings, if omitted on object basis default settings apply
  [source.delay]

    # Delay value (ms) on switch over, if omitted on object basis default settings apply
    switch = 800

  # Object defined Symetrix settings, mandatory
  [source.symnet]

    # Symetrix Control Number Value for this source object, mandatory
    control_value = 3

symnet_config_destinations.toml

The destination config file describe the destinations which are identified by a Symetrix Symnet control number. If there is no Symetrix device present or SDM should not listen to Symetrix this file can be omitted

Caution

Use UNIX file fomatting when editing the file

Info

Generate yourself an example Generate example

See the fully commented definition below

  • The file must be in TOML format
  • Check the correct syntax online toml-lint
  • Mandatory means that it will not work without.
# Defaults can be omitted if all values are defined destination specific.
# Destination object defined values are taking precedence
[default]

  # Default delay settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence , can be omitted
  [default.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 2000

  # Default Symetrix settings for all objects that are not carrying its own settings for delay
  # Object defined values are taking precedence, can be omitted
  [default.symnet]

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 2

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.1"

[[destination]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteDestination_1"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000011"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000012"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_1"

  # Object defined delay settings, if omitted on object basis default settings apply
  [destination.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 800

  # Object defined Symetrix settings, mandatory
  [destination.symnet]

    # Symetrix Control Number for this destination object, mandatory
    control_id = 5001

    # Symetrix Control Number that is feed back to Symetrix once the destination has changed, can be omitted
    feedback_id = 6001

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 3

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.2"

[[destination]]

  # Name of the source or destination object, can be omitted
  name = "MyDanteDestination_2"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000021"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 1

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  [[destination.channel]]

    # Dante channel name, mandatory for Dante devices
    channel_name = "SDMD0000022"

    # Channel index, if omitted the order of the channels below the object determines the index
    index = 2

    # Dante device name, can be omitted but should not.
    node_name = "MyDanteDevice_2"

  # Object defined delay settings, if omitted on object basis default settings apply
  [destination.delay]

    # Delay value (ms) on disconnect, if omitted on object basis default settings apply
    disconnect = 800

  # Object defined Symetrix settings, mandatory
  [destination.symnet]

    # Symetrix Control Number for this destination object, mandatory
    control_id = 5002

    # Symetrix Control Number that is feed back to Symetrix once the destination has changed, can be omitted
    feedback_id = 6002

    # Symetrix Site ID, defined in project settings, if omitted on object basis default settings apply
    site_id = 3

    # Symetrix DSP IP Address (v4), if omitted on object basis default settings apply
    unit_ip = "127.0.0.2"

Subsections of Control APIs

JSON RPC 2.0 API

This section describes the communication protocol between the control system and SDM using RPC calls using the JSON-RPC 2.0 protocol

Definitions

Caution

Commands must be formatted as defined in the JSON-RPC 2.0 protocol
All commands sent over TCP transport must end with <LF>
All replies are formatted as defined in the JSON-RPC 2.0 protocol
All replies over TCP transport end up with <LF>
<LF> stands for “line feed”, corresponding hex is 0x0A

Transport protocols

JSON-RPC 2.0 commands can flow over different transport protocols, once enabled in the api section of the config files. Per default they might not be enabled. Edid the config file to suite your needs and restart sdm service

Transport Config Datatype Example Supported Versions
TCP jrpc2TCPInterface string enp1s0 >v1.8.50
TCP jrpc2TCPPort int 64823 >v1.8.50
TCP jrpc2HTTPInterface string enp1s0 >v1.8.50
TCP jrpc2HTTPPort int 64880 >v1.8.50

In subsequent pages all methods are described that can be used.

Concurrency

All JSON-RPC 2.0 services do support asynchronous message processing. 3rd party control Systems must keep tracking of the id’s to determine whether a request was successful or not

TCP transport

Any TCP capable application can be used to test commands. Do not forget to end up with <LF>

HTTP transport

The body of the HTTP POST request must contain the complete JSON-RPC request message, encoded with Content-Type: application/json. Either a single request object or a list of request objects is supported. If the request completes, whether or not there is an error, the HTTP response is 200 (OK) for ordinary requests or 204 (No Response) for notifications, and the response body contains the JSON-RPC response. If the HTTP request method is not “POST”, SDM reports 405 (Method Not Allowed). If the Content-Type is not application/json, SDM reports 415 (Unsupported Media Type).

Test from a linux shell:
curl –header “Content-Type: application/json” –request POST –data ‘{“jsonrpc”:“2.0”,“id”:1,“method”:“sdm.Get”,“params”:{“property”:“version”}}’ http://host:64880

Subsections of JSON RPC 2.0 API

SDM

sdm.Get version

Get the running software version

Request

Method Param Value Comment Supported Versions
sdm.Get property version Property name to get >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"sdm.Get","params":{"property":"version"}}

Reply

Result Comment
x.x.x Version of sdm installed
{"jsonrpc":"2.0","id":1,"result":"1.8.64"}

sdm.Get activation

Get the activation status

Request

Method Param Value Comment Supported Versions
sdm.Get property activation Property name to get >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"sdm.Get","params":{"property":"activation"}}

Reply

Result Key Comment Supported Versions
Trial Deprecated >v1.8.70 <v1.8.70
IsTrial Is trial license is active? (deprecated >v1.8.70) <v1.8.70
License
Channels Allowed channels (unused)(deprecated >v1.8.70)
Devices Allowed devices
Gracetime Gracetime sdm runs with this license without online check
Exceed Time exceed since last online license check
Valid License if true, invalid if false
Expiration Timestamp for fixed expiration licenses (defaults to 2000-01-01T00:00:00Z -> ignored) >v1.8.72
Validation Timestamp of last online validation >v1.8.72
Refreshed License online refreshed since last start. If false license infomation may be invalid
{
	"jsonrpc": "2.0",
	"id": 1,
	"result": {
		"Trial": {
			"IsTrial": false
		},
		"License": {
			"Channels": 500,
			"Devices": 500,
			"Gracetime": 168,
			"Exceed": 0.002686415741388889,
			"Valid": true
			"Expiration":"2000-01-01T00:00:00Z"
			"Validation":"2021-09-10T16:47:08.452207569+02:00"
		},
		"Refreshed": true
	}
}

System

system.Get

log.level

Get the log level for sdm and associated processes

Request

Method Param Value Comment Supported Versions
system.Get property log.level Property name to get >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"system.Get","params":{"property":"log.level"}}

Reply

Result Comment
x Active log level
{"jsonrpc":"2.0","id":1,"result":6}

system.Set

log.level

Set the log level for sdm and associated processes

Request

Method Param Value Comment Supported Versions
system.Set property log.level Property name to set >v1.8.50
level 0-7 Log level to set >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"system.Set","params":{"property":"log.level","level":6}}

Reply

Result Comment
null null means acknowledged, no error
{"jsonrpc":"2.0","id":1,"result":null}

Config

config.Create

preset

Have sdm to create an example preset toml in the config directory. presets_config_example.toml will be created and can be modified and renamed as presets_config.toml. presets_config.toml is recognized by the system as file with preset definitions. See file content description for more info

Request

Method Param Value Comment Supported Versions
config.Create file presets_config_example.toml Example file to create >v1.8.67
{"jsonrpc":"2.0","id":1,"method":"config.Create","params":{"file":"presets_config_example.toml"}}

Reply

Result Comment
null null means acknowledged, no error
{"jsonrpc":"2.0","id":1,"result":null}

symnet

Have sdm to create symnet source and destination config examples in the config directory. Either symnet_config_sources_example.toml or symnet_config_destinations_example.toml will be created and can be renamed as symnet_config_sources.toml, symnet_config_destinations.toml

symnet_config_sources.toml is recognized by the system as file with source definitions. See file content description for more info symnet_config_destinations.toml is recognized by the system as file with destination definitions. See file content description for more info

Request

Method Param Value Comment Supported Versions
config.Create file symnet_config_sources_example.toml Example file to create >v1.8.67
symnet_config_destinations_example.toml Example file to create >v1.8.67
{"jsonrpc":"2.0","id":1,"method":"config.Create","params":{"file":"symnet_config_sources_example.toml"}}
{"jsonrpc":"2.0","id":1,"method":"config.Create","params":{"file":"symnet_config_destinations_example.toml"}}

Reply

Result Comment
null null means acknowledged, no error
{"jsonrpc":"2.0","id":1,"result":null}

Preset

preset.Recall

Recall a preset defined in presets_config.toml. presets_config.toml is recognized by the system as file with preset definitions. See file content description for more info

Request

Method Param Value Comment Supported Versions
preset.Recall preset 1-x Preset to recall >v1.8.67
{"jsonrpc":"2.0","id":1,"method":"preset.Recall","params":{"preset":1}}

Reply

Result Comment
null null means acknowledged, no error
{"jsonrpc":"2.0","id":1,"result":null}

Monitor

monitor.Get

status

Request a status from monitoring, like PTP states from Dante™

Request

Method Param Value Comment Supported Versions
monitor.Get status clocking Status to get >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"monitor.Get", "params":{"status": "clocking"}}

Reply

{
	"jsonrpc": "2.0",
	"id": 1,
	"result": {
		"SDM-DEV-DSP1-4": {
			"Preferred": 0,
			"Mutes": {},
			"Ports": {
				"1": {
					"PortState": "PASSIVE",
					"PathType": "MULTICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 1,
					"InterfaceIndex": 2
				},
				"2": {
					"PortState": "SLAVE",
					"PathType": "MULTICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 2,
					"InterfaceIndex": 2
				},
				"3": {
					"PortState": "DISABLED",
					"PathType": "UNICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 1,
					"InterfaceIndex": 2
				},
				"4": {
					"PortState": "DISABLED",
					"PathType": "UNICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 2,
					"InterfaceIndex": 2
				}
			}
		},
		"SDM-DEV-DSP2-1": {
			"Preferred": 0,
			"Mutes": {},
			"Ports": {
				"1": {
					"PortState": "PASSIVE",
					"PathType": "MULTICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 1,
					"InterfaceIndex": 2
				},
				"2": {
					"PortState": "SLAVE",
					"PathType": "MULTICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 2,
					"InterfaceIndex": 2
				},
				"3": {
					"PortState": "DISABLED",
					"PathType": "UNICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 1,
					"InterfaceIndex": 2
				},
				"4": {
					"PortState": "DISABLED",
					"PathType": "UNICAST",
					"Layer": "LAYER3",
					"LinkDown": 0,
					"PtpVersion": 2,
					"InterfaceIndex": 2
				}
			}
		}
	}
}

Discovery

discovery.Get

media

Get all discovered Dante™ devices

Request

Method Param Value Comment Supported Versions
discovery.Get type media Type for Dante™ is “media” >v1.8.50
domain ADHOC Dante domain, may be used in future versions
{"jsonrpc":"2.0","id":1,"method":"discovery.Get","params":{"domain":"ADHOC","type":"media"}}

Reply

Result Comment
Map of all Dante devices discovered
{"jsonrpc":"2.0","id":1,"result":["SDM-DEV-XIN1-3","SDM-DEV-DSP2-1","SDM-DEV-DSP1-4"]}

sdp

Get all discovered sdp sending devices, mostly these are AES67 compatible devices

Request

Method Param Value Comment Supported Versions
discovery.Get type sdp Type for AES67 is “sdp” >v1.8.50
domain ADHOC Dante domain, may be used in future versions
{"jsonrpc":"2.0","id":1,"method":"discovery.Get","params":{"domain":"ADHOC","type":"sdp"}}

Reply

Result Comment
Map of all Dante AES67 flows announced
{"jsonrpc":"2.0","id":1,"result":["239.69.40.217@SDM-Test","239.69.40.179@SDM-Foo"]}

Server

This section describes the communication protocol between the control system and SDM

rpc.serverInfo

Get all supported RCP methods

Request

Method Param Value Comment Supported Versions
rpc.serverInfo >v1.8.50
{"jsonrpc":"2.0","id":1,"method":"rpc.serverInfo"}

Reply

Result Key Comment
methods All supported methods that can be used by a 3rd party control system
counters Server counters
startTime Server start time
{
	"jsonrpc": "2.0",
	"id": 1,
	"result": {
		"methods": ["config.Create", "discovery.Get", "monitor.Get", "preset.Recall", "routing.Create", "routing.Delete", "routing.Get", "routing.Subscribe", "sdm.Get", "system.Get", "system.Set"],
		"usesContext": false,
		"counters": {
			"rpc.bytesRead": 50,
			"rpc.requests": 1
		},
		"maxValue": {
			"rpc.bytesRead": 50
		},
		"startTime": "2021-04-22T06:19:41.709283225Z"
	}
}

Routing

routing.Get

rxchannels

Get all received channels from a Dante™ device

Request

Method Param Value Comment Supported Versions
routing.Get name string Name of the device >v1.8.50
component rxchannels >v1.8.50
domain ADHOC Dante domain, may be used in future versions
{"jsonrpc":"2.0","id":2,"method":"routing.Get","params":{"name":"SDM-DEV-DSP1-4","domain":"ADHOC","component":"rxchannels"}}

Reply

Result Key Comment
channels (map) Receiving channels 1-x
canonicalName Channel canonical name
label Channel label name
subscriptedLabel Channel label from channel that is received
subscriptedDevice Device name from which the channel is received
Name Device name
{
	"jsonrpc": "2.0",
	"id": 2,
	"result": {
		"channels": {
			"1": {
				"canonicalName": "Zone_Channels-Ch1",
				"label": "Zone_Channels-Ch1",
				"subscriptedLabel": "NONE",
				"subscriptedDevice": "NONE"
			},
			"21": {
				"canonicalName": "Zone_Channels-Ch21",
				"label": "Zone_Channels-Ch21",
				"subscriptedLabel": "Source_Channels-Ch45",
				"subscriptedDevice": "SDM-DEV-DSP1-4"
			}
		},
		"Name": "SDM-DEV-DSP1-4"
	}
}

routing.Get

txchannels

Get all sent channels from a Dante™ device

Request

Method Param Value Comment Supported Versions
routing.Get name string Name of the device >v1.8.50
component txchannels >v1.8.50
domain ADHOC Dante domain, may be used in future versions
 {"jsonrpc": "2.0","id":2,"method": "routing.Get","params":{"name":"SDM-DEV-DSP1-4","domain":"ADHOC","component":"txchannels"}}

Reply

Result Key Comment
channels (map) Transmitting channels 1-x
canonicalName Channel canonical name
labels Channel labels (map)
Name Device name
{
	"jsonrpc": "2.0",
	"id": 2,
	"result": {
		"channels": {
			"1": {
				"canonicalName": "01",
				"labels": {
					"0": "Source_Channels-Ch1"
				}
			},
			"10": {
				"canonicalName": "10",
				"labels": {
					"0": "Source_Channels-Ch10"
				}
			}
		},
		"Name": "SDM-DEV-DSP1-4"
	}
}

txflows

Get all sent flows from a Dante™ device

Request

Method Param Value Comment Supported Versions
routing.Get name string Name of the device >v1.8.50
component txflows >v1.8.50
domain ADHOC Dante domain, may be used in future versions
{"jsonrpc": "2.0","id":2,"method": "routing.Get","params":{"name":"SDM-DEV-DSP1-4","domain":"ADHOC","component":"txflows"}}

Reply

Result Key Sub Comment
flows (map) Transmitting flows 1-x
name Flow name
Slots Flow slots (map)
ChannelName Name of the channel
ChannelID Channel ID
ID Flow ID
Interfaces How many interfaces are used for this flow
Addresses Flow Addresses (map)
Addr Multicast IP Address
Port Port
FlowClass 1=Dante&trade, 2,3=AES67, 4=RTP
Aes67OrigAddress AES67 original address if AES67
Transport AES67 or Dante
DestDevice Destination device the flow flows to if unicast
Flow ID Destination flow name on the device the flow flows to if unicast
Name Device name
{
	"jsonrpc": "2.0",
	"id": 2,
	"result": {
		"flows": {
			"0": {
				"name": "Source_Channels",
				"indexes": null,
				"Slots": {
					"0": {
						"ChannelName": "Source_Channels-Ch1",
						"ChannelID": 1
					},
					"1": {
						"ChannelName": "Source_Channels-Ch2",
						"ChannelID": 2
					}
				},
				"ID": 1,
				"Interfaces": 1,
				"Addresses": {
					"0": {
						"Addr": "239.255.105.118",
						"Port": 4321
					}
				},
				"FlowClass": 1,
				"Aes67OrigAddress": "",
				"Transport": "DANTE",
				"DestDevice": "",
				"DestFlow": ""
			}

		},
		"Name": "SDM-DEV-DSP1-4"
	}
}

rxflows

Get all received flows from a Dante™ device

Request

Method Param Value Comment Supported Versions
routing.Get name string Name of the device >v1.8.50
component rxflows >v1.8.50
domain ADHOC Dante domain, may be used in future versions
{"jsonrpc": "2.0","id": 2,"method": "routing.Get","params":{"name":"SDM-DEV-DSP1-4","domain": "ADHOC","component":"rxflows"}}

Reply

Result Key Sub Comment
flows (map) Transmitting flows 1-x
name Flow name
Slots Flow slots (map)
Channels (map) Map of the channels received in this flow slot
ID Flow ID
Interfaces How many interfaces are used for this flow
Addresses Flow Addresses (map)
Addr Multicast IP Address
Port Port
FlowClass 1=Dante&trade, 2,3=AES67, 4=RTP
Aes67OrigAddress AES67 original address if AES67
Transport AES67 or Dante
Name Device name
{
	"jsonrpc": "2.0",
	"id": 2,
	"result": {
		"flows": {
			"0": {
				"name": "",
				"Slots": {
					"0": {
						"Channels": {
							"0": "Zone_Channels-Ch51"
						}
					},
					"1": {
						"Channels": {
							"0": "Zone_Channels-Ch52"
						}
					}
				},
				"ID": 1,
				"Interfaces": 1,
				"Addresses": {
					"0": {
						"Addr": "239.69.40.217",
						"Port": 5004
					}
				},
				"FlowClass": 1,
				"Aes67OrigAddress": "",
				"Transport": "Dante"
			},

			"2": {
				"name": "",
				"Slots": {
					"0": {
						"Channels": {
							"0": "Zone_Channels-Ch1"
						}
					},
					"1": {
						"Channels": {
							"0": "Zone_Channels-Ch2"
						}
					}
				},
				"ID": 3,
				"Interfaces": 1,
				"Addresses": {
					"0": {
						"Addr": "239.69.2.156",
						"Port": 5004
					}
				},
				"FlowClass": 2,
				"Aes67OrigAddress": "239.69.2.156",
				"Transport": "AES67"
			}
		},
		"Name": "SDM-DEV-DSP1-4"
	}
}

routing.Create

Create a new routing from a Dante™ or AES67 device to a a Dante™ device

Request

Method Param Sub-table key Comment Supported Versions
routing.Create tx channelName Source channel label/name/canonical name >v1.8.50
nodeName Source node name >v1.8.50
aesFlowName Source flow name >v1.8.67
aesFlowSlotID Slot ID of flow >v1.8.67
rx destination Destination channel label/name/canonical name >v1.8.50
nodeName Destination node name >v1.8.50
Info

Include node name to create a new routing

Even if it is allowed to create a new routing only based on the channel name, it is better to include the device name. The changeover is done more quickly

{
   "jsonrpc":"2.0",
   "id":1,
   "method":"routing.Create",
   "params":[
      {
         "rx":{
            "channelName":"Zone_Channels-Ch10"
         },
         "tx":{
            "channelName":"Source_Channels-Ch10"
         }
      }
   ]
}
{
   "jsonrpc":"2.0",
   "id":1,
   "method":"routing.Create",
   "params":[
      {
         "rx":{
            "nodeName":"SDM-DEV-DSP1-4",
            "channelName":"Zone_Channels-Ch10"
         },
         "tx":{
            "nodeName":"SDM-DEV-DSP1-4",
            "channelName":"Source_Channels-Ch10"
         }
      }
   ]
}
{
   "jsonrpc":"2.0",
   "id":1,
   "method":"routing.Create",
   "params":[
      {
         "tx":{
            "nodeName":"",
            "channelName":"Zone_Channels-Ch10"
         },
         "tx":{
            "aesFlowName":"239.69.40.217@Test-BTI",
            "aesFlowSlotID":1
         }
      },
      {
         "rx":{
            "nodeName":"",
            "channelName":"Zone_Channels-Ch11"
         },
         "rx":{
            "aesFlowName":"239.69.40.217@Test-BTI",
            "aesFlowSlotID":2
         }
      }
   ]
}

Reply

Result
null null means acknowledged, no error
{"jsonrpc":"2.0","id":1,"result":null}

routing.Delete

Delete a routing from a Dante™ or AES67 device to a a Dante™ device

Request

Method Param Sub-table key Comment Supported Versions
routing.Delete rx Destination Destination channel label/name/canonical name >v1.8.50
nodeName Destination node name >v1.8.50
Info

Include node name to delete routing

Even if it is allowed to delete a routing only based on the channel name, it is better to include the device name. The disconnect is done more quickly

{
   "jsonrpc":"2.0",
   "id":1,
   "method":"routing.Delete",
   "params":[
      {
         "RX":{
            "ChannelName":"Zone_Channels-Ch11"
         }
      }
   ]
}
{
   "jsonrpc":"2.0",
   "id":1,
   "method":"routing.Delete",
   "params":[
      {
         "RX":{
            "NodeName":"SDM-DEV-DSP1-4",
            "ChannelName":"Zone_Channels-Ch11"
         }
      }
   ]
}

Reply

Result
null null means acknowledged, no error
{"jsonrpc": "2.0","id": 1,"result": null}

Diagnose

SDM can help you diagnose several shortcomings in the network

IGMP Querier

Dante™ networks do need a correctly set IGMP Querier

  • A switch need to broadcast a IGMP Querier every 30 seconds
  • The sending switch must be not on the periphere, ideally it’s the one switch which is in the destination path of most of the multicasts. Usually a core switch
  • IGMP Querier version must be V3 if only Dante™ devices are used, V2 if Dante™ and AES67 devices are used

The status of a IGMP Querier can be sniffed on the page Diag > IGMP QUerier

Picture Picture

Once you selected the Interface capture begins

Picture Picture

What to check?

  • Is there something printed at all?
  • Is there something printed after 70 seconds?
  • Compare timestamps, is the querier appearing every 30 seconds?
  • Is the IP address really the designated switch?

Dante™ Clocking

Dante™ networks use PTP for time synchronization.

  • A correctly set IGMP Querier is needed (see above)
  • Switches need eventually a configuration on how to deal with PTP
  • In larger networks QOS need to be setup

The clocking status of all dante devices can be sniffed on the page Diag > Dante Clocking

Picture Picture

What to check?

  • One Master (Leader) clock
  • After a while all Dante™ devices must be listed

Licensing

Every SDM needs a valid license to work. SDM confirms validity online at least every 7 days

Status

The status of the license can be viewed on the status page SDM > license

Picture Picture

A detailed explanation of the reported fields can be here

Software

Update

Updates can be uploaded and activated under Help > Update

Picture Picture

Online Update

Once online updates are activated SDM checks for updates for SDM and associated services, as well as for operating system updates

  • There is no quarantee that an update is executed immediately. It may take up to 24 hours.
  • Online updates do need an Internet connection!
  • Updates might be large, ensure that the Internet connection is fast and not metered
  • If an update should be executed in a maintenance window please contact nexgentec and make sure your software subscription NGT-SDM-APU2 is active

Offline Update

  • For SDM and associated services we may publish software updates that can be uploaded directly. Once uploaded they are processed in backgrouns. Stay patience.

Downloads

Nothing to see here yet

Specifications

Specifications

Welcome to the Firmware section!

If you are not redirected automatically, click here.

Subsections of Specifications

General

Connections

Connector
Ethernet
Net 1 Gigabit Ethernet (Intel i210AT)
Net 2 Gigabit Ethernet (Intel i210AT)
Net 3 Gigabit Ethernet (Intel i210AT)
Serial
DB9 serial Deactivated
Power
Jack (2.5 mm) center positive 12V DC, about 6 to 12W

Environmental

Power 12V, 12W max
Heat Dissipation Max 42 BTU / HR
Operating temp 0°C – 60°C
Dimensions L: 238mm, W: 208mm, H:44mm
Compliance CE, ROHS
Weight 900g

CAD step file

Step files

Network

Network

Caution

None of the specified protocols or ports, nor the communication can be changed. (except port configurable in sdm.config )
Its wise to review the lists and allow SDM to communicate with all ports and protocols defined.
SDM will not work without any of the ports and protocols defined.

Caution

SDM need frequent internet access Details

Ports used by Dante™

Depending on the configuration physical ports, VLAN or bridges used for Dante™ may use these ports for communication.

Address Port Usage Type
239.255.0.0/16 4321 ATP Multicast Audio Multicast
239.69.0.0/16 5004 AES67 Multicast Audio (RTP / AVP port) Multicast
224.0.1.129-132 319, 320 PTP Multicast & Unicast when using DDM
224.0.0.251 5353 mDNS Multicast
224.0.0.230 – 233 8700 – 8708 Multicast Control and Monitoring Multicast
239.254.1.1 9998 Logging Multicast
239.254.3.3 9998 PTP Logging (if enabled) Multicast
239.254.44.44 9998 Logging Multicast
239.255.255.255 9875 SAP (AES67 discovery) Multicast
UDP 28800, 28700-28708 Via control & monitoring Unicast
UDP 38800, 38700-38708 DVS control & monitoring Unicast
UDP 14336 -14591 Unicast Audio [Excluding Via] Unicast
UDP 34336-34600 Unicast Audio [Via Only] Unicast
UDP 4440, 4444, 4455 Audio Control [Excluding Via] Unicast
UDP 24440, 24441,24444,24455 Audio Control Unicast
UDP 4777 Via Control Unicast
TCP 4777 Via Websocket Unicast
UDP 8850,28900, 24445 Via control & Monitoring Unicast
UDP 8850,38900,8899 DVS control & monitoring Unicast
UDP 8000 Dante Domain Manager Device Port Unicast
UDP 8001 Dante Millau Device Proxy Unicast
UDP 8002 Dante Lock Server Unicast
UDP 8751 Dante Controller metering port Unicast
UDP 8800 Control & Monitoring Unicast
TCP 8753 mDNS clients Unicast
TCP 16100-16131 HDCP Authentication for Video Endpoints Unicast
UDP 61440‬-61951 FPGA level audio flow keepalive Unicast

Ports used by SDM for Control

Depending on the configuration physical ports, VLAN or bridges used for control may use these ports for communication.

Protocol Source IP Source Port Destination IP Destination Port Description
HTTP All all Control interface Address Port configured in sdm.config Control over HTTP
TCP All all Control interface Address Port configured in sdm.config Control over TCP

General ports used by OS and services (Mandatory ports)

Protocol Source IP Source Port Destination Destination Port Description
TCP All interfaces all l02.genesis-technologies.ch 443 nexgentec™ license service
UDP All interfaces all swan.genesis-technologies.ch 443 nexgentec™ maintenance service
TCP All interfaces all DNS service 53 DNS
UDP All interfaces all DNS service 53 DNS
UDP All interfaces all NTP service 123 NTP
TCP All interfaces all www.app.qbee.io 443 3rd party maintenance service

Internet access

Why does SDM need Internet access?

  • Since we live in an unpredictable world we have to protect our paying customers. Therefore we check the SDM license at least every 7 days. This avoids software piratery and allows us getting enough financial resources to further develop sdm and provide future support.
  • We do monitor all relevant parameters for continuous operation. Software is always written by humans and may contain bugs like a memory leak. Without monitoring we are not able to act before you even take a notice that there is an issue.

How frequent does SDM need Internet access?

At least every 7 days a successful license check must be possible. If not SDM stops working

What if I do not agree?

Send the SDM device back to where you bought it. We have no intention to change our mind.

What if I think that this could be done better?

Sure we listen, just give us a call.

Time Server access

Why does SDM need a valid time and therefore access to a ntp time server?

  • Without a valid time all license checks will fail and SDM will stop working
  • Running a computer whithout correct time is in general a bad idea

How frequent does SDM need time server access?

  • We do recommend that SDM has continued access to a NTP time server
  • At least every 7 days a successful time sync should be possible

What if no ntp time server is accessible?

  • Then the operation of SDM is not guaranteed.

User Profile

Several user settings can be made on the Profile page.

Picture Picture

Password

To protect the access to the web interface another password can be set

Caution

Do not lose the password nexgentec customer support must be contacted to reset the password.

Settings

Time format

The time format for the web interface

Copyrights

SDM and associated software may use 3rd party code with their given copyrights. For compliance reasons we are required list them here.

creachadair/jrpc2

Copyright (c) 2017, Michael J. Fromberger
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors
   may be used to endorse or promote products derived from this software
   without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

eiannone/keyboard/

The MIT License (MIT)

Copyright (C) 2012 termbox-go authors
Copyright (c) 2015 Emanuele Iannone

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

fsnotify/fsnotify/

Copyright (c) 2012 The Go Authors. All rights reserved.
Copyright (c) 2012-2019 fsnotify Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

google/uuid/

Copyright (c) 2009,2014 Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

struCoder/pidusage

MIT License

Copyright (c) 2017 David 大伟

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

golang.org/x/*

Copyright (c) 2009 The Go Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

gopkg.in/gcfg

Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go
Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
   * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

natefinch/lumberjack

The MIT License (MIT)

Copyright (c) 2014 Nate Finch 

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.