Versions Compared

Key

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


The initial purpose of the USP Controller is to allow USP agent validation and can be expanded to further use cases as required

Table of Contents

USP Agent Configuration with respect to local Oktopus Controller

Supported MTPs: 

  • STOMP: Full Support

...

The above can be saved to a text file and run as follows: 
To build into an image, modify meta-rdk-broadband/recipes-rdkb/usp-pa/usp-pa/conf/usp_factory_reset.conf

USP Agent Onboarding

  • After configuring the UspPa agent and connecting to the oktopus controller in the GUI the new device should appear under Devices with a status of ONLINE
  • Click on the Access the device and then go to Remote Messages page   to perform CRUD operations
  • Read Operation 

...

  • Upate Operation
  • Create Operation
  • del Operation

UspPa commands from CLI

...

 


Message Box
iconsuccess
titleSample Response
typesuccess

# Version
root@RaspberryPi

No Format
#Versionroot@RaspberryPi

-Gateway:~#

UspPa

-c

version


Running

command

on

database

/nvram/usp-pa.db


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


Agent

Version=8.0.3


OpenSSL

Version=OpenSSL

3.0.5

5

Jul

2022


Sqlite

Version=3.31.1


Curl

Version=libcurl/7.82.0

OpenSSL/3.0.5

zlib/1.2.11

libidn2/2.3.2


zlib

Version=1.2.11


libmosquitto

Version=2.0.14


root@RaspberryPi-Gateway:

~# #get 

~# 

# get 
root@RaspberryPi-Gateway:~#

UspPa

-c

get

Device.X_RDK_Ethernet.Link.1.


Device.X_RDK_Ethernet.Link.1.Enable

=>

false


Device.X_RDK_Ethernet.Link.1.Status

=>

Up


Device.X_RDK_Ethernet.Link.1.Alias

=>

WANOE


Device.X_RDK_Ethernet.Link.1.Name

=>

erouter0


Device.X_RDK_Ethernet.Link.1.LowerLayers

=

>


Device.X_RDK_Ethernet.Link.1.X_RDK_BaseInterface

=>

eth0


Device.X_RDK_Ethernet.Link.1.MACAddress

=>

e4:5f:01:d5:3c:13


Device.X_RDK_Ethernet.Link.1.MACAddrOffSet

=>

3


Device.X_RDK_Ethernet.Link.1.PriorityTagging

=>

false


Device.X_RDK_Ethernet.Link.1.X_RDK_Refresh

=>

false


Device.X_RDK_Ethernet.Link.1.X_RDK_MarkingNumberOfEntries

=>

0


root@RaspberryPi-Gateway:

~# #set 

~# 

# set 
root@RaspberryPi-Gateway:~#

UspPa

-c

set

Device.WiFi.SSID.1.SSID

2GHz


Device.WiFi.SSID.1.SSID

=>

2GHz


root@RaspberryPi-Gateway:~#

UspPa

-c

set

Device.WiFi.ApplyAccessPointSettings

true


Device.WiFi.ApplyAccessPointSettings

=>

true


root@RaspberryPi-Gateway:~#

dmcli

eRT

getv

Device.WiFi.SSID.1.

SSID

SSID 
CR

component

name

is:

eRT.com.cisco.spvtg.ccsp.CR


subsystem_prefix

eRT.


Execution

succeed.


Parameter

1

name:

Device.WiFi.SSID.1.SSID


type:

string,

value:

2GHz #instances

2GHz 

# instances
root@RaspberryPi-Gateway:~#

UspPa

-c

instances

Device.Users.User.


Device.Users.User.1


Device.Users.User.2


Device.Users.User.3

#add 

# add 
root@RaspberryPi-Gateway:~#

UspPa

-c

add

Device.Users.User.


Added

Device.Users.User.4


root@RaspberryPi-Gateway:~#

UspPa

-c

instances

Device.Users.User.


Device.Users.User.1


Device.Users.User.2


Device.Users.User.3


Device.Users.User.4

#del 


# del 
root@RaspberryPi-Gateway:~#

UspPa

-c

del

Device.Users.User.4.


Deleted

Device.Users.User.4


root@RaspberryPi-Gateway:~#

UspPa

-c

instances

Device.Users.User.


Device.Users.User.1


Device.Users.User.2


Device.Users.User.3

#dump 

# dump 
root@RaspberryPi-Gateway:~#

UspPa

-c

dump

datamodel

|

head

-n

30

Dumping

DataModel

Schema...


Device.


Device.Boot!


Device.Boot!

event_arg:Cause


Device.Boot!

event_arg:CommandKey


Device.Boot!

event_arg:FirmwareUpdated


Device.Boot!

event_arg:ParameterMap


Device.Bridging.


Device.Bridging.Bridge.{i}.


