fprintf(fp,
"Usage: nmrpflash [OPTIONS...]\n"
"\n"
- "Options (-i, -f and/or -c are mandatory):\n"
+ "Options (-i, and -f or -c are mandatory):\n"
" -a <ipaddr> IP address to assign to target device\n"
- " -A <ipaddr> IP address to assign to seleted interface\n"
+ " -A <ipaddr> IP address to assign to selected interface\n"
+ " -B Blind mode (don't wait for response packets)\n"
" -c <command> Command to run before (or instead of) TFTP upload\n"
" -f <firmware> Firmware file\n"
" -F <filename> Remote filename to use during TFTP upload\n"
" -i <interface> Network interface directly connected to device\n"
" -m <mac> MAC address of target device (xx:xx:xx:xx:xx:xx)\n"
" -M <netmask> Subnet mask to assign to target device\n"
- " -t <timeout> Timeout (in milliseconds) for regular messages\n"
+ " -t <timeout> Timeout (in milliseconds) for NMRP packets\n"
" -T <timeout> Time (seconds) to wait after successfull TFTP upload\n"
" -p <port> Port to use for TFTP upload\n"
#ifdef NMRPFLASH_SET_REGION
int main(int argc, char **argv)
{
int c, val, max;
- int list = 0;
+ bool list = false, have_dest_mac = false;
struct nmrpd_args args = {
- .rx_timeout = 200,
+ .rx_timeout = 200 * 1000,
.ul_timeout = 5 * 60 * 1000,
.tftpcmd = NULL,
.file_local = NULL,
.op = NMRP_UPLOAD_FW,
.port = 69,
.region = NULL,
+ .blind = false,
};
#ifdef NMRPFLASH_WINDOWS
char *newpath = NULL;
opterr = 0;
- while ((c = getopt(argc, argv, "a:A:c:f:F:i:m:M:p:R:t:T:hLVvU")) != -1) {
+ while ((c = getopt(argc, argv, "a:A:Bc:f:F:i:m:M:p:R:t:T:hLVvU")) != -1) {
max = 0x7fffffff;
switch (c) {
case 'a':
case 'A':
args.ipaddr_intf = optarg;
break;
+ case 'B':
+ args.blind = true;
+ break;
case 'c':
args.tftpcmd = optarg;
break;
break;
case 'm':
args.mac = optarg;
+ have_dest_mac = true;
break;
case 'M':
args.ipmask = optarg;
if (c == 'p') {
args.port = val;
} else if (c == 't') {
- args.rx_timeout = val;
+ args.rx_timeout = val * 1000;
} else if (c == 'T') {
args.ul_timeout = val * 1000;
}
++verbosity;
break;
case 'L':
- list = 1;
+ list = true;
break;
case 'h':
usage(stdout);
return 1;
}
+ if (args.blind && !have_dest_mac) {
+ fprintf(stderr, "Error: use of -B requires -m <mac>.\n");
+ return 1;
+ }
+
#ifndef NMRPFLASH_FUZZ
if (!list && ((!args.file_local && !args.tftpcmd) || !args.intf)) {
usage(stderr);