-
Notifications
You must be signed in to change notification settings - Fork 30
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
- Loading branch information
Showing
2 changed files
with
272 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,266 @@ | ||
/* | ||
* Copyright (C) 2010-2018 Red Hat, Inc. All rights reserved. | ||
* | ||
* Author: Fabio M. Di Nitto <fabbione@kronosnet.org> | ||
* | ||
* This software licensed under GPL-2.0+, LGPL-2.0+ | ||
*/ | ||
|
||
#include "config.h" | ||
|
||
#include <string.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <unistd.h> | ||
#include <errno.h> | ||
#include <stdint.h> | ||
#include <limits.h> | ||
#include <sys/socket.h> | ||
|
||
#include "test-common.h" | ||
|
||
char testipv4_1[IPBUFSIZE]; | ||
char testipv4_2[IPBUFSIZE]; | ||
char testipv6_1[IPBUFSIZE]; | ||
char testipv6_2[IPBUFSIZE]; | ||
|
||
static int test(void) | ||
{ | ||
char device_name[IFNAMSIZ]; | ||
size_t size = IFNAMSIZ; | ||
char verifycmd[2048]; | ||
int err = 0; | ||
nozzle_t nozzle; | ||
char *error_string = NULL; | ||
|
||
printf("Testing interface del ip\n"); | ||
|
||
memset(device_name, 0, size); | ||
|
||
nozzle = nozzle_open(device_name, size, NULL); | ||
if (!nozzle) { | ||
printf("Unable to init %s\n", device_name); | ||
return -1; | ||
} | ||
|
||
printf("Testing error conditions\n"); | ||
|
||
printf("Testing invalid nozzle handle\n"); | ||
err = nozzle_del_ip(NULL, testipv4_1, "24"); | ||
if ((!err) || (errno != EINVAL)) { | ||
printf("nozzle_del_ip accepted invalid nozzle handle\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Testing empty ip address\n"); | ||
err = nozzle_del_ip(nozzle, NULL, "24"); | ||
if ((!err) || (errno != EINVAL)) { | ||
printf("nozzle_del_ip accepted invalid ip address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
|
||
printf("Testing empty netmask\n"); | ||
err = nozzle_del_ip(nozzle, testipv4_1, NULL); | ||
if ((!err) || (errno != EINVAL)) { | ||
printf("nozzle_del_ip accepted invalid netmask\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Adding ip: %s/24\n", testipv4_1); | ||
|
||
err = nozzle_add_ip(nozzle, testipv4_1, "24"); | ||
if (err < 0) { | ||
printf("Unable to assign IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Checking ip: %s/24\n", testipv4_1); | ||
|
||
memset(verifycmd, 0, sizeof(verifycmd)); | ||
snprintf(verifycmd, sizeof(verifycmd)-1, | ||
#ifdef KNET_LINUX | ||
"ip addr show dev %s | grep -q %s/24", nozzle->name, testipv4_1); | ||
#endif | ||
#ifdef KNET_BSD | ||
"ifconfig %s | grep -q %s", nozzle->name, testipv4_1); | ||
#endif | ||
err = execute_bin_sh_command(verifycmd, &error_string); | ||
if (error_string) { | ||
printf("Error string: %s\n", error_string); | ||
free(error_string); | ||
error_string = NULL; | ||
} | ||
if (err) { | ||
printf("Unable to verify IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Deleting ip: %s/24\n", testipv4_1); | ||
|
||
err = nozzle_del_ip(nozzle, testipv4_1, "24"); | ||
if (err < 0) { | ||
printf("Unable to delete IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Checking ip: %s/24\n", testipv4_1); | ||
|
||
memset(verifycmd, 0, sizeof(verifycmd)); | ||
snprintf(verifycmd, sizeof(verifycmd)-1, | ||
#ifdef KNET_LINUX | ||
"ip addr show dev %s | grep -q %s/24", nozzle->name, testipv4_1); | ||
#endif | ||
#ifdef KNET_BSD | ||
"ifconfig %s | grep -q %s", nozzle->name, testipv4_1); | ||
#endif | ||
err = execute_bin_sh_command(verifycmd, &error_string); | ||
if (error_string) { | ||
printf("Error string: %s\n", error_string); | ||
free(error_string); | ||
error_string = NULL; | ||
} | ||
if (!err) { | ||
printf("Unable to verify IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Deleting ip: %s/24 again\n", testipv4_1); | ||
|
||
err = nozzle_del_ip(nozzle, testipv4_1, "24"); | ||
if (err < 0) { | ||
printf("Unable to delete IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Adding ip: %s/64\n", testipv6_1); | ||
|
||
err = nozzle_add_ip(nozzle, testipv6_1, "64"); | ||
if (err < 0) { | ||
printf("Unable to assign IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
memset(verifycmd, 0, sizeof(verifycmd)); | ||
snprintf(verifycmd, sizeof(verifycmd)-1, | ||
#ifdef KNET_LINUX | ||
"ip addr show dev %s | grep -q %s/64", nozzle->name, testipv6_1); | ||
#endif | ||
#ifdef KNET_BSD | ||
"ifconfig %s | grep -q %s", nozzle->name, testipv6_1); | ||
#endif | ||
err = execute_bin_sh_command(verifycmd, &error_string); | ||
if (error_string) { | ||
printf("Error string: %s\n", error_string); | ||
free(error_string); | ||
error_string = NULL; | ||
} | ||
if (err) { | ||
printf("Unable to verify IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Deleting ip: %s/64\n", testipv6_1); | ||
|
||
err = nozzle_del_ip(nozzle, testipv6_1, "64"); | ||
if (err) { | ||
printf("Unable to delete IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
memset(verifycmd, 0, sizeof(verifycmd)); | ||
snprintf(verifycmd, sizeof(verifycmd)-1, | ||
#ifdef KNET_LINUX | ||
"ip addr show dev %s | grep -q %s/64", nozzle->name, testipv6_1); | ||
#endif | ||
#ifdef KNET_BSD | ||
"ifconfig %s | grep -q %s", nozzle->name, testipv6_1); | ||
#endif | ||
err = execute_bin_sh_command(verifycmd, &error_string); | ||
if (error_string) { | ||
printf("Error string: %s\n", error_string); | ||
free(error_string); | ||
error_string = NULL; | ||
} | ||
if (!err) { | ||
printf("Unable to verify IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Testing deleting an IPv6 address with mtu < 1280 (in db, not on interface)\n"); | ||
printf("Lowering interface MTU\n"); | ||
|
||
err = nozzle_set_mtu(nozzle, 1200); | ||
if (err) { | ||
printf("Unable to set MTU to 1200\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Adding ip: %s/64\n", testipv6_1); | ||
|
||
err = nozzle_add_ip(nozzle, testipv6_1, "64"); | ||
if (err < 0) { | ||
printf("Unable to assign IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
memset(verifycmd, 0, sizeof(verifycmd)); | ||
snprintf(verifycmd, sizeof(verifycmd)-1, | ||
#ifdef KNET_LINUX | ||
"ip addr show dev %s | grep -q %s/64", nozzle->name, testipv6_1); | ||
#endif | ||
#ifdef KNET_BSD | ||
"ifconfig %s | grep -q %s", nozzle->name, testipv6_1); | ||
#endif | ||
err = execute_bin_sh_command(verifycmd, &error_string); | ||
if (error_string) { | ||
printf("Error string: %s\n", error_string); | ||
free(error_string); | ||
error_string = NULL; | ||
} | ||
if (!err) { | ||
printf("Unable to verify IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
printf("Deleting ip: %s/64 with low mtu\n", testipv6_1); | ||
|
||
err = nozzle_del_ip(nozzle, testipv6_1, "64"); | ||
if (err) { | ||
printf("Unable to delete IP address\n"); | ||
err = -1; | ||
goto out_clean; | ||
} | ||
|
||
out_clean: | ||
nozzle_close(nozzle); | ||
|
||
return err; | ||
} | ||
|
||
int main(void) | ||
{ | ||
need_root(); | ||
|
||
make_local_ips(testipv4_1, testipv4_2, testipv6_1, testipv6_2); | ||
|
||
if (test() < 0) | ||
return FAIL; | ||
|
||
return PASS; | ||
} |