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.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' PlantUML for O-RAN-SC closed loop use case D-release (OAM view) ' ' Copyright 2021 highstreet technologies GmbH ' Licensed under the Apache License, Version 2.0 (the "License"); ' you may not use this file except in compliance with the License. ' You may obtain a copy of the License at ' ' http://www.apache.org/licenses/LICENSE-2.0 ' ' Unless required by applicable law or agreed to in writing, software ' distributed under the License is distributed on an "AS IS" BASIS, ' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ' See the License for the specific language governing permissions and ' limitations under the License. ' @startuml ' Diagram title NetConf/Callhome to VES-PNF-Registration OpenDaylight Aluminium SSH only end title box "User space" #lightblue actor "Operator" as user end box box "SMO" #gold participant "Message-Router" as mr participant "VES-Collector" as ves participant "OAM-Controller" as oam end box box “O-RU” #lightpink participant "NetConf-Server-OFH" as ncsofh end box autonumber 1 1 "<b>[00]" == init == user -> ncsofh: SET NetConfServer params for Callhome\nOAM-Controller listen on port 6666 user <- ncsofh: GET publicKey\nOpenSSH Public Key format - as specified in RFC4253 user -> oam: SET allowed devices with publicKey\nOpenSSH Public Key format - as specified in RFC4253 loop Listen to pnfRegistration oam -> mr : VES subscription end == use case == ncsofh -> oam: NETCONF Callhome SSH ncsofh <-> oam: NETCONF <hello/> \nExchange capabilities \nincluding YANG modules for OpenFronthaul oam -> oam: create mount point \nin network-topology=topology-netconf oam -> ves : VES:domain=notification \nNetConf connection status \nchanged to "connected" ves -> mr: publish event group if mount-point:node-id is in "allowed devices" oam -> ncsofh: GET ietf-hardware/components\nThe first item in the list is used \nfor mapping into VES:pnfRegistration event. ncsofh -> oam: response of first item oam -> oam: map ietf-hardware/component[not(parent)][1] \ninto VES:pnfRegistration (see below) oam -> ves: VES:domain=pnfRegistration\nwith 'reporter=OAM-Controller-id' ves -> mr: publish event mr -> oam: fetch pnfRegistration group if 'reporter=OAM-Controller-id' oam -> oam: ignore!!! end end group if <create-subscription/> supported oam -> ncsofh: NETCONF Notification Subscription end ' End Diagram ' Format right footer Thanks to PlantUml! License: Apache 2.0 2021-02-06 | o-ran-sc.org end footer skinparam backgroundColor #fefefe skinparam backgroundColor #fefefe 'skinparam handwritten true skinparam roundcorner 15 skinparam database { BorderColor #444444 BackgroundColor #ffffdd FontColor #444444 } skinparam sequence { MessageAlign left ArrowColor #2277dd ArrowFontColor #444444 ArrowThickness 2 ActorBorderColor #444444 LifeLineBorderColor #444444 LifeLineBackgroundColor #eeeeee LifeLineBackgroundColor #eeeeee BoxBorderColor #444444 GroupBorderColor #444444 GroupBackgroundColor #eeeeee ParticipantBorderColor #444444 ParticipantBackgroundColor #ffffdd ParticipantFontColor #444444 ActorBackgroundColor #ffffdd 'ActorFontColor DeepSkyBlue 'ActorFontSize 17 'ActorFontName Aapex } @enduml |
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.
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.