About Supporting Vendor Devices
Oracle Communications Unified Assurance is designed to monitor, discover, and manage a diverse ecosystem of network and communication devices from various vendors. This chapter provides guidance on enabling support for vendor-specific devices within Unified Assurance by leveraging SNMP object models, MIBs, and ACOM files.
About Supporting Sonus Devices
Sonus Session Border Controller (SBC) devices feature two primary types of ports:
-
Management Port: Used for administrative tasks such as device configuration, software upgrades, and monitoring.
-
Packet Port: Used to handle input and output of regular network traffic, including VoIP, signaling, and media streams across IP networks.
You can monitor the availability of these two ports using two distinct SNMP objects, each with its own Object Identifier (OID). SNMP object sonusEthernetPortPacketPortStatusLinkState with OID .1.3.6.1.4.1.2879.2.10.4.1.1.5 provides the state of the Packet port and sonusEthernetPortMgmtPortStatusTable object with OID .1.3.6.1.4.1.2879.2.10.4.3.1.6 provides the state of the Management port. Both objects are available in the SONUS-PORT MIB.
Naming conventions, processors in use, and other metadata captured during device discovery and polling are defined in the sonus-ACOM.json file. You can access it in the Rules UI at the following location:
Core Rules (core)/Default read-write branch (default)/collection/metric/snmp/_objects/acom/sonus-ACOM.json
Unlike network interfaces discovered through IF-MIB, Sonus ports do not appear on the Network Details panel of Device Overview dashboards. Instead, you add them to the Graph database so that the Graph Sink microservice picks them up, and you can see them in Graph dashboards.
To add the vertex types and edge types along with the vertex constraints to the Graph database:
-
On the Unified Assurance server with the Database.Graph role, switch to the assure1 user:
su - assure1 -
Open the command line interface for the Graph database by running the following command:
a1neo4j -
Run the following cypher queries:
OPTIONAL MATCH (n:VertexTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:VertexTypes { _id: randomUUID(), TypeID: nextID, Name: 'SonusEthernetPacketPort', Icon: 'fugue/network-ethernet.png' }) RETURN newNode; OPTIONAL MATCH (n:VertexTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:VertexTypes { _id: randomUUID(), TypeID: nextID, Name: 'SonusEthernetMgmtPort', Icon: 'fugue/network-ethernet.png' }) RETURN newNode; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n._id) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n._type) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n.DeviceName) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n.Name) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n.TimestampModified) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n.ZoneID) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE n._id IS UNIQUE; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetPacketPort) REQUIRE (n.Name, n.DeviceName, n.ZoneID) IS NODE KEY; CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetPacketPort) ON (n._type); CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetPacketPort) ON (n.DeviceName, n.ZoneID); CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetPacketPort) ON (n.TimestampModified); CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n._id) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n._type) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n.DeviceName) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n.Name) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n.TimestampModified) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n.ZoneID) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE n._id IS UNIQUE; CREATE CONSTRAINT IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) REQUIRE (n.Name, n.DeviceName, n.ZoneID) IS NODE KEY; CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) ON (n._type); CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) ON (n.DeviceName, n.ZoneID); CREATE RANGE INDEX IF NOT EXISTS FOR (n:SonusEthernetMgmtPort) ON (n.TimestampModified); OPTIONAL MATCH (n:EdgeTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:EdgeTypes { _id: randomUUID(), TypeID: nextID, Name: 'HasSonusEthernetPacketPort', LineStyle: 'Solid', Direction: 'Directed' }) RETURN newNode; OPTIONAL MATCH (n:EdgeTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:EdgeTypes { _id: randomUUID(), TypeID: nextID, Name: 'HasSonusEthernetMgmtPort', LineStyle: 'Solid', Direction: 'Directed' }) RETURN newNode; CREATE CONSTRAINT IF NOT EXISTS FOR ()-[n:HasSonusEthernetPacketPort]-() REQUIRE (n._id) IS NOT NULL; CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetPacketPort]-() ON (n._id); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetPacketPort]-() ON (n.Name); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetPacketPort]-() ON (n._source); CREATE CONSTRAINT IF NOT EXISTS FOR ()-[n:HasSonusEthernetMgmtPort]-() REQUIRE (n._id) IS NOT NULL; CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetMgmtPort]-() ON (n._id); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetMgmtPort]-() ON (n.Name); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasSonusEthernetMgmtPort]-() ON (n._source); -
Restart all the pods for the Graph Sink microservice by running the following command:
a1k rollout restart deployment graph-sink -n <namespace> -
Validate if the Vertex Types and Edge Types have been created correctly from the Vertex Types and Edge Types UI.
To open the Vertex Types and Edge Types UI, from the main navigation menu, select Configuration, then Graph, and then Vertex Types or Edge Types.
Note:
The default discovery process does not automatically construct connections between Sonus devices through Sonus ports. You need to write a custom rules file and add it to collection/topology/inventory in the Rules UI to make connections between the devices by creating a ConnectsLayer2 edge.
About Supporting Frequentis Devices
The availability status of hardware interfaces (HwInterfaces) on Frequentis devices is monitored using two SNMP objects from the FREQUENTIS-GENERIC-HARDWAREINFO-MIB. The administrative status is provided by the hwInterfaceStateAdmin object with OID 1.3.6.1.4.1.3043.6.3.2.2.10.1.5, while the operational status is provided by the hwInterfaceStateOper object with OID 1.3.6.1.4.1.3043.6.3.2.2.10.1.6.
The hardware interfaces for Frequentis devices can have non-unique names. For these devices, the SNMP Poller uses a set processor with three fields to generate the unique interface names that are stored in the Graph database in the following format: <hwInterfaceName> (<hwInterfaceId>/<hwInterfaceModuleId>)
For example, the device returns the following interface information:
{ "hwInterfaceId": 1,
"hwInterfaceModuleId": 10,
"hwInterfaceName": "Line Analog"
}
In this case, the generated interface name would be Line Analog (1/10). For more information on the naming convention, processors in use, and other metadata captured during device discovery and polling, refer to the frequentis-ACOM.json file. You can access it in the Rules UI at the following location:
Core Rules (core)/Default read-only branch (RO_LOCKED)/collection/metric/snmp/_objects/acom/frequentis-1-ACOM.json
Unlike other interfaces, Frequentis hardware interfaces do not appear on the Network Details panel of Device Overview dashboards. You can see them in Graph dashboards.
Before initiating discovery and monitoring, you must add vertex types and edge types specific to the devices you want to monitor to the Graph database along with vertex constraints.
To add the vertex types and edge types along with the vertex constraints to the Graph database:
-
On the Unified Assurance server with the Database.Graph role, switch to the assure1 user:
su - assure1 -
Open the command line interface for the Graph database by running the following command:
a1neo4j -
Run the following cypher queries:
OPTIONAL MATCH (n:VertexTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:VertexTypes { _id: randomUUID(), TypeID: nextID, Name: 'HwInterface', Icon: 'fugue/network-ethernet.png' }) RETURN newNode; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n._id) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n._type) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n.DeviceName) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n.Name) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n.TimestampModified) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n.ZoneID) IS NOT NULL; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE n._id IS UNIQUE; CREATE CONSTRAINT IF NOT EXISTS FOR (n:HwInterface) REQUIRE (n.Name, n.DeviceName, n.ZoneID) IS NODE KEY; CREATE RANGE INDEX IF NOT EXISTS FOR (n:HwInterface) ON (n._type); CREATE RANGE INDEX IF NOT EXISTS FOR (n:HwInterface) ON (n.DeviceName, n.ZoneID); CREATE RANGE INDEX IF NOT EXISTS FOR (n:HwInterface) ON (n.TimestampModified); OPTIONAL MATCH (n:EdgeTypes) WITH COALESCE(MAX(n.TypeID), 0) AS currentMax WITH (CASE WHEN currentMax < 999 THEN 999 ELSE currentMax END) + 1 AS nextID CREATE (newNode:META:EdgeTypes { _id: randomUUID(), TypeID: nextID, Name: 'HasHwInterface', LineStyle: 'Solid', Direction: 'Directed' }) RETURN newNode; CREATE CONSTRAINT IF NOT EXISTS FOR ()-[n:HasHwInterface]-() REQUIRE (n._id) IS NOT NULL; CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasHwInterface]-() ON (n._id); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasHwInterface]-() ON (n.Name); CREATE RANGE INDEX IF NOT EXISTS FOR ()-[n:HasHwInterface]-() ON (n._source); -
Restart all the pods for the Graph Sink microservice by running the following command:
a1k rollout restart deployment graph-sink -n <namespace> -
Validate if the Vertex Types and Edge Types have been created correctly from the Vertex Types and Edge Types UI.
To open the Vertex Types and Edge Types UI, from the main navigation menu, select Configuration, then Graph, and then Vertex Types or Edge Types.