| /* |
| * Copyright 2018-present Open Networking Foundation |
| |
| * 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. |
| */ |
| |
| //Package common provides global definitions |
| package common |
| |
| import ( |
| "context" |
| "sync" |
| "time" |
| |
| gp "github.com/google/gopacket" |
| "github.com/looplab/fsm" |
| "github.com/opencord/omci-lib-go/v2" |
| vc "github.com/opencord/voltha-protos/v5/go/common" |
| ofp "github.com/opencord/voltha-protos/v5/go/openflow_13" |
| "github.com/opencord/voltha-protos/v5/go/voltha" |
| ) |
| |
| // MessageType - Message Protocol Type |
| type MessageType uint8 |
| |
| const ( |
| // TestMsg - Message type for non OMCI messages |
| TestMsg MessageType = iota |
| //OMCI - OMCI protocol type msg |
| OMCI |
| ) |
| |
| // String - Return the text representation of the message type based on integer |
| func (m MessageType) String() string { |
| names := [...]string{ |
| "TestMsg", |
| "OMCI", |
| } |
| return names[m] |
| } |
| |
| // Message - message type and data(OMCI) |
| type Message struct { |
| Type MessageType |
| Data interface{} |
| } |
| |
| //TestMessageType - message data for various events |
| type TestMessageType uint8 |
| |
| const ( |
| // LoadMibTemplateOk - message data for getting mib template successfully |
| LoadMibTemplateOk TestMessageType = iota + 1 |
| // LoadMibTemplateFailed - message data for failure for getting mib template |
| LoadMibTemplateFailed |
| // TimeOutOccurred - message data for timeout |
| TimeOutOccurred |
| // AbortMessageProcessing - message data for aborting running message |
| AbortMessageProcessing |
| ) |
| |
| //TestMessage - Struct to hold the message data |
| //TODO: place holder to have a second interface variant - to be replaced by real variant later on |
| type TestMessage struct { |
| TestMessageVal TestMessageType |
| } |
| |
| //OmciMessage - OMCI protocol messages for managing and monitoring ONUs |
| type OmciMessage struct { |
| //OnuSN *openolt.SerialNumber |
| //OnuID uint32 |
| OmciMsg *omci.OMCI |
| OmciPacket *gp.Packet |
| } |
| |
| /////////////////////////////////////////////////////////// |
| |
| // device reasons |
| const ( |
| DrUnset = 0 |
| DrActivatingOnu = 1 |
| DrStartingOpenomci = 2 |
| DrDiscoveryMibsyncComplete = 3 |
| DrInitialMibDownloaded = 4 |
| DrTechProfileConfigDownloadSuccess = 5 |
| DrOmciFlowsPushed = 6 |
| DrOmciAdminLock = 7 |
| DrOnuReenabled = 8 |
| DrStoppingOpenomci = 9 |
| DrRebooting = 10 |
| DrOmciFlowsDeleted = 11 |
| DrTechProfileConfigDeleteSuccess = 12 |
| DrReconcileFailed = 13 |
| DrReconcileMaxTimeout = 14 |
| DrReconcileCanceled = 15 |
| DrTechProfileConfigDownloadFailed = 16 |
| ) |
| |
| // DeviceReasonMap holds device reason strings |
| var DeviceReasonMap = map[uint8]string{ |
| DrUnset: "unset", |
| DrActivatingOnu: "activating-onu", |
| DrStartingOpenomci: "starting-openomci", |
| DrDiscoveryMibsyncComplete: "discovery-mibsync-complete", |
| DrInitialMibDownloaded: "initial-mib-downloaded", |
| DrTechProfileConfigDownloadSuccess: "tech-profile-config-download-success", |
| DrTechProfileConfigDownloadFailed: "tech-profile-config-download-failed", |
| DrOmciFlowsPushed: "omci-flows-pushed", |
| DrOmciAdminLock: "omci-admin-lock", |
| DrOnuReenabled: "onu-reenabled", |
| DrStoppingOpenomci: "stopping-openomci", |
| DrRebooting: "rebooting", |
| DrOmciFlowsDeleted: "omci-flows-deleted", |
| DrTechProfileConfigDeleteSuccess: "tech-profile-config-delete-success", |
| DrReconcileFailed: "reconcile-failed", |
| DrReconcileMaxTimeout: "reconcile-max-timeout", |
| DrReconcileCanceled: "reconciling-canceled", |
| } |
| |
| // UsedOmciConfigFsms type for FSMs dealing with OMCI messages |
| type UsedOmciConfigFsms int |
| |
| // FSMs dealing with OMCI messages |
| const ( |
| CUploadFsm UsedOmciConfigFsms = iota |
| CDownloadFsm |
| CUniLockFsm |
| CUniUnLockFsm |
| CAniConfigFsm |
| CUniVlanConfigFsm |
| CL2PmFsm |
| COnuUpgradeFsm |
| ) |
| |
| // OnuDeviceEvent - TODO: add comment |
| type OnuDeviceEvent int |
| |
| // Events of interest to Device Adapters and OpenOMCI State Machines |
| const ( |
| // DeviceStatusInit - default start state |
| DeviceStatusInit OnuDeviceEvent = iota |
| // MibDatabaseSync - MIB database sync (upload done) |
| MibDatabaseSync |
| // OmciCapabilitiesDone - OMCI ME and message type capabilities known |
| OmciCapabilitiesDone |
| // MibDownloadDone - // MIB download done |
| MibDownloadDone |
| // UniLockStateDone - Uni ports admin set to lock |
| UniLockStateDone |
| // UniUnlockStateDone - Uni ports admin set to unlock |
| UniUnlockStateDone |
| // UniDisableStateDone - Uni ports admin set to lock based on device disable |
| UniDisableStateDone |
| // UniEnableStateDone - Uni ports admin set to unlock based on device re-enable |
| UniEnableStateDone |
| // UniEnableStateFailed - Uni ports admin set to unlock failure based on device re-enable |
| UniEnableStateFailed |
| // PortLinkUp - Port link state change |
| PortLinkUp |
| // PortLinkDw - Port link state change |
| PortLinkDw |
| // OmciAniConfigDone - AniSide config according to TechProfile done |
| OmciAniConfigDone |
| // OmciAniResourceRemoved - AniSide TechProfile related resource (Gem/TCont) removed |
| OmciAniResourceRemoved // needs to be the successor of OmciAniConfigDone! |
| // OmciVlanFilterAddDone - Omci Vlan config done according to flow-add with request to write kvStore |
| OmciVlanFilterAddDone |
| // OmciVlanFilterAddDoneNoKvStore - Omci Vlan config done according to flow-add without writing kvStore |
| OmciVlanFilterAddDoneNoKvStore // needs to be the successor of OmciVlanFilterAddDone! |
| // OmciVlanFilterRemDone - Omci Vlan config done according to flow-remove with request to write kvStore |
| OmciVlanFilterRemDone // needs to be the successor of OmciVlanFilterAddDoneNoKvStore! |
| // OmciVlanFilterRemDoneNoKvStore - Omci Vlan config done according to flow-remove without writing kvStore |
| OmciVlanFilterRemDoneNoKvStore // needs to be the successor of OmciVlanFilterRemDone! |
| // OmciOnuSwUpgradeDone - SoftwareUpgrade to ONU finished |
| OmciOnuSwUpgradeDone |
| // Add other events here as needed (alarms separate???) |
| ) |
| |
| /////////////////////////////////////////////////////////// |
| |
| //definitions as per G.988 softwareImage::valid ME IDs |
| const ( |
| FirstSwImageMeID = 0 |
| SecondSwImageMeID = 1 |
| ) |
| |
| //definitions as per G.988 softwareImage::IsCommitted |
| const ( |
| SwIsUncommitted = 0 |
| SwIsCommitted = 1 |
| ) |
| |
| //definitions as per G.988 softwareImage::IsActive |
| const ( |
| SwIsInactive = 0 |
| SwIsActive = 1 |
| ) |
| |
| //definitions as per G.988 softwareImage::IsValid |
| const ( |
| SwIsInvalid = 0 |
| SwIsValid = 1 |
| ) |
| |
| // SEntrySwImageIndication - TODO: add comment |
| type SEntrySwImageIndication struct { |
| Valid bool |
| EntityID uint16 |
| Version string |
| IsCommitted uint8 |
| } |
| |
| // SswImageIndications - TODO: add comment |
| type SswImageIndications struct { |
| ActiveEntityEntry SEntrySwImageIndication |
| InActiveEntityEntry SEntrySwImageIndication |
| } |
| |
| // CGenericManagedEntityIDName - generic name string of attribute "ManagedEntityId" |
| const CGenericManagedEntityIDName = "ManagedEntityId" |
| |
| /////////////////////////////////////////////////////////// |
| |
| type activityDescr struct { |
| DatabaseClass func(context.Context) error |
| //advertiseEvents bool |
| AuditInterval time.Duration |
| //tasks map[string]func() error |
| } |
| |
| // OmciDeviceFsms - FSM event mapping to database class and time to wait between audits |
| type OmciDeviceFsms map[string]activityDescr |
| |
| // AdapterFsm - Adapter FSM details including channel, event and device |
| type AdapterFsm struct { |
| fsmName string |
| deviceID string |
| CommChan chan Message |
| PFsm *fsm.FSM |
| } |
| |
| //CErrWaitAborted - AdapterFsm related error string |
| //error string could be checked on waitforOmciResponse() e.g. to avoid misleading error log |
| // but not used that way so far (permit error log even for wanted cancellation) |
| const CErrWaitAborted = "waitResponse aborted" |
| |
| /////////////////////////////////////////////////////////// |
| |
| // UniPortType holds possible UNI port types |
| type UniPortType uint8 |
| |
| // UniPPTP Interface type - re-use values from G.988 (Chapter 9.3.4) TP type definition (directly used in OMCI!) |
| const ( |
| // UniPPTP relates to PPTP |
| UniPPTP UniPortType = 1 // relates to PPTP |
| // UniVEIP relates to VEIP |
| UniVEIP UniPortType = 11 // relates to VEIP |
| // UniPPTPPots relates to PPTP POTS |
| UniPPTPPots UniPortType = 4 // relates to IP host config data (for Voice Services) |
| ) |
| |
| //OnuUniPort structure holds information about the ONU attached Uni Ports |
| type OnuUniPort struct { |
| Enabled bool |
| Name string |
| PortNo uint32 |
| PortType UniPortType |
| OfpPortNo string |
| UniID uint8 |
| MacBpNo uint8 |
| EntityID uint16 |
| AdminState vc.AdminState_Types |
| OperState vc.OperStatus_Types |
| PPort *voltha.Port |
| } |
| |
| // OnuUniPortMap - TODO: add comment |
| type OnuUniPortMap map[uint32]*OnuUniPort |
| |
| /////////////////////////////////////////////////////////// |
| |
| const ( |
| tpIDStart = 64 |
| tpIDEnd = 256 |
| tpRange = tpIDEnd - tpIDStart |
| maxUni = 256 |
| ) |
| |
| // TODO |
| const ( |
| IeeMaperServiceProfileBaseEID = uint16(0x1001) |
| MacBridgePortAniBaseEID = uint16(0x1001) |
| MacBridgePortUniBaseEID = uint16(0x201) |
| MacBridgePortAniMcastBaseEID = uint16(0xA01) |
| VoipUniBaseEID = uint16(0x2001) |
| GalEthernetEID = uint16(1) |
| MacBridgeServiceProfileEID = uint16(0x201) |
| ) |
| |
| // UniVlanRuleParams - TODO: add comment |
| type UniVlanRuleParams struct { |
| TpID uint8 `json:"tp_id"` |
| MatchVid uint32 `json:"match_vid"` //use uint32 types for allowing immediate bitshifting |
| MatchPcp uint32 `json:"match_pcp"` |
| TagsToRemove uint32 `json:"tags_to_remove"` |
| SetVid uint32 `json:"set_vid"` |
| SetPcp uint32 `json:"set_pcp"` |
| InnerCvlan uint16 `json:"inner_cvlan"` |
| } |
| |
| // UniVlanFlowParams - TODO: add comment |
| type UniVlanFlowParams struct { |
| CookieSlice []uint64 `json:"cookie_slice"` |
| VlanRuleParams UniVlanRuleParams `json:"vlan_rule_params"` |
| Meter *ofp.OfpMeterConfig `json:"flow_meter"` |
| RespChan *chan error `json:"-"` |
| } |
| |
| /////////////////////////////////////////////////////////// |
| |
| //definitions as per G.988 |
| const ( |
| OnuDataMeID = 0 |
| Onu2gMeID = 0 |
| OnugMeID = 0 |
| IPHostConfigDataMeID = 1 |
| OnugSerialNumberLen = 8 |
| OmciMacAddressLen = 6 |
| MdsDefaultMib = 0 |
| ) |
| |
| /////////////////////////////////////////////////////////// |
| |
| // CBasePathOnuKVStore - kv store path of ONU specific data |
| const CBasePathOnuKVStore = "%s/openonu" |
| |
| /////////////////////////////////////////////////////////// |
| |
| //WaitGroupWithTimeOut definitions to have waitGroup functionality with timeout |
| type WaitGroupWithTimeOut struct { |
| sync.WaitGroup |
| } |
| |
| /////////////////////////////////////////////////////////// |
| |
| // event notifications |
| const ( |
| OnuMibAuditFailureMds = "ONU_MIB_AUDIT_FAILURE_MDS" |
| OnuMibAuditFailureMdsDesc = "MIB audit failed due to MDS value mismatch between ONU and adapter" |
| |
| OnuOmciCommunicationFailureConfig = "ONU_OMCI_COMMUNICATION_FAILURE_CONFIG" |
| OnuOmciCommunicationFailureConfigDesc = "OMCI communication during ONU configuration failed" |
| |
| OnuOmciCommunicationAbortConfig = "ONU_OMCI_COMMUNICATION_ABORT_CONFIG" |
| OnuOmciCommunicationAbortConfigDesc = "OMCI communication during ONU configuration aborted - max failures reached: stopping device" |
| |
| OnuOmciCommunicationFailureSwUpgrade = "ONU_OMCI_COMMUNICATION_FAILURE_SW_UPGRADE" |
| OnuOmciCommunicationFailureSwUpgradeDesc = "OMCI communication during ONU SW upgrade failed" |
| |
| OnuOmciCommunicationAbortSwUpgrade = "ONU_OMCI_COMMUNICATION_ABORT_SW_UPGRADE" |
| OnuOmciCommunicationAbortSwUpgradeDesc = "OMCI communication during ONU SW upgrade aborted - max failures reached: stopping device" |
| |
| OnuConfigFailureMissingTcont = "ONU_CONFIG_FAILURE_MISSING_TCONT" |
| OnuConfigFailureMissingTcontDesc = "ONU config failed - no further TCONT resources available at ONU" |
| |
| OnuConfigFailureMissingUsPriorityQueue = "ONU_CONFIG_FAILURE_MISSING_US_PRIORITY_QUEUE" |
| OnuConfigFailureMissingUsPriorityQueueDesc = "ONU config failed - no further upstream PriorityQueue resources available at ONU" |
| ) |