1*1bbe3d1eSWilliam A. Kennington III /** 2*1bbe3d1eSWilliam A. Kennington III * Copyright © 2018 IBM Corporation 3*1bbe3d1eSWilliam A. Kennington III * 4*1bbe3d1eSWilliam A. Kennington III * Licensed under the Apache License, Version 2.0 (the "License"); 5*1bbe3d1eSWilliam A. Kennington III * you may not use this file except in compliance with the License. 6*1bbe3d1eSWilliam A. Kennington III * You may obtain a copy of the License at 7*1bbe3d1eSWilliam A. Kennington III * 8*1bbe3d1eSWilliam A. Kennington III * http://www.apache.org/licenses/LICENSE-2.0 9*1bbe3d1eSWilliam A. Kennington III * 10*1bbe3d1eSWilliam A. Kennington III * Unless required by applicable law or agreed to in writing, software 11*1bbe3d1eSWilliam A. Kennington III * distributed under the License is distributed on an "AS IS" BASIS, 12*1bbe3d1eSWilliam A. Kennington III * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*1bbe3d1eSWilliam A. Kennington III * See the License for the specific language governing permissions and 14*1bbe3d1eSWilliam A. Kennington III * limitations under the License. 15*1bbe3d1eSWilliam A. Kennington III */ 16*1bbe3d1eSWilliam A. Kennington III #include "argument.hpp" 17*1bbe3d1eSWilliam A. Kennington III #include "ncsi_util.hpp" 18*1bbe3d1eSWilliam A. Kennington III 19*1bbe3d1eSWilliam A. Kennington III #include <iostream> 20*1bbe3d1eSWilliam A. Kennington III #include <string> 21*1bbe3d1eSWilliam A. Kennington III 22*1bbe3d1eSWilliam A. Kennington III static void exitWithError(const char* err, char** argv) 23*1bbe3d1eSWilliam A. Kennington III { 24*1bbe3d1eSWilliam A. Kennington III phosphor::network::ncsi::ArgumentParser::usage(argv); 25*1bbe3d1eSWilliam A. Kennington III std::cerr << "ERROR: " << err << "\n"; 26*1bbe3d1eSWilliam A. Kennington III exit(EXIT_FAILURE); 27*1bbe3d1eSWilliam A. Kennington III } 28*1bbe3d1eSWilliam A. Kennington III 29*1bbe3d1eSWilliam A. Kennington III int main(int argc, char** argv) 30*1bbe3d1eSWilliam A. Kennington III { 31*1bbe3d1eSWilliam A. Kennington III using namespace phosphor::network; 32*1bbe3d1eSWilliam A. Kennington III using namespace phosphor::network::ncsi; 33*1bbe3d1eSWilliam A. Kennington III // Read arguments. 34*1bbe3d1eSWilliam A. Kennington III auto options = ArgumentParser(argc, argv); 35*1bbe3d1eSWilliam A. Kennington III int packageInt{}; 36*1bbe3d1eSWilliam A. Kennington III int channelInt{}; 37*1bbe3d1eSWilliam A. Kennington III int indexInt{}; 38*1bbe3d1eSWilliam A. Kennington III 39*1bbe3d1eSWilliam A. Kennington III // Parse out interface argument. 40*1bbe3d1eSWilliam A. Kennington III auto ifIndex = (options)["index"]; 41*1bbe3d1eSWilliam A. Kennington III try 42*1bbe3d1eSWilliam A. Kennington III { 43*1bbe3d1eSWilliam A. Kennington III indexInt = stoi(ifIndex, nullptr); 44*1bbe3d1eSWilliam A. Kennington III } 45*1bbe3d1eSWilliam A. Kennington III catch (const std::exception& e) 46*1bbe3d1eSWilliam A. Kennington III { 47*1bbe3d1eSWilliam A. Kennington III exitWithError("Interface not specified.", argv); 48*1bbe3d1eSWilliam A. Kennington III } 49*1bbe3d1eSWilliam A. Kennington III 50*1bbe3d1eSWilliam A. Kennington III if (indexInt < 0) 51*1bbe3d1eSWilliam A. Kennington III { 52*1bbe3d1eSWilliam A. Kennington III exitWithError("Interface value should be greater than equal to 0", 53*1bbe3d1eSWilliam A. Kennington III argv); 54*1bbe3d1eSWilliam A. Kennington III } 55*1bbe3d1eSWilliam A. Kennington III 56*1bbe3d1eSWilliam A. Kennington III // Parse out package argument. 57*1bbe3d1eSWilliam A. Kennington III auto package = (options)["package"]; 58*1bbe3d1eSWilliam A. Kennington III try 59*1bbe3d1eSWilliam A. Kennington III { 60*1bbe3d1eSWilliam A. Kennington III packageInt = stoi(package, nullptr); 61*1bbe3d1eSWilliam A. Kennington III } 62*1bbe3d1eSWilliam A. Kennington III catch (const std::exception& e) 63*1bbe3d1eSWilliam A. Kennington III { 64*1bbe3d1eSWilliam A. Kennington III packageInt = DEFAULT_VALUE; 65*1bbe3d1eSWilliam A. Kennington III } 66*1bbe3d1eSWilliam A. Kennington III 67*1bbe3d1eSWilliam A. Kennington III if (packageInt < 0) 68*1bbe3d1eSWilliam A. Kennington III { 69*1bbe3d1eSWilliam A. Kennington III packageInt = DEFAULT_VALUE; 70*1bbe3d1eSWilliam A. Kennington III } 71*1bbe3d1eSWilliam A. Kennington III 72*1bbe3d1eSWilliam A. Kennington III // Parse out channel argument. 73*1bbe3d1eSWilliam A. Kennington III auto channel = (options)["channel"]; 74*1bbe3d1eSWilliam A. Kennington III try 75*1bbe3d1eSWilliam A. Kennington III { 76*1bbe3d1eSWilliam A. Kennington III channelInt = stoi(channel, nullptr); 77*1bbe3d1eSWilliam A. Kennington III } 78*1bbe3d1eSWilliam A. Kennington III catch (const std::exception& e) 79*1bbe3d1eSWilliam A. Kennington III { 80*1bbe3d1eSWilliam A. Kennington III channelInt = DEFAULT_VALUE; 81*1bbe3d1eSWilliam A. Kennington III } 82*1bbe3d1eSWilliam A. Kennington III 83*1bbe3d1eSWilliam A. Kennington III if (channelInt < 0) 84*1bbe3d1eSWilliam A. Kennington III { 85*1bbe3d1eSWilliam A. Kennington III channelInt = DEFAULT_VALUE; 86*1bbe3d1eSWilliam A. Kennington III } 87*1bbe3d1eSWilliam A. Kennington III 88*1bbe3d1eSWilliam A. Kennington III auto setCmd = (options)["set"]; 89*1bbe3d1eSWilliam A. Kennington III if (setCmd == "true") 90*1bbe3d1eSWilliam A. Kennington III { 91*1bbe3d1eSWilliam A. Kennington III // Can not perform set operation without package. 92*1bbe3d1eSWilliam A. Kennington III if (packageInt == DEFAULT_VALUE) 93*1bbe3d1eSWilliam A. Kennington III { 94*1bbe3d1eSWilliam A. Kennington III exitWithError("Package not specified.", argv); 95*1bbe3d1eSWilliam A. Kennington III } 96*1bbe3d1eSWilliam A. Kennington III return ncsi::setChannel(indexInt, packageInt, channelInt); 97*1bbe3d1eSWilliam A. Kennington III } 98*1bbe3d1eSWilliam A. Kennington III else if ((options)["info"] == "true") 99*1bbe3d1eSWilliam A. Kennington III { 100*1bbe3d1eSWilliam A. Kennington III return ncsi::getInfo(indexInt, packageInt); 101*1bbe3d1eSWilliam A. Kennington III } 102*1bbe3d1eSWilliam A. Kennington III else if ((options)["clear"] == "true") 103*1bbe3d1eSWilliam A. Kennington III { 104*1bbe3d1eSWilliam A. Kennington III return ncsi::clearInterface(indexInt); 105*1bbe3d1eSWilliam A. Kennington III } 106*1bbe3d1eSWilliam A. Kennington III else 107*1bbe3d1eSWilliam A. Kennington III { 108*1bbe3d1eSWilliam A. Kennington III exitWithError("No Command specified", argv); 109*1bbe3d1eSWilliam A. Kennington III } 110*1bbe3d1eSWilliam A. Kennington III return 0; 111*1bbe3d1eSWilliam A. Kennington III } 112