Bridge API

Prev Next

The swXtchBridge API base URL for is http://{swXtchBridge-ctrl-ip}:{port}

Adaptors

adaptors/add

  • Adds new unicast adaptor configuration.

Endpoint:

<base_url>/swx/adaptors/add

Request:

json

{
  "directionCode": "string",
  "id": "string",
  "options": [
    {
      "name": "string",
      "value": "string"
    },
    {
      "name": "string",
      "value": "string"
    }
  ],
  "protocolCode": "string",
  "socketIp": "string",
  "socketPort": 1307,
  "streamIp": "string",
  "streamPort": 3047
}

Response:

json / { "id": "adaptor-uuid-123" }

Error Responses:

  • 400 - Fanout not enabled or validation failed

  • 409 - Adaptor already exists

Example Response: Add an UDP ingress adaptor →

$ curl 172.51.128.132/swx/adaptors/add -d '{
  "protocolCode": "udp",
  "directionCode": "ingress",
  "streamIp": "239.1.1.1",
  "streamPort": 5000,
  "socketIp": "10.0.1.100",
  "socketPort": 5001,
  "listenerPort": 6000,
  "options": [
    {
      "name": "bufferSize",
      "value": "65536"
    },
    {
      "name": "ttl",
      "value": "64"
    }
  ]
}'
{"id":"12415546857077395231"}


adaptors/remove

  • Removes one or more adaptor configurations.

Endpoint:

<base_url>/swx/adaptors/remove

Request:

json / { "ids": ["adaptor-uuid-123", "adaptor-uuid-456"] }

Response:

  • 200 - Success (no body)

  • json / {"errorCode":12005,"errorMessage":"The given adaptors don't exist.","data":"adaptor-uuid-123"}

Example Response: Delete a given adaptor →

$ curl 172.51.128.132/swx/adaptors/remove -d '{ "ids": [ "12415546857077395231" ] }'
$

adaptors/show

  • Returns the current adaptors configuration.

Endpoint:

<base_url>/swx/adaptors/show

Request:

Empty

Response:

json

Example Response: Get current adaptors configurations →

$ curl 172.51.128.132/swx/adaptors/show
{"adaptors":{"3875045238777959178":{"id":"3875045238777959178","protocolCode":"udp","directionCode":"ingress","streamIp":"239.1.1.1","streamPort":5000,"socketIp":"10.0.1.100","socketPort":5001,"listenerPort":6000,"options":[{"name":"bufferSize","value":"65536"},{"name":"ttl","value":"64"}]},"9444164746505921829":{"id":"9444164746505921829","protocolCode":"udp","directionCode":"ingress","streamIp":"239.1.1.1","streamPort":10020,"socketIp":null,"socketPort":null,"listenerPort":10021,"options":[]}}}

adaptors/state

  • Returns the runtime statistics for all adaptors.

Endpoint:

<base_url>/swx/adaptors/state

Request:

Empty

Response:

json

Example Response: Get current adaptors statistics →

$ curl 172.51.128.132/swx/adaptors/state
{"3875045238777959178":{"id":"3875045238777959178","isConnected":false,"isActive":false,"stats":{},"config":{"id":"3875045238777959178","protocolCode":"udp","directionCode":"ingress","streamIp":"239.1.1.1","streamPort":5000,"socketIp":"10.0.1.100","socketPort":5001,"listenerPort":6000,"options":[{"name":"bufferSize","value":"65536"},{"name":"ttl","value":"64"}]}},"9444164746505921829":{"id":"9444164746505921829","isConnected":false,"isActive":false,"stats":{},"config":{"id":"9444164746505921829","protocolCode":"udp","directionCode":"ingress","streamIp":"239.1.1.1","streamPort":10020,"socketIp":null,"socketPort":null,"listenerPort":10021,"options":[]}}}

adaptors/update

  • Updates existing adaptor configuration.

NOTE

Only SRT adaptros that are currently in use can be updated. Also, only the POST type.

Endpoint:

<base_url>/swx/adaptors/update

Request:

json

{
  "id": "string",
  "options": [
    {
      "name": "string",
      "value": "string"
    },
    {
      "name": "string",
      "value": "string"
    }
  ]
}

Response:

  • 200 - Success (no body)

  • json / {"errorCode":12005,"errorMessage":"The given adaptors don't exist.","data":null}

Example Response: Update a given adaptor configuration →

$ curl 172.51.128.132/swx/adaptors/update -d '{
  "id": "3875045238777959178",
  "options": [
    {
      "name": "bufferSize",
      "value": "131072"
    },
    {
      "name": "ttl",
      "value": "32"
    }
  ]
}'

Monitoring

monitoring/state

  • Retrieve bridge state information.

Endpoint:

<base_url>/swx/monitoring/state

Request:

Empty

Response:

json

Example Response: Get the configuration of a given swXtchBridge →

$ curl 172.51.128.132/swx/monitoring/state
{
    "bridgeConfig": {
        "ctrlInterfaceName": "ens5",
        "dataInterfaceName": "ens6",
        "userInterfaceName": "ens6",
        "dataPort": 9999,
        "nicsConfig": null,
        "maxGroundSubscriptions": 2000,
        "pollingIntervalMilliseconds": 1000,
        "subscriptionsPollingIntervalMilliseconds": 100,
        "overrideSrcIp": false,
        "maxTimeStatsNs": null,
        "cpu": -1,
        "protocolConfig": {
            "cgroupName": "swx-protocol",
            "cpuSet": "",
            "cpuUsage": 80
        },
        "processes": {
            "swxCore": {
                "launch": true,
                "options": null,
                "args": {
                    "--verbosity": "1"
                }
            },
            "swxTunnelIgmp": {
                "launch": true,
                "options": null,
                "args": {
                    "--verbosity": "1"
                }
            },
            "swxTunnelSingleNic": {
                "launch": false,
                "options": null,
                "args": {
                    "--tunIP": ""
                }
            },
            "swxTunnel": {
                "launch": true,
                "options": null,
                "args": {
                    "--verbosity": "2"
                }
            },
            "swxProtocol": {
                "launch": true,
                "options": null,
                "args": {
                    "--cpu-set": "",
                    "--cpu-usage": "80",
                    "--verbosity": "1"
                }
            },
            "swxBridgeData": {
                "launch": true,
                "options": null,
                "args": {
                    "--verbosity": "1"
                }
            }
        },
        "installedConnection": {
            "controlAddress": {
                "ip": "172.31.25.214",
                "port": 80
            },
            "dataAddress": null
        },
        "nonSlpMtu": 1500,
        "dataGatewayIp": null
    }
}

Subscriptions

Subscriptions are multicast addresses that are required for on-prem to cloud IGMP joins and vice versa.  Note that it is dynamic from on-prem to cloud; therefore, Forward Subscriptions are not necessary; however, Ground Subscriptions are necessary unless using PIM table integration.

subscriptions/addForwardSubscription

  • Adds a forward subscription to the bridge configuration.  

Endpoint:

<base_url>/swx/subscriptions/addForwardSubscription

Request:

json

{
  "groupAddress": "string",
  "swxtchAddress": {
      "ip": "string",
      "port": 0
    }
}

Response:

  • 200 - Success (no body)

  • json / {"errorMessage":"Group: string already present for swxtch: string:0."}

Example Response: Create a forward subscription →

$ curl 172.51.128.152/swx/subscriptions/addForwardSubscription -d '{
  "groupAddress": "239.1.1.1",
  "swxtchAddress": {
      "ip": "172.51.128.132",
      "port": 10000
    }
}'

subscriptions/addGroundSubscription

  • Adds a ground subscription to configuration

Endpoint:

<base_url>/swx/subscriptions/addGroundSubscription

