46 static void printHelp(std::ostream &os,
const std::string &command)
49 os << command <<
" [<args>] <IP address> <subnet mask> <default gateway>\n";
51 os <<
"-h, --help Show this help and exit\n";
52 os <<
"-f name=<name> Filter by name\n";
53 os <<
"-f serial=<serial> Filter by serial number\n";
54 os <<
"-f mac=<mac> Filter by MAC address\n";
55 os <<
"-f iface=<mac> Filter by interface name\n";
56 os <<
"-f model=<model> Filter by model name\n";
57 os <<
"-y Assume 'yes' for all queries\n";
60 int runForceIP(
const std::string &command,
int argc,
char **argv)
68 std::string p = argv[i++];
80 catch (
const std::invalid_argument &ex)
82 std::cerr << ex.what() << std::endl;
87 else if (p ==
"-h" || p ==
"--help")
92 else if (!p.empty() && p[0] ==
'-')
94 std::cerr <<
"Invalid argument: " << p <<
'\n';
105 if (device_filter.mac.empty() &&
106 device_filter.name.empty() &&
107 device_filter.serial.empty())
109 std::cerr <<
"No filter set" << std::endl;
116 std::cerr <<
"IP address, subnet mask and default gateway must be set" << std::endl;
121 std::array<uint8_t, 4> ip;
122 std::array<uint8_t, 4> mask;
123 std::array<uint8_t, 4> gateway;
129 catch (
const std::exception &)
131 std::cerr <<
"Cannot parse IP address" << std::endl;
140 catch (
const std::exception &)
142 std::cerr <<
"Cannot parse subnet mask" << std::endl;
151 catch (
const std::exception &)
153 std::cerr <<
"Cannot parse default gateway" << std::endl;
162 std::cout <<
"No device found" << std::endl;
166 if (devices.size() > 1)
168 std::cout <<
"Found more than one device matching the filter criteria." << std::endl;
173 std::cout <<
"Setting the IP address of the following device:\n";
178 std::cout <<
"Are you sure? [y/N] ";
180 std::getline(std::cin, answer);
181 if (answer !=
"y" && answer !=
"Y")
183 std::cout <<
"Cancel" << std::endl;
188 for (
const auto &device : devices)
197 std::cout <<
"Done" << std::endl;