Objective

Typically network-functions supporting NetConf Callhome do not support at the same time the VES event 'pnfRegistration'. In order to inform the µServices within the SMO, a functionality at OAM-Controller level should be implemented. This function should send a VES pnfRegistration event to the VES-Collector when a new NetConf Server, which is part of the callhome-allowed-devices list inside the OAM-Controller, sends a Callhome message and a new mount-point is created.

As the OAM controller is listening to VES.pnfRegistration to establish NetConf sessions for "O-RAN O1 nodes" the VES:pnfRegistration invoked by the OAM-Controller must be ignored.


Sequence Diagram

NetConf/Callhome to VES-PNF-RegistrationOpenDaylight Aluminium SSH only User space SMO O-RU Operator Operator Message-Router Message-Router VES-Collector VES-Collector OAM-Controller OAM-Controller NetConf-Server-OFH NetConf-Server-OFH init [01]SET NetConfServer params for CallhomeOAM-Controller listen on port 6666 [02]GET publicKeyOpenSSH Public Key format - as specified in RFC4253 [03]SET allowed devices with publicKeyOpenSSH Public Key format - as specified in RFC4253 loop[Listen to pnfRegistration] [04]VES subscription use case [05]NETCONF Callhome SSH [06]NETCONF <hello/>Exchange capabilitiesincluding YANG modules for OpenFronthaul [07]create mount pointin network-topology=topology-netconf [08]VES:domain=notificationNetConf connection statuschanged to "connected" [09]publish event if mount-point:node-id is in "allowed devices" [10]GET ietf-hardware/componentsThe first item in the list is usedfor mapping into VES:pnfRegistration event. [11]response of first item [12]map ietf-hardware/component[not(parent)][1]into VES:pnfRegistration (see below) [13]VES:domain=pnfRegistrationwith 'reporter=OAM-Controller-id' [14]publish event [15]fetch pnfRegistration if 'reporter=OAM-Controller-id' [16]ignore!!! if <create-subscription/> supported [17]NETCONF Notification SubscriptionThanks to PlantUml!License: Apache 2.02021-02-06 | o-ran-sc.org


Implementation

It is assumed that the existing "MountPoint-Registrar" functionality could be enhanced.

Please note that the ODL version Aluminum does not support NetConf Callhome via TLS. It should be checked, if the OpenDaylitght version Silicon (R0 March 2021) could be used instead.

Mapping to VES pnfRegistration fields

The following mapping table bases on the capabilities of OpenDaylight version Aluminum and maps them to the VES 7.2 fields for domain 'pnfRegistration'.



(under discussion)

A couple of VES fields needs to be filled with values from a an Ietf:hardare/compoenent which does not have the leaf "parent". I more than one competent would not have the leaf "parent" then the first component should be used for such fields (e.g. manufacture name). 

VES:commonEventHeader

implementation of OpenDaylight Aluminium (link)

domain

Static text "pnfRegistration"

eventId

Value of 'nt:network-topology/nt:topology/nt:node/nt:node-id'.

eventName

Value of 'nt:network-topology/nt:topology/nt:node/nt:node-id'.

eventType

Static text: "NetConf Callhome Registration"

internalHeaderFields

not mapped

lastEpochMicrosec

Time of OAM-Controller

nfcNamingCode

always ""

nfNamingCode

always ""

nfVendorName

The value of ietf-hardware (RFC8348) /hardware/component[1]/mfg-name or empty string if not found. 

Under discussion: how to identify the "root" component?

priority

Static text "Normal"

reportingEntityId

The OAM-Controller identifier with in the SMO - e.g. the fully qualified domain name or IP-Address.
If a VES:pnfRegistration event is fetched from the Message-Router, then this VES:pnfRegistration event must not processed and must be ignored, avoiding double registration by NetConf Callhome and VES:pnfRegistration

reportingEntityName

as configured by helm charts for the OpenDaylight cluster name

sequence

As per NetConf notification increasing sequence number as unsigned integer 32 bits. The value is reused in the eventId field.

sourceId

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/uuid or 'nt:network-topology/nt:topology/nt:node/nt:node-id' if ietf component not found.

sourceName

Value of 'nt:network-topology/nt:topology/nt:node/nt:node-id'.

startEpochMicrosec

Current OAM-Controller Node timestamp in unix time format - as microseconds elapsed since 1 Jan 1970 not including leap seconds.
Q: is it possbile to read a timestemp from the NetConf Callhome message?

timeZoneOffset

Static text: "+00:00" - Please note, the time format in all related OAM controller times is in UTC time format - a mapping to other time formats happens in presentation layer only (e.g. on user settings, bowser settings, ...)

version

Static text: "4.1"

vesEventListenerVersion

Static text "7.2"

VES:pnfRegistrationFields


If an ieft-hardware component is not identified for the mapping into VES:pnfRegistrationFields or a and optional leaf is not provided, then the VES:pnfRegistrationFields should be part of the message with its default value (e.g. empty string "") 

The ietf-hardware component must not have the 'parent' leaf.

additionalFields

not mapped
Note: a mapping of NetConf ports, and NetConf credentials are not required. 

In case a fully qualified domain name is used by the O-RU, then the oamFqdn should be added here, The fields 'ves:oamV4IpAddress' and 'oamV6IpAddress' would be not in such ves.pnfRegistration message.   Note: such use case is not expected for 2021.

lastServiceDate

Value of ietf-hardware (RFC8348) /hardware/last-change  or "1970-01-01T00:00:00z" if not found. 

macAddress

not mapped

manufactureDate

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/mfg-date or empty string if not found. 

modelNumber

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/model-name or empty string if not found. 

oamV4IpAddress

Value of 'nt:network-topology/nt:topology/nt:node/nt:host', IF in IPv4 format otherwise an empty string

oamV6IpAddress

Value of 'nt:network-topology/nt:topology/nt:node/nt:host', IF in IPv6 format. otherwise an empty string

pnfRegistrationFieldsVersion

Static text: "2.0"

serialNumber

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/serial-num  or empty string if not found. 

softwareVersion

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/software-rev or empty string if not found. 

unitFamily

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/alias or empty string if not found. 

unitType

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/class or empty string if not found. 

vendorName

Value of ietf-hardware (RFC8348) /hardware/component[not(parent)][1]/mfg-name or empty string if not found. 

  • No labels