X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/30ce7e8a648284a177c798804b609e45f6712aa2..3174b31d96adf0dad334e187ad6442acc6b75a62:/options.c diff --git a/options.c b/options.c index 7c33efad..cc0533de 100644 --- a/options.c +++ b/options.c @@ -74,6 +74,9 @@ int modify_window=0; #endif int blocking_io=0; +/** Global options set from command line. **/ +struct global_opts global_opts; + int read_batch=0; /* dw */ int write_batch=0; /* dw */ @@ -97,8 +100,10 @@ char *batch_ext = NULL; static int modify_window_set; - -struct in_addr socket_address = {INADDR_ANY}; +/** Local address to bind. As a character string because it's + * interpreted by the IPv6 layer: should be a numeric IP4 or ip6 + * address, or a hostname. **/ +char *bind_address; static void print_rsync_version(int f) @@ -106,6 +111,7 @@ static void print_rsync_version(int f) char const *got_socketpair = "no "; char const *hardlinks = "no "; char const *links = "no "; + char const *ipv6 = "no "; #ifdef HAVE_SOCKETPAIR got_socketpair = ""; @@ -119,16 +125,19 @@ static void print_rsync_version(int f) links = ""; #endif +#if INET6 + ipv6 = ""; +#endif + rprintf(f, "%s version %s protocol version %d\n", - RSYNC_NAME, VERSION, PROTOCOL_VERSION); + RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION); rprintf(f, "Copyright (C) 1996-2001 by Andrew Tridgell and others\n"); rprintf(f, "\n"); rprintf(f, "Capabilities: %d-bit files, %ssocketpairs, " - "%shard links, %ssymlinks, batchfiles\n\n", + "%shard links, %ssymlinks, batchfiles, %sIPv6\n\n", (int) (sizeof(OFF_T) * 8), - got_socketpair, - hardlinks, links); + got_socketpair, hardlinks, links, ipv6); #ifdef NO_INT64 rprintf(f, "WARNING: no 64-bit integers on this platform!\n"); @@ -215,6 +224,10 @@ void usage(enum logcode F) rprintf(F," -f --read-batch=EXT read batch file\n"); rprintf(F," -F --write-batch write batch file\n"); rprintf(F," -h, --help show this help screen\n"); +#ifdef INET6 + rprintf(F," -4 prefer IPv4\n"); + rprintf(F," -6 prefer IPv6\n"); +#endif rprintf(F,"\n"); @@ -295,14 +308,19 @@ static struct poptOption long_options[] = { {"port", 0, POPT_ARG_INT, &rsync_port}, {"log-format", 0, POPT_ARG_STRING, &log_format}, {"bwlimit", 0, POPT_ARG_INT, &bwlimit}, - {"address", 0, POPT_ARG_STRING, 0, OPT_ADDRESS}, + {"address", 0, POPT_ARG_STRING, &bind_address, 0}, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir}, {"hard-links", 'H', POPT_ARG_NONE, &preserve_hard_links}, {"read-batch", 'f', POPT_ARG_STRING, &batch_ext, 'f'}, {"write-batch", 'F', POPT_ARG_NONE, &write_batch, 0}, +#ifdef INET6 + {0, '4', POPT_ARG_VAL, &global_opts.af_hint, AF_INET }, + {0, '6', POPT_ARG_VAL, &global_opts.af_hint, AF_INET6 }, +#endif {0,0,0,0} }; + static char err_buf[100]; @@ -473,14 +491,6 @@ int parse_arguments(int *argc, const char ***argv, int frommain) keep_partial = 1; break; - case OPT_ADDRESS: - { - struct in_addr *ia; - if ((ia = ip_address (poptGetOptArg (pc)))) { - socket_address = *ia; - } - } - break; case 'f': /* The filename is stored for us by popt */