+/* --- @cmd_ifflags@ --- */
+
+static int cmd_ifflags(char **av)
+{
+ static const struct iftab {
+ const char *name;
+ unsigned f;
+ } iftab[] = {
+ { "broadcast", IFF_BROADCAST },
+ { "loopback", IFF_LOOPBACK },
+ { "pointopoint", IFF_POINTOPOINT },
+ { 0, 0 }
+ };
+
+ char *p;
+ int sense;
+ struct iftab *ift;
+ int f;
+
+ check();
+ if ((f = ioctl(fd, UNIOCGIFFLAGS)) < 0)
+ die("error reading interface flags: %s", strerror(errno));
+
+ for (p = strtok(*av++, ","); p; p = strtok(0, ",")) {
+ sense = 1;
+ switch (*p) {
+ case '-': sense = 0;
+ case '+': p++;
+ break;
+ }
+ ift = LOOKUP(iftab, p);
+ if (!ift)
+ die("unknown interface flag `%s'", p);
+ if (sense)
+ f |= ift->f;
+ else
+ f &= ~ift->f;
+ }
+ if (ioctl(fd, UNIOCSIFFLAGS, f))
+ die("error setting interface flags: %s", strerror(errno));
+ return (run(av));
+}
+