summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2023-06-15 17:59:06 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-06-16 15:38:18 +0100
commit2abfbca690ff00cb58ce08a65cde006578ee3de9 (patch)
tree561f2e7aba43a34f111989f195492073c130810a /meta/recipes-devtools/qemu/qemu-helper/tunctl.c
parent038ec3a8c69bee4707817877e7f995a3f5050a99 (diff)
downloadopenembedded-core-2abfbca690ff00cb58ce08a65cde006578ee3de9.tar.gz
runqemu/qemu-helper: Drop tunctl
ip tuntap provides the functionality that we obtained from tunctl. We only needed tunctl when ifconfig was more available than ip. That isn't the case now so we can drop tunctl and all the hoops we need to jump through to build and provide it. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu-helper/tunctl.c')
-rw-r--r--meta/recipes-devtools/qemu/qemu-helper/tunctl.c158
1 files changed, 0 insertions, 158 deletions
diff --git a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c b/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
deleted file mode 100644
index d745dd06cb..0000000000
--- a/meta/recipes-devtools/qemu/qemu-helper/tunctl.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Copyright 2002 Jeff Dike
- * Licensed under the GPL
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <pwd.h>
-#include <grp.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <linux/if_tun.h>
-
-/* TUNSETGROUP appeared in 2.6.23 */
-#ifndef TUNSETGROUP
-#define TUNSETGROUP _IOW('T', 206, int)
-#endif
-
-static void Usage(char *name, int status)
-{
- fprintf(stderr, "Create: %s [-b] [-u owner] [-g group] [-t device-name] "
- "[-f tun-clone-device]\n", name);
- fprintf(stderr, "Delete: %s -d device-name [-f tun-clone-device]\n\n",
- name);
- fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems"
- " use\n/dev/misc/net/tun instead\n\n");
- fprintf(stderr, "-b will result in brief output (just the device name)\n");
- exit(status);
-}
-
-int main(int argc, char **argv)
-{
- struct ifreq ifr;
- struct passwd *pw;
- struct group *gr;
- uid_t owner = -1;
- gid_t group = -1;
- int tap_fd, opt, delete = 0, brief = 0;
- char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end;
-
- while((opt = getopt(argc, argv, "bd:f:t:u:g:h")) > 0){
- switch(opt) {
- case 'b':
- brief = 1;
- break;
- case 'd':
- delete = 1;
- tun = optarg;
- break;
- case 'f':
- file = optarg;
- break;
- case 'u':
- pw = getpwnam(optarg);
- if(pw != NULL){
- owner = pw->pw_uid;
- break;
- }
- owner = strtol(optarg, &end, 0);
- if(*end != '\0'){
- fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n",
- optarg);
- Usage(name, 1);
- }
- break;
- case 'g':
- gr = getgrnam(optarg);
- if(gr != NULL){
- group = gr->gr_gid;
- break;
- }
- group = strtol(optarg, &end, 0);
- if(*end != '\0'){
- fprintf(stderr, "'%s' is neither a groupname nor a numeric group.\n",
- optarg);
- Usage(name, 1);
- }
- break;
-
- case 't':
- tun = optarg;
- break;
- case 'h':
- Usage(name, 0);
- break;
- default:
- Usage(name, 1);
- }
- }
-
- argv += optind;
- argc -= optind;
-
- if(argc > 0)
- Usage(name, 1);
-
- if((tap_fd = open(file, O_RDWR)) < 0){
- fprintf(stderr, "Failed to open '%s' : ", file);
- perror("");
- exit(1);
- }
-
- memset(&ifr, 0, sizeof(ifr));
-
- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
- strncpy(ifr.ifr_name, tun, sizeof(ifr.ifr_name) - 1);
- if(ioctl(tap_fd, TUNSETIFF, (void *) &ifr) < 0){
- perror("TUNSETIFF");
- exit(1);
- }
-
- if(delete){
- if(ioctl(tap_fd, TUNSETPERSIST, 0) < 0){
- perror("disabling TUNSETPERSIST");
- exit(1);
- }
- printf("Set '%s' nonpersistent\n", ifr.ifr_name);
- }
- else {
- /* emulate behaviour prior to TUNSETGROUP */
- if(owner == -1 && group == -1) {
- owner = geteuid();
- }
-
- if(owner != -1) {
- if(ioctl(tap_fd, TUNSETOWNER, owner) < 0){
- perror("TUNSETOWNER");
- exit(1);
- }
- }
- if(group != -1) {
- if(ioctl(tap_fd, TUNSETGROUP, group) < 0){
- perror("TUNSETGROUP");
- exit(1);
- }
- }
-
- if(ioctl(tap_fd, TUNSETPERSIST, 1) < 0){
- perror("enabling TUNSETPERSIST");
- exit(1);
- }
-
- if(brief)
- printf("%s\n", ifr.ifr_name);
- else {
- printf("Set '%s' persistent and owned by", ifr.ifr_name);
- if(owner != -1)
- printf(" uid %d", owner);
- if(group != -1)
- printf(" gid %d", group);
- printf("\n");
- }
- }
- return(0);
-}