X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ftunctl.c;h=3f1c807d7b2fcee27e7426d2d8af2496d8924606;hb=HEAD;hp=6fe8a810923f7808dd4d400b7764689fda4ba4f1;hpb=4ccc41ab34bc162da50e9b2ebf72f3aa89a05566;p=util-vserver.git diff --git a/src/tunctl.c b/src/tunctl.c index 6fe8a81..3f1c807 100644 --- a/src/tunctl.c +++ b/src/tunctl.c @@ -33,6 +33,21 @@ #include /* Make sure we have the necessary ioctls */ +#ifndef TUNSETNOCSUM +# define TUNSETNOCSUM _IOW('T', 200, int) +#endif +#ifndef TUNSETIFF +# define TUNSETIFF _IOW('T', 202, int) +#endif +#ifndef TUNSETPERSIST +# define TUNSETPERSIST _IOW('T', 203, int) +#endif +#ifndef TUNSETOWNER +# define TUNSETOWNER _IOW('T', 204, int) +#endif +#ifndef TUNSETLINK +# define TUNSETLINK _IOW('T', 205, int) +#endif #ifndef TUNSETGROUP # define TUNSETGROUP _IOW('T', 206, int) #endif @@ -61,24 +76,26 @@ #define CMD_LINKTYPE 0x0100 #define CMD_TUN 0x0200 #define CMD_TAP 0x0400 +#define CMD_NID_FAILURE_OK (0x0800 | CMD_NID) int wrapper_exit_code = 255; struct option const CMDLINE_OPTIONS[] = { - { "help", no_argument, 0, CMD_HELP }, - { "version", no_argument, 0, CMD_VERSION }, - { "nid", required_argument, 0, CMD_NID }, - { "device", required_argument, 0, CMD_DEVICE }, - { "persist", no_argument, 0, CMD_PERSIST }, - { "~persist", no_argument, 0, CMD_NOPERSIST }, - { "checksum", no_argument, 0, CMD_CSUM }, - { "~checksum", no_argument, 0, CMD_NOCSUM }, - { "uid", required_argument, 0, CMD_UID }, - { "gid", required_argument, 0, CMD_GID }, - { "linktype", required_argument, 0, CMD_LINKTYPE }, - { "tun", no_argument, 0, CMD_TUN }, - { "tap", no_argument, 0, CMD_TAP }, + { "help", no_argument, 0, CMD_HELP }, + { "version", no_argument, 0, CMD_VERSION }, + { "nid", required_argument, 0, CMD_NID }, + { "device", required_argument, 0, CMD_DEVICE }, + { "persist", no_argument, 0, CMD_PERSIST }, + { "~persist", no_argument, 0, CMD_NOPERSIST }, + { "checksum", no_argument, 0, CMD_CSUM }, + { "~checksum", no_argument, 0, CMD_NOCSUM }, + { "uid", required_argument, 0, CMD_UID }, + { "gid", required_argument, 0, CMD_GID }, + { "linktype", required_argument, 0, CMD_LINKTYPE }, + { "tun", no_argument, 0, CMD_TUN }, + { "tap", no_argument, 0, CMD_TAP }, + { "nid-failure-ok", required_argument, 0, CMD_NID_FAILURE_OK }, {0,0,0,0} }; @@ -140,8 +157,12 @@ doTunctl(struct Arguments *args, char *interface) EioctlD(fd, TUNSETOWNER, (void *) (long) args->uid); if (args->set & CMD_GID) EioctlD(fd, TUNSETGROUP, (void *) (long) args->gid); - if (args->set & CMD_NID) - EioctlD(fd, TUNSETNID, (void *) (long) args->nid); + if (args->set & CMD_NID) { + if (args->set & CMD_NID_FAILURE_OK) + ioctl(fd, TUNSETNID, (void *) (long) args->nid); + else + EioctlD(fd, TUNSETNID, (void *) (long) args->nid); + } if (args->set & CMD_LINKTYPE) EioctlD(fd, TUNSETLINK, (void *) (long) args->linktype); if (args->set & (CMD_PERSIST|CMD_NOPERSIST)) @@ -174,6 +195,7 @@ int main(int argc, char *argv[]) case CMD_HELP : showHelp(1, argv[0], 0); case CMD_VERSION : showVersion(); + case CMD_NID_FAILURE_OK: case CMD_NID : args.nid = Evc_nidopt2nid(optarg, true); break; case CMD_DEVICE : args.device = optarg; break; case CMD_PERSIST : args.persist = 1; break;