arguments.h revision 67e571de63a8e465dc8f1b17e16744a1d3fb552c
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen/*
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * lxc: linux Container library
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen *
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * (C) Copyright IBM Corp. 2007, 2008
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen *
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * Authors:
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * Daniel Lezcano <dlezcano at fr.ibm.com>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * Michel Normand <normand at fr.ibm.com>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen *
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen * This library is free software; you can redistribute it and/or
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * modify it under the terms of the GNU Lesser General Public
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * License as published by the Free Software Foundation; either
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * version 2.1 of the License, or (at your option) any later version.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen *
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * This library is distributed in the hope that it will be useful,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * but WITHOUT ANY WARRANTY; without even the implied warranty of
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * Lesser General Public License for more details.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen *
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * You should have received a copy of the GNU Lesser General Public
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * License along with this library; if not, write to the Free Software
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#ifndef __arguments_h
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#define __arguments_h
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include <getopt.h>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstruct lxc_arguments;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainentypedef int (*lxc_arguments_parser_t) (struct lxc_arguments *, int, char*);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainentypedef int (*lxc_arguments_checker_t) (const struct lxc_arguments *);
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstruct lxc_arguments {
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *help;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *progname;
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen const struct option* options;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen lxc_arguments_parser_t parser;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen lxc_arguments_checker_t checker;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen const char *name;
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen char *log_file;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *log_priority;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int quiet;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int daemonize;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *rcfile;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *console;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *console_log;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *pidfile;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *lxcpath;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* for lxc-checkpoint/restart */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *statefile;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int statefd;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int flags;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* for lxc-console */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int ttynum;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char escape;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* for lxc-wait */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *states;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen long timeout;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen /* close fds from parent? */
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen int close_all_fds;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* remaining arguments */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *const *argv;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int argc;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* private arguments */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen void *data;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#define LXC_COMMON_OPTIONS \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"name", required_argument, 0, 'n'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"help", no_argument, 0, 'h'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"usage", no_argument, 0, OPT_USAGE}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"quiet", no_argument, 0, 'q'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"logfile", required_argument, 0, 'o'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"logpriority", required_argument, 0, 'l'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {"lxcpath", required_argument, 0, 'P'}, \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen {0, 0, 0, 0}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen/* option keys for long only options */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#define OPT_USAGE 0x1000
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenextern int lxc_arguments_parse(struct lxc_arguments *args,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int argc, char *const argv[]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenextern int lxc_arguments_str_to_int(struct lxc_arguments *args, const char *str);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenextern const char *lxc_strerror(int errnum);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#define lxc_error(arg, fmt, args...) if (!(arg)->quiet) \
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen fprintf(stderr, "%s: " fmt "\n", (arg)->progname, ## args)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#endif
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen