Changeset 2694
- Timestamp:
- 03/01/08 02:07:49 (9 months ago)
- Files:
-
- trunk/src/attribute-util.h (added)
- trunk/src/nattribute.c (modified) (8 diffs)
- trunk/src/vattribute.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/nattribute.c
r2585 r2694 23 23 24 24 #include "util.h" 25 #include "attribute-util.h" 25 26 #include <lib/vserver.h> 26 27 … … 41 42 #define CMD_FLAG 0x2003 42 43 #define CMD_SECURE 0x2004 44 #define CMD_GET 0x2005 43 45 44 46 int wrapper_exit_code = 1; … … 53 55 { "flag", required_argument, 0, CMD_FLAG }, 54 56 { "secure", no_argument, 0, CMD_SECURE }, 57 { "get", no_argument, 0, CMD_GET }, 55 58 {0,0,0,0} 56 59 }; 57 60 58 61 struct Arguments { 62 int mode; 59 63 nid_t nid; 60 struct vc_net_flags flags;61 struct vc_net_caps caps;64 struct vc_net_flags flags; 65 struct vc_net_caps caps; 62 66 }; 63 67 … … 68 72 WRITE_STR(fd, cmd); 69 73 WRITE_MSG(fd, 70 " --set [--nid <nid>] [--ncap [~!]<ncap>] [--flag [~!]<flag>] [--secure] -- [<program> <args>*]\n" 74 " {--set|--get} [--nid <nid>] [--ncap [~!]<ncap>] [--flag [~!]<flag>] [--secure] --\n" 75 " [<program> <args>*]\n" 71 76 "\n" 72 77 " --ncap <cap> ... network capability to be added\n" … … 82 87 { 83 88 WRITE_MSG(1, 84 "nattribute " VERSION " -- sets attributes of network contexts\n"89 "nattribute " VERSION " -- sets/gets attributes of network contexts\n" 85 90 "This program is part of " PACKAGE_STRING "\n\n" 86 91 "Copyright (C) 2004 Enrico Scholz\n" … … 134 139 } 135 140 141 static int 142 printAttrs(struct Arguments *args) 143 { 144 struct vc_net_flags flags; 145 struct vc_net_caps caps; 146 147 Evc_get_nflags(args->nid, &flags); 148 Evc_get_ncaps(args->nid, &caps); 149 150 print_bitfield(1, ncap, "ncapabilities", &caps.ncaps); 151 print_bitfield(1, nflag, "nflags", &flags.flagword); 152 153 return 0; 154 } 155 136 156 int main(int argc, char *argv[]) 137 157 { 138 158 struct Arguments args = { 159 .mode = CMD_SET, 139 160 .nid = VC_NOCTX, 140 161 .flags = { .flagword = 0, .mask = 0 }, … … 149 170 case CMD_HELP : showHelp(1, argv[0], 0); 150 171 case CMD_VERSION : showVersion(); 151 case CMD_SET : break; // default op currently 172 case CMD_SET : args.mode = CMD_SET; break; 173 case CMD_GET : args.mode = CMD_GET; break; 152 174 case CMD_NID : args.nid = Evc_nidopt2nid(optarg,true); break; 153 175 case CMD_FLAG : parseFlags(optarg, &args.flags); break; … … 165 187 if (args.nid==VC_NOCTX) args.nid = Evc_get_task_nid(0); 166 188 167 if (args.caps.cmask && 168 vc_set_ncaps(args.nid, &args.caps)==-1) 169 perror(ENSC_WRAPPERS_PREFIX "vc_set_ncaps()"); 170 else if (args.flags.mask && 171 vc_set_nflags(args.nid, &args.flags)==-1) 172 perror(ENSC_WRAPPERS_PREFIX "vc_set_nflags()"); 173 else if (optind<argc) 174 EexecvpD(argv[optind], argv+optind); 175 else 176 return EXIT_SUCCESS; 189 if (args.mode == CMD_SET) { 190 if (args.caps.cmask && 191 vc_set_ncaps(args.nid, &args.caps)==-1) 192 perror(ENSC_WRAPPERS_PREFIX "vc_set_ncaps()"); 193 else if (args.flags.mask && 194 vc_set_nflags(args.nid, &args.flags)==-1) 195 perror(ENSC_WRAPPERS_PREFIX "vc_set_nflags()"); 196 else if (optind<argc) 197 EexecvpD(argv[optind], argv+optind); 198 else 199 return EXIT_SUCCESS; 200 } 201 else if (args.mode == CMD_GET) { 202 printAttrs(&args); 203 if (optind<argc) 204 EexecvpD(argv[optind], argv+optind); 205 else 206 return EXIT_SUCCESS; 207 } 177 208 178 209 return EXIT_FAILURE; trunk/src/vattribute.c
r2652 r2694 22 22 23 23 #include "util.h" 24 #include "attribute-util.h" 24 25 #include <lib/vserver.h> 25 26 … … 157 158 } 158 159 159 static inline int160 ffsull(unsigned long long word)161 {162 int bit;163 for (bit = 0; bit < 64; bit++) {164 if (word & (1ULL << bit))165 break;166 }167 if (bit == 64)168 bit = 0;169 return bit;170 }171 172 160 static int 173 161 printAttrs(struct Arguments *args) … … 180 168 Evc_get_ccaps(args->xid, &caps); 181 169 182 #define PRINT_VALUES(type, name, var) \ 183 WRITE_MSG(1, name ":\n"); \ 184 first = 1; \ 185 while (1) { \ 186 char const *i; \ 187 i = vc_lo ## type ## 2text(var); \ 188 if (!i) \ 189 break; \ 190 if (!first) \ 191 WRITE_MSG(1, ","); \ 192 else \ 193 first = 0; \ 194 WRITE_STR(1, i); \ 195 } \ 196 while (*(var)) { \ 197 int bit = ffsull(*(var)); \ 198 if (!bit) \ 199 break; \ 200 if (!first) \ 201 WRITE_MSG(1, ","); \ 202 else \ 203 first = 0; \ 204 WRITE_MSG(1, "^"); \ 205 WRITE_INT(1, bit); \ 206 *(var) &= ~(1ULL << bit); \ 207 } \ 208 WRITE_MSG(1, "\n"); 209 210 PRINT_VALUES(bcap, "bcapabilities", &caps.bcaps); 211 PRINT_VALUES(ccap, "ccapabilities", &caps.ccaps); 212 PRINT_VALUES(cflag, "flags", &flags.flagword); 170 print_bitfield(1, bcap, "bcapabilities", &caps.bcaps); 171 print_bitfield(1, ccap, "ccapabilities", &caps.ccaps); 172 print_bitfield(1, cflag, "flags", &flags.flagword); 213 173 214 174 return 0;
