aboutsummaryrefslogtreecommitdiffstats
path: root/src/fnet/main.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2018-06-09 11:09:10 -0400
committerLibravatar netblue30 <netblue30@yahoo.com>2018-06-09 11:09:10 -0400
commit6b988b499aaec74318c9430c96ba9868b8a779d7 (patch)
tree19743a7f9c74fc699dffbb0012db16adcd7b2898 /src/fnet/main.c
parentglibc missing O_PATH definition on Debian 7 (diff)
downloadfirejail-6b988b499aaec74318c9430c96ba9868b8a779d7.tar.gz
firejail-6b988b499aaec74318c9430c96ba9868b8a779d7.tar.zst
firejail-6b988b499aaec74318c9430c96ba9868b8a779d7.zip
wireless support
Diffstat (limited to 'src/fnet/main.c')
-rw-r--r--src/fnet/main.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/src/fnet/main.c b/src/fnet/main.c
index 3832cfaef..5be15bc75 100644
--- a/src/fnet/main.c
+++ b/src/fnet/main.c
@@ -90,14 +90,38 @@ printf("\n");
90 } 90 }
91 else if (argc == 6 && strcmp(argv[1], "create") == 0 && strcmp(argv[2], "macvlan") == 0) { 91 else if (argc == 6 && strcmp(argv[1], "create") == 0 && strcmp(argv[2], "macvlan") == 0) {
92 // use ipvlan for wireless devices 92 // use ipvlan for wireless devices
93 struct stat s; 93 // ipvlan driver was introduced in Linux kernel 3.19
94 char *fname; 94 // detect both compile time and run time
95 if (asprintf(&fname, "/sys/class/net/%s/wireless", argv[4]) == -1) 95#ifndef IPVLAN_MODE_L2 // compile time
96 errExit("asprintf"); 96 net_create_macvlan(argv[3], argv[4], atoi(argv[5]));
97 if (stat(fname, &s) == 0) // wireless 97#else
98 net_create_ipvlan(argv[3], argv[4], atoi(argv[5])); 98 // check kernel version
99 else // regular ethernet 99 struct utsname u;
100 int rv = uname(&u);
101 if (rv != 0)
102 errExit("uname");
103 int major;
104 int minor;
105 if (2 != sscanf(u.release, "%d.%d", &major, &minor)) {
106 fprintf(stderr, "Error fnet: cannot extract Linux kernel version: %s\n", u.version);
107 exit(1);
108 }
109
110 if (arg_debug)
111 printf("Linux kernel version %d.%d\n", major, minor);
112 if (major <= 3 && minor < 18)
100 net_create_macvlan(argv[3], argv[4], atoi(argv[5])); 113 net_create_macvlan(argv[3], argv[4], atoi(argv[5]));
114 else {
115 struct stat s;
116 char *fname;
117 if (asprintf(&fname, "/sys/class/net/%s/wireless", argv[4]) == -1)
118 errExit("asprintf");
119 if (stat(fname, &s) == 0) // wireless
120 net_create_ipvlan(argv[3], argv[4], atoi(argv[5]));
121 else // regular ethernet
122 net_create_macvlan(argv[3], argv[4], atoi(argv[5]));
123 }
124#endif
101 } 125 }
102 else if (argc == 7 && strcmp(argv[1], "config") == 0 && strcmp(argv[2], "interface") == 0) { 126 else if (argc == 7 && strcmp(argv[1], "config") == 0 && strcmp(argv[2], "interface") == 0) {
103 char *dev = argv[3]; 127 char *dev = argv[3];