Device.Bridging.Bridge.{i}.Alias


Device.Bridging.Bridge.{i}.Enable


Device.Bridging.Bridge.{i}.Port.{i}.


Device.Bridging.Bridge.{i}.Port.{i}.AcceptableFrameTypes


Device.Bridging.Bridge.{i}.Port.{i}.Alias


Device.Bridging.Bridge.{i}.Port.{i}.DefaultUserPriority


Device.Bridging.Bridge.{i}.Port.{i}.Enable


Device.Bridging.Bridge.{i}.Port.{i}.IngressFiltering


Device.Bridging.Bridge.{i}.Port.{i}.LastChange


Device.Bridging.Bridge.{i}.Port.{i}.LowerLayers


Device.Bridging.Bridge.{i}.Port.{i}.ManagementPort


Device.Bridging.Bridge.{i}.Port.{i}.Name


Device.Bridging.Bridge.{i}.Port.{i}.PVID


Device.Bridging.Bridge.{i}.Port.{i}.PortState


Device.Bridging.Bridge.{i}.Port.{i}.PriorityRegeneration


Device.Bridging.Bridge.{i}.Port.{i}.PriorityTagging


Device.Bridging.Bridge.{i}.Port.{i}.Stats.


Device.Bridging.Bridge.{i}.Port.{i}.Stats.BroadcastPacketsReceived


Device.Bridging.Bridge.{i}.Port.{i}.Stats.BroadcastPacketsSent


Device.Bridging.Bridge.{i}.Port.{i}.Stats.BytesReceived


root@RaspberryPi-Gateway:

~# #database

~# 

# database
root@RaspberryPi-Gateway:~#

UspPa

-c

show

database


Running

command

on

database

/nvram/usp-pa.db


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


USP_SIGNAL_ObjectAdded

is

being

called

before

data

model

has

been

initialised


Device.LocalAgent.Controller.1.EndpointID

=>

oktopusController


Device.STOMP.Connection.1.Host

=>

192.168.2.11


Device.STOMP.Connection.1.Username

=

>


Device.STOMP.Connection.1.Password

=

>


Device.LocalAgent.MTP.1.Alias

=>

cpe-1


Device.LocalAgent.MTP.1.Enable

=>

true


Device.LocalAgent.MTP.1.Protocol

=>

STOMP


Device.LocalAgent.MTP.1.STOMP.Reference

=>

Device.STOMP.Connection.1


Device.LocalAgent.MTP.1.STOMP.Destination

=

>


Device.LocalAgent.Controller.1.Alias

=>

cpe-1


Device.LocalAgent.Controller.1.Enable

=>

true


Device.LocalAgent.Controller.1.AssignedRole

=>

Device.LocalAgent.ControllerTrust.Role.1

  #dac


 

# dac use case using UspPa by operate command
root@RaspberryPi-Gateway:~#

UspPa

-c

operate

"Device.SoftwareModules.InstallDU(URL=http://192.168.2.165/busybox.tar.gz)"


Asynchronous

Operation

(Device.SoftwareModules.InstallDU())

Started

successfully.


Device.LocalAgent.Request.1

created.


See

log

for

output

arguments

of

operation

root@RaspberryPi-Gateway:~/destination#

UspPa

-c

operate

"Device.SoftwareModules.ExecutionUnit.1.SetRequestedState(RequestedState=Active)"


Synchronous

Operation

(Device.SoftwareModules.ExecutionUnit.1.SetRequestedState())

completed

successfully.


Output

Arguments:-


Ret

=>

"Starting

EU"


root@RaspberryPi-Gateway:~/destination#

DobbyTool

list


descriptor

|

id

|

state


------------|----------------------------------|-------------


734

|

Kn

|

running root@RaspberryPi

running

root@RaspberryPi-Gateway:/var/log#

UspPa

-c

operate

"Device.SoftwareModules.ExecutionUnit.1.SetRequestedState(RequestedState=Idle)"


Synchronous

Operation

(Device.SoftwareModules.ExecutionUnit.1.SetRequestedState())

completed

successfully.


Output

Arguments:-


Ret

=>

"Stopping

EU"

...


 Logs to see the response from Controller

# /usr/bin/UspPa -p -v 4 -r usp_factory_reset.conf

Message Box
iconsuccess
titleSample Response
typesuccess

