This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Harald Welte gerrit-no-reply at lists.osmocom.orgHarald Welte has submitted this change and it was merged. Change subject: abisip-find: add getopt option parsing in preparation for a new option ...................................................................... abisip-find: add getopt option parsing in preparation for a new option Subsequent patch I4201876431029b303dbd10e46492228379c9782a will add the -l cmdline option. Add getopt in a separate step here to keep the patch lean. Change-Id: Idba1a89753510fe6d409277b20c2db86c1b8f7f8 --- M src/ipaccess/abisip-find.c 1 file changed, 55 insertions(+), 7 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/ipaccess/abisip-find.c b/src/ipaccess/abisip-find.c index c459161..46205dd 100644 --- a/src/ipaccess/abisip-find.c +++ b/src/ipaccess/abisip-find.c @@ -24,13 +24,63 @@ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> - +#include <getopt.h> #include <osmocom/core/select.h> #include <osmocom/core/timer.h> #include <osmocom/gsm/protocol/ipaccess.h> #include <osmocom/gsm/ipa.h> #include <osmocom/bsc/gsm_data.h> + +static struct { + const char *ifname; +} cmdline_opts = { + .ifname = NULL, +}; + +static void print_help() +{ + printf("\n"); + printf("Usage: abisip-find [-l] [<interface-name>]\n"); + printf(" <interface-name> Specify the outgoing network interface,\n" + " e.g. 'eth0'\n"); +} + +static void handle_options(int argc, char **argv) +{ + while (1) { + int option_index = 0, c; + static struct option long_options[] = { + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + c = getopt_long(argc, argv, "h", + long_options, &option_index); + if (c == -1) + break; + + switch (c) { + case 'h': + print_help(); + exit(EXIT_SUCCESS); + default: + /* catch unknown options *as well as* missing arguments. */ + fprintf(stderr, "Error in command line options. Exiting. Try --help.\n"); + exit(EXIT_FAILURE); + break; + } + } + + if (argc - optind > 0) + cmdline_opts.ifname = argv[optind++]; + + if (argc - optind > 0) { + fprintf(stderr, "Error: too many arguments\n"); + print_help(); + exit(EXIT_FAILURE); + } +} static int udp_sock(const char *ifname) { @@ -173,22 +223,20 @@ int main(int argc, char **argv) { struct osmo_fd bfd; - char *ifname = NULL; int rc; printf("abisip-find (C) 2009 by Harald Welte\n"); printf("This is FREE SOFTWARE with ABSOLUTELY NO WARRANTY\n\n"); - if (argc < 2) { + handle_options(argc, argv); + + if (!cmdline_opts.ifname) fprintf(stdout, "you might need to specify the outgoing\n" " network interface, e.g. ``%s eth0''\n", argv[0]); - } else { - ifname = argv[1]; - } bfd.cb = bfd_cb; bfd.when = BSC_FD_READ | BSC_FD_WRITE; - bfd.fd = udp_sock(ifname); + bfd.fd = udp_sock(cmdline_opts.ifname); if (bfd.fd < 0) { perror("Cannot create local socket for broadcast udp"); exit(1); -- To view, visit https://gerrit.osmocom.org/5586 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: Idba1a89753510fe6d409277b20c2db86c1b8f7f8 Gerrit-PatchSet: 1 Gerrit-Project: osmo-bsc Gerrit-Branch: master Gerrit-Owner: Neels Hofmeyr <nhofmeyr at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder