blob: d595d5c2cb595f071392625e2d5a973f9c1bc94e [file] [log] [blame]
/*
* Copyright 2017-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 org.onosproject.segmentrouting.cli;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.net.ConnectPoint;
import org.onosproject.segmentrouting.SegmentRoutingService;
import org.onosproject.segmentrouting.pwaas.DefaultL2Tunnel;
import org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription;
import org.onosproject.segmentrouting.pwaas.DefaultL2TunnelPolicy;
import org.onosproject.segmentrouting.pwaas.L2Tunnel;
import org.onosproject.segmentrouting.pwaas.L2TunnelDescription;
import org.onosproject.segmentrouting.pwaas.L2TunnelHandler;
import org.onosproject.segmentrouting.pwaas.L2TunnelPolicy;
import static org.onosproject.segmentrouting.pwaas.PwaasUtil.*;
/**
* Command to add a pseuwodire.
*/
@Service
@Command(scope = "onos", name = "sr-pw-add",
description = "Add a pseudowire to the network configuration, if it already exists update it.")
public class PseudowireAddCommand extends AbstractShellCommand {
@Argument(index = 0, name = "pwId",
description = "Pseudowire ID",
required = true, multiValued = false)
String pwId;
@Argument(index = 1, name = "pwLabel",
description = "Pseudowire Label",
required = true, multiValued = false)
String pwLabel;
@Argument(index = 2, name = "mode",
description = "Mode used for pseudowire",
required = true, multiValued = false)
String mode;
@Argument(index = 3, name = "sDTag",
description = "Service delimiting tag",
required = true, multiValued = false)
String sDTag;
@Argument(index = 4, name = "cP1",
description = "Connection Point 1",
required = true, multiValued = false)
String cP1;
@Argument(index = 5, name = "cP1InnerVlan",
description = "Inner Vlan of Connection Point 1",
required = true, multiValued = false)
String cP1InnerVlan;
@Argument(index = 6, name = "cP1OuterVlan",
description = "Outer Vlan of Connection Point 1",
required = true, multiValued = false)
String cP1OuterVlan;
@Argument(index = 7, name = "cP2",
description = "Connection Point 2",
required = true, multiValued = false)
String cP2;
@Argument(index = 8, name = "cP2InnerVlan",
description = "Inner Vlan of Connection Point 2",
required = true, multiValued = false)
String cP2InnerVlan;
@Argument(index = 9, name = "cP2OuterVlan",
description = "Outer Vlan of Connection Point 2",
required = true, multiValued = false)
String cP2OuterVlan;
@Override
protected void doExecute() {
SegmentRoutingService srService =
AbstractShellCommand.get(SegmentRoutingService.class);
L2Tunnel tun;
L2TunnelPolicy policy;
try {
tun = new DefaultL2Tunnel(parseMode(mode), parseVlan(sDTag), parsePwId(pwId), parsePWLabel(pwLabel));
} catch (IllegalArgumentException e) {
log.error("Exception while parsing L2Tunnel : \n\t %s", e.getMessage());
print("Exception while parsing L2Tunnel : \n\t %s", e.getMessage());
return;
}
try {
policy = new DefaultL2TunnelPolicy(parsePwId(pwId),
ConnectPoint.deviceConnectPoint(cP1), parseVlan(cP1InnerVlan),
parseVlan(cP1OuterVlan), ConnectPoint.deviceConnectPoint(cP2),
parseVlan(cP2InnerVlan), parseVlan(cP2OuterVlan));
} catch (IllegalArgumentException e) {
log.error("Exception while parsing L2TunnelPolicy : \n\t %s", e.getMessage());
print("Exception while parsing L2TunnelPolicy : \n\t %s", e.getMessage());
return;
}
L2TunnelDescription pw = new DefaultL2TunnelDescription(tun, policy);
L2TunnelHandler.Result res = srService.addPseudowire(pw);
log.info("Deploying pseudowire {} via the command line.", pw);
switch (res) {
case WRONG_PARAMETERS:
print("Pseudowire could not be added , error in the parameters : \n\t%s",
res.getSpecificError());
break;
case CONFIGURATION_ERROR:
print("Pseudowire could not be added, configuration error : \n\t%s",
res.getSpecificError());
break;
case PATH_NOT_FOUND:
print("Pseudowire path not found : \n\t%s",
res.getSpecificError());
break;
case INTERNAL_ERROR:
print("Pseudowire could not be added, internal error : \n\t%s",
res.getSpecificError());
break;
case SUCCESS:
break;
default:
break;
}
}
}