root@RaspberryPi-Gateway:~# systemctl stop usp-pa               
root@RaspberryPi-Gateway:~# UspPa -p -v 4 -r /etc/usp-pa/usp_factory_reset.conf 
DATABASE_Init: Opening database /nvram/usp-pa.db
LoadClientCert: Not using a device certificate for connections
DM_PRIV_GetNodeFromPath: Path is invalid: Device.DHCPv4.Server.Pool.1.Client.1.IPv4Address.1.
DM_INST_VECTOR_RefreshInstance: Path (Device.DHCPv4.Server.Pool.1.Client.1.IPv4Address.1.) does not exist in the schema
DM_PRIV_GetNodeFromPath: Path is invalid: Device.Hosts.Host.1.IPv4Address.1.
DM_INST_VECTOR_RefreshInstance: Path (Device.Hosts.Host.1.IPv4Address.1.) does not exist in the schema
Attempting to connect to host=192.168.2.11 (ipaddr=192.168.2.11, port=61613, unencrypted) from interface=any
CLI_SERVER_Init: Starting CLI server on /tmp/usp_cli
Connected to 192.168.2.11 (host=192.168.2.11, port=61613) from interface=erouter0
LogNoPasswordWarning: WARNING: No username/password set for connection to (host=192.168.2.11, port=61613)
LogNoPasswordWarning: WARNING: No TLS set for connection to (host=192.168.2.11, port=61613)
Sending STOMP frame to (host=192.168.2.11, port=61613)
STOMP
accept-version:1.2
host:/
heart-beat:30000,300000
endpoint-id:os\c\cFFFFFF-100000007fe11c07


Received CONNECTED frame from (host=192.168.2.11, port=61613)
CONNECTED
version:1.2
server:stompd/1.2
heart-beat:300000,60000
subscribe-dest:oktopus/usp/v1/agent/os\c\cFFFFFF-100000007fe11c07


Sending SUBSCRIBE frame to (host=192.168.2.11, port=61613)
SUBSCRIBE
id:0
destination:oktopus/usp/v1/agent/os\c\cFFFFFF-100000007fe11c07
ack:auto



USP_CONNECT_RECORD sending at time 2024-10-07T05:56:09Z, to host 192.168.2.11 over STOMP
SEND
content-length:107
content-type:application/vnd.bbf.usp.msg
reply-to-dest:oktopus/usp/v1/agent/os\c\cFFFFFF-100000007fe11c07
destination:controller-notify-dest
version: "1.3"
to_id: "oktopusController"
from_id: "os::FFFFFF-100000007fe11c07"
payload_security: PLAINTEXT
mac_signature[0]
sender_cert[0]
stomp_connect {
  version: V1_2
  subscribed_destination: "oktopus/usp/v1/agent/os\c\cFFFFFF-100000007fe11c07"
Sending NotifyRequest (Event for path=Device.LocalAgent.Subscription.1)
}



NOTIFY sending at time 2024-10-07T05:56:09Z, to host 192.168.2.11 over STOMP
SEND
content-length:227
content-type:application/vnd.bbf.usp.msg
reply-to-dest:oktopus/usp/v1/agent/os\c\cFFFFFF-100000007fe11c07
destination:controller-notify-dest
version: "1.3"
to_id: "oktopusController"
from_id: "os::FFFFFF-100000007fe11c07"
payload_security: PLAINTEXT
mac_signature[0]
sender_cert[0]
no_session_context {
  payload[168]
}


header {
  msg_id: "Event-2024-10-07T05:56:09Z-1"
  msg_type: NOTIFY
}
body {
  request {
    notify {
      subscription_id: "default-boot-event-ACS"
Retrying sending notification (retry_count=1) in 8 seconds.
      send_resp: true
      event {
        obj_path: "Device."
        event_name: "Boot!"
        params {
          key: "CommandKey"
          value: ""
        }
        params {
          key: "Cause"
          value: "LocalReboot"
        }
        params {
          key: "FirmwareUpdated"
          value: "false"
        }
        params {
          key: "ParameterMap"
          value: "{}"
        }
      }
    }
  }
}





Known Issue

# If we remove and regenerate the usp_dm_comps.conf, usp_dm_objs.conf and usp_dm_params.conf files, observed below issue 

Message Box
iconsuccess
titleSample Response
typesuccess

root@RaspberryPi-Gateway:~# rm /nvram/usp-pa.db 

root@RaspberryPi-Gateway:~# rm /etc/usp-pa/usp_dm_*

root@RaspberryPi-Gateway:~# systemctl restart usp-pa

root@RaspberryPi-Gateway:~# UspPa -p -v 4 -r /etc/usp-pa/usp_factory_reset.conf 

DATABASE_Init: Opening database /nvram/usp-pa.db

DM_PRIV_AddSchemaPath: Path Device.SoftwareModules.ExecEnv.{i} already exists in schema

USP Agent aborted unexpectedly

root@RaspberryPi-Gateway:~# 


→ To resolve this issue , remove all Device.SoftwareModules.ExecEnv. lines from 

usp_dm_objs.conf and usp_dm_params.conf 

→ Remove /nvram/usp-pa.db and restart the service to communicate with controller