Request:

json

{
  "multicastGroups": [
    "string"
  ]
}

Response:

  • 200 - Success (no body)

Example Response: Create a ground subscription →

$ curl 172.51.128.152/swx/subscriptions/addGroundSubscription -d '{
  "multicastGroups": [
    "239.1.1.1",
    "239.1.1.2"
  ]
}'

subscriptions/removeForwardSubscription

  • Removes a forward subscription configuration

Endpoint:

<base_url>/swx/subscriptions/removeForwardSubscription

Request:

json

{
  "groupAddress": "string",
  "swxtchAddress": {
      "ip": "string",
      "port": 0
    }
}

Response:

  • 200 - Success (no body)

Example Response: Remove a forward subscription →

$ curl 172.51.128.152/swx/subscriptions/removeForwardSubscription -d '{
  "groupAddress": "239.1.1.1",
  "swxtchAddress": {
      "ip": "172.51.128.132",
      "port": 10000
    }
}'

subscriptions/removeGroundSubscription

  • Removes ground subscriptions configuration

Endpoint:

<base_url>/swx/subscriptions/removeGroundSubscription

Request:

json List of multicast groups to be removed

{
  "multicastGroups": [
    "string",
    "string",
-
  ]
}

Response:

  • 200 - Success (no body)

Example Response: Remove a Ground subscription →

$ curl 172.51.128.152/swx/subscriptions/removeGroundSubscription -d '{
  "multicastGroups": [
    "239.1.1.1",
    "239.1.1.2"
  ]
}'

subscriptions/showForwardSubscriptions

  • Returns current forward subscriptions configuration.

Endpoint:

<base_url>/swx/subscriptions/showForwardSubscriptions

Request:

Empty

Response:

  • json /  {"string:0":["string","string"]}

Example Response: Show forward subscription configurations →

$ curl 172.51.128.152/swx/subscriptions/showForwardSubscriptions
{"172.51.128.132:10000":["239.1.1.1","239.1.1.2"]}

subscriptions/showGroundSubscriptions

  • Returns current ground subscriptions configuration.

Endpoint:

<base_url>/swx/subscriptions/showGroundSubscriptions

Request:

json

{
  "multicastGroups": [
    "string"
  ]
}

Response:

  • 200 - Success (no body)

  • json /  {"multicastGroups":["string","string"]}

Example Response: Show ground subscription configurations →

$ curl 172.51.128.152/swx/subscriptions/showGroundSubscriptions
{"multicastGroups":["239.1.1.1:0","239.1.1.2:0"]}

Connections

connections/addConnectionCluster

  • Add and deploy a swXtch connections cluster configuration

Endpoint:

<base_url>/swx/connections/addConnectionCluster

Request:

json

{
  "connection": {
    "dataInterfaceName": "string",
    "ha": {
      "deduplication": {
        "bufferSizeInPackets": 0,
        "maxTimeToBufferPacketsMs": 0,
        "removeInactiveStreamTimeoutSec": 0
      },
      "enable": "string",
      "protocol": "string"
    },
    "slp": {
      "enableRx": "string",
      "enableTx": "string",
      "params": {
        "ack_interval_ns": 0,
        "channel_bonding_start_port": 0,
        "channel_rebonding_start_port": 0,
        "connection_timeout_retries": 0,
        "disable_auto_update_nack_estimation": "string",
        "enable_auto_incoming": "string",
        "enable_reconnection": "string",
        "in_flight_pkt_count": 0,
        "incoming_retra_delay_ns": 0,
        "latency_factor": 0,
        "min_avg_window": 0,
        "min_time_first_retrans_req_ns": 0,
        "mtu": 0,
        "num_channel_bonding_ports": 0,
        "num_channel_rebonding_ports": 0,
        "pkt_delivery_retries": 0
      }
    }
  },
  "primarySwxtch": {
    "controlAddress": {
      "ip": "string",
      "port": 0
    },
    "dataAddress": {
      "ip": "string",
      "port": 0
    }
  }
}

