diff options
Diffstat (limited to 'src/fnet/main.c')
-rw-r--r-- | src/fnet/main.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/fnet/main.c b/src/fnet/main.c index 6f149b497..3832cfaef 100644 --- a/src/fnet/main.c +++ b/src/fnet/main.c | |||
@@ -18,6 +18,9 @@ | |||
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
19 | */ | 19 | */ |
20 | #include "fnet.h" | 20 | #include "fnet.h" |
21 | #include <sys/types.h> | ||
22 | #include <sys/stat.h> | ||
23 | |||
21 | int arg_quiet = 0; | 24 | int arg_quiet = 0; |
22 | 25 | ||
23 | void fmessage(char* fmt, ...) { // TODO: this function is duplicated in src/firejail/util.c | 26 | void fmessage(char* fmt, ...) { // TODO: this function is duplicated in src/firejail/util.c |
@@ -86,7 +89,15 @@ printf("\n"); | |||
86 | net_if_up(argv[3]); | 89 | net_if_up(argv[3]); |
87 | } | 90 | } |
88 | 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) { |
89 | net_create_macvlan(argv[3], argv[4], atoi(argv[5])); | 92 | // use ipvlan for wireless devices |
93 | struct stat s; | ||
94 | char *fname; | ||
95 | if (asprintf(&fname, "/sys/class/net/%s/wireless", argv[4]) == -1) | ||
96 | errExit("asprintf"); | ||
97 | if (stat(fname, &s) == 0) // wireless | ||
98 | net_create_ipvlan(argv[3], argv[4], atoi(argv[5])); | ||
99 | else // regular ethernet | ||
100 | net_create_macvlan(argv[3], argv[4], atoi(argv[5])); | ||
90 | } | 101 | } |
91 | else if (argc == 7 && strcmp(argv[1], "config") == 0 && strcmp(argv[2], "interface") == 0) { | 102 | else if (argc == 7 && strcmp(argv[1], "config") == 0 && strcmp(argv[2], "interface") == 0) { |
92 | char *dev = argv[3]; | 103 | char *dev = argv[3]; |