blob: 341bd7dd34e29cd654ebe3a4ad3f7cf82d3a584d [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;
23import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
24import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
25import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdDomainName;
26import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdMacUint;
27import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdNone;
28import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
29
30import java.util.Optional;
31
32/**
33 * Lists a particular Maintenance Domain.
34 */
35@Command(scope = "onos", name = "cfm-md-list",
36 description = "Lists a single CFM Maintenance Domain or all if none specified.")
37public class CfmMdListMdCommand extends AbstractShellCommand {
38 @Argument(index = 0, name = "name",
39 description = "Maintenance Domain name and type (in brackets)",
40 required = false, multiValued = false)
41 String name = null;
42
43 @Override
44 protected void execute() {
45 CfmMdService service = get(CfmMdService.class);
46
47 if (name != null) {
48 String[] nameParts = name.split("[()]");
49 if (nameParts.length != 2) {
50 throw new IllegalArgumentException("Invalid name format. " +
51 "Must be in the format of <identifier(name-type)>");
52 }
53
54 MdId mdId = null;
55 MdId.MdNameType nameTypeEnum = MdId.MdNameType.valueOf(nameParts[1]);
56 switch (nameTypeEnum) {
57 case DOMAINNAME:
58 mdId = MdIdDomainName.asMdId(nameParts[0]);
59 break;
60 case MACANDUINT:
61 mdId = MdIdMacUint.asMdId(nameParts[0]);
62 break;
63 case NONE:
64 mdId = MdIdNone.asMdId();
65 break;
66 case CHARACTERSTRING:
67 default:
68 mdId = MdIdCharStr.asMdId(nameParts[0]);
69 }
70
71 print("Maintenance Domain:");
72 Optional<MaintenanceDomain> md = service.getMaintenanceDomain(mdId);
73 print(printMd(md));
74 md.get().maintenanceAssociationList().forEach(ma -> printMa(Optional.of(ma)));
75 } else {
76 service.getAllMaintenanceDomain().forEach(md -> {
77 print(printMd(Optional.of(md)));
78 });
79 }
80 }
81
82 public static String printMd(Optional<MaintenanceDomain> md) {
83 if (!md.isPresent()) {
84 return new String("MD not found");
85 } else {
86 StringBuffer sb = new StringBuffer("\tMD: ");
87 sb.append(md.get().mdId().mdName());
88 sb.append("(" + md.get().mdId().nameType());
89 sb.append(") Lvl:" + md.get().mdLevel().ordinal());
90 sb.append(", Num: " + md.get().mdNumericId());
91
92 md.get().maintenanceAssociationList().
93 forEach(ma -> sb.append(printMa(Optional.of(ma))));
94 return sb.toString();
95 }
96 }
97
98 public static String printMa(Optional<MaintenanceAssociation> ma) {
99 if (!ma.isPresent()) {
100 return "\n\tNo MA found";
101 }
102
103 StringBuilder sb = new StringBuilder("\n\t\tMA: ");
104 sb.append(ma.get().maId().maName());
105 sb.append("(");
106 sb.append(ma.get().maId().nameType());
107 sb.append(") CCM: ");
108 sb.append(ma.get().ccmInterval());
109 sb.append(" Num: ");
110 sb.append(ma.get().maNumericId());
111
112 ma.get().remoteMepIdList().forEach(rmep -> {
113 sb.append("\n\t\t\tRmep: ");
114 sb.append(rmep);
115 });
116 ma.get().componentList().forEach(comp -> {
117 sb.append("\n\t\t\tComponent: ");
118 sb.append(comp.componentId());
119 sb.append(" Perm: ");
120 sb.append(comp.idPermission());
121 sb.append(" MHF: ");
122 sb.append(comp.mhfCreationType());
123 sb.append(" Tag: ");
124 sb.append(comp.tagType());
125
126 comp.vidList().forEach(vid -> {
127 sb.append("\n\t\t\t\tVID: ");
128 sb.append(vid);
129 });
130 });
131
132 return sb.toString();
133 }
134}