Response:

  • 200 - Success (no body)

Example Response →

$ curl 172.51.128.152/swx/connections/addConnectionCluster -d '{"componentId":"172.31.29.118","connectionData":{"primarySwxtch":{"controlAddress":{"ip":"172.31.18.246","port":80}},"connection":{"ha":{"enable":false,"protocol":"swxtch","deduplication":null},"slp":{"enableTx":true,"enableRx":true,"params":{"in_flight_pkt_count":null,"pkt_delivery_retries":null,"connection_timeout_retries":null,"mtu":null,"disable_auto_update_nack_estimation":null,"min_time_first_retrans_req_ns":null,"incoming_retra_delay_ns":null,"ack_interval_ns":null,"channel_bonding_start_port":null,"num_channel_bonding_ports":null,"channel_rebonding_start_port":null,"num_channel_rebonding_ports":null,"min_avg_window":null,"enable_auto_incoming":null,"latency_factor":2,"enable_reconnection":null}},"dataInterfaceName":"ens6"}}}'
$

connections/removeConnectionCluster

  • Remove a swXtch connections cluster configuration

Endpoint:

<base_url>/swx/connections/removeConnectionCluster

Request:

json

{
  "ip": "string",
  "port": 0
}

Response:

  • 200 - Success (no body)

Example Response: Remove a connection cluster →

$ curl 172.51.128.152/swx/connections/removeConnectionCluster -d '{"componentId":"172.31.29.118","address":{"ip":"172.31.18.246","port":80}}'
$

connections/showConnectionClusters

  • Retrieve current swXtch connections clusters configurations

Endpoint:

<base_url>/swx/connections/showConnectionClusters

Request:

json

Response:

  • 200 - OK json

Example Response: Show the connection for a single swXtchBridge without a single connection to the cloudSwXtch →

$ curl 172.51.25.214/swx/connections/showConnectionClusters
[
  {
    "primarySwxtch": {
      "controlAddress": {
        "ip": "172.31.25.214",
        "port": 80
      },
      "dataAddress": null
    },
    "connection": {
      "slp": {
        "enableTx": true,
        "enableRx": true,
        "params": {
          "in_flight_pkt_count": null,
          "pkt_delivery_retries": null,
          "connection_timeout_retries": null,
          "mtu": null,
          "disable_auto_update_nack_estimation": null,
          "min_time_first_retrans_req_ns": null,
          "incoming_retra_delay_ns": null,
          "ack_interval_ns": null,
          "channel_bonding_start_port": null,
          "num_channel_bonding_ports": null,
          "channel_rebonding_start_port": null,
          "num_channel_rebonding_ports": null,
          "min_avg_window": null,
          "enable_auto_incoming": null,
          "latency_factor": 2,
          "enable_reconnection": null
        }
      },
      "ha": {
        "enable": false,
        "protocol": "swxtch",
        "deduplication": null
      },
      "dataInterfaceName": "ens6"
    }
  }
]

connections/updateConnectionClusters

  • Update a swXtch connection cluster configuration

Endpoint:

<base_url>/swx/connections/updateConnectionClusters

Request:

json

{
  "connection": {
    "dataInterfaceName": "string",
    "ha": {
      "deduplication": {
        "bufferSizeInPackets": 0,
        "maxTimeToBufferPacketsMs": 0,
        "removeInactiveStreamTimeoutSec": 0
      },
      "enable": "string",
      "protocol": "string"
    },
    "slp": {
      "enableRx": "string",
      "enableTx": "string",
      "params": {
        "ack_interval_ns": 0,
        "channel_bonding_start_port": 0,
        "channel_rebonding_start_port": 0,
        "connection_timeout_retries": 0,
        "disable_auto_update_nack_estimation": "string",
        "enable_auto_incoming": "string",
        "enable_reconnection": "string",
        "in_flight_pkt_count": 0,
        "incoming_retra_delay_ns": 0,
        "latency_factor": 0,
        "min_avg_window": 0,
        "min_time_first_retrans_req_ns": 0,
        "mtu": 0,
        "num_channel_bonding_ports": 0,
        "num_channel_rebonding_ports": 0,
        "pkt_delivery_retries": 0
      }
    }
  },
  "primarySwxtch": {
    "controlAddress": {
      "ip": "string",
      "port": 0
    },
    "dataAddress": {
      "ip": "string",
      "port": 0
    }
  }
}

