Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 1 | /* |
Brian O'Connor | a09fe5b | 2017-08-03 21:12:30 -0700 | [diff] [blame] | 2 | * Copyright 2017-present Open Networking Foundation |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | package org.onosproject.drivers.microsemi.yang.impl; |
| 17 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 18 | import java.util.ArrayList; |
| 19 | |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 20 | import org.apache.felix.scr.annotations.Activate; |
| 21 | import org.apache.felix.scr.annotations.Component; |
| 22 | import org.apache.felix.scr.annotations.Deactivate; |
| 23 | import org.apache.felix.scr.annotations.Service; |
| 24 | import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 25 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort; |
| 26 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId; |
| 27 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId; |
| 28 | import org.onosproject.incubator.net.l2monitoring.soam.SoamId; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 29 | import org.onosproject.netconf.DatastoreId; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 30 | import org.onosproject.netconf.NetconfException; |
| 31 | import org.onosproject.netconf.NetconfSession; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 32 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm; |
| 33 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfmOpParam; |
| 34 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm; |
| 35 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 36 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain; |
| 37 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 38 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 39 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput; |
| 40 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput; |
| 41 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 42 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint; |
| 43 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint; |
| 44 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 45 | import org.onosproject.yang.model.DefaultModelObjectData; |
| 46 | import org.onosproject.yang.model.ModelConverter; |
| 47 | import org.onosproject.yang.model.ModelObject; |
| 48 | import org.onosproject.yang.model.ModelObjectData; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 49 | import org.onosproject.yang.model.ResourceId; |
| 50 | import org.onosproject.yang.runtime.AnnotatedNodeInfo; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 51 | import org.onosproject.yang.runtime.CompositeData; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 52 | import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo; |
| 53 | import org.onosproject.yang.runtime.DefaultAnnotation; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 54 | import org.onosproject.yang.runtime.DefaultCompositeStream; |
| 55 | |
| 56 | import java.io.ByteArrayInputStream; |
Sean Condon | 1dbcd71 | 2017-10-19 12:09:21 +0100 | [diff] [blame^] | 57 | import java.util.regex.Pattern; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 58 | |
| 59 | /** |
| 60 | * Implementation of the MseaCfmServiceNetconf YANG model service. |
| 61 | */ |
| 62 | @Component(immediate = true, inherit = true) |
| 63 | @Service |
| 64 | public class MseaCfmManager extends AbstractYangServiceImpl |
| 65 | implements MseaCfmNetconfService { |
| 66 | |
| 67 | public static final String MSEA_CFM = "org.onosproject.drivers.microsemi.yang.mseacfmservice"; |
| 68 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 69 | public static final String MSEA_CFM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-cfm"; |
| 70 | public static final String MSEA_CFM_PM_NS = "http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm"; |
Sean Condon | 1dbcd71 | 2017-10-19 12:09:21 +0100 | [diff] [blame^] | 71 | |
| 72 | //FIXME Remove when the issue with Null bits on onos-yang-tools is sorted |
| 73 | @Deprecated |
| 74 | protected static final Pattern REGEX_EMPTY_ACTIVE_DEFECTS = |
| 75 | Pattern.compile("(<active-defects)[ ]?(/>)", Pattern.DOTALL); |
| 76 | //FIXME Remove when the issue with Null bits on onos-yang-tools is sorted |
| 77 | @Deprecated |
| 78 | protected static final Pattern REGEX_EMPTY_LAST_DEFECT_SENT = |
| 79 | Pattern.compile("(<msea-soam-fm:last-defect-sent)[ ]?(/>)", Pattern.DOTALL); |
| 80 | |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 81 | @Activate |
| 82 | public void activate() { |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 83 | super.activate(); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 84 | appId = coreService.registerApplication(MSEA_CFM); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 85 | log.info("MseaCfmService Started"); |
| 86 | } |
| 87 | |
| 88 | @Deactivate |
| 89 | public void deactivate() { |
| 90 | super.deactivate(); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 91 | log.info("MseaCfmService Stopped"); |
| 92 | } |
| 93 | |
| 94 | @Override |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 95 | public MseaCfm getMepEssentials(MdId mdId, MaIdShort maId, MepId mepId, |
| 96 | NetconfSession session) throws NetconfException { |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 97 | if (session == null) { |
| 98 | throw new NetconfException("Session is null when calling getMepEssentials()"); |
| 99 | } |
| 100 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 101 | String xmlQueryStr = buildMepEssentialsQueryString(mdId, maId, mepId); |
| 102 | log.debug("Sending <get> for MEP essentials" + |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 103 | " query on NETCONF session " + session.getSessionId() + |
| 104 | ":\n" + xmlQueryStr); |
| 105 | |
| 106 | String xmlResult = session.get(xmlQueryStr, null); |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 107 | xmlResult = removeRpcReplyData(xmlResult); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 108 | DefaultCompositeStream resultDcs = new DefaultCompositeStream( |
| 109 | null, new ByteArrayInputStream(xmlResult.getBytes())); |
| 110 | CompositeData compositeData = xSer.decode(resultDcs, yCtx); |
| 111 | |
| 112 | ModelObjectData mod = ((ModelConverter) yangModelRegistry).createModel( |
| 113 | compositeData.resourceData()); |
| 114 | |
| 115 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 116 | for (ModelObject mo:mod.modelObjects()) { |
| 117 | if (mo instanceof DefaultMefCfm) { |
| 118 | mseaCfm.mefCfm((DefaultMefCfm) mo); |
| 119 | } |
| 120 | } |
| 121 | return mseaCfm; |
| 122 | } |
| 123 | |
| 124 | @Override |
| 125 | public MseaCfm getMepFull(MdId mdId, MaIdShort maId, MepId mepId, |
| 126 | NetconfSession session) throws NetconfException { |
| 127 | if (session == null) { |
| 128 | throw new NetconfException("Session is null when calling getMepFull()"); |
| 129 | } |
| 130 | |
| 131 | String xmlQueryStr = buildMepFullQueryString(mdId, maId, mepId); |
| 132 | log.debug("Sending <get> for full MEP" + |
| 133 | " query on NETCONF session " + session.getSessionId() + |
| 134 | ":\n" + xmlQueryStr); |
| 135 | |
| 136 | String xmlResult = session.get(xmlQueryStr, null); |
| 137 | xmlResult = removeRpcReplyData(xmlResult); |
Sean Condon | 1dbcd71 | 2017-10-19 12:09:21 +0100 | [diff] [blame^] | 138 | xmlResult = removeEmptyActiveDefects(xmlResult); |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 139 | DefaultCompositeStream resultDcs = new DefaultCompositeStream( |
| 140 | null, new ByteArrayInputStream(xmlResult.getBytes())); |
| 141 | CompositeData compositeData = xSer.decode(resultDcs, yCtx); |
| 142 | |
| 143 | ModelObjectData mod = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData()); |
| 144 | |
| 145 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 146 | for (ModelObject mo:mod.modelObjects()) { |
| 147 | if (mo instanceof DefaultMefCfm) { |
| 148 | mseaCfm.mefCfm((DefaultMefCfm) mo); |
| 149 | } |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 150 | } |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 151 | |
| 152 | return mseaCfm; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 153 | } |
| 154 | |
| 155 | @Override |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 156 | public MseaCfm getSoamDm(MdId mdName, MaIdShort maName, MepId mepId, |
| 157 | SoamId dmId, DmEntryParts parts, NetconfSession session) |
| 158 | throws NetconfException { |
| 159 | String xmlQueryStr = buildDmQueryString(mdName, maName, mepId, dmId, parts); |
| 160 | log.debug("Sending <get> for " + |
| 161 | " query on NETCONF session " + session.getSessionId() + |
| 162 | ":\n" + xmlQueryStr); |
| 163 | |
| 164 | String xmlResult = session.get(xmlQueryStr, null); |
| 165 | xmlResult = removeRpcReplyData(xmlResult); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 166 | DefaultCompositeStream resultDcs = new DefaultCompositeStream( |
| 167 | null, new ByteArrayInputStream(xmlResult.getBytes())); |
| 168 | CompositeData compositeData = xSer.decode(resultDcs, yCtx); |
| 169 | |
| 170 | ModelObjectData mod = ((ModelConverter) yangModelRegistry).createModel(compositeData.resourceData()); |
| 171 | |
| 172 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 173 | for (ModelObject mo:mod.modelObjects()) { |
| 174 | if (mo instanceof DefaultMefCfm) { |
| 175 | mseaCfm.mefCfm((DefaultMefCfm) mo); |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | return mseaCfm; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 180 | } |
| 181 | |
| 182 | @Override |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 183 | public boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session, |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 184 | DatastoreId targetDs) throws NetconfException { |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 185 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 186 | ModelObjectData moQuery = DefaultModelObjectData.builder() |
| 187 | .addModelObject((ModelObject) mseaCfm.mefCfm()).build(); |
| 188 | return setNetconfObject(moQuery, session, targetDs, null); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 189 | } |
| 190 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 191 | @Override |
| 192 | public boolean deleteMseaCfmDm(MseaCfmOpParam mseaCfm, NetconfSession session, |
| 193 | DatastoreId targetDs) throws NetconfException { |
| 194 | |
| 195 | ModelObjectData mseCfmDmList = DefaultModelObjectData.builder() |
| 196 | .addModelObject((ModelObject) mseaCfm).build(); |
| 197 | |
| 198 | ArrayList anis = new ArrayList<AnnotatedNodeInfo>(); |
| 199 | if (mseaCfm != null && mseaCfm.mefCfm() != null) { |
| 200 | for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) { |
| 201 | for (MaintenanceAssociation ma:md.maintenanceAssociation()) { |
| 202 | for (MaintenanceAssociationEndPoint mep:ma.maintenanceAssociationEndPoint()) { |
| 203 | AugmentedMseaCfmMaintenanceAssociationEndPoint mepAugment = |
| 204 | mep.augmentation(DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint.class); |
| 205 | if (mepAugment != null && mepAugment.delayMeasurements() != null) { |
| 206 | for (DelayMeasurement dms:mepAugment.delayMeasurements().delayMeasurement()) { |
| 207 | ResourceId.Builder ridBuilder = ResourceId.builder() |
| 208 | .addBranchPointSchema("/", null) |
| 209 | .addBranchPointSchema("mef-cfm", MSEA_CFM_NS) |
| 210 | .addBranchPointSchema("maintenance-domain", MSEA_CFM_NS) |
| 211 | .addKeyLeaf("id", MSEA_CFM_NS, md.id()) |
| 212 | .addBranchPointSchema("maintenance-association", MSEA_CFM_NS) |
| 213 | .addKeyLeaf("id", MSEA_CFM_NS, ma.id()) |
| 214 | .addBranchPointSchema("maintenance-association-end-point", MSEA_CFM_NS) |
| 215 | .addKeyLeaf("mep-id", MSEA_CFM_NS, mep.mepIdentifier()) |
| 216 | .addBranchPointSchema("delay-measurements", MSEA_CFM_PM_NS) |
| 217 | .addBranchPointSchema("delay-measurement", MSEA_CFM_PM_NS) |
| 218 | .addKeyLeaf("dm-id", MSEA_CFM_PM_NS, mep.mepIdentifier()); |
| 219 | AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder() |
| 220 | .resourceId(ridBuilder.build()) |
| 221 | .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE)) |
| 222 | .build(); |
| 223 | anis.add(ani); |
| 224 | } |
| 225 | } |
| 226 | } |
| 227 | } |
| 228 | } |
| 229 | } |
| 230 | |
| 231 | return setNetconfObject(mseCfmDmList, session, targetDs, anis); |
| 232 | } |
| 233 | |
| 234 | @Override |
| 235 | public boolean deleteMseaMep(MseaCfmOpParam mseaCfm, NetconfSession session, |
| 236 | DatastoreId targetDs) throws NetconfException { |
| 237 | |
| 238 | ModelObjectData mseCfmMepList = DefaultModelObjectData.builder() |
| 239 | .addModelObject((ModelObject) mseaCfm.mefCfm()).build(); |
| 240 | |
| 241 | ArrayList anis = new ArrayList<AnnotatedNodeInfo>(); |
| 242 | if (mseaCfm != null && mseaCfm.mefCfm() != null) { |
| 243 | for (MaintenanceDomain md:mseaCfm.mefCfm().maintenanceDomain()) { |
| 244 | for (MaintenanceAssociation ma:md.maintenanceAssociation()) { |
| 245 | for (MaintenanceAssociationEndPoint mep:ma.maintenanceAssociationEndPoint()) { |
| 246 | ResourceId.Builder ridBuilder = ResourceId.builder() |
| 247 | .addBranchPointSchema("/", null) |
| 248 | .addBranchPointSchema("mef-cfm", MSEA_CFM_NS) |
| 249 | .addBranchPointSchema("maintenance-domain", MSEA_CFM_NS) |
| 250 | .addBranchPointSchema("maintenance-association", MSEA_CFM_NS) |
| 251 | .addBranchPointSchema("maintenance-association-end-point", MSEA_CFM_NS) |
| 252 | .addKeyLeaf("mep-identifier", MSEA_CFM_NS, mep.mepIdentifier().uint16()); |
| 253 | AnnotatedNodeInfo ani = DefaultAnnotatedNodeInfo.builder() |
| 254 | .resourceId(ridBuilder.build()) |
| 255 | .addAnnotation(new DefaultAnnotation(NC_OPERATION, OP_DELETE)) |
| 256 | .build(); |
| 257 | anis.add(ani); |
| 258 | } |
| 259 | } |
| 260 | } |
| 261 | } |
| 262 | |
| 263 | return setNetconfObject(mseCfmMepList, session, targetDs, anis); |
| 264 | } |
| 265 | |
| 266 | |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 267 | /** |
| 268 | * Call RPCs on the device through NETCONF. |
| 269 | */ |
| 270 | @Override |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 271 | public void transmitLoopback(TransmitLoopbackInput inputVar, |
| 272 | NetconfSession session) throws NetconfException { |
| 273 | |
| 274 | ModelObjectData transLoopbackMo = DefaultModelObjectData.builder() |
| 275 | .addModelObject((ModelObject) inputVar).build(); |
| 276 | |
| 277 | customRpcNetconf(transLoopbackMo, |
| 278 | "transmit-loopback", session); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 279 | } |
| 280 | |
| 281 | @Override |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 282 | public void abortLoopback(AbortLoopbackInput inputVar, |
| 283 | NetconfSession session) throws NetconfException { |
| 284 | ModelObjectData abortLoopbackMo = DefaultModelObjectData.builder() |
| 285 | .addModelObject((ModelObject) inputVar).build(); |
| 286 | |
| 287 | customRpcNetconf(abortLoopbackMo, "abort-loopback", session); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 288 | } |
| 289 | |
| 290 | @Override |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 291 | public TransmitLinktraceOutput transmitLinktrace( |
| 292 | TransmitLinktraceInput inputVar, NetconfSession session) |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 293 | throws NetconfException { |
| 294 | throw new UnsupportedOperationException("Not yet implemented"); |
| 295 | } |
| 296 | |
Sean Condon | 1dbcd71 | 2017-10-19 12:09:21 +0100 | [diff] [blame^] | 297 | //FIXME Remove when the fix for null bits with onos-yang-tools |
| 298 | // https://gerrit.onosproject.org/#/c/15777/ is available |
| 299 | @Deprecated |
| 300 | private static String removeEmptyActiveDefects(String rpcReplyXml) throws NetconfException { |
| 301 | rpcReplyXml = REGEX_EMPTY_ACTIVE_DEFECTS.matcher(rpcReplyXml).replaceFirst(""); |
| 302 | rpcReplyXml = REGEX_EMPTY_LAST_DEFECT_SENT.matcher(rpcReplyXml).replaceFirst(""); |
| 303 | |
| 304 | return rpcReplyXml; |
| 305 | } |
| 306 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 307 | @Deprecated //Replace this with a ModelObject defintion |
| 308 | private String buildMepEssentialsQueryString(MdId mdId, MaIdShort maId, |
| 309 | MepId mepId) { |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 310 | StringBuilder rpc = new StringBuilder(); |
| 311 | |
| 312 | rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "); |
| 313 | rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "); |
| 314 | rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n"); |
| 315 | rpc.append("<maintenance-domain>\n"); |
| 316 | rpc.append("<id/>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 317 | rpc.append("<name>" + mdId.mdName() + "</name>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 318 | rpc.append("<maintenance-association>\n"); |
| 319 | rpc.append("<id/>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 320 | rpc.append("<name>" + maId.maName() + "</name>\n"); |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 321 | rpc.append("<ccm-interval>10ms</ccm-interval>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 322 | rpc.append("<remote-meps/>\n"); |
| 323 | rpc.append("<component-list/>\n"); |
| 324 | rpc.append("<maintenance-association-end-point>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 325 | rpc.append("<mep-identifier>" + mepId.id() + "</mep-identifier>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 326 | rpc.append("<mac-address/>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 327 | rpc.append("<remote-mep-database>\n"); |
| 328 | rpc.append("<remote-mep>\n"); |
| 329 | rpc.append("<remote-mep-id/>\n"); |
| 330 | rpc.append("</remote-mep>\n"); |
| 331 | rpc.append("</remote-mep-database>\n"); |
| 332 | rpc.append("<msea-soam-pm:delay-measurements>\n"); |
| 333 | rpc.append("<msea-soam-pm:delay-measurement>\n"); |
| 334 | rpc.append("<msea-soam-pm:dm-id/>\n"); |
| 335 | rpc.append("</msea-soam-pm:delay-measurement>\n"); |
| 336 | rpc.append("</msea-soam-pm:delay-measurements>\n"); |
| 337 | rpc.append("<msea-soam-pm:loss-measurements>\n"); |
| 338 | rpc.append("<msea-soam-pm:loss-measurement>\n"); |
| 339 | rpc.append("<msea-soam-pm:lm-id/>\n"); |
| 340 | rpc.append("</msea-soam-pm:loss-measurement>\n"); |
| 341 | rpc.append("</msea-soam-pm:loss-measurements>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 342 | rpc.append("</maintenance-association-end-point>\n"); |
| 343 | rpc.append("</maintenance-association>\n"); |
| 344 | rpc.append("</maintenance-domain>\n"); |
| 345 | rpc.append("</mef-cfm>"); |
| 346 | |
| 347 | return rpc.toString(); |
| 348 | } |
| 349 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 350 | @Deprecated //Replace this with a ModelObject defintion |
| 351 | private String buildMepFullQueryString(MdId mdId, MaIdShort maId, MepId mepId) { |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 352 | StringBuilder rpc = new StringBuilder(); |
| 353 | |
| 354 | rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "); |
| 355 | rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "); |
| 356 | rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n"); |
| 357 | rpc.append("<maintenance-domain>\n"); |
| 358 | rpc.append("<id/>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 359 | rpc.append("<name>" + mdId.mdName() + "</name>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 360 | rpc.append("<maintenance-association>\n"); |
| 361 | rpc.append("<id/>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 362 | rpc.append("<name>" + maId.maName() + "</name>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 363 | rpc.append("<maintenance-association-end-point>\n"); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 364 | rpc.append("<mep-identifier>" + mepId.id() + "</mep-identifier>\n"); |
| 365 | rpc.append("<interface/>\n"); |
| 366 | //Direction will always be DOWN for EA1000 |
| 367 | rpc.append("<primary-vid/>\n"); |
| 368 | rpc.append("<administrative-state/>\n"); |
| 369 | rpc.append("<mac-address/>\n"); |
| 370 | rpc.append("<ccm-ltm-priority/>\n"); |
| 371 | rpc.append("<continuity-check/>\n"); //Container |
| 372 | rpc.append("<loopback/>\n"); //Container |
| 373 | rpc.append("<linktrace/>\n"); //Container |
| 374 | rpc.append("<remote-mep-database/>\n"); //Container |
| 375 | rpc.append("<msea-soam-fm:operational-state/>\n"); |
| 376 | rpc.append("<msea-soam-fm:connectivity-status/>\n"); |
| 377 | rpc.append("<msea-soam-fm:port-status/>\n"); |
| 378 | rpc.append("<msea-soam-fm:interface-status/>\n"); |
| 379 | rpc.append("<msea-soam-fm:last-defect-sent/>\n"); |
| 380 | rpc.append("<msea-soam-fm:rdi-transmit-status/>\n"); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 381 | rpc.append("</maintenance-association-end-point>\n"); |
| 382 | rpc.append("</maintenance-association>\n"); |
| 383 | rpc.append("</maintenance-domain>\n"); |
| 384 | rpc.append("</mef-cfm>"); |
| 385 | |
| 386 | return rpc.toString(); |
| 387 | } |
| 388 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 389 | @Deprecated //Replace this with a ModelObject defintion |
| 390 | private String buildDmQueryString(MdId mdId, MaIdShort maId, MepId mepId, |
| 391 | SoamId dmId, DmEntryParts parts) { |
| 392 | StringBuilder rpc = new StringBuilder(); |
| 393 | |
| 394 | rpc.append("<mef-cfm xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\" "); |
| 395 | rpc.append(" xmlns:msea-soam-fm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-fm\" "); |
| 396 | rpc.append("xmlns:msea-soam-pm=\"http://www.microsemi.com/microsemi-edge-assure/msea-soam-pm\">\n"); |
| 397 | rpc.append("<maintenance-domain>\n"); |
| 398 | rpc.append("<id/>\n"); |
| 399 | rpc.append("<name>" + mdId.mdName() + "</name>\n"); |
| 400 | rpc.append("<maintenance-association>\n"); |
| 401 | rpc.append("<id/>\n"); |
| 402 | rpc.append("<name>" + maId.maName() + "</name>\n"); |
| 403 | rpc.append("<maintenance-association-end-point>\n"); |
| 404 | rpc.append("<mep-identifier>" + mepId.id() + "</mep-identifier>\n"); |
| 405 | if (dmId != null) { |
| 406 | rpc.append("<msea-soam-pm:delay-measurements>"); |
| 407 | rpc.append("<msea-soam-pm:delay-measurement>\n"); |
| 408 | rpc.append("<msea-soam-pm:dm-id>" + dmId.id() + "</msea-soam-pm:dm-id>\n"); |
| 409 | rpc.append("<msea-soam-pm:mep-id/>"); |
| 410 | rpc.append("<msea-soam-pm:mac-address/>"); |
| 411 | rpc.append("<msea-soam-pm:administrative-state/>\n"); |
| 412 | rpc.append("<msea-soam-pm:measurement-enable/>\n"); |
| 413 | rpc.append("<msea-soam-pm:message-period/>\n"); |
| 414 | rpc.append("<msea-soam-pm:priority/>\n"); |
| 415 | rpc.append("<msea-soam-pm:frame-size/>\n"); |
| 416 | rpc.append("<msea-soam-pm:measurement-interval/>\n"); |
| 417 | rpc.append("<msea-soam-pm:number-intervals-stored/>\n"); |
| 418 | rpc.append("<msea-soam-pm:session-status/>\n"); |
| 419 | rpc.append("<msea-soam-pm:frame-delay-two-way/>\n"); |
| 420 | rpc.append("<msea-soam-pm:inter-frame-delay-variation-two-way/>\n"); |
| 421 | if (parts != null && (parts.equals(DmEntryParts.CURRENT_ONLY) || |
| 422 | parts.equals(DmEntryParts.ALL_PARTS))) { |
| 423 | rpc.append("<msea-soam-pm:current-stats/>\n"); |
| 424 | } |
| 425 | if (parts != null && (parts.equals(DmEntryParts.HISTORY_ONLY) || |
| 426 | parts.equals(DmEntryParts.ALL_PARTS))) { |
| 427 | rpc.append("<msea-soam-pm:history-stats/>\n"); |
| 428 | } |
| 429 | rpc.append("</msea-soam-pm:delay-measurement>\n"); |
| 430 | rpc.append("</msea-soam-pm:delay-measurements>"); |
| 431 | } else { |
| 432 | rpc.append("<msea-soam-pm:delay-measurements/>"); |
| 433 | } |
| 434 | rpc.append("</maintenance-association-end-point>\n"); |
| 435 | rpc.append("</maintenance-association>\n"); |
| 436 | rpc.append("</maintenance-domain>\n"); |
| 437 | rpc.append("</mef-cfm>"); |
| 438 | |
| 439 | return rpc.toString(); |
| 440 | } |
| 441 | |
| 442 | @Deprecated //Replace this with a ModelObject defintion |
| 443 | private String buildAbortLoopbackQueryString(Short mdId, Short maId, |
| 444 | Short mepId) { |
| 445 | StringBuilder rpc = new StringBuilder(); |
| 446 | |
| 447 | rpc.append("<abort-loopback xmlns=\"http://www.microsemi.com/microsemi-edge-assure/msea-cfm\">"); |
| 448 | rpc.append("<maintenance-domain>" + mdId + "</maintenance-domain>"); |
| 449 | rpc.append("<maintenance-association>" + maId + "</maintenance-association>"); |
| 450 | rpc.append("<maintenance-association-end-point>" + mepId + "</maintenance-association-end-point>"); |
| 451 | rpc.append("</abort-loopback>"); |
| 452 | |
| 453 | return rpc.toString(); |
| 454 | } |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 455 | } |