[sheepdog] [PATCH] dog: use new environment variables for specifying IP address and port number

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Wed Jun 11 04:25:44 CEST 2014


New environment variables are used for specifying IP address and port
number:
- SHEEPDOG_DOG_ADDR for IP address
- SHEEPDOG_DOG_PORT for port number

It is useful when sheep is launched with -b option.

If both of the variables and -a or -p option are specified, command
line option is prioritized.

Related issue:
https://bugs.launchpad.net/sheepdog-project/+bug/1322633

Cc: Valerio Pachera <sirio81 at gmail.com>
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
 dog/dog.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/dog/dog.c b/dog/dog.c
index 1eefbdc..7d1153d 100644
--- a/dog/dog.c
+++ b/dog/dog.c
@@ -449,7 +449,7 @@ int main(int argc, char **argv)
 	struct option *long_options;
 	const struct command *commands;
 	const char *short_options;
-	char *p;
+	char *p, *env;
 	const struct sd_option *sd_opts;
 	uint8_t sdhost[16];
 	int sdport;
@@ -471,6 +471,26 @@ int main(int argc, char **argv)
 	long_options = build_long_options(sd_opts);
 	short_options = build_short_options(sd_opts);
 
+	env = getenv("SHEEPDOG_DOG_ADDR");
+	if (env) {
+		if (!str_to_addr(env, sdhost)) {
+			sd_err("Invalid ip address %s", env);
+			return EXIT_FAILURE;
+		}
+		memcpy(sd_nid.addr, sdhost, sizeof(sdhost));
+	}
+
+	env = getenv("SHEEPDOG_DOG_PORT");
+	if (env) {
+		sdport = strtol(env, &p, 10);
+		if (env == p || sdport < 1 || sdport > UINT16_MAX
+		    || !is_numeric(env)) {
+			sd_err("Invalid port number '%s'", env);
+			exit(EXIT_USAGE);
+		}
+		sd_nid.port = sdport;
+	}
+
 	while ((ch = getopt_long(argc, argv, short_options, long_options,
 				&longindex)) >= 0) {
 
-- 
1.7.1




More information about the sheepdog mailing list