blob: 695dfcb3e232f8c4c06963f8312c4f0c4f09160b [file] [log] [blame]
Sean Condonfae8e662016-12-15 10:25:13 +00001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Sean Condonfae8e662016-12-15 10:25:13 +00003 *
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 */
16package org.onosproject.drivers.microsemi.yang.impl;
17
Sean Condon0e89bda2017-03-21 14:23:19 +000018import java.util.ArrayList;
19
Sean Condonfae8e662016-12-15 10:25:13 +000020import org.apache.felix.scr.annotations.Activate;
21import org.apache.felix.scr.annotations.Component;
22import org.apache.felix.scr.annotations.Deactivate;
23import org.apache.felix.scr.annotations.Service;
24import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService;
Sean Condon0e89bda2017-03-21 14:23:19 +000025import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
26import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
27import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
28import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
Sean Condon06613e92017-06-09 15:14:01 +010029import org.onosproject.netconf.DatastoreId;
Sean Condonfae8e662016-12-15 10:25:13 +000030import org.onosproject.netconf.NetconfException;
31import org.onosproject.netconf.NetconfSession;
Sean Condon06613e92017-06-09 15:14:01 +010032import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm;
33import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfmOpParam;
34import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm;
35import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput;
Sean Condon0e89bda2017-03-21 14:23:19 +000036import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain;
37import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation;
Sean Condon0e89bda2017-03-21 14:23:19 +000038import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint;
Sean Condon06613e92017-06-09 15:14:01 +010039import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceInput;
40import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitlinktrace.TransmitLinktraceOutput;
41import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput;
Sean Condon0e89bda2017-03-21 14:23:19 +000042import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.AugmentedMseaCfmMaintenanceAssociationEndPoint;
43import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.DefaultAugmentedMseaCfmMaintenanceAssociationEndPoint;
44import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement;
Sean Condon06613e92017-06-09 15:14:01 +010045import org.onosproject.yang.model.DefaultModelObjectData;
46import org.onosproject.yang.model.ModelConverter;
47import org.onosproject.yang.model.ModelObject;
48import org.onosproject.yang.model.ModelObjectData;
Sean Condon0e89bda2017-03-21 14:23:19 +000049import org.onosproject.yang.model.ResourceId;
50import org.onosproject.yang.runtime.AnnotatedNodeInfo;
Sean Condon06613e92017-06-09 15:14:01 +010051import org.onosproject.yang.runtime.CompositeData;
Sean Condon0e89bda2017-03-21 14:23:19 +000052import org.onosproject.yang.runtime.DefaultAnnotatedNodeInfo;
53import org.onosproject.yang.runtime.DefaultAnnotation;
Sean Condon06613e92017-06-09 15:14:01 +010054import org.onosproject.yang.runtime.DefaultCompositeStream;
55
56import java.io.ByteArrayInputStream;
Sean Condon1dbcd712017-10-19 12:09:21 +010057import java.util.regex.Pattern;
Sean Condonfae8e662016-12-15 10:25:13 +000058
59/**
60 * Implementation of the MseaCfmServiceNetconf YANG model service.
61 */
62@Component(immediate = true, inherit = true)
63@Service
64public class MseaCfmManager extends AbstractYangServiceImpl
65 implements MseaCfmNetconfService {
66
67 public static final String MSEA_CFM = "org.onosproject.drivers.microsemi.yang.mseacfmservice";
68
Sean Condon0e89bda2017-03-21 14:23:19 +000069 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 Condon1dbcd712017-10-19 12:09:21 +010071
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 Condonfae8e662016-12-15 10:25:13 +000081 @Activate
82 public void activate() {
Sean Condon06613e92017-06-09 15:14:01 +010083 super.activate();
Sean Condonfae8e662016-12-15 10:25:13 +000084 appId = coreService.registerApplication(MSEA_CFM);
Sean Condonfae8e662016-12-15 10:25:13 +000085 log.info("MseaCfmService Started");
86 }
87
88 @Deactivate
89 public void deactivate() {
90 super.deactivate();
Sean Condonfae8e662016-12-15 10:25:13 +000091 log.info("MseaCfmService Stopped");
92 }
93
94 @Override
Sean Condon0e89bda2017-03-21 14:23:19 +000095 public MseaCfm getMepEssentials(MdId mdId, MaIdShort maId, MepId mepId,
96 NetconfSession session) throws NetconfException {
Sean Condonfae8e662016-12-15 10:25:13 +000097 if (session == null) {
98 throw new NetconfException("Session is null when calling getMepEssentials()");
99 }
100
Sean Condon0e89bda2017-03-21 14:23:19 +0000101 String xmlQueryStr = buildMepEssentialsQueryString(mdId, maId, mepId);
102 log.debug("Sending <get> for MEP essentials" +
Sean Condonfae8e662016-12-15 10:25:13 +0000103 " query on NETCONF session " + session.getSessionId() +
104 ":\n" + xmlQueryStr);
105
106 String xmlResult = session.get(xmlQueryStr, null);
Sean Condon06613e92017-06-09 15:14:01 +0100107 xmlResult = removeRpcReplyData(xmlResult);
Sean Condon0e89bda2017-03-21 14:23:19 +0000108 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 Condon1dbcd712017-10-19 12:09:21 +0100138 xmlResult = removeEmptyActiveDefects(xmlResult);
Sean Condon06613e92017-06-09 15:14:01 +0100139 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 Condonfae8e662016-12-15 10:25:13 +0000150 }
Sean Condon06613e92017-06-09 15:14:01 +0100151
152 return mseaCfm;
Sean Condonfae8e662016-12-15 10:25:13 +0000153 }
154
155 @Override
Sean Condon0e89bda2017-03-21 14:23:19 +0000156 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 Condon0e89bda2017-03-21 14:23:19 +0000166 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 Condonfae8e662016-12-15 10:25:13 +0000180 }
181
182 @Override
Sean Condon06613e92017-06-09 15:14:01 +0100183 public boolean setMseaCfm(MseaCfmOpParam mseaCfm, NetconfSession session,
Sean Condon0e89bda2017-03-21 14:23:19 +0000184 DatastoreId targetDs) throws NetconfException {
Sean Condon06613e92017-06-09 15:14:01 +0100185
Sean Condon0e89bda2017-03-21 14:23:19 +0000186 ModelObjectData moQuery = DefaultModelObjectData.builder()
187 .addModelObject((ModelObject) mseaCfm.mefCfm()).build();
188 return setNetconfObject(moQuery, session, targetDs, null);
Sean Condonfae8e662016-12-15 10:25:13 +0000189 }
190
Sean Condon0e89bda2017-03-21 14:23:19 +0000191 @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 Condonfae8e662016-12-15 10:25:13 +0000267 /**
268 * Call RPCs on the device through NETCONF.
269 */
270 @Override
Sean Condon0e89bda2017-03-21 14:23:19 +0000271 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 Condonfae8e662016-12-15 10:25:13 +0000279 }
280
281 @Override
Sean Condon0e89bda2017-03-21 14:23:19 +0000282 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 Condonfae8e662016-12-15 10:25:13 +0000288 }
289
290 @Override
Sean Condon0e89bda2017-03-21 14:23:19 +0000291 public TransmitLinktraceOutput transmitLinktrace(
292 TransmitLinktraceInput inputVar, NetconfSession session)
Sean Condonfae8e662016-12-15 10:25:13 +0000293 throws NetconfException {
294 throw new UnsupportedOperationException("Not yet implemented");
295 }
296
Sean Condon1dbcd712017-10-19 12:09:21 +0100297 //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 Condon0e89bda2017-03-21 14:23:19 +0000307 @Deprecated //Replace this with a ModelObject defintion
308 private String buildMepEssentialsQueryString(MdId mdId, MaIdShort maId,
309 MepId mepId) {
Sean Condonfae8e662016-12-15 10:25:13 +0000310 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 Condon0e89bda2017-03-21 14:23:19 +0000317 rpc.append("<name>" + mdId.mdName() + "</name>\n");
Sean Condonfae8e662016-12-15 10:25:13 +0000318 rpc.append("<maintenance-association>\n");
319 rpc.append("<id/>\n");
Sean Condon0e89bda2017-03-21 14:23:19 +0000320 rpc.append("<name>" + maId.maName() + "</name>\n");
Sean Condon06613e92017-06-09 15:14:01 +0100321 rpc.append("<ccm-interval>10ms</ccm-interval>\n");
Sean Condonfae8e662016-12-15 10:25:13 +0000322 rpc.append("<remote-meps/>\n");
323 rpc.append("<component-list/>\n");
324 rpc.append("<maintenance-association-end-point>\n");
Sean Condon0e89bda2017-03-21 14:23:19 +0000325 rpc.append("<mep-identifier>" + mepId.id() + "</mep-identifier>\n");
Sean Condonfae8e662016-12-15 10:25:13 +0000326 rpc.append("<mac-address/>\n");
Sean Condon0e89bda2017-03-21 14:23:19 +0000327 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 Condonfae8e662016-12-15 10:25:13 +0000342 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 Condon0e89bda2017-03-21 14:23:19 +0000350 @Deprecated //Replace this with a ModelObject defintion
351 private String buildMepFullQueryString(MdId mdId, MaIdShort maId, MepId mepId) {
Sean Condonfae8e662016-12-15 10:25:13 +0000352 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 Condon0e89bda2017-03-21 14:23:19 +0000359 rpc.append("<name>" + mdId.mdName() + "</name>\n");
Sean Condonfae8e662016-12-15 10:25:13 +0000360 rpc.append("<maintenance-association>\n");
361 rpc.append("<id/>\n");
Sean Condon0e89bda2017-03-21 14:23:19 +0000362 rpc.append("<name>" + maId.maName() + "</name>\n");
Sean Condonfae8e662016-12-15 10:25:13 +0000363 rpc.append("<maintenance-association-end-point>\n");
Sean Condon0e89bda2017-03-21 14:23:19 +0000364 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 Condonfae8e662016-12-15 10:25:13 +0000381 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 Condon0e89bda2017-03-21 14:23:19 +0000389 @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 Condonfae8e662016-12-15 10:25:13 +0000455}