Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Setup SSH on a board

To setup the ssh server it is necessary to connect via minicom (serial port) and pass the comands below.

Code Block
languagebash
themeMidnight
dropbearkey -t rsa -

...

/tmp/data/sky-ssh-hostkey

...


dropbear -p :<SSH_PORT> -

...

/var/run/dropbear2.pid -

...

/tmp/data/sky-ssh-

...

hostkey -B

...


 

...


iptables -I INPUT 1 -p tcp --dport <SSH_PORT> -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

...


iptables -I OUTPUT 1 -p tcp --sport <SSH_PORT> -m conntrack --ctstate ESTABLISHED -j ACCEPT


With suggestet SSH_PORT = 10022

Code Block
languagebash
themeMidnight
dropbearkey -t rsa -

...

/tmp/data/sky-ssh-hostkey

...


dropbear -p :10022 -

...

/var/run/dropbear2.pid -

...

/tmp/data/sky-ssh-

...

hostkey -B

...


 

...


iptables -I INPUT 1 -p tcp --dport 10022 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

...


iptables -I OUTPUT 1 -p tcp --sport 10022 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Redirect ports

The command below will log into the box via ssh and redirect the ports between local machine and box.

...

Code Block
languagebash
themeMidnight
ssh -L <LOCAL_PORT>:localhost:<THUNDER_PORT> -p <SSH_PORT> root@<IP>

