diff options
author | netblue30 <netblue30@yahoo.com> | 2016-01-10 13:29:34 -0500 |
---|---|---|
committer | netblue30 <netblue30@yahoo.com> | 2016-01-10 13:29:34 -0500 |
commit | 6882f50a52aabdc01e703443bec0079dbf40b117 (patch) | |
tree | 571783531f9dc2be6e326a3f4fa7dee13fb2762f /src/firejail/network.c | |
parent | development version 0.9.37 (diff) | |
download | firejail-6882f50a52aabdc01e703443bec0079dbf40b117.tar.gz firejail-6882f50a52aabdc01e703443bec0079dbf40b117.tar.zst firejail-6882f50a52aabdc01e703443bec0079dbf40b117.zip |
network work
Diffstat (limited to 'src/firejail/network.c')
-rw-r--r-- | src/firejail/network.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/firejail/network.c b/src/firejail/network.c index 5f7a84a1e..ece406fc8 100644 --- a/src/firejail/network.c +++ b/src/firejail/network.c | |||
@@ -240,6 +240,40 @@ void net_if_up(const char *ifname) { | |||
240 | close(sock); | 240 | close(sock); |
241 | } | 241 | } |
242 | 242 | ||
243 | // bring interface up | ||
244 | void net_if_down(const char *ifname) { | ||
245 | if (strlen(ifname) > IFNAMSIZ) { | ||
246 | fprintf(stderr, "Error: invalid network device name %s\n", ifname); | ||
247 | exit(1); | ||
248 | } | ||
249 | |||
250 | int sock = socket(AF_INET,SOCK_DGRAM,0); | ||
251 | if (sock < 0) | ||
252 | errExit("socket"); | ||
253 | |||
254 | // get the existing interface flags | ||
255 | struct ifreq ifr; | ||
256 | memset(&ifr, 0, sizeof(ifr)); | ||
257 | strncpy(ifr.ifr_name, ifname, IFNAMSIZ); | ||
258 | ifr.ifr_addr.sa_family = AF_INET; | ||
259 | |||
260 | // read the existing flags | ||
261 | if (ioctl(sock, SIOCGIFFLAGS, &ifr ) < 0) { | ||
262 | close(sock); | ||
263 | errExit("ioctl"); | ||
264 | } | ||
265 | |||
266 | ifr.ifr_flags &= ~IFF_UP; | ||
267 | |||
268 | // set the new flags | ||
269 | if (ioctl( sock, SIOCSIFFLAGS, &ifr ) < 0) { | ||
270 | close(sock); | ||
271 | errExit("ioctl"); | ||
272 | } | ||
273 | |||
274 | close(sock); | ||
275 | } | ||
276 | |||
243 | // configure interface | 277 | // configure interface |
244 | void net_if_ip(const char *ifname, uint32_t ip, uint32_t mask, int mtu) { | 278 | void net_if_ip(const char *ifname, uint32_t ip, uint32_t mask, int mtu) { |
245 | if (strlen(ifname) > IFNAMSIZ) { | 279 | if (strlen(ifname) > IFNAMSIZ) { |