diff options
author | netblue30 <netblue30@yahoo.com> | 2018-06-09 11:09:10 -0400 |
---|---|---|
committer | netblue30 <netblue30@yahoo.com> | 2018-06-09 11:09:10 -0400 |
commit | 6b988b499aaec74318c9430c96ba9868b8a779d7 (patch) | |
tree | 19743a7f9c74fc699dffbb0012db16adcd7b2898 /src/fnet/main.c | |
parent | glibc missing O_PATH definition on Debian 7 (diff) | |
download | firejail-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.c | 38 |
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]; |