In my case (I'm relying on local port 9000, ssh port is equal to 10022, thunder port is default 9998, and box ip equals 10.42.0.212.

...

Code Block
languagebash
themeMidnight
ssh 

...

-L 9000:localhost:9998 -p 10022 root@10.42.0.21

Send HTTP request to the Thunder

I'm using the Postman, but even curl can be fine enough.

BOX example

...

Postman example

...

Code Block
themeMidnight
collapsetrue
curl http://127.0.0.1:9998/Service/Controller
 
curl http://127.0.0.1:9998/Service/Controller  
{"plugins":[{"callsign":"ActivityMonitor","locator":"libWPEFrameworkActivityMonitor.so","classname":"ActivityMonitor","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"CoPilot","locator":"libWPEFrameworkCoPilot.so","classname":"CoPilot","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Controller","classname":"Controller","configuration":{
    "subsystems":[
     "Decryption",
     "Location",
     "Time",
     "Internet"
    ],
    "resumes":null
   }
,"state":"activated","processedrequests":3,"processedobjects":0,"observers":0},{"callsign":"DeviceDiagnostics","locator":"libWPEFrameworkDeviceDiagnostics.so","classname":"DeviceDiagnostics","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceDiagnostics","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DeviceInfo","locator":"libWPEFrameworkDeviceInfo.so","classname":"DeviceInfo","autostart":true,"state":"activated","processedrequests":1,"processedobjects":0,"observers":0,"module":"Plugin_DeviceInfo","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"DeviceProvisioning","locator":"libWPEFrameworkDeviceProvisioning.so","classname":"DeviceProvisioning","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceProvisioning","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DisplaySettings","locator":"libWPEFrameworkDisplaySettings.so","classname":"DisplaySettings","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DisplaySettings","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrameRate","locator":"libWPEFrameworkFrameRate.so","classname":"FrameRate","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrameRate","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrontPanel","locator":"libWPEFrameworkFrontPanel.so","classname":"FrontPanel","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrontPanel","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdcpProfile","locator":"libWPEFrameworkHdcpProfile.so","classname":"HdcpProfile","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdcpProfile","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdmiCec","locator":"libWPEFrameworkHdmiCec.so","classname":"HdmiCec","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdmiCec","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Monitor","locator":"libWPEFrameworkMonitor.so","classname":"Monitor","autostart":true,"configuration":{
  "observables":[
   {
    "callsign":"UX",
    "memory":5,
    "memorylimit":null,
    "operational":1,
    "restart":{
# curl http://127.0.0.1:9998/Service/Controller
{"plugins":[{"callsign":"ActivityMonitor","locator":"libWPEFrameworkActivityMonitor.so","classname":"ActivityMonitor","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"CoPilot","locator":"libWPEFrameworkCoPilot.so","classname":"CoPilot","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Controller","classname":"Controller","configuration":{
    "subsystems":[
     "Decryption",
     "Location",
     "Time",
     "Internet"
    ],
    "resumes":null
   }
,"state":"activated","processedrequests":4,"processedobjects":0,"observers":0},{"callsign":"DeviceDiagnostics","locator":"libWPEFrameworkDeviceDiagnostics.so","classname":"DeviceDiagnostics","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceDiagnostics","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DeviceInfo","locator":"libWPEFrameworkDeviceInfo.so","classname":"DeviceInfo","autostart":true,"state":"activated","processedrequests":1,"processedobjects":0,"observers":0,"module":"Plugin_DeviceInfo","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"DeviceProvisioning","locator":"libWPEFrameworkDeviceProvisioning.so","classname":"DeviceProvisioning","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceProvisioning","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DisplaySettings","locator":"libWPEFrameworkDisplaySettings.so","classname":"DisplaySettings","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DisplaySettings","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrameRate","locator":"libWPEFrameworkFrameRate.so","classname":"FrameRate","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrameRate","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrontPanel","locator":"libWPEFrameworkFrontPanel.so","classname":"FrontPanel","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrontPanel","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdcpProfile","locator":"libWPEFrameworkHdcpProfile.so","classname":"HdcpProfile","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdcpProfile","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdmiCec","locator":"libWPEFrameworkHdmiCec.so","classname":"HdmiCec","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdmiCec","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Monitor","locator":"libWPEFrameworkMonitor.so","classname":"Monitor","autostart":true,"configuration":{
  "observables":[
   {
    "callsign":"UX",
    "memory":5,
    "memorylimit":null,
    "operational":1,
    "restart":{
     "memory":{
      "window":0,
      "limit":0
     },
     "operational":{
      "window":60,
      "limit":3
     }
    }
   },
   {
    "callsign":"OCDM",
    "operational":1,
    "restart":{
     "operational":{
      "window":60,
      "limit":3
     }
    }
   }
  ]
 }
,"state":"activated","processedrequests":2,"processedobjects":0,"observers":0,"module":"Plugin_Monitor","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"OCDM","locator":"libWPEFrameworkOCDM.so","classname":"OCDM","autostart":true,"precondition":["Provisioning"],"configuration":{
  "systems":[
   {
    "name":"PlayReady",
    "designators":[
     "com.youtube.playready",
     "com.microsoft.playready",
     "com.netflix.playready"
    ],
    "configuration":{
     "read-dir":"/opt/drm/playready",
     "store-location":"/opt/drm/playready/drmstore.dat"
    }
   },
   {
    "name":"WideVine",
    "designators":[
     "com.widevine.alpha"
    ]
   }
  ],
  "root":{
   "outofprocess":true
  }
 }
,"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_OCDM","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"SleepTimer","locator":"libWPEFrameworkSleepTimer.so","classname":"SleepTimer","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"SleepTimer","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"SystemdConnector","locator":"libWPEFrameworkSystemdConnector.so","classname":"SystemdConnector","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_SystemdConnector","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"TTSResource","locator":"libWPEFrameworkTTSResource.so","classname":"TTSResource","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSResource","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TTSSessionService","locator":"libWPEFrameworkTTSSessionService.so","classname":"TTSSessionService","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSSessionService","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TTSSettings","locator":"libWPEFrameworkTTSSettings.so","classname":"TTSSettings","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSSettings","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TraceControl","locator":"libWPEFrameworkTraceControl.so","classname":"TraceControl","autostart":true,"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_TraceControl","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"Warehouse","locator":"libWPEFrameworkWarehouse.so","classname":"Warehouse","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Warehouse","hash":"engineering_build_for_debug_purpose_only"}],"channel":[{"remote":"localhost.localdomain:48983","state":"WebServer","activity":true,"id":2},{"remote":"localhost.localdomain:48984","state":"WebServer","activity":true,"id":3},{"remote":"localhost.localdomain:48986","state":"WebServer","activity":true,"id":4}],"server":{"threads":[651,672,682,677],"pending":0,"occupation":1}}

Local machine example

Code Block
themeMidnight
collapsetrue
curl http://127.0.0.1:9000/Service/Controller
{"plugins":[{"callsign":"ActivityMonitor","locator":"libWPEFrameworkActivityMonitor.so","classname":"ActivityMonitor","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"CoPilot","locator":"libWPEFrameworkCoPilot.so","classname":"CoPilot","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"CoPilot","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Controller","classname":"Controller","configuration":{
    "subsystems":[
     "Decryption",
     "Location",
     "Time",
     "Internet"
    ],
    "resumes":null
   }
,"state":"activated","processedrequests":5,"processedobjects":0,"observers":0},{"callsign":"DeviceDiagnostics","locator":"libWPEFrameworkDeviceDiagnostics.so","classname":"DeviceDiagnostics","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceDiagnostics","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DeviceInfo","locator":"libWPEFrameworkDeviceInfo.so","classname":"DeviceInfo","autostart":true,"state":"activated","processedrequests":1,"processedobjects":0,"observers":0,"module":"Plugin_DeviceInfo","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"DeviceProvisioning","locator":"libWPEFrameworkDeviceProvisioning.so","classname":"DeviceProvisioning","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DeviceProvisioning","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"DisplaySettings","locator":"libWPEFrameworkDisplaySettings.so","classname":"DisplaySettings","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"DisplaySettings","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrameRate","locator":"libWPEFrameworkFrameRate.so","classname":"FrameRate","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrameRate","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"FrontPanel","locator":"libWPEFrameworkFrontPanel.so","classname":"FrontPanel","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"FrontPanel","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdcpProfile","locator":"libWPEFrameworkHdcpProfile.so","classname":"HdcpProfile","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdcpProfile","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"HdmiCec","locator":"libWPEFrameworkHdmiCec.so","classname":"HdmiCec","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"HdmiCec","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"Monitor","locator":"libWPEFrameworkMonitor.so","classname":"Monitor","autostart":true,"configuration":{
  "observables":[
   {
    "callsign":"UX",
    "memory":5,
    "memorylimit":null,
    "operational":1,
    "restart":{
     "memory":{
      "window":0,
      "limit":0
     },
     "operational":{
      "window":60,
      "limit":3
     }
    }
   },
   {
    "callsign":"OCDM",
    "operational":1,
    "restart":{
     "operational":{
      "window":60,
      "limit":3
     }
    }
   }
  ]
 }
,"state":"activated","processedrequests":2,"processedobjects":0,"observers":0,"module":"Plugin_Monitor","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"OCDM","locator":"libWPEFrameworkOCDM.so","classname":"OCDM","autostart":true,"precondition":["Provisioning"],"configuration":{
  "systems":[
   {
    "name":"PlayReady",
    "designators":[
     "com.youtube.playready",
     "com.microsoft.playready",
     "com.netflix.playready"
    ],
    "configuration":{
     "read-dir":"/opt/drm/playready",
     "store-location":"/opt/drm/playready/drmstore.dat"
    }
   },
   {
    "name":"WideVine",
    "designators":[
     "com.widevine.alpha"
    ]
   }
  ],
  "root":{
   "outofprocess":true
  }
 }
,"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_OCDM","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"SleepTimer","locator":"libWPEFrameworkSleepTimer.so","classname":"SleepTimer","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"SleepTimer","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"SystemdConnector","locator":"libWPEFrameworkSystemdConnector.so","classname":"SystemdConnector","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_SystemdConnector","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"TTSResource","locator":"libWPEFrameworkTTSResource.so","classname":"TTSResource","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSResource","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TTSSessionService","locator":"libWPEFrameworkTTSSessionService.so","classname":"TTSSessionService","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSSessionService","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TTSSettings","locator":"libWPEFrameworkTTSSettings.so","classname":"TTSSettings","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"TTSSettings","hash":"engineering_build_for_debug_purpose_only"},{"callsign":"TraceControl","locator":"libWPEFrameworkTraceControl.so","classname":"TraceControl","autostart":true,"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Plugin_TraceControl","hash":"8e91331a4ac0191264a9523a3ab9a04c0435f700"},{"callsign":"Warehouse","locator":"libWPEFrameworkWarehouse.so","classname":"Warehouse","autostart":true,"precondition":["Platform"],"state":"activated","processedrequests":0,"processedobjects":0,"observers":0,"module":"Warehouse","hash":"engineering_build_for_debug_purpose_only"}],"channel":[{"remote":"localhost.localdomain:48983","state":"WebServer","activity":true,"id":2},{"remote":"localhost.localdomain:48984","state":"WebServer","activity":true,"id":3},{"remote":"localhost.localdomain:48986","state":"WebServer","activity":true,"id":4},{"remote":"localhost.localdomain:48987","state":"WebServer","activity":true,"id":5}],"server":{"threads":[665,688,699,695],"pending":0,"occupation":1}}

Postman example

Image Added


Send JSON RPC request to the Thunder

BOX example

Code Block
languagebash
themeMidnight
curl -X POST http://127.0.0.1:9998/Service/ -d '{"jsonrpc": "2.0", "id": 1234567890, "method": "DisplaySettings.1.getConnectedVideoDisplays"}'

...


{"jsonrpc":"2.0","id":1234567890,"result":{"connectedVideoDisplays":["HDMI0"],"success":true}}

Local machine example

Code Block
languagebash
themeMidnight
curl -X POST http://127.0.0.1:9000/Service/ -d '{"jsonrpc": "2.0", "id": 1234567890, "method": "DisplaySettings.1.getConnectedVideoDisplays"}'

...


{"jsonrpc":"2.0","id":1234567890,"result":{"connectedVideoDisplays":["HDMI0"],"success":true}}

Postman example

...

Image Added


Sending/Receiving message with Browser WebSocket Client

  1. Make sure that you have SSH enabled, and redirected ports (look above in this page)
  2. From chrome extenstion download "Browser WebSocket Client"
  3. URL and Protocol can be taken from "thunder-wifimanager-test.js", when creating this instruction it was:

    Code Block
    ws =

...

  1.  new WebSocket('ws://localhost:9998/jsonrpc', 'notification');


  2. Going with this example our URL should be 'ws://localhost:9000/jsonrpc' (NOTICE: port is different as we redirected it before), and Protocol should be 'notification'. All those fields should not have [ ' ] characters.

  3. Now we can register to get some message, In Send a Message field just paste request, i.e.


    Code Block
    {

...

  1. 
        "jsonrpc": "2.0",

...

  1. 
        "id":

...

  1.  123123123,

...

  1. 
        "method": "Controller.1.register",

...

  1. 
        "params": {

...

  1. 
            "event": "all",

...

  1. 
            "id": "client.events.1"

...

  1. 
        }

...

  1. 
    }


    and press Send. In reveived Messages should be shown response.

  2. Then we can check if we will get new message if registered even appeard. We can do it be i.e.


    Code Block
    {

...

  1. 
        "jsonrpc": "2.0",

...

  1. 
        "id":

...

  1.  1234567890,

...

  1. 
        "method": "Controller.1.deactivate",

...

  1. 
        "params": {

...

  1. 
            "callsign": "DeviceInfo"

...

  1. 
        }

...

  1. 
    }


    We should get 2 messages. One about success of this operation and second about event that we are registered.

Getting events from desired service

To get event from specific service we need to set service name and event that we want to catch. So if we want i.e. get from HomeNetworking, get event deviceDiscoveryUpdate. We need to

Code Block
{

...


    "jsonrpc": "2.0",

...


    "id":

...

 123123123,

...


    "method": "org.rdk.HomeNetworking.1.register",

...


    "params": {

...


        "event": "deviceDiscoveryUpdate",

...


        "id": "client.events.1"

...


    }

...


}

Important: name of service can be different on the box (here "org.rdk." was prefixed) to check how service is called in the box use command:

Code Block
curl --location --request

...

 GET 'http://127.0.0.1:9998/Service/Controller' | json_reformat

There you can find all services.