blob: 79651130161573ed51d3dba87d34ac991b0b4e65 [file] [log] [blame]
Sean Condon0e89bda2017-03-21 14:23:19 +00001/*
2 * Copyright 2017-present Open Networking Foundation
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 */
16package org.onosproject.cfm.cli;
17
18import org.apache.karaf.shell.commands.Argument;
19import org.apache.karaf.shell.commands.Command;
20import org.onosproject.cli.AbstractShellCommand;
21import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
22import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceDomain;
Sean Condon96b896d2017-12-11 12:44:29 -080023import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
Sean Condon0e89bda2017-03-21 14:23:19 +000024import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
Sean Condon3a1efef2018-02-24 13:16:03 +000025import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdMaNameUtil;
Sean Condon0e89bda2017-03-21 14:23:19 +000026import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
27
Sean Condon0e89bda2017-03-21 14:23:19 +000028/**
29 * Lists a particular Maintenance Domain.
30 */
31@Command(scope = "onos", name = "cfm-md-list",
32 description = "Lists a single CFM Maintenance Domain or all if none specified.")
33public class CfmMdListMdCommand extends AbstractShellCommand {
Sean Condon3a1efef2018-02-24 13:16:03 +000034 @Argument(name = "name",
35 description = "Maintenance Domain name and type (in brackets)")
36 private String name = null;
Sean Condon0e89bda2017-03-21 14:23:19 +000037
38 @Override
39 protected void execute() {
Sean Condon3a1efef2018-02-24 13:16:03 +000040 CfmMdService service;
41 service = get(CfmMdService.class);
Sean Condon0e89bda2017-03-21 14:23:19 +000042
43 if (name != null) {
Sean Condon96b896d2017-12-11 12:44:29 -080044 MdId mdId = parseMdName(name);
Sean Condon0e89bda2017-03-21 14:23:19 +000045 print("Maintenance Domain:");
Sean Condon3a1efef2018-02-24 13:16:03 +000046 service.getMaintenanceDomain(mdId).ifPresent(md -> {
47 print(printMd(md));
48 md.maintenanceAssociationList().forEach(CfmMdListMdCommand::printMa);
Sean Condon0e89bda2017-03-21 14:23:19 +000049 });
Sean Condon3a1efef2018-02-24 13:16:03 +000050 } else {
51 service.getAllMaintenanceDomain().forEach(md -> print(printMd(md)));
Sean Condon0e89bda2017-03-21 14:23:19 +000052 }
53 }
54
Sean Condon3a1efef2018-02-24 13:16:03 +000055 private static String printMd(MaintenanceDomain md) {
56 if (md == null) {
57 return "MD not found";
Sean Condon0e89bda2017-03-21 14:23:19 +000058 } else {
Sean Condon3a1efef2018-02-24 13:16:03 +000059 StringBuilder sb = new StringBuilder("\tMD: ");
60 sb.append(md.mdId().mdName());
61 sb.append("(");
62 sb.append(md.mdId().nameType());
63 sb.append(") Lvl:");
64 sb.append(md.mdLevel().ordinal());
65 sb.append(", Num: ");
66 sb.append(md.mdNumericId());
Sean Condon0e89bda2017-03-21 14:23:19 +000067
Sean Condon3a1efef2018-02-24 13:16:03 +000068 md.maintenanceAssociationList().
69 forEach(ma -> sb.append(printMa(ma)));
Sean Condon0e89bda2017-03-21 14:23:19 +000070 return sb.toString();
71 }
72 }
73
Sean Condon3a1efef2018-02-24 13:16:03 +000074 private static String printMa(MaintenanceAssociation ma) {
75 if (ma == null) {
Sean Condon0e89bda2017-03-21 14:23:19 +000076 return "\n\tNo MA found";
77 }
78
79 StringBuilder sb = new StringBuilder("\n\t\tMA: ");
Sean Condon3a1efef2018-02-24 13:16:03 +000080 sb.append(ma.maId().maName());
Sean Condon0e89bda2017-03-21 14:23:19 +000081 sb.append("(");
Sean Condon3a1efef2018-02-24 13:16:03 +000082 sb.append(ma.maId().nameType());
Sean Condon0e89bda2017-03-21 14:23:19 +000083 sb.append(") CCM: ");
Sean Condon3a1efef2018-02-24 13:16:03 +000084 sb.append(ma.ccmInterval());
Sean Condon0e89bda2017-03-21 14:23:19 +000085 sb.append(" Num: ");
Sean Condon3a1efef2018-02-24 13:16:03 +000086 sb.append(ma.maNumericId());
Sean Condon0e89bda2017-03-21 14:23:19 +000087
Sean Condon3a1efef2018-02-24 13:16:03 +000088 ma.remoteMepIdList().forEach(rmep -> {
Sean Condon0e89bda2017-03-21 14:23:19 +000089 sb.append("\n\t\t\tRmep: ");
90 sb.append(rmep);
91 });
Sean Condon3a1efef2018-02-24 13:16:03 +000092 ma.componentList().forEach(comp -> {
Sean Condon0e89bda2017-03-21 14:23:19 +000093 sb.append("\n\t\t\tComponent: ");
94 sb.append(comp.componentId());
95 sb.append(" Perm: ");
96 sb.append(comp.idPermission());
97 sb.append(" MHF: ");
98 sb.append(comp.mhfCreationType());
99 sb.append(" Tag: ");
100 sb.append(comp.tagType());
101
102 comp.vidList().forEach(vid -> {
103 sb.append("\n\t\t\t\tVID: ");
104 sb.append(vid);
105 });
106 });
107
108 return sb.toString();
109 }
Sean Condon96b896d2017-12-11 12:44:29 -0800110
Sean Condon3a1efef2018-02-24 13:16:03 +0000111 static MdId parseMdName(String mdStr) {
Sean Condon96b896d2017-12-11 12:44:29 -0800112 String[] nameParts = mdStr.split("[()]");
113 if (nameParts.length != 2) {
114 throw new IllegalArgumentException("Invalid name format. " +
115 "Must be in the format of <identifier(name-type)>");
116 }
117
Sean Condon3a1efef2018-02-24 13:16:03 +0000118 return MdMaNameUtil.parseMdName(nameParts[1], nameParts[0]);
Sean Condon96b896d2017-12-11 12:44:29 -0800119 }
120
Sean Condon3a1efef2018-02-24 13:16:03 +0000121 static MaIdShort parseMaName(String maStr) {
Sean Condon96b896d2017-12-11 12:44:29 -0800122 String[] nameParts = maStr.split("[()]");
123 if (nameParts.length != 2) {
124 throw new IllegalArgumentException("Invalid name format. " +
125 "Must be in the format of <identifier(name-type)>");
126 }
127
Sean Condon3a1efef2018-02-24 13:16:03 +0000128 return MdMaNameUtil.parseMaName(nameParts[1], nameParts[0]);
Sean Condon96b896d2017-12-11 12:44:29 -0800129 }
130
Sean Condon0e89bda2017-03-21 14:23:19 +0000131}