X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fnattribute.c;h=ed10badc9a9ec59521a273341def3e0fc81260c2;hb=148ab3024621f97b9cf95091657db2448098bc66;hp=5f732cc06e46006df4b6c10e958afdc3eb91073b;hpb=517fb954f46091a78f471435b7f284668138a2da;p=util-vserver.git diff --git a/src/nattribute.c b/src/nattribute.c index 5f732cc..ed10bad 100644 --- a/src/nattribute.c +++ b/src/nattribute.c @@ -22,6 +22,7 @@ #endif #include "util.h" +#include "attribute-util.h" #include #include @@ -40,6 +41,7 @@ #define CMD_CAP 0x2002 #define CMD_FLAG 0x2003 #define CMD_SECURE 0x2004 +#define CMD_GET 0x2005 int wrapper_exit_code = 1; @@ -52,13 +54,15 @@ CMDLINE_OPTIONS[] = { { "ncap", required_argument, 0, CMD_CAP }, { "flag", required_argument, 0, CMD_FLAG }, { "secure", no_argument, 0, CMD_SECURE }, + { "get", no_argument, 0, CMD_GET }, {0,0,0,0} }; struct Arguments { + int mode; nid_t nid; - struct vc_net_flags flags; - struct vc_net_caps caps; + struct vc_net_flags flags; + struct vc_net_caps caps; }; static void @@ -67,7 +71,8 @@ showHelp(int fd, char const *cmd, int res) WRITE_MSG(fd, "Usage:\n "); WRITE_STR(fd, cmd); WRITE_MSG(fd, - " --set [--nid ] [--ncap [~!]] [--flag [~!]] [--secure] -- [ *]\n" + " {--set|--get} [--nid ] [--ncap [~!]] [--flag [~!]] [--secure] --\n" + " [ *]\n" "\n" " --ncap ... network capability to be added\n" " --flag ... network flag to be added\n" @@ -81,7 +86,7 @@ static void showVersion() { WRITE_MSG(1, - "nattribute " VERSION " -- sets attributes of network contexts\n" + "nattribute " VERSION " -- sets/gets attributes of network contexts\n" "This program is part of " PACKAGE_STRING "\n\n" "Copyright (C) 2004 Enrico Scholz\n" "Copyright (C) 2006 Daniel Hokka Zakrisson\n" @@ -126,16 +131,32 @@ parseSecure(struct vc_net_flags * flags, struct vc_net_caps * caps) { // TODO: generalize this - caps->ncaps = 0ull; - caps->cmask = 0ull; + caps->ncaps = VC_NXC_RAW_ICMP; + caps->cmask = VC_NXC_RAW_ICMP; flags->flagword = VC_NXF_HIDE_NETIF; flags->mask = VC_NXF_HIDE_NETIF; } +static int +printAttrs(struct Arguments *args) +{ + struct vc_net_flags flags; + struct vc_net_caps caps; + + Evc_get_nflags(args->nid, &flags); + Evc_get_ncaps(args->nid, &caps); + + print_bitfield(1, ncap, "ncapabilities", &caps.ncaps); + print_bitfield(1, nflag, "nflags", &flags.flagword); + + return 0; +} + int main(int argc, char *argv[]) { struct Arguments args = { + .mode = CMD_SET, .nid = VC_NOCTX, .flags = { .flagword = 0, .mask = 0 }, .caps = { .ncaps = 0, .cmask = 0 }, @@ -148,7 +169,8 @@ int main(int argc, char *argv[]) switch (c) { case CMD_HELP : showHelp(1, argv[0], 0); case CMD_VERSION : showVersion(); - case CMD_SET : break; // default op currently + case CMD_SET : args.mode = CMD_SET; break; + case CMD_GET : args.mode = CMD_GET; break; case CMD_NID : args.nid = Evc_nidopt2nid(optarg,true); break; case CMD_FLAG : parseFlags(optarg, &args.flags); break; case CMD_CAP : parseNCaps(optarg, &args.caps); break; @@ -164,16 +186,25 @@ int main(int argc, char *argv[]) if (args.nid==VC_NOCTX) args.nid = Evc_get_task_nid(0); - if (args.caps.cmask && - vc_set_ncaps(args.nid, &args.caps)==-1) - perror(ENSC_WRAPPERS_PREFIX "vc_set_ncaps()"); - else if (args.flags.mask && - vc_set_nflags(args.nid, &args.flags)==-1) - perror(ENSC_WRAPPERS_PREFIX "vc_set_nflags()"); - else if (optind