Response:

  • 200 - Success (no body)

Example Response: Update the connection to remove SLP for RX →

$ curl 172.51.128.152/swx/connections/updateConnectionClusters -d '{"componentId":"172.31.29.118","connectionData":{"primarySwxtch":{"controlAddress":{"ip":"172.31.18.246","port":80}},"connection":{"ha":{"enable":false,"protocol":"swxtch","deduplication":null},"slp":{"enableTx":true,"enableRx":false,"params":{"in_flight_pkt_count":null,"pkt_delivery_retries":null,"connection_timeout_retries":null,"mtu":null,"disable_auto_update_nack_estimation":null,"min_time_first_retrans_req_ns":null,"incoming_retra_delay_ns":null,"ack_interval_ns":null,"channel_bonding_start_port":null,"num_channel_bonding_ports":null,"channel_rebonding_start_port":null,"num_channel_rebonding_ports":null,"min_avg_window":null,"enable_auto_incoming":null,"latency_factor":2,"enable_reconnection":null}},"dataInterfaceName":"ens6"}}}'
$

connections/updateConnectionConfig

  • Update default connection configuration

Endpoint:

<base_url>/swx/connections/updateConnectionConfig

Request:

json

{
  "dataInterfaceName": "string",
  "ha": {
    "deduplication": {
      "bufferSizeInPackets": 0,
      "maxTimeToBufferPacketsMs": 0,
      "removeInactiveStreamTimeoutSec": 0
    },
    "enable": "string",
    "protocol": "string"
  },
  "slp": {
    "enableRx": "string",
    "enableTx": "string",
    "params": {
      "ack_interval_ns": 0,
      "channel_bonding_start_port": 0,
      "channel_rebonding_start_port": 0,
      "connection_timeout_retries": 0,
      "disable_auto_update_nack_estimation": "string",
      "enable_auto_incoming": "string",
      "enable_reconnection": "string",
      "in_flight_pkt_count": 0,
      "incoming_retra_delay_ns": 0,
      "latency_factor": 0,
      "min_avg_window": 0,
      "min_time_first_retrans_req_ns": 0,
      "mtu": 0,
      "num_channel_bonding_ports": 0,
      "num_channel_rebonding_ports": 0,
      "pkt_delivery_retries": 0
    }
  }
}

Response:

  • 200 - Success (no body)

Example Response: Update connection config to remove SLP for RX →

$ curl 172.51.128.152/swx/connections/updateConnectionConfig -d '{"componentId":"172.31.29.118","connectionConfig":{"slp":{"enableTx":true,"enableRx":false,"params":{"in_flight_pkt_count":null,"pkt_delivery_retries":null,"connection_timeout_retries":null,"mtu":null,"disable_auto_update_nack_estimation":null,"min_time_first_retrans_req_ns":null,"incoming_retra_delay_ns":null,"ack_interval_ns":null,"channel_bonding_start_port":null,"num_channel_bonding_ports":null,"channel_rebonding_start_port":null,"num_channel_rebonding_ports":null,"min_avg_window":null,"enable_auto_incoming":null,"latency_factor":2,"enable_reconnection":null}},"ha":{"enable":false,"protocol":"swxtch","deduplication":null},"dataInterfaceName":"ens6"}}'
$