2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.bgpmanager.commands;
11 import org.apache.karaf.shell.commands.Argument;
12 import org.apache.karaf.shell.commands.Command;
13 import org.apache.karaf.shell.commands.Option;
14 import org.apache.karaf.shell.console.OsgiCommandSupport;
15 import org.omg.CORBA.Object;
16 import org.opendaylight.netvirt.bgpmanager.BgpManager;
17 import org.opendaylight.netvirt.bgpmanager.thrift.gen.af_afi;
18 import org.opendaylight.netvirt.bgpmanager.thrift.gen.af_safi;
20 @Command(scope = "odl", name = "multipath", description = "Enable/Disable multipaths")
21 public class Multipath extends OsgiCommandSupport {
23 private static final String AF = "--address-family";
24 private static final String RD = "--rd";
25 private static final String MAXPATH = "--maxpath";
26 private static final int MIN_MAXPATH = 1;
27 private static final int MAX_MAXPATH = 64;
29 @Option(name = RD, aliases = { "-r" },
35 @Option(name = MAXPATH, aliases = { "-n" },
36 description = "max number of paths",
41 @Option(name = AF, aliases = {"-f"},
42 description = "Address family",
43 required = false, multiValued = false)
48 @Argument(name = "enable|disable|setmaxpath",
49 description = "The desired operation",
50 required = true, multiValued = false)
52 String multipathEnable;
54 private final BgpManager bgpManager;
56 public Multipath(BgpManager bgpManager) {
57 this.bgpManager = bgpManager;
61 protected Object doExecute() throws Exception {
62 af_afi afi = af_afi.findByValue(1);
63 af_safi safi = af_safi.findByValue(5);
65 if (addrFamily != null) {
66 if (!addrFamily.equals("lu") && !addrFamily.equals("vpnv6")
67 && !addrFamily.equals("evpn") && !addrFamily.equals("vpnv4")) {
68 session.getConsole().println("error: " + AF + " must be lu/evpn/vpnv4/vpnv6 ");
71 if (addrFamily.equals("vpnv6")) {
72 afi = af_afi.findByValue(2);
73 safi = af_safi.findByValue(5);
74 } else if (addrFamily.equals("evpn")) {
75 afi = af_afi.findByValue(3);
76 safi = af_safi.findByValue(6);
77 } else if (addrFamily.equals("lu")) {
78 afi = af_afi.findByValue(1);
79 safi = af_safi.findByValue(4);
81 afi = af_afi.findByValue(1);
82 safi = af_safi.findByValue(5);
86 if (maxpath != null) {
87 int imaxpath = Integer.parseInt(maxpath);
88 if (imaxpath < MIN_MAXPATH || imaxpath > MAX_MAXPATH) {
89 session.getConsole().println("error: " + MAXPATH + " range[" + MIN_MAXPATH + " - " + MAX_MAXPATH + "]");
94 if (multipathEnable != null) {
96 switch (multipathEnable) {
98 bgpManager.enableMultipath(afi, safi);
101 bgpManager.disableMultipath(afi, safi);
104 if (rd != null && maxpath != null) {
105 bgpManager.multipaths(rd, Integer.parseInt(maxpath));
117 private Object usage() {
118 session.getConsole().println("odl:multipath -f lu <enable|disable> \n"
119 + "odl:multipath -f lu -r <rd> -n <maxpath> setmaxpath");