From 32914803f37ebed23a51473d62e6f084ccf449cb Mon Sep 17 00:00:00 2001 From: "Joseph C. Lehner" Date: Fri, 12 Feb 2016 12:22:44 +0100 Subject: [PATCH] Add -c switch to execute command before (or instead of) TFTP upload --- main.c | 10 +++++++--- nmrp.c | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/main.c b/main.c index b1b080c..36e0e42 100644 --- a/main.c +++ b/main.c @@ -30,8 +30,9 @@ void usage(FILE *fp) fprintf(fp, "Usage: nmrpflash [OPTIONS...]\n" "\n" - "Options (-a, -i and -f are mandatory):\n" + "Options (-a, -i and -f and/or -c are mandatory):\n" " -a IP address to assign to target device\n" + " -c Command to run before (or instead of) TFTP upload\n" " -f Firmware file\n" " -i Network interface directly connected to device\n" " -m MAC address of target device (xx:xx:xx:xx:xx:xx)\n" @@ -91,12 +92,15 @@ int main(int argc, char **argv) opterr = 0; - while ((c = getopt(argc, argv, "a:f:i:m:M:p:t:T:hLVvU")) != -1) { + while ((c = getopt(argc, argv, "a:c:f:i:m:M:p:t:T:hLVvU")) != -1) { max = 0x7fffffff; switch (c) { case 'a': args.ipaddr = optarg; break; + case 'c': + args.tftpcmd = optarg; + break; case 'f': args.filename = optarg; break; @@ -157,7 +161,7 @@ int main(int argc, char **argv) } } - if (!args.filename || !args.intf || !args.ipaddr) { + if ((!args.filename && !args.tftpcmd) || !args.intf || !args.ipaddr) { usage(stderr); return 1; } diff --git a/nmrp.c b/nmrp.c index f6a1e03..6b42c5e 100644 --- a/nmrp.c +++ b/nmrp.c @@ -417,14 +417,23 @@ int nmrp_do(struct nmrpd_args *args) break; } - if (!args->tftpcmd) { + err = 0; + + if (args->tftpcmd) { + printf("Executing '%s' ... ", args->tftpcmd); + fflush(stdout); + err = system(args->tftpcmd); + if (!err) { + printf("OK\n"); + } else { + printf("ERR\n"); + } + } + + if (!err && args->filename) { printf("Uploading %s ... ", args->filename); fflush(stdout); err = tftp_put(args); - } else { - printf("Running %s ... ", args->tftpcmd); - fflush(stdout); - err = system(args->tftpcmd); } if (!err) {