2 * Copyright (c) 2015, 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 edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
12 import java.io.BufferedReader;
13 import java.io.IOException;
14 import java.io.InputStreamReader;
15 import java.io.PrintWriter;
16 import java.net.InetAddress;
17 import java.net.Socket;
18 import java.net.SocketException;
19 import java.net.UnknownHostException;
20 import org.apache.karaf.shell.commands.Argument;
21 import org.apache.karaf.shell.commands.Command;
22 import org.apache.karaf.shell.console.OsgiCommandSupport;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
26 @Command(scope = "odl", name = "clear-bgp-neighbor", description = "")
27 @SuppressFBWarnings("DM_DEFAULT_ENCODING")
28 public class ClearBgpCli extends OsgiCommandSupport {
30 private static final int SERVER_PORT = 2605;
31 private static final String PASSWORD_CHECK_STR = "Password:";
32 private static final String VTY_PASSWORD = "sdncbgpc";
33 private static final String ENABLE_CMD = "enable";
34 private static final int SOCK_TIMEOUT = 5;
35 private static final char HASH_PROMPT = '#';
36 private static final char GT = '>';
38 private static final Logger LOG = LoggerFactory.getLogger(ClearBgpCli.class);
40 private static String serverName = "localhost";
42 @Argument(name = "neighbor-ip", description = "neighbor ip to be cleared", required = false, multiValued = false)
46 PrintWriter out = null;
47 BufferedReader in = null;
49 public static void setHostAddr(String hostAddr) {
50 serverName = hostAddr;
54 @SuppressFBWarnings("DM_DEFAULT_ENCODING")
55 protected Object doExecute() throws Exception {
57 session.getConsole().println("enter neighbor ip to be cleared");
58 session.getConsole().println("Usage:");
59 session.getConsole().println("odl:clear-bgp-neighbor <neighbor|all>");
61 } else if ("all".equals(nbr)) {
65 InetAddress.getByName(nbr);
66 } catch (UnknownHostException e) {
67 session.getConsole().println("Invalid neighbor ip :" + nbr);
71 clearBgp("clear ip bgp " + nbr);
75 public static void main(String[] args) throws IOException {
76 ClearBgpCli test = new ClearBgpCli();
77 test.clearBgp("clear ip bgp");
80 public void clearBgp(String clearCommand) throws IOException {
82 LOG.trace("Connecting to BgpHost: {}, port {} for clearBgp()", serverName, SERVER_PORT);
83 socket = new Socket(serverName, SERVER_PORT);
84 } catch (IOException ioe) {
85 session.getConsole().println("failed to connect to bgpd " + ioe.getMessage());
88 intializeSocketOptions();
92 out.println(VTY_PASSWORD);
93 out.println("enable");
94 LOG.trace("reading until HASH sign");
95 readUntilPrompt(in, HASH_PROMPT);
97 out.println(clearCommand);
98 readUntilPrompt(in, HASH_PROMPT);
99 } catch (IOException e) {
100 session.getConsole().println(e.getMessage());
108 private void intializeSocketOptions() throws SocketException, IOException {
109 socket.setSoTimeout(SOCK_TIMEOUT * 1000);
110 out = new PrintWriter(socket.getOutputStream(), true);
111 in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
114 private static boolean readPassword(BufferedReader in) throws IOException {
115 return readUntilPrompt(in, GT, PASSWORD_CHECK_STR);
118 private static boolean readUntilPrompt(BufferedReader in, char promptChar) throws IOException {
119 return readUntilPrompt(in, promptChar, null);
122 private static boolean readUntilPrompt(BufferedReader in, char promptChar, String checkString)
124 StringBuilder sb = new StringBuilder();
129 throw new IOException("connection closed by bgpd");
130 } else if (ret == promptChar) {
134 sb.append((char) ret);
135 if (checkString != null) {
136 if (sb.toString().contains(checkString)) {