From 982f58f8ef77d0f8c338419b55e406c68938b493 Mon Sep 17 00:00:00 2001 From: Quentin Deslandes Date: Feb 29 2024 08:40:44 +0000 Subject: Merge branch 'c9s' into c9s-sig-hyperscale --- diff --git a/.gitignore b/.gitignore index f67f8e9..d04f5bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,19 @@ -SOURCES/iproute2-6.1.0.tar.xz +/iproute2-4.18.0.tar.xz +/iproute2-4.20.0.tar.xz +/iproute2-5.0.0.tar.xz +/iproute2-5.1.0.tar.xz +/iproute2-5.2.0.tar.xz +/iproute2-5.3.0.tar.xz +/iproute2-5.4.0.tar.xz +/iproute2-5.5.0.tar.xz +/iproute2-5.7.0.tar.xz +/iproute2-5.8.0.tar.xz +/iproute2-5.9.0.tar.xz +/iproute2-5.10.0.tar.xz +/iproute2-5.13.0.tar.xz +/iproute2-5.15.0.tar.xz +/iproute2-5.18.0.tar.xz +/iproute2-6.0.0.tar.xz +/iproute2-6.1.0.tar.xz +/iproute2-6.2.0.tar.xz +/iproute2-6.7.0.tar.xz diff --git a/.iproute.metadata b/.iproute.metadata deleted file mode 100644 index 58be0cf..0000000 --- a/.iproute.metadata +++ /dev/null @@ -1 +0,0 @@ -a10a6b479a641f2d4280c762ce531ebe3f2adb1c SOURCES/iproute2-6.1.0.tar.xz diff --git a/SOURCES/0001-ss-add-support-for-BPF-socket-local-storage.patch b/SOURCES/0001-ss-add-support-for-BPF-socket-local-storage.patch deleted file mode 100644 index 38fbcb9..0000000 --- a/SOURCES/0001-ss-add-support-for-BPF-socket-local-storage.patch +++ /dev/null @@ -1,407 +0,0 @@ -From 8740ca9dcd3ccf1c75c362900cb3218ae3204cf5 Mon Sep 17 00:00:00 2001 -From: Quentin Deslandes -Date: Wed, 21 Feb 2024 16:16:19 +0100 -Subject: [PATCH] ss: add support for BPF socket-local storage - -While sock_diag is able to return BPF socket-local storage in response -to INET_DIAG_REQ_SK_BPF_STORAGES requests, ss doesn't request it. - -This change introduces the --bpf-maps and --bpf-map-id= options to request -BPF socket-local storage for all SK_STORAGE maps, or only specific ones. - -The bigger part of this change will check the requested map IDs and -ensure they are valid. The column COL_EXT is used to print the -socket-local data into. - -When --bpf-maps is used, ss will send an empty -INET_DIAG_REQ_SK_BPF_STORAGES request, in return the kernel will send -all the BPF socket-local storage entries for a given socket. The BTF -data for each map is loaded on demand, as ss can't predict which map ID -are used. - -When --bpf-map-id=ID is used, a file descriptor to the requested maps is -open to 1) ensure the map doesn't disappear before the data is printed, -and 2) ensure the map type is BPF_MAP_TYPE_SK_STORAGE. The BTF data for -each requested map is loaded before the request is sent to the kernel. - -Co-developed-by: Martin KaFai Lau -Signed-off-by: Martin KaFai Lau -Signed-off-by: Quentin Deslandes -Signed-off-by: David Ahern ---- - misc/ss.c | 272 +++++++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 269 insertions(+), 3 deletions(-) - -diff --git a/misc/ss.c b/misc/ss.c -index 72a841be..2c7e7c58 100644 ---- a/misc/ss.c -+++ b/misc/ss.c -@@ -51,6 +51,24 @@ - #include - #include - -+#ifdef HAVE_LIBBPF -+/* If libbpf is new enough (0.5+), support for pretty-printing BPF socket-local -+ * storage is enabled, otherwise we emit a warning and disable it. -+ * ENABLE_BPF_SKSTORAGE_SUPPORT is only used to gate the socket-local storage -+ * feature, so this wouldn't prevent any feature relying on HAVE_LIBBPF to be -+ * usable. -+ */ -+#define ENABLE_BPF_SKSTORAGE_SUPPORT -+ -+#include -+#include -+ -+#if (LIBBPF_MAJOR_VERSION == 0) && (LIBBPF_MINOR_VERSION < 5) -+#warning "libbpf version 0.5 or later is required, disabling BPF socket-local storage support" -+#undef ENABLE_BPF_SKSTORAGE_SUPPORT -+#endif -+#endif -+ - #if HAVE_RPC - #include - #include -@@ -3384,6 +3402,202 @@ static void parse_diag_msg(struct nlmsghdr *nlh, struct sockstat *s) - memcpy(s->remote.data, r->id.idiag_dst, s->local.bytelen); - } - -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ -+#define MAX_NR_BPF_MAP_ID_OPTS 32 -+ -+struct btf; -+ -+static struct bpf_map_opts { -+ unsigned int nr_maps; -+ struct bpf_sk_storage_map_info { -+ unsigned int id; -+ int fd; -+ } maps[MAX_NR_BPF_MAP_ID_OPTS]; -+ bool show_all; -+} bpf_map_opts; -+ -+static void bpf_map_opts_mixed_error(void) -+{ -+ fprintf(stderr, -+ "ss: --bpf-maps and --bpf-map-id cannot be used together\n"); -+} -+ -+static int bpf_map_opts_load_info(unsigned int map_id) -+{ -+ struct bpf_map_info info = {}; -+ uint32_t len = sizeof(info); -+ int fd; -+ int r; -+ -+ if (bpf_map_opts.nr_maps == MAX_NR_BPF_MAP_ID_OPTS) { -+ fprintf(stderr, -+ "ss: too many (> %u) BPF socket-local storage maps found, skipping map ID %u\n", -+ MAX_NR_BPF_MAP_ID_OPTS, map_id); -+ return 0; -+ } -+ -+ fd = bpf_map_get_fd_by_id(map_id); -+ if (fd < 0) { -+ if (errno == -ENOENT) -+ return 0; -+ -+ fprintf(stderr, "ss: cannot get fd for BPF map ID %u%s\n", -+ map_id, errno == EPERM ? -+ ": missing root permissions, CAP_BPF, or CAP_SYS_ADMIN" : ""); -+ return -1; -+ } -+ -+ r = bpf_obj_get_info_by_fd(fd, &info, &len); -+ if (r) { -+ fprintf(stderr, "ss: failed to get info for BPF map ID %u\n", -+ map_id); -+ close(fd); -+ return -1; -+ } -+ -+ if (info.type != BPF_MAP_TYPE_SK_STORAGE) { -+ fprintf(stderr, -+ "ss: BPF map with ID %s has type ID %d, expecting %d ('sk_storage')\n", -+ optarg, info.type, BPF_MAP_TYPE_SK_STORAGE); -+ close(fd); -+ return -1; -+ } -+ -+ bpf_map_opts.maps[bpf_map_opts.nr_maps].id = map_id; -+ bpf_map_opts.maps[bpf_map_opts.nr_maps++].fd = fd; -+ -+ return 0; -+} -+ -+static struct bpf_sk_storage_map_info *bpf_map_opts_get_info( -+ unsigned int map_id) -+{ -+ unsigned int i; -+ int r; -+ -+ for (i = 0; i < bpf_map_opts.nr_maps; ++i) { -+ if (bpf_map_opts.maps[i].id == map_id) -+ return &bpf_map_opts.maps[i]; -+ } -+ -+ r = bpf_map_opts_load_info(map_id); -+ if (r) -+ return NULL; -+ -+ return &bpf_map_opts.maps[bpf_map_opts.nr_maps - 1]; -+} -+ -+static int bpf_map_opts_add_id(const char *optarg) -+{ -+ size_t optarg_len; -+ unsigned long id; -+ char *end; -+ -+ if (bpf_map_opts.show_all) { -+ bpf_map_opts_mixed_error(); -+ return -1; -+ } -+ -+ optarg_len = strlen(optarg); -+ id = strtoul(optarg, &end, 0); -+ if (end != optarg + optarg_len || id == 0 || id >= UINT32_MAX) { -+ fprintf(stderr, "ss: invalid BPF map ID %s\n", optarg); -+ return -1; -+ } -+ -+ /* Force lazy loading of the map's data. */ -+ if (!bpf_map_opts_get_info(id)) -+ return -1; -+ -+ return 0; -+} -+ -+static void bpf_map_opts_destroy(void) -+{ -+ int i; -+ -+ for (i = 0; i < bpf_map_opts.nr_maps; ++i) -+ close(bpf_map_opts.maps[i].fd); -+} -+ -+static struct rtattr *bpf_map_opts_alloc_rta(void) -+{ -+ struct rtattr *stgs_rta, *fd_rta; -+ size_t total_size; -+ unsigned int i; -+ void *buf; -+ -+ /* If bpf_map_opts.show_all == true, we will send an empty message to -+ * the kernel, which will return all the socket-local data attached to -+ * a socket, no matter their map ID -+ */ -+ if (bpf_map_opts.show_all) { -+ total_size = RTA_LENGTH(0); -+ } else { -+ total_size = RTA_LENGTH(RTA_LENGTH(sizeof(int)) * -+ bpf_map_opts.nr_maps); -+ } -+ -+ buf = malloc(total_size); -+ if (!buf) -+ return NULL; -+ -+ stgs_rta = buf; -+ stgs_rta->rta_type = INET_DIAG_REQ_SK_BPF_STORAGES | NLA_F_NESTED; -+ stgs_rta->rta_len = total_size; -+ -+ /* If inet_show_netlink() retries fetching socket data, nr_maps might -+ * be different from 0, even with show_all == true, so we return early -+ * to avoid inserting specific map IDs into the request. -+ */ -+ if (bpf_map_opts.show_all) -+ return stgs_rta; -+ -+ buf = RTA_DATA(stgs_rta); -+ for (i = 0; i < bpf_map_opts.nr_maps; i++) { -+ int *fd; -+ -+ fd_rta = buf; -+ fd_rta->rta_type = SK_DIAG_BPF_STORAGE_REQ_MAP_FD; -+ fd_rta->rta_len = RTA_LENGTH(sizeof(int)); -+ -+ fd = RTA_DATA(fd_rta); -+ *fd = bpf_map_opts.maps[i].fd; -+ -+ buf += fd_rta->rta_len; -+ } -+ -+ return stgs_rta; -+} -+ -+static void show_sk_bpf_storages(struct rtattr *bpf_stgs) -+{ -+ struct rtattr *tb[SK_DIAG_BPF_STORAGE_MAX + 1], *bpf_stg; -+ unsigned int rem; -+ -+ for (bpf_stg = RTA_DATA(bpf_stgs), rem = RTA_PAYLOAD(bpf_stgs); -+ RTA_OK(bpf_stg, rem); bpf_stg = RTA_NEXT(bpf_stg, rem)) { -+ -+ if ((bpf_stg->rta_type & NLA_TYPE_MASK) != SK_DIAG_BPF_STORAGE) -+ continue; -+ -+ parse_rtattr_nested(tb, SK_DIAG_BPF_STORAGE_MAX, -+ (struct rtattr *)bpf_stg); -+ -+ if (tb[SK_DIAG_BPF_STORAGE_MAP_ID]) { -+ out(" map_id:%u", -+ rta_getattr_u32(tb[SK_DIAG_BPF_STORAGE_MAP_ID])); -+ } -+ } -+} -+ -+static bool bpf_map_opts_is_enabled(void) -+{ -+ return bpf_map_opts.nr_maps || bpf_map_opts.show_all; -+} -+#endif -+ - static int inet_show_sock(struct nlmsghdr *nlh, - struct sockstat *s) - { -@@ -3391,8 +3605,9 @@ static int inet_show_sock(struct nlmsghdr *nlh, - struct inet_diag_msg *r = NLMSG_DATA(nlh); - unsigned char v6only = 0; - -- parse_rtattr(tb, INET_DIAG_MAX, (struct rtattr *)(r+1), -- nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r))); -+ parse_rtattr_flags(tb, INET_DIAG_MAX, (struct rtattr *)(r+1), -+ nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*r)), -+ NLA_F_NESTED); - - if (tb[INET_DIAG_PROTOCOL]) - s->type = rta_getattr_u8(tb[INET_DIAG_PROTOCOL]); -@@ -3489,6 +3704,11 @@ static int inet_show_sock(struct nlmsghdr *nlh, - } - sctp_ino = s->ino; - -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ if (tb[INET_DIAG_SK_BPF_STORAGES]) -+ show_sk_bpf_storages(tb[INET_DIAG_SK_BPF_STORAGES]); -+#endif -+ - return 0; - } - -@@ -3570,13 +3790,14 @@ static int sockdiag_send(int family, int fd, int protocol, struct filter *f) - { - struct sockaddr_nl nladdr = { .nl_family = AF_NETLINK }; - DIAG_REQUEST(req, struct inet_diag_req_v2 r); -+ struct rtattr *bpf_rta = NULL; - char *bc = NULL; - int bclen; - __u32 proto; - struct msghdr msg; - struct rtattr rta_bc; - struct rtattr rta_proto; -- struct iovec iov[5]; -+ struct iovec iov[6]; - int iovlen = 1; - - if (family == PF_UNSPEC) -@@ -3629,6 +3850,20 @@ static int sockdiag_send(int family, int fd, int protocol, struct filter *f) - iovlen += 2; - } - -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ if (bpf_map_opts_is_enabled()) { -+ bpf_rta = bpf_map_opts_alloc_rta(); -+ if (!bpf_rta) { -+ fprintf(stderr, -+ "ss: cannot alloc request for --bpf-map\n"); -+ return -1; -+ } -+ -+ iov[iovlen++] = (struct iovec){ bpf_rta, bpf_rta->rta_len }; -+ req.nlh.nlmsg_len += bpf_rta->rta_len; -+ } -+#endif -+ - msg = (struct msghdr) { - .msg_name = (void *)&nladdr, - .msg_namelen = sizeof(nladdr), -@@ -3637,10 +3872,13 @@ static int sockdiag_send(int family, int fd, int protocol, struct filter *f) - }; - - if (sendmsg(fd, &msg, 0) < 0) { -+ free(bpf_rta); - close(fd); - return -1; - } - -+ free(bpf_rta); -+ - return 0; - } - -@@ -5361,6 +5599,10 @@ static void _usage(FILE *dest) - " --tos show tos and priority information\n" - " --cgroup show cgroup information\n" - " -b, --bpf show bpf filter socket information\n" -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+" --bpf-maps show all BPF socket-local storage maps\n" -+" --bpf-map-id=MAP-ID show a BPF socket-local storage map\n" -+#endif - " -E, --events continually display sockets as they are destroyed\n" - " -Z, --context display task SELinux security contexts\n" - " -z, --contexts display task and socket SELinux security contexts\n" -@@ -5487,6 +5729,9 @@ wrong_state: - - #define OPT_INET_SOCKOPT 262 - -+#define OPT_BPF_MAPS 263 -+#define OPT_BPF_MAP_ID 264 -+ - static const struct option long_opts[] = { - { "numeric", 0, 0, 'n' }, - { "resolve", 0, 0, 'r' }, -@@ -5533,6 +5778,10 @@ static const struct option long_opts[] = { - { "mptcp", 0, 0, 'M' }, - { "oneline", 0, 0, 'O' }, - { "inet-sockopt", 0, 0, OPT_INET_SOCKOPT }, -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ { "bpf-maps", 0, 0, OPT_BPF_MAPS}, -+ { "bpf-map-id", 1, 0, OPT_BPF_MAP_ID}, -+#endif - { 0 } - - }; -@@ -5741,6 +5990,19 @@ int main(int argc, char *argv[]) - case OPT_INET_SOCKOPT: - show_inet_sockopt = 1; - break; -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ case OPT_BPF_MAPS: -+ if (bpf_map_opts.nr_maps) { -+ bpf_map_opts_mixed_error(); -+ return -1; -+ } -+ bpf_map_opts.show_all = true; -+ break; -+ case OPT_BPF_MAP_ID: -+ if (bpf_map_opts_add_id(optarg)) -+ exit(1); -+ break; -+#endif - case 'h': - help(); - case '?': -@@ -5880,6 +6142,10 @@ int main(int argc, char *argv[]) - if (show_processes || show_threads || show_proc_ctx || show_sock_ctx) - user_ent_destroy(); - -+#ifdef ENABLE_BPF_SKSTORAGE_SUPPORT -+ bpf_map_opts_destroy(); -+#endif -+ - render(); - - return 0; --- -2.41.0 - diff --git a/SOURCES/0002-ss-pretty-print-BPF-socket-local-storage.patch b/SOURCES/0002-ss-pretty-print-BPF-socket-local-storage.patch deleted file mode 100644 index 6be6d4a..0000000 --- a/SOURCES/0002-ss-pretty-print-BPF-socket-local-storage.patch +++ /dev/null @@ -1,270 +0,0 @@ -From e3ecf048579afd7a673700d04893671627e85d57 Mon Sep 17 00:00:00 2001 -From: Quentin Deslandes -Date: Wed, 21 Feb 2024 16:16:20 +0100 -Subject: [PATCH] ss: pretty-print BPF socket-local storage - -ss is able to print the map ID(s) for which a given socket has BPF -socket-local storage defined (using --bpf-maps or --bpf-map-id=). However, -the actual content of the map remains hidden. - -This change aims to pretty-print the socket-local storage content following -the socket details, similar to what `bpftool map dump` would do. The exact -output format is inspired by drgn, while the BTF data processing is similar -to bpftool's. - -ss will use libbpf's btf_dump__dump_type_data() to ease pretty-printing -of binary data. This requires out_bpf_sk_storage_print_fn() as a print -callback function used by btf_dump__dump_type_data(). vout() is also -introduced, which is similar to out() but accepts a va_list as -parameter. - -ss' output remains unchanged unless --bpf-maps or --bpf-map-id= is used, -in which case each socket containing BPF local storage will be followed by -the content of the storage before the next socket's info is displayed. - -Signed-off-by: Quentin Deslandes -Acked-by: Martin KaFai Lau -Signed-off-by: David Ahern ---- - misc/ss.c | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 137 insertions(+), 11 deletions(-) - -diff --git a/misc/ss.c b/misc/ss.c -index 2c7e7c58..3ebac132 100644 ---- a/misc/ss.c -+++ b/misc/ss.c -@@ -61,7 +61,9 @@ - #define ENABLE_BPF_SKSTORAGE_SUPPORT - - #include -+#include - #include -+#include - - #if (LIBBPF_MAJOR_VERSION == 0) && (LIBBPF_MINOR_VERSION < 5) - #warning "libbpf version 0.5 or later is required, disabling BPF socket-local storage support" -@@ -1053,11 +1055,10 @@ static int buf_update(int len) - } - - /* Append content to buffer as part of the current field */ --__attribute__((format(printf, 1, 2))) --static void out(const char *fmt, ...) -+static void vout(const char *fmt, va_list args) - { - struct column *f = current_field; -- va_list args; -+ va_list _args; - char *pos; - int len; - -@@ -1068,18 +1069,27 @@ static void out(const char *fmt, ...) - buffer.head = buf_chunk_new(); - - again: /* Append to buffer: if we have a new chunk, print again */ -+ va_copy(_args, args); - - pos = buffer.cur->data + buffer.cur->len; -- va_start(args, fmt); - - /* Limit to tail room. If we hit the limit, buf_update() will tell us */ -- len = vsnprintf(pos, buf_chunk_avail(buffer.tail), fmt, args); -- va_end(args); -+ len = vsnprintf(pos, buf_chunk_avail(buffer.tail), fmt, _args); - - if (buf_update(len)) - goto again; - } - -+__attribute__((format(printf, 1, 2))) -+static void out(const char *fmt, ...) -+{ -+ va_list args; -+ -+ va_start(args, fmt); -+ vout(fmt, args); -+ va_end(args); -+} -+ - static int print_left_spacing(struct column *f, int stored, int printed) - { - int s; -@@ -3413,6 +3423,9 @@ static struct bpf_map_opts { - struct bpf_sk_storage_map_info { - unsigned int id; - int fd; -+ struct bpf_map_info info; -+ struct btf *btf; -+ struct btf_dump *dump; - } maps[MAX_NR_BPF_MAP_ID_OPTS]; - bool show_all; - } bpf_map_opts; -@@ -3423,10 +3436,36 @@ static void bpf_map_opts_mixed_error(void) - "ss: --bpf-maps and --bpf-map-id cannot be used together\n"); - } - -+static int bpf_maps_opts_load_btf(struct bpf_map_info *info, struct btf **btf) -+{ -+ if (info->btf_value_type_id) { -+ *btf = btf__load_from_kernel_by_id(info->btf_id); -+ if (!*btf) { -+ fprintf(stderr, "ss: failed to load BTF for map ID %u\n", -+ info->id); -+ return -1; -+ } -+ } else { -+ *btf = NULL; -+ } -+ -+ return 0; -+} -+ -+static void out_bpf_sk_storage_print_fn(void *ctx, const char *fmt, va_list args) -+{ -+ vout(fmt, args); -+} -+ - static int bpf_map_opts_load_info(unsigned int map_id) - { -+ struct btf_dump_opts dopts = { -+ .sz = sizeof(struct btf_dump_opts) -+ }; - struct bpf_map_info info = {}; - uint32_t len = sizeof(info); -+ struct btf_dump *dump; -+ struct btf *btf; - int fd; - int r; - -@@ -3464,8 +3503,25 @@ static int bpf_map_opts_load_info(unsigned int map_id) - return -1; - } - -+ r = bpf_maps_opts_load_btf(&info, &btf); -+ if (r) { -+ close(fd); -+ return -1; -+ } -+ -+ dump = btf_dump__new(btf, out_bpf_sk_storage_print_fn, NULL, &dopts); -+ if (!dump) { -+ btf__free(btf); -+ close(fd); -+ fprintf(stderr, "Failed to create btf_dump object\n"); -+ return -1; -+ } -+ - bpf_map_opts.maps[bpf_map_opts.nr_maps].id = map_id; -- bpf_map_opts.maps[bpf_map_opts.nr_maps++].fd = fd; -+ bpf_map_opts.maps[bpf_map_opts.nr_maps].fd = fd; -+ bpf_map_opts.maps[bpf_map_opts.nr_maps].info = info; -+ bpf_map_opts.maps[bpf_map_opts.nr_maps].btf = btf; -+ bpf_map_opts.maps[bpf_map_opts.nr_maps++].dump = dump; - - return 0; - } -@@ -3517,8 +3573,11 @@ static void bpf_map_opts_destroy(void) - { - int i; - -- for (i = 0; i < bpf_map_opts.nr_maps; ++i) -+ for (i = 0; i < bpf_map_opts.nr_maps; ++i) { -+ btf_dump__free(bpf_map_opts.maps[i].dump); -+ btf__free(bpf_map_opts.maps[i].btf); - close(bpf_map_opts.maps[i].fd); -+ } - } - - static struct rtattr *bpf_map_opts_alloc_rta(void) -@@ -3571,10 +3630,74 @@ static struct rtattr *bpf_map_opts_alloc_rta(void) - return stgs_rta; - } - -+static void out_bpf_sk_storage_oneline(struct bpf_sk_storage_map_info *info, -+ const void *data, size_t len) -+{ -+ struct btf_dump_type_data_opts opts = { -+ .sz = sizeof(struct btf_dump_type_data_opts), -+ .emit_zeroes = 1, -+ .compact = 1 -+ }; -+ int r; -+ -+ out(" map_id:%d", info->id); -+ r = btf_dump__dump_type_data(info->dump, info->info.btf_value_type_id, -+ data, len, &opts); -+ if (r < 0) -+ out("failed to dump data: %d", r); -+} -+ -+static void out_bpf_sk_storage_multiline(struct bpf_sk_storage_map_info *info, -+ const void *data, size_t len) -+{ -+ struct btf_dump_type_data_opts opts = { -+ .sz = sizeof(struct btf_dump_type_data_opts), -+ .indent_level = 2, -+ .emit_zeroes = 1 -+ }; -+ int r; -+ -+ out("\n\tmap_id:%d [\n", info->id); -+ -+ r = btf_dump__dump_type_data(info->dump, info->info.btf_value_type_id, -+ data, len, &opts); -+ if (r < 0) -+ out("\t\tfailed to dump data: %d", r); -+ -+ out("\n\t]"); -+} -+ -+static void out_bpf_sk_storage(int map_id, const void *data, size_t len) -+{ -+ struct bpf_sk_storage_map_info *map_info; -+ -+ map_info = bpf_map_opts_get_info(map_id); -+ if (!map_info) { -+ /* The kernel might return a map we can't get info for, skip -+ * it but print the other ones. -+ */ -+ out("\n\tmap_id: %d failed to fetch info, skipping\n", map_id); -+ return; -+ } -+ -+ if (map_info->info.value_size != len) { -+ fprintf(stderr, -+ "map_id: %d: invalid value size, expecting %u, got %lu\n", -+ map_id, map_info->info.value_size, len); -+ return; -+ } -+ -+ if (oneline) -+ out_bpf_sk_storage_oneline(map_info, data, len); -+ else -+ out_bpf_sk_storage_multiline(map_info, data, len); -+} -+ - static void show_sk_bpf_storages(struct rtattr *bpf_stgs) - { - struct rtattr *tb[SK_DIAG_BPF_STORAGE_MAX + 1], *bpf_stg; -- unsigned int rem; -+ unsigned int rem, map_id; -+ struct rtattr *value; - - for (bpf_stg = RTA_DATA(bpf_stgs), rem = RTA_PAYLOAD(bpf_stgs); - RTA_OK(bpf_stg, rem); bpf_stg = RTA_NEXT(bpf_stg, rem)) { -@@ -3586,8 +3709,11 @@ static void show_sk_bpf_storages(struct rtattr *bpf_stgs) - (struct rtattr *)bpf_stg); - - if (tb[SK_DIAG_BPF_STORAGE_MAP_ID]) { -- out(" map_id:%u", -- rta_getattr_u32(tb[SK_DIAG_BPF_STORAGE_MAP_ID])); -+ map_id = rta_getattr_u32(tb[SK_DIAG_BPF_STORAGE_MAP_ID]); -+ value = tb[SK_DIAG_BPF_STORAGE_MAP_VALUE]; -+ -+ out_bpf_sk_storage(map_id, RTA_DATA(value), -+ RTA_PAYLOAD(value)); - } - } - } --- -2.41.0 - diff --git a/SOURCES/0003-ss-update-man-page-to-document-bpf-maps-and-bpf-map-.patch b/SOURCES/0003-ss-update-man-page-to-document-bpf-maps-and-bpf-map-.patch deleted file mode 100644 index 02e38c4..0000000 --- a/SOURCES/0003-ss-update-man-page-to-document-bpf-maps-and-bpf-map-.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 50763d53310c1f95bd846ce9961d40e0e0e66376 Mon Sep 17 00:00:00 2001 -From: Quentin Deslandes -Date: Wed, 21 Feb 2024 16:16:21 +0100 -Subject: [PATCH] ss: update man page to document --bpf-maps and --bpf-map-id= - -Document new --bpf-maps and --bpf-map-id= options. - -Signed-off-by: Quentin Deslandes -Acked-by: Martin KaFai Lau -Signed-off-by: David Ahern ---- - man/man8/ss.8 | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/man/man8/ss.8 b/man/man8/ss.8 -index b014cde1..e23af826 100644 ---- a/man/man8/ss.8 -+++ b/man/man8/ss.8 -@@ -426,6 +426,12 @@ to FILE after applying filters. If FILE is - stdout is used. - Read filter information from FILE. Each line of FILE is interpreted - like single command line option. If FILE is - stdin is used. - .TP -+.B \-\-bpf-maps -+Pretty-print all the BPF socket-local data entries for each socket. -+.TP -+.B \-\-bpf-map-id=MAP_ID -+Pretty-print the BPF socket-local data entries for the requested map ID. Can be used more than once. -+.TP - .B FILTER := [ state STATE-FILTER ] [ EXPRESSION ] - Please take a look at the official documentation for details regarding filters. - --- -2.41.0 - diff --git a/SOURCES/rt_dsfield.deprecated b/SOURCES/rt_dsfield.deprecated deleted file mode 100644 index c8eec63..0000000 --- a/SOURCES/rt_dsfield.deprecated +++ /dev/null @@ -1,17 +0,0 @@ - -# Deprecated values dropped upstream -# Kept in RHEL for backwards-compatibility -0x00 default -0x10 lowdelay -0x08 throughput -0x04 reliability -# This value overlap with ECT, do not use it! -0x02 mincost -# These values seems do not want to die, Cisco likes them by a strange reason. -0x20 priority -0x40 immediate -0x60 flash -0x80 flash-override -0xa0 critical -0xc0 internet -0xe0 network diff --git a/SPECS/iproute.spec b/SPECS/iproute.spec deleted file mode 100644 index 92efe45..0000000 --- a/SPECS/iproute.spec +++ /dev/null @@ -1,1013 +0,0 @@ -Summary: Advanced IP routing and network device configuration tools -Name: iproute -Version: 6.1.0 -Release: 2%{?dist}%{?buildid} -%if 0%{?rhel} -Group: Applications/System -%endif -URL: https://kernel.org/pub/linux/utils/net/%{name}2/ -Source0: https://kernel.org/pub/linux/utils/net/%{name}2/%{name}2-%{version}.tar.xz -Source1: rt_dsfield.deprecated - -Patch0001: 0001-ss-add-support-for-BPF-socket-local-storage.patch -Patch0002: 0002-ss-pretty-print-BPF-socket-local-storage.patch -Patch0003: 0003-ss-update-man-page-to-document-bpf-maps-and-bpf-map-.patch - -License: GPLv2+ and Public Domain -BuildRequires: bison -BuildRequires: elfutils-libelf-devel -BuildRequires: flex -BuildRequires: gcc -BuildRequires: iptables-devel >= 1.4.5 -BuildRequires: libbpf-devel -BuildRequires: libcap-devel -BuildRequires: libdb-devel -BuildRequires: libmnl-devel -BuildRequires: libselinux-devel -BuildRequires: make -BuildRequires: pkgconfig -%if ! 0%{?_module_build} -%if 0%{?fedora} -BuildRequires: linux-atm-libs-devel -%endif -%endif -Requires: libbpf -Requires: psmisc -Provides: /sbin/ip - -%description -The iproute package contains networking utilities (ip and rtmon, for example) -which are designed to use the advanced networking capabilities of the Linux -kernel. - -%package tc -Summary: Linux Traffic Control utility -%if 0%{?rhel} -Group: Applications/System -%endif -License: GPLv2+ -Requires: %{name}%{?_isa} = %{version}-%{release} -Provides: /sbin/tc - -%description tc -The Traffic Control utility manages queueing disciplines, their classes and -attached filters and actions. It is the standard tool to configure QoS in -Linux. - -%if ! 0%{?_module_build} -%package doc -Summary: Documentation for iproute2 utilities with examples -%if 0%{?rhel} -Group: Applications/System -%endif -License: GPLv2+ -Requires: %{name} = %{version}-%{release} - -%description doc -The iproute documentation contains howtos and examples of settings. -%endif - -%package devel -Summary: iproute development files -%if 0%{?rhel} -Group: Development/Libraries -%endif -License: GPLv2+ -Requires: %{name} = %{version}-%{release} -Provides: iproute-static = %{version}-%{release} - -%description devel -The libnetlink static library. - -%prep -%autosetup -p1 -n %{name}2-%{version} - -%build -%configure -%make_build - -%install -export SBINDIR='%{_sbindir}' -export LIBDIR='%{_libdir}' -%make_install - -echo '.so man8/tc-cbq.8' > %{buildroot}%{_mandir}/man8/cbq.8 - -# libnetlink -install -D -m644 include/libnetlink.h %{buildroot}%{_includedir}/libnetlink.h -install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a - -# drop these files, iproute-doc package extracts files directly from _builddir -rm -rf '%{buildroot}%{_docdir}' - -# append deprecated values to rt_dsfield for compatibility reasons -%if 0%{?rhel} && ! 0%{?eln} -cat %{SOURCE1} >>%{buildroot}%{_sysconfdir}/iproute2/rt_dsfield -%endif - -%files -%dir %{_sysconfdir}/iproute2 -%license COPYING -%doc README README.devel -%{_mandir}/man7/* -%exclude %{_mandir}/man7/tc-* -%{_mandir}/man8/* -%exclude %{_mandir}/man8/tc* -%exclude %{_mandir}/man8/cbq* -%attr(644,root,root) %config(noreplace) %{_sysconfdir}/iproute2/* -%{_sbindir}/* -%exclude %{_sbindir}/tc -%exclude %{_sbindir}/routel -%{_datadir}/bash-completion/completions/devlink - -%files tc -%license COPYING -%{_mandir}/man7/tc-* -%{_mandir}/man8/tc* -%{_mandir}/man8/cbq* -%dir %{_libdir}/tc/ -%{_libdir}/tc/* -%{_sbindir}/tc -%{_datadir}/bash-completion/completions/tc - -%if ! 0%{?_module_build} -%files doc -%license COPYING -%doc examples -%endif - -%files devel -%license COPYING -%{_mandir}/man3/* -%{_libdir}/libnetlink.a -%{_includedir}/libnetlink.h -%{_includedir}/iproute2/bpf_elf.h - -%changelog -* Wed Feb 28 2024 Quentin Deslandes - 6.1.0-2.el9 -- ss: add support for BPF socket-local storage -- ss: pretty-print BPF socket-local storage -- ss: update man page to document --bpf-maps and --bpf-map-id= - -* Sat Jan 28 2023 Andrea Claudi - 6.1.0-1.el9 -- New version 6.1.0 [2155604] - -* Fri Jan 06 2023 Viktor Malik - 6.0.0-2.el9 -- Rebuild for libbpf 1.0.0 [2158727] - -* Thu Oct 06 2022 Andrea Claudi - 6.0.0-1.el9 -- New version 6.0.0 [2132427] - -* Wed Jun 15 2022 Andrea Claudi - 5.18.0-1.el9 -- New version 5.18.0 [2074608] - -* Thu Nov 25 2021 Andrea Claudi - 5.15.0-2.el9 -- Fix gating.yaml [2009355] - -* Wed Nov 24 2021 Andrea Claudi - 5.15.0-1.el9 -- New version 5.15.0 [2009355] - -* Wed Aug 18 2021 Andrea Claudi - 5.13.0-5.el9 -- Add build and runtime dependency on libbpf (Andrea Claudi) [1994520] -- Use TC_LIB_DIR environment variable (Andrea Claudi) [1994545] -- Re-add iproute-doc package on the specfile (Andrea Claudi) [1994581] - -* Mon Aug 09 2021 Mohan Boddu - 5.13.0-4.el9 -- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Related: rhbz#1991688 - -* Fri Jul 16 2021 Andrea Claudi - 5.13.0-3.el9 -- Fix changelog (Andrea Claudi) [1947854] -- Add RHEL gating configuration (Aleksandra Fedorova) - -* Thu Jul 15 2021 Andrea Claudi - 5.13.0-2.el9 -- Remove Recommends: iproute-tc from spec file (Andrea Claudi) [1947854] - -* Wed Jun 30 2021 Andrea Claudi - 5.13.0-1.el9 -- New version 5.13.0 (#1977898) - -* Fri Apr 16 2021 Mohan Boddu - 5.10.0-3.el9 -- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - -* Tue Jan 26 2021 Fedora Release Engineering - 5.10.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Mon Dec 21 2020 Andrea Claudi - 5.10.0-1 -- New version 5.10.0 (#1909551) - -* Wed Dec 2 2020 Andrea Claudi - 5.9.0-1 -- New version 5.9.0 - -* Mon Aug 10 2020 Phil Sutter - 5.8.0-1 -- New version 5.8.0 - -* Tue Jul 28 2020 Fedora Release Engineering - 5.7.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Wed Jun 03 2020 Phil Sutter - 5.7.0-1 -- New version 5.7.0 - -* Tue Jan 28 2020 Phil Sutter - 5.5.0-1 -- New version 5.5.0 - -* Tue Nov 26 2019 Phil Sutter - 5.4.0-1 -- New version 5.4.0 -- Drop iproute-doc package, upstream removed all non-manpage documentation - -* Tue Oct 08 2019 Phil Sutter - 5.3.0-2 -- ifcfg script uses killall, therefore requires psmisc package - -* Thu Sep 26 2019 Phil Sutter - 5.3.0-1 -- New version 5.3.0 -- Add upstream-suggested backports - -* Thu Jul 25 2019 Fedora Release Engineering - 5.2.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Tue Jul 23 2019 Phil Sutter - 5.2.0-1 -- New version 5.2.0 -- Add upstream-suggested backports -- Fix for tunnel creation when using 'dev' parameter - -* Wed May 29 2019 Phil Sutter - 5.1.0-1 -- New version 5.1.0 - -* Wed Mar 20 2019 Phil Sutter - 5.0.0-2 -- Restore Provides: hint, at least pptp depends on it - -* Wed Mar 20 2019 Phil Sutter - 5.0.0-1 -- New version 5.0.0 -- Get rid of old upgrade path hints - -* Fri Feb 01 2019 Phil Sutter - 4.20.0-1 -- New version 4.20.0 -- Add upstream-suggested backports -- Upstream dropped cbq script, remove it along with related configs -- Add libcap support - -* Fri Feb 01 2019 Fedora Release Engineering - 4.18.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Sep 19 2018 Phil Sutter - 4.18.0-5 -- man: ip-route: Clarify referenced versions are Linux ones - -* Fri Aug 31 2018 Phil Sutter - 4.18.0-4 -- iprule: Fix destination prefix output - -* Thu Aug 23 2018 Phil Sutter - 4.18.0-3 -- Make colored output configurable - -* Thu Aug 16 2018 Phil Sutter - 4.18.0-2 -- Fix ss filter expressions - -* Tue Aug 14 2018 Phil Sutter - 4.18.0-1 -- New version 4.18.0 - -* Fri Jul 13 2018 Fedora Release Engineering - 4.17.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Tue Jun 12 2018 Phil Sutter - 4.17.0-1 -- New version 4.17.0 - -* Fri Jun 01 2018 Phil Sutter - 4.16.0-1 -- New version 4.16.0 - -* Fri Feb 09 2018 Phil Sutter - 4.15.0-1 -- New version 4.15.0 - -* Fri Feb 9 2018 Florian Weimer - 4.14.1-6 -- Use LDFLAGS defaults from redhat-rpm-config - -* Wed Feb 07 2018 Fedora Release Engineering - 4.14.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Mon Dec 11 2017 Phil Sutter - 4.14.1-4 -- Add missing patch files. - -* Mon Dec 11 2017 Phil Sutter - 4.14.1-3 -- Add upstream suggested backports. -- Make use of %%autosetup macro. - -* Wed Nov 15 2017 Phil Sutter - 4.14.1-2 -- Drop unused build dependencies - -* Wed Nov 15 2017 Phil Sutter - 4.14.1-1 -- New version 4.14.1 - -* Tue Sep 19 2017 Phil Sutter - 4.13.0-1 -- New version 4.13.0 - -* Wed Aug 02 2017 Fedora Release Engineering - 4.12.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 4.12.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Jul 21 2017 Phil Sutter - 4.12.0-1 -- New version 4.12.0 - -* Tue May 23 2017 Phil Sutter - 4.11.0-1 -- Add virtual capability to tc subpackage so it's easier found -- New version 4.11.0 - -* Thu May 11 2017 Karsten Hopp - 4.10.0-3 -- don't build docs for module builds to limit dependencies - -* Fri Mar 17 2017 Phil Sutter - 4.10.0-2 -- Add two fixes to 4.10.0 release from upstream. - -* Tue Mar 14 2017 Phil Sutter - 4.10.0-1 -- Ship new header iproute2/bpf_elf.h -- Document content of remaining docs fixup patch in spec file -- Drop patches already applied upstream -- New version 4.10.0 - -* Fri Feb 10 2017 Fedora Release Engineering - 4.9.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Thu Feb 2 2017 Thomas Woerner - 4.9.0-3 -- Release bump for iptables-1.6.1 (libxtables.so.12) - -* Sat Jan 28 2017 Phil Sutter - 4.9.0-2 -- Fix for failing 'make install' - -* Sat Jan 28 2017 Phil Sutter - 4.9.0-1 -- New version 4.9.0 - -* Fri Jan 13 2017 Phil Sutter - 4.8.0-2 -- Fix segfault in xt action - -* Wed Nov 30 2016 Phil Sutter - 4.8.0-1 -- New version 4.8.0 - -* Wed Aug 10 2016 Phil Sutter - 4.7.0-1 -- New version 4.7.0 - -* Wed May 04 2016 Phil Sutter - 4.6.0-1 -- New version 4.6.0 - -* Wed Apr 13 2016 Thomas Woerner - 4.5.0-4 -- Rebuild for new iptables-1.6.0 with libxtables so bump - -* Fri Apr 08 2016 Phil Sutter - 4.5.0-3 -- Fix upgrade path by adding correct Requires/Obsoletes statements to spec file -- Move README.iproute2+tc into tc subpackage - -* Fri Mar 18 2016 Phil Sutter - 4.5.0-2 -- Split tc into it's own subpackage - -* Fri Mar 18 2016 Phil Sutter - 4.5.0-1 -- New version 4.5.0 - -* Thu Feb 04 2016 Fedora Release Engineering - 4.4.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Jan 19 2016 Phil Sutter - 4.4.0-1 -- New version 4.4.0 - -* Sun Oct 04 2015 Phil Sutter - 4.2.0-4 -- Simplify RPM install stage by using package's install target - -* Sun Oct 04 2015 Phil Sutter - 4.2.0-3 -- Add missing build dependency to libmnl-devel -- Ship tipc utility - -* Thu Sep 24 2015 Phil Sutter - 4.2.0-2 -- Add missing build dependency to libselinux-devel - -* Wed Sep 02 2015 Pavel Šimerda - 4.2.0-1 -- new version 4.2.0 - -* Tue Jul 07 2015 Pavel Šimerda - 4.1.1-1 -- new version 4.1.1 - -* Wed Jun 17 2015 Fedora Release Engineering - 4.0.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed May 13 2015 Pavel Šimerda - 4.0.0-3 -- remove patch rejected by upstream - -* Mon May 11 2015 Pavel Šimerda - 4.0.0-2 -- Remove patch rejected by upstream - -* Tue Apr 14 2015 Pavel Šimerda - 4.0.0-1 -- new version 4.0.0 - -* Fri Mar 13 2015 Pavel Šimerda - 3.19.0-1 -- new version 3.19.0 - -* Sat Oct 04 2014 Lubomir Rintel - 3.16.0-3 -- Backport fix for ip link add name regression that broke libvirt - -* Sat Aug 16 2014 Fedora Release Engineering - 3.16.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Tue Aug 05 2014 Petr Šabata - 3.16.0-1 -- 3.16 bump - -* Sat Jul 12 2014 Tom Callaway - 3.15.0-2 -- fix license handling - -* Thu Jun 12 2014 Petr Šabata - 3.15.0-1 -- 3.15.0 bump - -* Sat Jun 07 2014 Fedora Release Engineering - 3.14.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Tue May 06 2014 Petr Šabata - 3.14.0-2 -- Fix incorrect references in ss(8), #1092653 - -* Tue Apr 15 2014 Petr Šabata - 3.14.0-1 -- 3.14 bump -- Drop out iplink_have_newlink() fix in favor of upstream's approach - -* Tue Nov 26 2013 Petr Šabata - 3.12.0-2 -- Drop libnl from dependencies (#1034454) - -* Mon Nov 25 2013 Petr Šabata - 3.12.0-1 -- 3.12.0 bump - -* Thu Nov 21 2013 Petr Šabata - 3.11.0-2 -- Fix the rtt time parsing again - -* Tue Oct 22 2013 Petr Šabata - 3.11.0-1 -- 3.11 bump - -* Tue Oct 01 2013 Petr Pisar - 3.10.0-8 -- Close file with bridge monitor file (bug #1011822) - -* Tue Sep 24 2013 Petr Pisar - 3.10.0-7 -- Add tc -OK option -- Document "bridge mdb" and "bridge monitor mdb" - -* Fri Aug 30 2013 Petr Šabata - 3.10.0-6 -- Fix lnstat -i properly this time - -* Thu Aug 29 2013 Petr Šabata - 3.10.0-5 -- Fix an 'ip link' hang (#996537) - -* Tue Aug 13 2013 Petr Šabata - 3.10.0-4 -- lnstat -i: Run indefinitely if the --count isn't specified (#977845) -- Switch to unversioned %%docdir - -* Sat Aug 03 2013 Fedora Release Engineering - 3.10.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Jul 17 2013 Petr Šabata - 3.10.0-2 -- Fix the XFRM patch - -* Wed Jul 17 2013 Petr Šabata - 3.10.0-1 -- 3.10.0 bump -- Drop the SHAREDIR patch and revert to upstream ways (#966445) -- Fix an XFRM regression with FORTIFY_SOURCE - -* Tue Apr 30 2013 Petr Šabata - 3.9.0-1 -- 3.9.0 bump - -* Thu Apr 25 2013 Petr Šabata - 3.8.0-4 -- ATM is available in Fedora only - -* Tue Mar 12 2013 Petr Šabata - 3.8.0-3 -- Mention the "up" argument in documentation and help outputs (#907468) - -* Mon Mar 04 2013 Petr Šabata - 3.8.0-2 -- Bump for 1.4.18 rebuild - -* Tue Feb 26 2013 Petr Šabata - 3.8.0-1 -- 3.8.0 bump - -* Fri Feb 08 2013 Petr Šabata - 3.7.0-2 -- Don't propogate mounts out of ip (#882047) - -* Wed Dec 12 2012 Petr Šabata - 3.7.0-1 -- 3.7.0 bump - -* Mon Nov 19 2012 Petr Šabata - 3.6.0-3 -- Include section 7 manpages (#876857) -- Fix ancient bogus dates in the changelog (correction based upon commits) -- Explicitly require some TeX fonts no longer present in the base distribution - -* Thu Oct 04 2012 Petr Šabata - 3.6.0-2 -- List all interfaces by default - -* Wed Oct 03 2012 Petr Šabata - 3.6.0-1 -- 3.6.0 bump - -* Thu Aug 30 2012 Petr Šabata - 3.5.1-2 -- Remove the explicit iptables dependency (#852840) - -* Tue Aug 14 2012 Petr Šabata - 3.5.1-1 -- 3.5.1 bugfix release bump -- Rename 'br' to 'bridge' - -* Mon Aug 06 2012 Petr Šabata - 3.5.0-2 -- Install the new bridge utility - -* Thu Aug 02 2012 Petr Šabata - 3.5.0-1 -- 3.5.0 bump -- Move to db5. - -* Thu Jul 19 2012 Fedora Release Engineering - 3.4.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue May 22 2012 Petr Šabata - 3.4.0-1 -- 3.4.0 bump -- Drop the print route patch (included upstream) - -* Mon Apr 30 2012 Petr Šabata - 3.3.0-2 -- Let's install rtmon too... (#814819) - -* Thu Mar 22 2012 Petr Šabata - 3.3.0-1 -- 3.3.0 bump -- Update source URL - -* Mon Feb 27 2012 Petr Šabata - 3.2.0-3 -- Address dangerous /tmp files security issue (CVE-2012-1088, #797881, #797878) - -* Fri Jan 27 2012 Petr Šabata - 3.2.0-2 -- Simplify the spec a bit thanks to the UsrMove feature - -* Fri Jan 06 2012 Petr Šabata - 3.2.0-1 -- 3.2.0 bump -- Removing a useless, now conflicting patch (initcwnd already decumented) - -* Thu Nov 24 2011 Petr Šabata - 3.1.0-1 -- 3.1.0 bump -- Point URL and Source to the new location on kernel.org -- Remove now obsolete defattr -- Dropping various patches now included upstream -- Dropping iproute2-2.6.25-segfault.patch; I fail to understand the reason for - this hack - -* Tue Nov 15 2011 Petr Šabata - 2.6.39-6 -- ss -ul should display UDP CLOSED sockets (#691100) - -* Thu Oct 06 2011 Petr Sabata - 2.6.39-5 -- Fix ss, lnstat and arpd usage and manpages - -* Wed Sep 07 2011 Petr Sabata - 2.6.39-4 -- lnstat should dump (-d) to stdout instead of stderr (#736332) - -* Tue Jul 26 2011 Petr Sabata - 2.6.39-3 -- Rebuild for xtables7 - -* Tue Jul 12 2011 Petr Sabata - 2.6.39-2 -- Rebuild for xtables6 - -* Thu Jun 30 2011 Petr Sabata - 2.6.39-1 -- 2.6.39 bump - -* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-4 -- Link [cr]tstat to lnstat - -* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-3 -- Install ctstat, rtstat and routef manpage symlinks -- Install m_xt & m_ipt tc modules -- Creating devel and virtual static subpackages with libnetlink - -* Thu Apr 21 2011 Petr Sabata - 2.6.38.1-2 -- General cleanup -- Use global instead of define -- Buildroot removal -- Correcting URL and Source links -- Install genl, ifstat, routef, routel and rtpr (rhbz#697319) - -* Fri Mar 18 2011 Petr Sabata - 2.6.38.1-1 -- 2.6.38.1 bump - -* Wed Mar 16 2011 Petr Sabata - 2.6.38-1 -- 2.6.38 bump - -* Wed Feb 09 2011 Fedora Release Engineering - 2.6.37-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Mon Jan 31 2011 Petr Sabata - 2.6.37-2 -- man-pages.patch update, ip(8) TYPE whitespace - -* Mon Jan 10 2011 Petr Sabata - 2.6.37-1 -- 2.6.37 upstream release -- ss(8) improvements patch removed (included upstream) - -* Wed Dec 08 2010 Petr Sabata - 2.6.35-10 -- fix a typo in ss(8) improvements patch, rhbz#661267 - -* Tue Nov 30 2010 Petr Sabata - 2.6.35-9 -- ss(8) improvements patch by jpopelka; should be included in 2.6.36 - -* Tue Nov 09 2010 Petr Sabata - 2.6.35-8 -- rhbz#641599, use the versioned path, man-pages.patch update, prep update - -* Tue Oct 12 2010 Petr Sabata - 2.6.35-7 -- Do not segfault if peer name is omitted when creating a peer veth link, rhbz#642322 - -* Mon Oct 11 2010 Petr Sabata - 2.6.35-6 -- Man-pages update, rhbz#641599 - -* Wed Sep 29 2010 jkeating - 2.6.35-5 -- Rebuilt for gcc bug 634757 - -* Tue Sep 21 2010 Petr Sabata - 2.6.35-4 -- Modified man-pages.patch to fix cbq manpage, rhbz#635877 - -* Tue Sep 21 2010 Petr Sabata - 2.6.35-3 -- Don't print routes with negative metric fix, rhbz#628739 - -* Wed Aug 18 2010 Petr Sabata - 2.6.35-2 -- 'ip route get' fix, iproute2-2.6.35-print-route.patch -- rhbz#622782 - -* Thu Aug 05 2010 Petr Sabata - 2.6.35-1 -- 2.6.35 version bump -- iproute2-tc-priority.patch removed (included in upstream now) - -* Thu Jul 08 2010 Petr Sabata - 2.6.34-5 -- Licensing guidelines compliance fix - -* Wed Jul 07 2010 Petr Sabata - 2.6.34-4 -- Requires: iptables >= 1.4.5, BuildRequires: iptables-devel >= 1.4.5 - -* Thu Jul 01 2010 Petr Sabata - 2.6.34-3 -- Build now runs ./configure to regenerate Makefile for ipt/xt detection - -* Mon Jun 21 2010 Petr Sabata - 2.6.34-2 -- iproute-tc-priority.patch, rhbz#586112 - -* Mon Jun 21 2010 Petr Sabata - 2.6.34-1 -- 2.6.34 version bump - -* Tue Apr 20 2010 Marcela Mašláňová - 2.6.33-2 -- 578729 6rd tunnel correctly 3979ef91de9ed17d21672aaaefd6c228485135a2 -- change BR texlive to tex according to guidelines - -* Thu Feb 25 2010 Marcela Mašláňová - 2.6.33-1 -- update - -* Tue Jan 26 2010 Marcela Mašláňová - 2.6.32-2 -- add macvlan aka VESA support d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7 -- kernel headers 2.6.33 ab322673298bd0b8927cdd9d11f3d36af5941b93 - are needed for macvlan features and probably for other added later. -- fix number of release which contains 2.6.32 kernel headers and features - but it was released as 2.6.31 - -* Mon Jan 4 2010 Marcela Mašláňová - 2.6.31-1 -- update to 2.6.31 - -* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.1.20091106gita7a9ddbb -- 539232 patch cbq initscript - -* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.0.20091106gita7a9ddbb -- snapshot with kernel headers for 2.6.32 - -* Fri Oct 9 2009 Marcela Mašláňová - 2.6.29-5.0.20091009gitdaf49fd6 -- new official version isn't available but it's needed -> switch to git snapshots - -* Thu Sep 24 2009 Marcela Mašláňová - 2.6.29-5 -- create missing man pages - -* Fri Jul 24 2009 Fedora Release Engineering - 2.6.29-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild - -* Thu Apr 23 2009 Marcela Mašláňová - 2.6.29-3 -- new iptables (xtables) bring problems to tc, when ipt is used. - rhbz#497344 still broken. tc_modules.patch brings correct paths to - xtables, but that doesn't fix whole issue. -- 497355 ip should allow creation of an IPsec SA with 'proto any' - and specified sport and dport as selectors - -* Tue Apr 14 2009 Marcela Mašláňová - 2.6.29-2 -- c3651bf4763d7247e3edd4e20526a85de459041b ip6tunnel: Fix no default - display of ip4ip6 tunnels -- e48f73d6a5e90d2f883e15ccedf4f53d26bb6e74 missing arpd directory - -* Wed Mar 25 2009 Marcela Mašláňová - 2.6.29-1 -- update to 2.6.29 -- remove DDR patch which became part of sourc -- add patch with correct headers 1957a322c9932e1a1d2ca1fd37ce4b335ceb7113 - -* Wed Feb 25 2009 Fedora Release Engineering - 2.6.28-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild - -* Wed Feb 4 2009 Marcela Mašláňová - 2.6.28-2 -- 483484 install distribution files into /usr/share and also fixed - install paths in spec -- add the latest change from git which add DRR support - c86f34942a0ce9f8203c0c38f9fe9604f96be706 - -* Mon Jan 19 2009 Marcela Mašláňová - 2.6.28-1 -- previous two patches were included into 2.6.28 release. -- update - -* Mon Jan 12 2009 Marcela Mašláňová - 2.6.27-2 -- 475130 - Negative preferred lifetimes of IPv6 prefixes/addresses - displayed incorrectly -- 472878 - “ip maddr show” in IB interface causes a stack corruption -- both patches will be probably in iproute v2.6.28 - -* Thu Dec 4 2008 Marcela Maslanova - 2.6.27-1 -- aead support was included into upstream version -- patch for moving libs is now deprecated -- update to 2.6.27 - -* Tue Aug 12 2008 Marcela Maslanova - 2.6.26-1 -- update to 2.6.26 -- clean patches - -* Tue Jul 22 2008 Marcela Maslanova - 2.6.25-5 -- fix iproute2-2.6.25-segfault.patch - -* Thu Jul 10 2008 Tom "spot" Callaway - 2.6.25-4 -- rebuild for new db4-4.7 - -* Thu Jul 3 2008 Marcela Maslanova - 2.6.25-3 -- 449933 instead of failing strncpy use copying byte after byte - -* Wed May 14 2008 Marcela Maslanova - 2.6.25-2 -- allow replay setting, solve also 444724 - -* Mon Apr 21 2008 Marcela Maslanova - 2.6.25-1 -- update -- remove patch for backward compatibility -- add patch for AEAD compatibility - -* Thu Feb 21 2008 Marcela Maslanova - 2.6.23-4 -- add creating ps file again. Fix was done in texlive - -* Wed Feb 6 2008 Marcela Maslanova - 2.6.23-3 -- rebuild without tetex files. It isn't working in rawhide yet. Added - new source for ps files. -- #431179 backward compatibility for previous iproute versions - -* Mon Jan 21 2008 Marcela Maslanova - 2.6.23-2 -- rebuild with fix tetex and linuxdoc-tools -> manual pdf -- clean unnecessary patches -- add into spec *.so objects, new BR linux-atm-libs-devel - -* Wed Oct 31 2007 Marcela Maslanova - 2.6.23-1 -- new version from upstrem 2.3.23 - -* Tue Oct 23 2007 Marcela Maslanova - 2.6.22-5 -- move files from /usr/lib/tc to /usr/share/tc -- remove listing files twice - -* Fri Aug 31 2007 Marcela Maslanova - 2.6.22-3 -- package review #225903 - -* Mon Aug 27 2007 Jeremy Katz - 2.6.22-2 -- rebuild for new db4 - -* Wed Jul 11 2007 Radek Vokál - 2.6.22-1 -- upgrade to 2.6.22 - -* Mon Mar 19 2007 Radek Vokál - 2.6.20-2 -- fix broken tc-pfifo man page (#232891) - -* Thu Mar 15 2007 Radek Vokál - 2.6.20-1 -- upgrade to 2.6.20 - -* Fri Dec 15 2006 Radek Vokál - 2.6.19-1 -- upgrade to 2.6.19 - -* Mon Dec 11 2006 Radek Vokál - 2.6.18-5 -- fix snapshot version - -* Fri Dec 1 2006 Radek Vokál - 2.6.18-4 -- spec file cleanup -- one more rebuilt against db4 - -* Thu Nov 16 2006 Radek Vokál - 2.6.18-3 -- fix defective manpage for tc-pfifo (#215399) - -* Mon Nov 13 2006 Radek Vokál - 2.6.18-2 -- rebuilt against new db4 - -* Tue Oct 3 2006 Radek Vokal - 2.6.18-1 -- upgrade to upstream 2.6.18 -- initcwnd patch merged -- bug fix for xfrm monitor -- alignment fixes for cris -- documentation corrections - -* Mon Oct 2 2006 Radek Vokal - 2.6.16-7 -- fix ip.8 man page, add initcwnd option - -* Sun Oct 01 2006 Jesse Keating - 2.6.16-6 -- rebuilt for unwind info generation, broken in gcc-4.1.1-21 - -* Tue Sep 19 2006 Radek Vokal - 2.6.16-5 -- fix crash when resolving ip address - -* Mon Aug 21 2006 Radek Vokál - 2.6.16-4 -- add LOWER_UP and DORMANT flags (#202199) -- use dist tag - -* Wed Jul 12 2006 Jesse Keating - 2.6.16-3.1 -- rebuild - -* Mon Jun 26 2006 Radek Vokál - 2.6.16-3 -- improve handling of initcwnd value (#179719) - -* Sun May 28 2006 Radek Vokál - 2.6.16-2 -- fix BuildRequires: flex (#193403) - -* Sun Mar 26 2006 Radek Vokál - 2.6.16-1 -- upgrade to 2.6.16-060323 -- don't hardcode /usr/lib in tc (#186607) - -* Wed Feb 22 2006 Radek Vokál - 2.6.15-2 -- own /usr/lib/tc (#181953) -- obsoletes shapecfg (#182284) - -* Fri Feb 10 2006 Jesse Keating - 2.6.15-1.2 -- bump again for double-long bug on ppc(64) - -* Tue Feb 07 2006 Jesse Keating - 2.6.15-1.1 -- rebuilt for new gcc4.1 snapshot and glibc changes - -* Tue Jan 17 2006 Radek Vokal 2.6.15-1 -- upgrade to 2.6.15-060110 - -* Mon Dec 12 2005 Radek Vokal 2.6.14-11 -- rebuilt - -* Fri Dec 09 2005 Radek Vokal 2.6.14-10 -- remove backup of config files (#175302) - -* Fri Nov 11 2005 Radek Vokal 2.6.14-9 -- use tc manpages and cbq.init from source tarball (#172851) - -* Thu Nov 10 2005 Radek Vokal 2.6.14-8 -- new upstream source - -* Mon Oct 31 2005 Radek Vokal 2.6.14-7 -- add warning to ip tunnel add command (#128107) - -* Fri Oct 07 2005 Bill Nottingham 2.6.14-6 -- update from upstream (appears to fix #170111) - -* Fri Oct 07 2005 Radek Vokal 2.6.14-5 -- update from upstream -- fixed host_len size for memcpy (#168903) - -* Fri Sep 23 2005 Radek Vokal 2.6.14-4 -- add RPM_OPT_FLAGS - -* Mon Sep 19 2005 Radek Vokal 2.6.14-3 -- forget to apply the patch :( - -* Mon Sep 19 2005 Radek Vokal 2.6.14-2 -- make ip help work again (#168449) - -* Wed Sep 14 2005 Radek Vokal 2.6.14-1 -- upgrade to ss050901 for 2.6.14 kernel headers - -* Fri Aug 26 2005 Radek Vokal 2.6.13-3 -- added /sbin/cbq script and sample configuration files (#166301) - -* Fri Aug 19 2005 Radek Vokal 2.6.13-2 -- upgrade to iproute2-050816 - -* Thu Aug 11 2005 Radek Vokal 2.6.13-1 -- update to snapshot for 2.6.13+ kernel - -* Tue May 24 2005 Radek Vokal 2.6.11-2 -- removed useless initvar patch (#150798) -- new upstream source - -* Tue Mar 15 2005 Radek Vokal 2.6.11-1 -- update to iproute-2.6.11 - -* Fri Mar 04 2005 Radek Vokal 2.6.10-2 -- gcc4 rebuilt - -* Wed Feb 16 2005 Radek Vokal 2.6.10-1 -- update to iproute-2.6.10 - -* Thu Dec 23 2004 Radek Vokal 2.6.9-6 -- added arpd into sbin - -* Mon Nov 29 2004 Radek Vokal 2.6.9-5 -- debug info removed from makefile and from spec (#140891) - -* Tue Nov 16 2004 Radek Vokal 2.6.9-4 -- source file updated from snapshot version -- endian patch adding - -* Sat Sep 18 2004 Joshua Blanton 2.6.9-3 -- added installation of netem module for tc - -* Mon Sep 06 2004 Radek Vokal 2.6.9-2 -- fixed possible buffer owerflow, path by Steve Grubb - -* Wed Sep 01 2004 Radek Vokal 2.6.9-1 -- updated to iproute-2.6.9, spec file change, patches cleared - -* Tue Jun 15 2004 Elliot Lee -- rebuilt - -* Wed May 26 2004 Phil Knirsch 2.4.7-16 -- Took tons of manpages from debian, much more complete (#123952). - -* Thu May 06 2004 Phil Knirsch 2.4.7-15 -- rebuilt - -* Thu May 06 2004 Phil Knirsch 2.4.7-13.2 -- Built security errata version for FC1. - -* Wed Apr 21 2004 Phil Knirsch 2.4.7-14 -- Fixed -f option for ss (#118355). -- Small description fix (#110997). -- Added initialization of some vars (#74961). -- Added patch to initialize "default" rule as well (#60693). - -* Fri Feb 13 2004 Elliot Lee -- rebuilt - -* Wed Nov 05 2003 Phil Knirsch 2.4.7-12 -- Security errata for netlink (CAN-2003-0856). - -* Thu Oct 23 2003 Phil Knirsch -- Updated to latest version. Used by other distros, so seems stable. ;-) -- Quite a few patches needed updating in that turn. -- Added ss (#107363) and several other new nifty tools. - -* Tue Jun 17 2003 Phil Knirsch -- rebuilt - -* Wed Jun 04 2003 Elliot Lee -- rebuilt - -* Wed Jan 22 2003 Tim Powers -- rebuilt - -* Thu Jan 16 2003 Phil Knirsch 2.4.7-7 -- Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486). - -* Fri Oct 11 2002 Bill Nottingham 2.4.7-6 -- remove flags patch at author's request - -* Fri Jun 21 2002 Tim Powers -- automated rebuild - -* Wed Jun 19 2002 Phil Knirsch 2.4.7-4 -- Don't forcibly strip binaries - -* Mon May 27 2002 Phil Knirsch 2.4.7-3 -- Fixed missing diffserv and atm support in config (#57278). -- Fixed inconsistent numeric base problem for command line (#65473). - -* Tue May 14 2002 Phil Knirsch 2.4.7-2 -- Added patch to fix crosscompiling by Adrian Linkins. - -* Fri Mar 15 2002 Phil Knirsch 2.4.7-1 -- Update to latest stable release 2.4.7-now-ss010824. -- Added simple man page for ip. - -* Wed Aug 8 2001 Bill Nottingham -- allow setting of allmulti & promisc flags (#48669) - -* Mon Jul 02 2001 Than Ngo -- fix build problem in beehive if kernel-sources is not installed - -* Fri May 25 2001 Helge Deller -- updated to iproute2-2.2.4-now-ss001007.tar.gz -- bzip2 source tar file -- "License" replaces "Copyright" -- added "BuildPrereq: tetex-latex tetex-dvips psutils" -- rebuilt for 7.2 - -* Tue May 1 2001 Bill Nottingham -- use the system headers - the included ones are broken -- ETH_P_ECHO went away - -* Sat Jan 6 2001 Jeff Johnson -- test for specific KERNEL_INCLUDE directories. - -* Thu Oct 12 2000 Than Ngo -- rebuild for 7.1 - -* Thu Oct 12 2000 Than Ngo -- add default configuration files for iproute (Bug #10549, #18887) - -* Tue Jul 25 2000 Jakub Jelinek -- fix include-glibc/ to cope with glibc 2.2 new resolver headers - -* Thu Jul 13 2000 Prospector -- automatic rebuild - -* Sun Jun 18 2000 Than Ngo -- rebuilt in the new build environment -- use RPM macros -- handle RPM_OPT_FLAGS - -* Sat Jun 03 2000 Than Ngo -- fix iproute to build with new glibc - -* Fri May 26 2000 Ngo Than -- update to 2.2.4-now-ss000305 -- add configuration files - -* Mon Sep 13 1999 Bill Nottingham -- strip binaries - -* Mon Aug 16 1999 Cristian Gafton -- first build diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..61de744 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,6 @@ +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1-gating.functional} diff --git a/iproute.spec b/iproute.spec new file mode 100644 index 0000000..0729597 --- /dev/null +++ b/iproute.spec @@ -0,0 +1,1026 @@ +Summary: Advanced IP routing and network device configuration tools +Name: iproute +Version: 6.7.0 +Release: 2%{?dist}%{?buildid} +%if 0%{?rhel} +Group: Applications/System +%endif +URL: https://kernel.org/pub/linux/utils/net/%{name}2/ +Source0: https://kernel.org/pub/linux/utils/net/%{name}2/%{name}2-%{version}.tar.xz +Source1: rt_dsfield.deprecated + +License: GPL-2.0-or-later AND NIST-PD +BuildRequires: bison +BuildRequires: elfutils-libelf-devel +BuildRequires: flex +BuildRequires: gcc +BuildRequires: iptables-devel >= 1.4.5 +BuildRequires: libbpf-devel +BuildRequires: libcap-devel +BuildRequires: libdb-devel +BuildRequires: libmnl-devel +BuildRequires: libselinux-devel +BuildRequires: make +BuildRequires: pkgconfig +%if ! 0%{?_module_build} +%if 0%{?fedora} +BuildRequires: linux-atm-libs-devel +%endif +%endif +Requires: libbpf +Requires: psmisc +Provides: /sbin/ip + +%description +The iproute package contains networking utilities (ip and rtmon, for example) +which are designed to use the advanced networking capabilities of the Linux +kernel. + +%package tc +Summary: Linux Traffic Control utility +%if 0%{?rhel} +Group: Applications/System +%endif +License: GPL-2.0-or-later +Requires: %{name}%{?_isa} = %{version}-%{release} +Provides: /sbin/tc + +%description tc +The Traffic Control utility manages queueing disciplines, their classes and +attached filters and actions. It is the standard tool to configure QoS in +Linux. + +%if ! 0%{?_module_build} +%package doc +Summary: Documentation for iproute2 utilities with examples +%if 0%{?rhel} +Group: Applications/System +%endif +License: GPL-2.0-or-later +Requires: %{name} = %{version}-%{release} + +%description doc +The iproute documentation contains howtos and examples of settings. +%endif + +%package devel +Summary: iproute development files +%if 0%{?rhel} +Group: Development/Libraries +%endif +License: GPL-2.0-or-later +Requires: %{name} = %{version}-%{release} +Provides: iproute-static = %{version}-%{release} + +%description devel +The libnetlink static library. + +%prep +%autosetup -p1 -n %{name}2-%{version} + +%build +%configure +echo -e "\nSBINDIR=%{_sbindir}" >> config.mk +%make_build + +%install +%make_install + +echo '.so man8/tc-cbq.8' > %{buildroot}%{_mandir}/man8/cbq.8 + +# libnetlink +install -D -m644 include/libnetlink.h %{buildroot}%{_includedir}/libnetlink.h +install -D -m644 lib/libnetlink.a %{buildroot}%{_libdir}/libnetlink.a + +# drop these files, iproute-doc package extracts files directly from _builddir +rm -rf '%{buildroot}%{_docdir}' + +# append deprecated values to rt_dsfield for compatibility reasons +%if 0%{?rhel} && ! 0%{?eln} +cat %{SOURCE1} >>%{buildroot}%{_datadir}/iproute2/rt_dsfield +%endif + +%files +%dir %{_datadir}/iproute2 +%license COPYING +%doc README README.devel +%{_mandir}/man7/* +%exclude %{_mandir}/man7/tc-* +%{_mandir}/man8/* +%exclude %{_mandir}/man8/tc* +%exclude %{_mandir}/man8/cbq* +%attr(644,root,root) %config(noreplace) %{_datadir}/iproute2/* +%{_sbindir}/* +%exclude %{_sbindir}/tc +%exclude %{_sbindir}/routel +%{_datadir}/bash-completion/completions/devlink + +%files tc +%license COPYING +%{_mandir}/man7/tc-* +%{_mandir}/man8/tc* +%{_mandir}/man8/cbq* +%dir %{_libdir}/tc/ +%{_libdir}/tc/* +%{_sbindir}/tc +%{_datadir}/bash-completion/completions/tc + +%if ! 0%{?_module_build} +%files doc +%license COPYING +%doc examples +%endif + +%files devel +%license COPYING +%{_mandir}/man3/* +%{_libdir}/libnetlink.a +%{_includedir}/libnetlink.h +%{_includedir}/iproute2/bpf_elf.h + +%changelog +* Tue Jan 23 2024 Andrea Claudi - 6.7.0-2.el9 +- rpmautospec not available in build root, revert spec file changes (Andrea Claudi) + +* Fri Jan 19 2024 Andrea Claudi - 6.7.0-1.el9 +- New version 6.7.0 (Andrea Claudi) [RHEL-9703] + +* Tue Jun 06 2023 Andrea Claudi - 6.2.0-5.el9 +- tc: add missing separator (Andrea Claudi) [RHEL-337] +- u32: fix TC_U32_TERMINAL printing (Andrea Claudi) [RHEL-586] + +* Mon Jun 05 2023 Andrea Claudi - 6.2.0-4.el9 +- Fix NVR, %autorelease not working (Andrea Claudi) + +* Thu Jun 01 2023 Wen Liang - 6.2.0-3.el9 +- mptcp: add support for implicit flag (Wen Liang) [2109135] + +* Wed May 03 2023 Andrea Claudi - 6.2.0-2.el9 +- macvlan: Add bclim parameter (Andrea Claudi) [2186945] +- Update kernel headers (Andrea Claudi) [2186945] + +* Thu Apr 27 2023 Andrea Claudi - 6.2.0-1.el9 +- New version 6.2.0 (Andrea Claudi) [RHEL-428] + +* Sat Jan 28 2023 Andrea Claudi - 6.1.0-1.el9 +- New version 6.1.0 [2155604] + +* Fri Jan 06 2023 Viktor Malik - 6.0.0-2.el9 +- Rebuild for libbpf 1.0.0 [2158727] + +* Thu Oct 06 2022 Andrea Claudi - 6.0.0-1.el9 +- New version 6.0.0 [2132427] + +* Wed Jun 15 2022 Andrea Claudi - 5.18.0-1.el9 +- New version 5.18.0 [2074608] + +* Thu Nov 25 2021 Andrea Claudi - 5.15.0-2.el9 +- Fix gating.yaml [2009355] + +* Wed Nov 24 2021 Andrea Claudi - 5.15.0-1.el9 +- New version 5.15.0 [2009355] + +* Wed Aug 18 2021 Andrea Claudi - 5.13.0-5.el9 +- Add build and runtime dependency on libbpf (Andrea Claudi) [1994520] +- Use TC_LIB_DIR environment variable (Andrea Claudi) [1994545] +- Re-add iproute-doc package on the specfile (Andrea Claudi) [1994581] + +* Mon Aug 09 2021 Mohan Boddu - 5.13.0-4.el9 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Jul 16 2021 Andrea Claudi - 5.13.0-3.el9 +- Fix changelog (Andrea Claudi) [1947854] +- Add RHEL gating configuration (Aleksandra Fedorova) + +* Thu Jul 15 2021 Andrea Claudi - 5.13.0-2.el9 +- Remove Recommends: iproute-tc from spec file (Andrea Claudi) [1947854] + +* Wed Jun 30 2021 Andrea Claudi - 5.13.0-1.el9 +- New version 5.13.0 (#1977898) + +* Fri Apr 16 2021 Mohan Boddu - 5.10.0-3.el9 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Jan 26 2021 Fedora Release Engineering - 5.10.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Dec 21 2020 Andrea Claudi - 5.10.0-1 +- New version 5.10.0 (#1909551) + +* Wed Dec 2 2020 Andrea Claudi - 5.9.0-1 +- New version 5.9.0 + +* Mon Aug 10 2020 Phil Sutter - 5.8.0-1 +- New version 5.8.0 + +* Tue Jul 28 2020 Fedora Release Engineering - 5.7.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed Jun 03 2020 Phil Sutter - 5.7.0-1 +- New version 5.7.0 + +* Tue Jan 28 2020 Phil Sutter - 5.5.0-1 +- New version 5.5.0 + +* Tue Nov 26 2019 Phil Sutter - 5.4.0-1 +- New version 5.4.0 +- Drop iproute-doc package, upstream removed all non-manpage documentation + +* Tue Oct 08 2019 Phil Sutter - 5.3.0-2 +- ifcfg script uses killall, therefore requires psmisc package + +* Thu Sep 26 2019 Phil Sutter - 5.3.0-1 +- New version 5.3.0 +- Add upstream-suggested backports + +* Thu Jul 25 2019 Fedora Release Engineering - 5.2.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jul 23 2019 Phil Sutter - 5.2.0-1 +- New version 5.2.0 +- Add upstream-suggested backports +- Fix for tunnel creation when using 'dev' parameter + +* Wed May 29 2019 Phil Sutter - 5.1.0-1 +- New version 5.1.0 + +* Wed Mar 20 2019 Phil Sutter - 5.0.0-2 +- Restore Provides: hint, at least pptp depends on it + +* Wed Mar 20 2019 Phil Sutter - 5.0.0-1 +- New version 5.0.0 +- Get rid of old upgrade path hints + +* Fri Feb 01 2019 Phil Sutter - 4.20.0-1 +- New version 4.20.0 +- Add upstream-suggested backports +- Upstream dropped cbq script, remove it along with related configs +- Add libcap support + +* Fri Feb 01 2019 Fedora Release Engineering - 4.18.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Sep 19 2018 Phil Sutter - 4.18.0-5 +- man: ip-route: Clarify referenced versions are Linux ones + +* Fri Aug 31 2018 Phil Sutter - 4.18.0-4 +- iprule: Fix destination prefix output + +* Thu Aug 23 2018 Phil Sutter - 4.18.0-3 +- Make colored output configurable + +* Thu Aug 16 2018 Phil Sutter - 4.18.0-2 +- Fix ss filter expressions + +* Tue Aug 14 2018 Phil Sutter - 4.18.0-1 +- New version 4.18.0 + +* Fri Jul 13 2018 Fedora Release Engineering - 4.17.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 12 2018 Phil Sutter - 4.17.0-1 +- New version 4.17.0 + +* Fri Jun 01 2018 Phil Sutter - 4.16.0-1 +- New version 4.16.0 + +* Fri Feb 09 2018 Phil Sutter - 4.15.0-1 +- New version 4.15.0 + +* Fri Feb 9 2018 Florian Weimer - 4.14.1-6 +- Use LDFLAGS defaults from redhat-rpm-config + +* Wed Feb 07 2018 Fedora Release Engineering - 4.14.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Dec 11 2017 Phil Sutter - 4.14.1-4 +- Add missing patch files. + +* Mon Dec 11 2017 Phil Sutter - 4.14.1-3 +- Add upstream suggested backports. +- Make use of %%autosetup macro. + +* Wed Nov 15 2017 Phil Sutter - 4.14.1-2 +- Drop unused build dependencies + +* Wed Nov 15 2017 Phil Sutter - 4.14.1-1 +- New version 4.14.1 + +* Tue Sep 19 2017 Phil Sutter - 4.13.0-1 +- New version 4.13.0 + +* Wed Aug 02 2017 Fedora Release Engineering - 4.12.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 4.12.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Jul 21 2017 Phil Sutter - 4.12.0-1 +- New version 4.12.0 + +* Tue May 23 2017 Phil Sutter - 4.11.0-1 +- Add virtual capability to tc subpackage so it's easier found +- New version 4.11.0 + +* Thu May 11 2017 Karsten Hopp - 4.10.0-3 +- don't build docs for module builds to limit dependencies + +* Fri Mar 17 2017 Phil Sutter - 4.10.0-2 +- Add two fixes to 4.10.0 release from upstream. + +* Tue Mar 14 2017 Phil Sutter - 4.10.0-1 +- Ship new header iproute2/bpf_elf.h +- Document content of remaining docs fixup patch in spec file +- Drop patches already applied upstream +- New version 4.10.0 + +* Fri Feb 10 2017 Fedora Release Engineering - 4.9.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Feb 2 2017 Thomas Woerner - 4.9.0-3 +- Release bump for iptables-1.6.1 (libxtables.so.12) + +* Sat Jan 28 2017 Phil Sutter - 4.9.0-2 +- Fix for failing 'make install' + +* Sat Jan 28 2017 Phil Sutter - 4.9.0-1 +- New version 4.9.0 + +* Fri Jan 13 2017 Phil Sutter - 4.8.0-2 +- Fix segfault in xt action + +* Wed Nov 30 2016 Phil Sutter - 4.8.0-1 +- New version 4.8.0 + +* Wed Aug 10 2016 Phil Sutter - 4.7.0-1 +- New version 4.7.0 + +* Wed May 04 2016 Phil Sutter - 4.6.0-1 +- New version 4.6.0 + +* Wed Apr 13 2016 Thomas Woerner - 4.5.0-4 +- Rebuild for new iptables-1.6.0 with libxtables so bump + +* Fri Apr 08 2016 Phil Sutter - 4.5.0-3 +- Fix upgrade path by adding correct Requires/Obsoletes statements to spec file +- Move README.iproute2+tc into tc subpackage + +* Fri Mar 18 2016 Phil Sutter - 4.5.0-2 +- Split tc into it's own subpackage + +* Fri Mar 18 2016 Phil Sutter - 4.5.0-1 +- New version 4.5.0 + +* Thu Feb 04 2016 Fedora Release Engineering - 4.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jan 19 2016 Phil Sutter - 4.4.0-1 +- New version 4.4.0 + +* Sun Oct 04 2015 Phil Sutter - 4.2.0-4 +- Simplify RPM install stage by using package's install target + +* Sun Oct 04 2015 Phil Sutter - 4.2.0-3 +- Add missing build dependency to libmnl-devel +- Ship tipc utility + +* Thu Sep 24 2015 Phil Sutter - 4.2.0-2 +- Add missing build dependency to libselinux-devel + +* Wed Sep 02 2015 Pavel Šimerda - 4.2.0-1 +- new version 4.2.0 + +* Tue Jul 07 2015 Pavel Šimerda - 4.1.1-1 +- new version 4.1.1 + +* Wed Jun 17 2015 Fedora Release Engineering - 4.0.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 13 2015 Pavel Šimerda - 4.0.0-3 +- remove patch rejected by upstream + +* Mon May 11 2015 Pavel Šimerda - 4.0.0-2 +- Remove patch rejected by upstream + +* Tue Apr 14 2015 Pavel Šimerda - 4.0.0-1 +- new version 4.0.0 + +* Fri Mar 13 2015 Pavel Šimerda - 3.19.0-1 +- new version 3.19.0 + +* Sat Oct 04 2014 Lubomir Rintel - 3.16.0-3 +- Backport fix for ip link add name regression that broke libvirt + +* Sat Aug 16 2014 Fedora Release Engineering - 3.16.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Tue Aug 05 2014 Petr Šabata - 3.16.0-1 +- 3.16 bump + +* Sat Jul 12 2014 Tom Callaway - 3.15.0-2 +- fix license handling + +* Thu Jun 12 2014 Petr Šabata - 3.15.0-1 +- 3.15.0 bump + +* Sat Jun 07 2014 Fedora Release Engineering - 3.14.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 06 2014 Petr Šabata - 3.14.0-2 +- Fix incorrect references in ss(8), #1092653 + +* Tue Apr 15 2014 Petr Šabata - 3.14.0-1 +- 3.14 bump +- Drop out iplink_have_newlink() fix in favor of upstream's approach + +* Tue Nov 26 2013 Petr Šabata - 3.12.0-2 +- Drop libnl from dependencies (#1034454) + +* Mon Nov 25 2013 Petr Šabata - 3.12.0-1 +- 3.12.0 bump + +* Thu Nov 21 2013 Petr Šabata - 3.11.0-2 +- Fix the rtt time parsing again + +* Tue Oct 22 2013 Petr Šabata - 3.11.0-1 +- 3.11 bump + +* Tue Oct 01 2013 Petr Pisar - 3.10.0-8 +- Close file with bridge monitor file (bug #1011822) + +* Tue Sep 24 2013 Petr Pisar - 3.10.0-7 +- Add tc -OK option +- Document "bridge mdb" and "bridge monitor mdb" + +* Fri Aug 30 2013 Petr Šabata - 3.10.0-6 +- Fix lnstat -i properly this time + +* Thu Aug 29 2013 Petr Šabata - 3.10.0-5 +- Fix an 'ip link' hang (#996537) + +* Tue Aug 13 2013 Petr Šabata - 3.10.0-4 +- lnstat -i: Run indefinitely if the --count isn't specified (#977845) +- Switch to unversioned %%docdir + +* Sat Aug 03 2013 Fedora Release Engineering - 3.10.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Wed Jul 17 2013 Petr Šabata - 3.10.0-2 +- Fix the XFRM patch + +* Wed Jul 17 2013 Petr Šabata - 3.10.0-1 +- 3.10.0 bump +- Drop the SHAREDIR patch and revert to upstream ways (#966445) +- Fix an XFRM regression with FORTIFY_SOURCE + +* Tue Apr 30 2013 Petr Šabata - 3.9.0-1 +- 3.9.0 bump + +* Thu Apr 25 2013 Petr Šabata - 3.8.0-4 +- ATM is available in Fedora only + +* Tue Mar 12 2013 Petr Šabata - 3.8.0-3 +- Mention the "up" argument in documentation and help outputs (#907468) + +* Mon Mar 04 2013 Petr Šabata - 3.8.0-2 +- Bump for 1.4.18 rebuild + +* Tue Feb 26 2013 Petr Šabata - 3.8.0-1 +- 3.8.0 bump + +* Fri Feb 08 2013 Petr Šabata - 3.7.0-2 +- Don't propogate mounts out of ip (#882047) + +* Wed Dec 12 2012 Petr Šabata - 3.7.0-1 +- 3.7.0 bump + +* Mon Nov 19 2012 Petr Šabata - 3.6.0-3 +- Include section 7 manpages (#876857) +- Fix ancient bogus dates in the changelog (correction based upon commits) +- Explicitly require some TeX fonts no longer present in the base distribution + +* Thu Oct 04 2012 Petr Šabata - 3.6.0-2 +- List all interfaces by default + +* Wed Oct 03 2012 Petr Šabata - 3.6.0-1 +- 3.6.0 bump + +* Thu Aug 30 2012 Petr Šabata - 3.5.1-2 +- Remove the explicit iptables dependency (#852840) + +* Tue Aug 14 2012 Petr Šabata - 3.5.1-1 +- 3.5.1 bugfix release bump +- Rename 'br' to 'bridge' + +* Mon Aug 06 2012 Petr Šabata - 3.5.0-2 +- Install the new bridge utility + +* Thu Aug 02 2012 Petr Šabata - 3.5.0-1 +- 3.5.0 bump +- Move to db5. + +* Thu Jul 19 2012 Fedora Release Engineering - 3.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue May 22 2012 Petr Šabata - 3.4.0-1 +- 3.4.0 bump +- Drop the print route patch (included upstream) + +* Mon Apr 30 2012 Petr Šabata - 3.3.0-2 +- Let's install rtmon too... (#814819) + +* Thu Mar 22 2012 Petr Šabata - 3.3.0-1 +- 3.3.0 bump +- Update source URL + +* Mon Feb 27 2012 Petr Šabata - 3.2.0-3 +- Address dangerous /tmp files security issue (CVE-2012-1088, #797881, #797878) + +* Fri Jan 27 2012 Petr Šabata - 3.2.0-2 +- Simplify the spec a bit thanks to the UsrMove feature + +* Fri Jan 06 2012 Petr Šabata - 3.2.0-1 +- 3.2.0 bump +- Removing a useless, now conflicting patch (initcwnd already decumented) + +* Thu Nov 24 2011 Petr Šabata - 3.1.0-1 +- 3.1.0 bump +- Point URL and Source to the new location on kernel.org +- Remove now obsolete defattr +- Dropping various patches now included upstream +- Dropping iproute2-2.6.25-segfault.patch; I fail to understand the reason for + this hack + +* Tue Nov 15 2011 Petr Šabata - 2.6.39-6 +- ss -ul should display UDP CLOSED sockets (#691100) + +* Thu Oct 06 2011 Petr Sabata - 2.6.39-5 +- Fix ss, lnstat and arpd usage and manpages + +* Wed Sep 07 2011 Petr Sabata - 2.6.39-4 +- lnstat should dump (-d) to stdout instead of stderr (#736332) + +* Tue Jul 26 2011 Petr Sabata - 2.6.39-3 +- Rebuild for xtables7 + +* Tue Jul 12 2011 Petr Sabata - 2.6.39-2 +- Rebuild for xtables6 + +* Thu Jun 30 2011 Petr Sabata - 2.6.39-1 +- 2.6.39 bump + +* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-4 +- Link [cr]tstat to lnstat + +* Wed Apr 27 2011 Petr Sabata - 2.6.38.1-3 +- Install ctstat, rtstat and routef manpage symlinks +- Install m_xt & m_ipt tc modules +- Creating devel and virtual static subpackages with libnetlink + +* Thu Apr 21 2011 Petr Sabata - 2.6.38.1-2 +- General cleanup +- Use global instead of define +- Buildroot removal +- Correcting URL and Source links +- Install genl, ifstat, routef, routel and rtpr (rhbz#697319) + +* Fri Mar 18 2011 Petr Sabata - 2.6.38.1-1 +- 2.6.38.1 bump + +* Wed Mar 16 2011 Petr Sabata - 2.6.38-1 +- 2.6.38 bump + +* Wed Feb 09 2011 Fedora Release Engineering - 2.6.37-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Jan 31 2011 Petr Sabata - 2.6.37-2 +- man-pages.patch update, ip(8) TYPE whitespace + +* Mon Jan 10 2011 Petr Sabata - 2.6.37-1 +- 2.6.37 upstream release +- ss(8) improvements patch removed (included upstream) + +* Wed Dec 08 2010 Petr Sabata - 2.6.35-10 +- fix a typo in ss(8) improvements patch, rhbz#661267 + +* Tue Nov 30 2010 Petr Sabata - 2.6.35-9 +- ss(8) improvements patch by jpopelka; should be included in 2.6.36 + +* Tue Nov 09 2010 Petr Sabata - 2.6.35-8 +- rhbz#641599, use the versioned path, man-pages.patch update, prep update + +* Tue Oct 12 2010 Petr Sabata - 2.6.35-7 +- Do not segfault if peer name is omitted when creating a peer veth link, rhbz#642322 + +* Mon Oct 11 2010 Petr Sabata - 2.6.35-6 +- Man-pages update, rhbz#641599 + +* Wed Sep 29 2010 jkeating - 2.6.35-5 +- Rebuilt for gcc bug 634757 + +* Tue Sep 21 2010 Petr Sabata - 2.6.35-4 +- Modified man-pages.patch to fix cbq manpage, rhbz#635877 + +* Tue Sep 21 2010 Petr Sabata - 2.6.35-3 +- Don't print routes with negative metric fix, rhbz#628739 + +* Wed Aug 18 2010 Petr Sabata - 2.6.35-2 +- 'ip route get' fix, iproute2-2.6.35-print-route.patch +- rhbz#622782 + +* Thu Aug 05 2010 Petr Sabata - 2.6.35-1 +- 2.6.35 version bump +- iproute2-tc-priority.patch removed (included in upstream now) + +* Thu Jul 08 2010 Petr Sabata - 2.6.34-5 +- Licensing guidelines compliance fix + +* Wed Jul 07 2010 Petr Sabata - 2.6.34-4 +- Requires: iptables >= 1.4.5, BuildRequires: iptables-devel >= 1.4.5 + +* Thu Jul 01 2010 Petr Sabata - 2.6.34-3 +- Build now runs ./configure to regenerate Makefile for ipt/xt detection + +* Mon Jun 21 2010 Petr Sabata - 2.6.34-2 +- iproute-tc-priority.patch, rhbz#586112 + +* Mon Jun 21 2010 Petr Sabata - 2.6.34-1 +- 2.6.34 version bump + +* Tue Apr 20 2010 Marcela Mašláňová - 2.6.33-2 +- 578729 6rd tunnel correctly 3979ef91de9ed17d21672aaaefd6c228485135a2 +- change BR texlive to tex according to guidelines + +* Thu Feb 25 2010 Marcela Mašláňová - 2.6.33-1 +- update + +* Tue Jan 26 2010 Marcela Mašláňová - 2.6.32-2 +- add macvlan aka VESA support d63a9b2b1e4e3eab0d0577d0a0f412d50be1e0a7 +- kernel headers 2.6.33 ab322673298bd0b8927cdd9d11f3d36af5941b93 + are needed for macvlan features and probably for other added later. +- fix number of release which contains 2.6.32 kernel headers and features + but it was released as 2.6.31 + +* Mon Jan 4 2010 Marcela Mašláňová - 2.6.31-1 +- update to 2.6.31 + +* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.1.20091106gita7a9ddbb +- 539232 patch cbq initscript + +* Fri Nov 27 2009 Marcela Mašláňová - 2.6.29-5.0.20091106gita7a9ddbb +- snapshot with kernel headers for 2.6.32 + +* Fri Oct 9 2009 Marcela Mašláňová - 2.6.29-5.0.20091009gitdaf49fd6 +- new official version isn't available but it's needed -> switch to git snapshots + +* Thu Sep 24 2009 Marcela Mašláňová - 2.6.29-5 +- create missing man pages + +* Fri Jul 24 2009 Fedora Release Engineering - 2.6.29-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Apr 23 2009 Marcela Mašláňová - 2.6.29-3 +- new iptables (xtables) bring problems to tc, when ipt is used. + rhbz#497344 still broken. tc_modules.patch brings correct paths to + xtables, but that doesn't fix whole issue. +- 497355 ip should allow creation of an IPsec SA with 'proto any' + and specified sport and dport as selectors + +* Tue Apr 14 2009 Marcela Mašláňová - 2.6.29-2 +- c3651bf4763d7247e3edd4e20526a85de459041b ip6tunnel: Fix no default + display of ip4ip6 tunnels +- e48f73d6a5e90d2f883e15ccedf4f53d26bb6e74 missing arpd directory + +* Wed Mar 25 2009 Marcela Mašláňová - 2.6.29-1 +- update to 2.6.29 +- remove DDR patch which became part of sourc +- add patch with correct headers 1957a322c9932e1a1d2ca1fd37ce4b335ceb7113 + +* Wed Feb 25 2009 Fedora Release Engineering - 2.6.28-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Wed Feb 4 2009 Marcela Mašláňová - 2.6.28-2 +- 483484 install distribution files into /usr/share and also fixed + install paths in spec +- add the latest change from git which add DRR support + c86f34942a0ce9f8203c0c38f9fe9604f96be706 + +* Mon Jan 19 2009 Marcela Mašláňová - 2.6.28-1 +- previous two patches were included into 2.6.28 release. +- update + +* Mon Jan 12 2009 Marcela Mašláňová - 2.6.27-2 +- 475130 - Negative preferred lifetimes of IPv6 prefixes/addresses + displayed incorrectly +- 472878 - “ip maddr show” in IB interface causes a stack corruption +- both patches will be probably in iproute v2.6.28 + +* Thu Dec 4 2008 Marcela Maslanova - 2.6.27-1 +- aead support was included into upstream version +- patch for moving libs is now deprecated +- update to 2.6.27 + +* Tue Aug 12 2008 Marcela Maslanova - 2.6.26-1 +- update to 2.6.26 +- clean patches + +* Tue Jul 22 2008 Marcela Maslanova - 2.6.25-5 +- fix iproute2-2.6.25-segfault.patch + +* Thu Jul 10 2008 Tom "spot" Callaway - 2.6.25-4 +- rebuild for new db4-4.7 + +* Thu Jul 3 2008 Marcela Maslanova - 2.6.25-3 +- 449933 instead of failing strncpy use copying byte after byte + +* Wed May 14 2008 Marcela Maslanova - 2.6.25-2 +- allow replay setting, solve also 444724 + +* Mon Apr 21 2008 Marcela Maslanova - 2.6.25-1 +- update +- remove patch for backward compatibility +- add patch for AEAD compatibility + +* Thu Feb 21 2008 Marcela Maslanova - 2.6.23-4 +- add creating ps file again. Fix was done in texlive + +* Wed Feb 6 2008 Marcela Maslanova - 2.6.23-3 +- rebuild without tetex files. It isn't working in rawhide yet. Added + new source for ps files. +- #431179 backward compatibility for previous iproute versions + +* Mon Jan 21 2008 Marcela Maslanova - 2.6.23-2 +- rebuild with fix tetex and linuxdoc-tools -> manual pdf +- clean unnecessary patches +- add into spec *.so objects, new BR linux-atm-libs-devel + +* Wed Oct 31 2007 Marcela Maslanova - 2.6.23-1 +- new version from upstrem 2.3.23 + +* Tue Oct 23 2007 Marcela Maslanova - 2.6.22-5 +- move files from /usr/lib/tc to /usr/share/tc +- remove listing files twice + +* Fri Aug 31 2007 Marcela Maslanova - 2.6.22-3 +- package review #225903 + +* Mon Aug 27 2007 Jeremy Katz - 2.6.22-2 +- rebuild for new db4 + +* Wed Jul 11 2007 Radek Vokál - 2.6.22-1 +- upgrade to 2.6.22 + +* Mon Mar 19 2007 Radek Vokál - 2.6.20-2 +- fix broken tc-pfifo man page (#232891) + +* Thu Mar 15 2007 Radek Vokál - 2.6.20-1 +- upgrade to 2.6.20 + +* Fri Dec 15 2006 Radek Vokál - 2.6.19-1 +- upgrade to 2.6.19 + +* Mon Dec 11 2006 Radek Vokál - 2.6.18-5 +- fix snapshot version + +* Fri Dec 1 2006 Radek Vokál - 2.6.18-4 +- spec file cleanup +- one more rebuilt against db4 + +* Thu Nov 16 2006 Radek Vokál - 2.6.18-3 +- fix defective manpage for tc-pfifo (#215399) + +* Mon Nov 13 2006 Radek Vokál - 2.6.18-2 +- rebuilt against new db4 + +* Tue Oct 3 2006 Radek Vokal - 2.6.18-1 +- upgrade to upstream 2.6.18 +- initcwnd patch merged +- bug fix for xfrm monitor +- alignment fixes for cris +- documentation corrections + +* Mon Oct 2 2006 Radek Vokal - 2.6.16-7 +- fix ip.8 man page, add initcwnd option + +* Sun Oct 01 2006 Jesse Keating - 2.6.16-6 +- rebuilt for unwind info generation, broken in gcc-4.1.1-21 + +* Tue Sep 19 2006 Radek Vokal - 2.6.16-5 +- fix crash when resolving ip address + +* Mon Aug 21 2006 Radek Vokál - 2.6.16-4 +- add LOWER_UP and DORMANT flags (#202199) +- use dist tag + +* Wed Jul 12 2006 Jesse Keating - 2.6.16-3.1 +- rebuild + +* Mon Jun 26 2006 Radek Vokál - 2.6.16-3 +- improve handling of initcwnd value (#179719) + +* Sun May 28 2006 Radek Vokál - 2.6.16-2 +- fix BuildRequires: flex (#193403) + +* Sun Mar 26 2006 Radek Vokál - 2.6.16-1 +- upgrade to 2.6.16-060323 +- don't hardcode /usr/lib in tc (#186607) + +* Wed Feb 22 2006 Radek Vokál - 2.6.15-2 +- own /usr/lib/tc (#181953) +- obsoletes shapecfg (#182284) + +* Fri Feb 10 2006 Jesse Keating - 2.6.15-1.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 2.6.15-1.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Tue Jan 17 2006 Radek Vokal 2.6.15-1 +- upgrade to 2.6.15-060110 + +* Mon Dec 12 2005 Radek Vokal 2.6.14-11 +- rebuilt + +* Fri Dec 09 2005 Radek Vokal 2.6.14-10 +- remove backup of config files (#175302) + +* Fri Nov 11 2005 Radek Vokal 2.6.14-9 +- use tc manpages and cbq.init from source tarball (#172851) + +* Thu Nov 10 2005 Radek Vokal 2.6.14-8 +- new upstream source + +* Mon Oct 31 2005 Radek Vokal 2.6.14-7 +- add warning to ip tunnel add command (#128107) + +* Fri Oct 07 2005 Bill Nottingham 2.6.14-6 +- update from upstream (appears to fix #170111) + +* Fri Oct 07 2005 Radek Vokal 2.6.14-5 +- update from upstream +- fixed host_len size for memcpy (#168903) + +* Fri Sep 23 2005 Radek Vokal 2.6.14-4 +- add RPM_OPT_FLAGS + +* Mon Sep 19 2005 Radek Vokal 2.6.14-3 +- forget to apply the patch :( + +* Mon Sep 19 2005 Radek Vokal 2.6.14-2 +- make ip help work again (#168449) + +* Wed Sep 14 2005 Radek Vokal 2.6.14-1 +- upgrade to ss050901 for 2.6.14 kernel headers + +* Fri Aug 26 2005 Radek Vokal 2.6.13-3 +- added /sbin/cbq script and sample configuration files (#166301) + +* Fri Aug 19 2005 Radek Vokal 2.6.13-2 +- upgrade to iproute2-050816 + +* Thu Aug 11 2005 Radek Vokal 2.6.13-1 +- update to snapshot for 2.6.13+ kernel + +* Tue May 24 2005 Radek Vokal 2.6.11-2 +- removed useless initvar patch (#150798) +- new upstream source + +* Tue Mar 15 2005 Radek Vokal 2.6.11-1 +- update to iproute-2.6.11 + +* Fri Mar 04 2005 Radek Vokal 2.6.10-2 +- gcc4 rebuilt + +* Wed Feb 16 2005 Radek Vokal 2.6.10-1 +- update to iproute-2.6.10 + +* Thu Dec 23 2004 Radek Vokal 2.6.9-6 +- added arpd into sbin + +* Mon Nov 29 2004 Radek Vokal 2.6.9-5 +- debug info removed from makefile and from spec (#140891) + +* Tue Nov 16 2004 Radek Vokal 2.6.9-4 +- source file updated from snapshot version +- endian patch adding + +* Sat Sep 18 2004 Joshua Blanton 2.6.9-3 +- added installation of netem module for tc + +* Mon Sep 06 2004 Radek Vokal 2.6.9-2 +- fixed possible buffer owerflow, path by Steve Grubb + +* Wed Sep 01 2004 Radek Vokal 2.6.9-1 +- updated to iproute-2.6.9, spec file change, patches cleared + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Wed May 26 2004 Phil Knirsch 2.4.7-16 +- Took tons of manpages from debian, much more complete (#123952). + +* Thu May 06 2004 Phil Knirsch 2.4.7-15 +- rebuilt + +* Thu May 06 2004 Phil Knirsch 2.4.7-13.2 +- Built security errata version for FC1. + +* Wed Apr 21 2004 Phil Knirsch 2.4.7-14 +- Fixed -f option for ss (#118355). +- Small description fix (#110997). +- Added initialization of some vars (#74961). +- Added patch to initialize "default" rule as well (#60693). + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Wed Nov 05 2003 Phil Knirsch 2.4.7-12 +- Security errata for netlink (CAN-2003-0856). + +* Thu Oct 23 2003 Phil Knirsch +- Updated to latest version. Used by other distros, so seems stable. ;-) +- Quite a few patches needed updating in that turn. +- Added ss (#107363) and several other new nifty tools. + +* Tue Jun 17 2003 Phil Knirsch +- rebuilt + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Wed Jan 22 2003 Tim Powers +- rebuilt + +* Thu Jan 16 2003 Phil Knirsch 2.4.7-7 +- Added htb3-tc patch from http://luxik.cdi.cz/~devik/qos/htb/ (#75486). + +* Fri Oct 11 2002 Bill Nottingham 2.4.7-6 +- remove flags patch at author's request + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Wed Jun 19 2002 Phil Knirsch 2.4.7-4 +- Don't forcibly strip binaries + +* Mon May 27 2002 Phil Knirsch 2.4.7-3 +- Fixed missing diffserv and atm support in config (#57278). +- Fixed inconsistent numeric base problem for command line (#65473). + +* Tue May 14 2002 Phil Knirsch 2.4.7-2 +- Added patch to fix crosscompiling by Adrian Linkins. + +* Fri Mar 15 2002 Phil Knirsch 2.4.7-1 +- Update to latest stable release 2.4.7-now-ss010824. +- Added simple man page for ip. + +* Wed Aug 8 2001 Bill Nottingham +- allow setting of allmulti & promisc flags (#48669) + +* Mon Jul 02 2001 Than Ngo +- fix build problem in beehive if kernel-sources is not installed + +* Fri May 25 2001 Helge Deller +- updated to iproute2-2.2.4-now-ss001007.tar.gz +- bzip2 source tar file +- "License" replaces "Copyright" +- added "BuildPrereq: tetex-latex tetex-dvips psutils" +- rebuilt for 7.2 + +* Tue May 1 2001 Bill Nottingham +- use the system headers - the included ones are broken +- ETH_P_ECHO went away + +* Sat Jan 6 2001 Jeff Johnson +- test for specific KERNEL_INCLUDE directories. + +* Thu Oct 12 2000 Than Ngo +- rebuild for 7.1 + +* Thu Oct 12 2000 Than Ngo +- add default configuration files for iproute (Bug #10549, #18887) + +* Tue Jul 25 2000 Jakub Jelinek +- fix include-glibc/ to cope with glibc 2.2 new resolver headers + +* Thu Jul 13 2000 Prospector +- automatic rebuild + +* Sun Jun 18 2000 Than Ngo +- rebuilt in the new build environment +- use RPM macros +- handle RPM_OPT_FLAGS + +* Sat Jun 03 2000 Than Ngo +- fix iproute to build with new glibc + +* Fri May 26 2000 Ngo Than +- update to 2.2.4-now-ss000305 +- add configuration files + +* Mon Sep 13 1999 Bill Nottingham +- strip binaries + +* Mon Aug 16 1999 Cristian Gafton +- first build diff --git a/rt_dsfield.deprecated b/rt_dsfield.deprecated new file mode 100644 index 0000000..c8eec63 --- /dev/null +++ b/rt_dsfield.deprecated @@ -0,0 +1,17 @@ + +# Deprecated values dropped upstream +# Kept in RHEL for backwards-compatibility +0x00 default +0x10 lowdelay +0x08 throughput +0x04 reliability +# This value overlap with ECT, do not use it! +0x02 mincost +# These values seems do not want to die, Cisco likes them by a strange reason. +0x20 priority +0x40 immediate +0x60 flash +0x80 flash-override +0xa0 critical +0xc0 internet +0xe0 network diff --git a/sources b/sources new file mode 100644 index 0000000..8cefab4 --- /dev/null +++ b/sources @@ -0,0 +1,8 @@ +SHA512 (iproute2-5.10.0.tar.xz) = a468eefa797898b6de452212aa432c0a931434defacae5fb4335754c1292c5d86a8c8dbf3017f90cec266d71a2a17ae469aac17e1a85a5cbddc70814313e4c13 +SHA512 (iproute2-5.13.0.tar.xz) = a3286639fb303a7c3c553cb5df0a7336c4c67e53eb05e872d2776b771dbfa36ffdf2df140f570275db6785c882992f469f8eb34a5b506aac876216df7dde245d +SHA512 (iproute2-5.15.0.tar.xz) = e94918fa10e523224b965c7cb5303a101745e89c90d149d2d9876a002b2a894b1c689c519dc22168f3d334c3ee0810c59ec43223baab3d5f4c56f017d6281f22 +SHA512 (iproute2-5.18.0.tar.xz) = 7b43c89741a8ffe8fd529ac4ee19c8eab7dce2f064de494c160c75456ffb960fb5f1e78c868ab98360dafde28d5e2c4d58177135b6d380e80e06eba9e3eaf068 +SHA512 (iproute2-6.0.0.tar.xz) = be30362b0df6906aa786f935d5f555b8b86c747fe05314066f4180ab2f7c952ae227b7cf04c15e75d8f99ca17bafb7c8dc0fb1c18f3a9e3222d98716bb449f7a +SHA512 (iproute2-6.1.0.tar.xz) = 4e4d3b5e1e1a5444f42671c1e6caee072e80063e34e37386695f76f85a1ab662f4513050814006e5154426cbaadfba1d86b0be14e65978d5e670a16446047b28 +SHA512 (iproute2-6.2.0.tar.xz) = b24e0fdd0f51b8b78bc3bb681e3829af47d3011e93f3892289eb070b336709a6883728ecc7627ca37f6449720f8ed1349af321c0d04454894a7175b82f7de151 +SHA512 (iproute2-6.7.0.tar.xz) = 5d8dca139b1b980dac6c841f477b951dd199074cb078b5ea8df23b3532eeb235cca1df9f6628b0f81b7edd62aaf4e95bad15a851843bd61e5715215da97cc546 diff --git a/tests/bridge-utility/Makefile b/tests/bridge-utility/Makefile new file mode 100644 index 0000000..a7f394f --- /dev/null +++ b/tests/bridge-utility/Makefile @@ -0,0 +1,64 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/bridge-utility +# Description: Test basic bridge funcionality +# Author: David Spurek +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/bridge-utility +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: David Spurek " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic bridge funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Requires: bridge-utils" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/bridge-utility/PURPOSE b/tests/bridge-utility/PURPOSE new file mode 100644 index 0000000..f3bce23 --- /dev/null +++ b/tests/bridge-utility/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/bridge-utility +Description: Test basic bridge funcionality +Author: David Spurek diff --git a/tests/bridge-utility/runtest.sh b/tests/bridge-utility/runtest.sh new file mode 100755 index 0000000..0d510c3 --- /dev/null +++ b/tests/bridge-utility/runtest.sh @@ -0,0 +1,268 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/bridge-utility +# Description: Test basic bridge funcionality +# Author: David Spurek +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2013 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +PACKAGES="$PACKAGE" +rlIsRHEL 6 && PACKAGES=( ${PACKAGES[@]} "bridge-utils" ) +vxlan_name="testvxlan" +bridge_name="testbridge" +lsmod | grep dummy +dummy_loaded=$? + +rlJournalStart + rlPhaseStartSetup + # Check reqiured packages. + for P in ${PACKAGES[@]}; do rlCheckRpm $P || rlDie "Package $P is missing"; done + + rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" + rlRun "pushd $TmpDir" + no_dummy=0 + if [ $dummy_loaded -eq 1 ] ; then + # dummy module doesn't loaded before the test + modprobe dummy numdummies=2 + else + # dummy module loaded before the test, backup number of loaded dummy devices (nmdumies parameter), it is doesn't show under /sys/module/dummy/parameters + dummies_count=`ip a | grep dummy | tail -n 1 | sed -r 's/.*dummy([0-9]+).*/\1/'` + if [ -z $dummies_count] ; then + # dummy module is loaded but no dummy device exists + no_dummy=1 + else + # get correct count, dummy0 is the first + let "dummies_count=$dummies_count+1" + fi + rmmod dummy + modprobe dummy numdummies=2 + fi + rlRun "ip addr flush dev dummy0" + rlRun "ip link set dummy0 up" + rlRun "ip addr flush dev dummy1" + rlRun "ip link set dummy1 up" + rlRun "ip addr add 127.0.0.13/24 dev dummy0" 0 "Setting IPv4 address to +dummy0 interface" + rlRun "ip addr add 127.0.0.14/24 dev dummy1" 0 "Setting IPv4 address to +dummy1 interface" + rlPhaseEnd + + rlPhaseStartTest "Test bridge fdb basic funcionality with vxlan device" + rlRun "ip link add $vxlan_name type vxlan id 10 group 239.0.0.10 ttl 4 dev dummy0" 0 "add vxlan interface" + rlRun "ip addr add 192.168.1.1/24 broadcast 192.168.1.255 dev $vxlan_name" 0 "setting address to vxlan interface" + rlRun "ip -d link show $vxlan_name" 0 "show details about vxlan device" + + vxlan_ether_address=`ip -d link show $vxlan_name | grep link/ether | awk '{print $2}'` + echo "ethernet address of vxlan device is: $vxlan_ether_address" + + # add new entry to bridge fdb database (device must by type vxlan) + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name" + + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2" bridge_show.out "-i" + + # try replace entry in bridge fdb database + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.3 dev $vxlan_name" + + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.3" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + + # check if entry was successfuly deleted + # 'default' entry added by ip link command should be still listed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertNotGrep "$vxlan_ether_address dst 192.19.0.2" bridge_show.out "-i" + rlAssertGrep "dst 239.0.0.10 via dummy0" bridge_show.out "-i" + + # add new entry to bridge fdb database with port,vni and via options + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name port 10000 vni 100 via dummy0" + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 port 10000 vni 100 via dummy0" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + + # add new entry to bridge fdb database with self option + rlRun "bridge fdb add $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name self" + # check if entry was successfuly added + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self" bridge_show.out "-i" + + # replace entry in bridge fdb database with temp option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name temp" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self static" bridge_show.out "-i" + + # replace entry in bridge fdb database with local option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name local" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self permanent" bridge_show.out "-i" + + # replace entry in bridge fdb database with router option + rlRun "bridge fdb replace $vxlan_ether_address dst 192.19.0.2 dev $vxlan_name router" + # check if entry was successfuly changed + bridge fdb show dev $vxlan_name &> bridge_show.out + cat bridge_show.out + rlAssertGrep "$vxlan_ether_address dst 192.19.0.2 self router permanent" bridge_show.out "-i" + + rlRun "bridge fdb del $vxlan_ether_address dev $vxlan_name" + rlRun "ip link del $vxlan_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge fdb basic funcionality with bridge device, test bridge link set command" + # on rhels < 7 must be bridge device added with brctl (add type bridge is not supported) + rlIsRHEL '>=7' && rlRun "ip link add $bridge_name type bridge" 0 || rlRun "brctl addbr $bridge_name" 0 + + if rlIsRHEL '>=7'; then + rlRun "ip link set dummy0 master $bridge_name" 0 "Add dummy interface to bridge" + rlRun "bridge link show dev dummy0" + # test bridge link set, command is not supported on rhel < 7 (->ndo_bridge_setlink() is not in our kernel.) + + rlRun "bridge link set dev dummy0 cost 10" + rlRun "bridge link show dev dummy0 &> bridge_show.out" 0 + cat bridge_show.out + rlAssertGrep "dummy0.*cost 10 $" bridge_show.out "-i" + + # add new entry to bridge fdb database with self option + rlRun "bridge fdb add 00:1b:21:55:23:61 dev dummy0 self" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:61 self" bridge_show.out "-i" + # add new entry to bridge fdb database with master option + rlRun "bridge fdb add 00:1b:21:55:23:62 dev dummy0 master" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:62 vlan 1" bridge_show.out "-i" + + # add new entry to bridge fdb database with master and self options (entries for both should be added) + rlRun "bridge fdb add 00:1b:21:55:23:63 dev dummy0 self master" + bridge fdb show dev dummy0 &> bridge_show.out + cat bridge_show.out + rlAssertGrep "00:1b:21:55:23:63 self" bridge_show.out "-i" + rlAssertGrep "00:1b:21:55:23:63 vlan 1" bridge_show.out "-i" + + else + rlRun "brctl addif $bridge_name dummy0" 0 "Add dummy interface to bridge" + rlRun "brctl show $bridge_name" + fi + + rlIsRHEL '>=7' && rlRun "ip link set dummy0 nomaster" 0 "Remove dummy vlan interface from bridge" || rlRun "brctl delif $bridge_name dummy0" 0 "Remove dummy interface from bridge" + + rlIsRHEL '>=7' && rlRun "ip link del $bridge_name" 0 || rlRun "brctl delbr $bridge_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge vlan basic funcionality" + # on rhels < 7 must be bridge device added with brctl (add type bridge is not supported) + rlIsRHEL '>=7' && rlRun "ip link add $bridge_name type bridge" 0 || rlRun "brctl addbr $bridge_name" 0 + + rlRun "ip link add link dummy0 name dummy0.10 type vlan id 10" + if rlIsRHEL '>=7' ; then + rlRun "ip link set dummy0.10 master $bridge_name" 0 "Add dummy vlan interface to bridge" + rlRun "bridge link show dev dummy0.10" + else + rlRun "brctl addif $bridge_name dummy0.10" 0 "Add dummy vlan interface to bridge" + rlRun "brctl show $bridge_name" + fi + # bridge vlan is not supported on rhel < 6.8 + if rlIsRHEL '>=7' || rlIsRHEL '>=6.8' || rlIsFedora; then + rlRun "bridge vlan add dev dummy0.10 vid 5" 0 + else + rlRun "bridge vlan add dev dummy0.10 vid 5" 2 + fi + + # test correct funcionality only on rhel 7 + if rlIsRHEL '>=7' ; then + bridge vlan &> bridge_vlan.out + cat bridge_vlan.out + #rlAssertGrep "dummy0.10.*5" bridge_vlan.out "-i" + #rlAssertGrep "dummy0.10.*10" bridge_vlan.out "-i" + rlRun "grep -A 2 'dummy0.10' bridge_vlan.out | grep '5'" + + rlRun "bridge vlan del dev dummy0.10 vid 5" + bridge vlan &> bridge_vlan.out + cat bridge_vlan.out + #rlAssertNotGrep "dummy0.10" bridge_vlan.out "-i" + rlRun "grep -A 2 'dummy0.10' bridge_vlan.out | grep '5'" 1 + fi + rlIsRHEL '>=7' && rlRun "ip link set dummy0.10 nomaster" 0 "Remove dummy vlan interface from bridge" || rlRun "brctl delif $bridge_name dummy0.10" 0 "Remove dummy vlan interface from bridge" + + rlRun "ip link del dev dummy0.10" + + rlIsRHEL '>=7' && rlRun "ip link del $bridge_name" 0 || rlRun "brctl delbr $bridge_name" 0 + rlPhaseEnd + + rlPhaseStartTest "Test bridge mdb basic funcionality" + rlRun "bridge mdb show" 0 + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + rlRun "ip link add test_bridge type bridge" + rlRun "bridge fdb show | grep 'dev test_bridge' | grep 'master test_bridge'" + rlRun "ip link del test_bridge" + rlPhaseEnd + fi + + rlPhaseStartCleanup + rlRun "ip route flush dev dummy0" + rlRun "ip link set dummy0 down" + rlRun "ip addr flush dev dummy0" + rlRun "ip route flush dev dummy1" + rlRun "ip link set dummy1 down" + rlRun "ip addr flush dev dummy1" + if [ $dummy_loaded -eq 1 ] ; then + rmmod dummy + else + rmmod dummy + if [ $no_dummy -eq 1 ] ; then + # load dummy module and delete dummy0 with ip link + modprobe dummy + rlIsRHEL '>=7' && rlRun "ip link del dummy0" + else + modprobe dummy numdummies=$dummies_count + fi + fi + rlRun "service network restart" 0,1 "Restarting network, just for sure" + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/ip-address-label-sanity-test/Makefile b/tests/ip-address-label-sanity-test/Makefile new file mode 100644 index 0000000..612fadb --- /dev/null +++ b/tests/ip-address-label-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip address label funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-address-label-sanity-test/PURPOSE b/tests/ip-address-label-sanity-test/PURPOSE new file mode 100644 index 0000000..d6db326 --- /dev/null +++ b/tests/ip-address-label-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +Description: Test basic ip address label funcionality +Author: Susant Sahani diff --git a/tests/ip-address-label-sanity-test/ip-address-label-tests.py b/tests/ip-address-label-sanity-test/ip-address-label-tests.py new file mode 100755 index 0000000..69557f1 --- /dev/null +++ b/tests/ip-address-label-sanity-test/ip-address-label-tests.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip addrlabel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPAddressLabelTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_address_label(self): + + subprocess.call("ip addrlabel add prefix 2001:6f8:12d8:2::/64 label 200", shell=True) + subprocess.call("ip addrlabel add prefix 2001:6f8:900:8cbc::/64 label 300", shell=True) + subprocess.call("ip addrlabel add prefix 2001:4dd0:ff00:834::/64 label 200", shell=True) + subprocess.call("ip addrlabel add prefix 2a01:238:423d:8800::/64 label 300", shell=True) + + output=subprocess.check_output(['ip', 'addrlabel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prefix 2001:6f8:12d8:2::/64 label 200") + self.assertRegex(output, "prefix 2001:6f8:900:8cbc::/64 label 300") + self.assertRegex(output, "prefix 2001:4dd0:ff00:834::/64 label 200") + self.assertRegex(output, "prefix 2a01:238:423d:8800::/64 label 300") + + subprocess.call("ip addrlabel del prefix 2001:6f8:12d8:2::/64 label 200", shell=True) + subprocess.call("ip addrlabel del prefix 2001:6f8:900:8cbc::/64 label 300", shell=True) + subprocess.call("ip addrlabel del prefix 2001:4dd0:ff00:834::/64 label 200", shell=True) + subprocess.call("ip addrlabel del prefix 2a01:238:423d:8800::/64 label 300", shell=True) + + def test_add_address_label_dev(self): + + subprocess.call("ip addrlabel add prefix 2001:6f8:12d8:2::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2001:6f8:900:8cbc::/64 label 300 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2001:4dd0:ff00:834::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel add prefix 2a01:238:423d:8800::/64 label 300 dev dummy-test", shell=True) + + output=subprocess.check_output(['ip', 'addrlabel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prefix 2001:6f8:12d8:2::/64 dev dummy-test label 200") + self.assertRegex(output, "prefix 2001:6f8:900:8cbc::/64 dev dummy-test label 300") + self.assertRegex(output, "prefix 2001:4dd0:ff00:834::/64 dev dummy-test label 200") + self.assertRegex(output, "prefix 2a01:238:423d:8800::/64 dev dummy-test label 300") + + subprocess.call("ip addrlabel del prefix 2001:6f8:12d8:2::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2001:6f8:900:8cbc::/64 label 300 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2001:4dd0:ff00:834::/64 label 200 dev dummy-test", shell=True) + subprocess.call("ip addrlabel del prefix 2a01:238:423d:8800::/64 label 300 dev dummy-test", shell=True) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-address-label-sanity-test/runtest.sh b/tests/ip-address-label-sanity-test/runtest.sh new file mode 100755 index 0000000..ee04d3c --- /dev/null +++ b/tests/ip-address-label-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-label-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-address-label-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip address label tests" + rlRun "/usr/bin/python3 /usr/bin/ip-address-label-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-address-label-tests.py" + rlLog "ip address label tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-address-sanity-test/Makefile b/tests/ip-address-sanity-test/Makefile new file mode 100644 index 0000000..d43d21d --- /dev/null +++ b/tests/ip-address-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip address funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-address-sanity-test/PURPOSE b/tests/ip-address-sanity-test/PURPOSE new file mode 100644 index 0000000..bcd1d83 --- /dev/null +++ b/tests/ip-address-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-address-sanity-test +Description: Test basic ip address funcionality +Author: Susant Sahani diff --git a/tests/ip-address-sanity-test/ip-address-tests.py b/tests/ip-address-sanity-test/ip-address-tests.py new file mode 100755 index 0000000..4b43b32 --- /dev/null +++ b/tests/ip-address-sanity-test/ip-address-tests.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPAddressTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + + def tearDown(self): + self.del_dummy() + + def test_add_address(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + + def test_add_broadcast_address_label(self): + + r = subprocess.call("ip addr add 192.168.1.50/24 brd + dev dummy-test label dummy-test-Home", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.50") + self.assertRegex(output, "192.168.1.255") + self.assertRegex(output, "dummy-test-Home") + + def test_del_address(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + + r = subprocess.call("ip address del 192.168.1.200/24 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertNotRegex(output, "192.168.1.200") + + def test_add_address_scope(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test scope host", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + self.assertRegex(output, "host") + + def test_add_address_lifetime(self): + + r = subprocess.call("ip address add 192.168.1.200/24 dev dummy-test valid_lft 1000 preferred_lft 500", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "192.168.1.200") + self.assertRegex(output, "1000sec") + self.assertRegex(output, "500sec") + + def test_add_ipv6_address(self): + + r = subprocess.call("ip -6 addr add 2001:0db8:0:f101::1/64 dev dummy-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, "2001:db8:0:f101::1") + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-address-sanity-test/runtest.sh b/tests/ip-address-sanity-test/runtest.sh new file mode 100755 index 0000000..d95de6d --- /dev/null +++ b/tests/ip-address-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-address-sanity-test +# Description: Test basic ip address funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-address-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip address tests" + rlRun "/usr/bin/python3 /usr/bin/ip-address-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-address-tests.py" + rlLog "ip address tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-fou-sanity-test/Makefile b/tests/ip-fou-sanity-test/Makefile new file mode 100644 index 0000000..b5985b2 --- /dev/null +++ b/tests/ip-fou-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip fou funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-address-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip fou funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-fou-sanity-test/PURPOSE b/tests/ip-fou-sanity-test/PURPOSE new file mode 100644 index 0000000..d62d2ff --- /dev/null +++ b/tests/ip-fou-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-fou-sanity-test +Description: Test basic ip fou funcionality +Author: Susant Sahani diff --git a/tests/ip-fou-sanity-test/ip-fou-tests.py b/tests/ip-fou-sanity-test/ip-fou-tests.py new file mode 100755 index 0000000..b72b45f --- /dev/null +++ b/tests/ip-fou-sanity-test/ip-fou-tests.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip fou funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPFOUTests(unittest.TestCase): + + def test_configure_fou_receive_port_gre(self): + ''' Configure a FOU receive port for GRE bound to 7777''' + + subprocess.call(" ip fou add port 7777 ipproto 47", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 7777 ipproto 47") + + subprocess.call("ip fou del port 7777", shell=True) + + def test_configure_fou_receive_port_ipip(self): + ''' Configure a FOU receive port for IPIP bound to 8888''' + + subprocess.call("ip fou add port 8888 ipproto 4", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 8888 ipproto 4") + + subprocess.call("ip fou del port 8888", shell=True) + + def test_configure_fou_receive_port_gue(self): + ''' Configure a GUE receive port bound to 9999 ''' + + subprocess.call("ip fou add port 9999 gue", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 9999 gue") + + subprocess.call("ip fou del port 9999", shell=True) + + def test_configure_fou_with_ipip(self): + ''' IP over UDP tunnel ''' + + subprocess.call("ip fou add port 9000 ipproto 4", shell=True) + output=subprocess.check_output(['ip', 'fou', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "port 9000 ipproto 4") + + subprocess.call("ip link add name tunudp type ipip remote 192.168.2.2 local 192.168.2.1 ttl 225 encap fou encap-sport auto encap-dport 9000", shell=True) + output=subprocess.check_output(['ip', '-d', 'link', 'show', 'tunudp']).rstrip().decode('utf-8') + self.assertRegex(output, "encap fou") + + subprocess.call("ip link del tunudp", shell=True) + subprocess.call("ip fou del port 9000", shell=True) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-fou-sanity-test/runtest.sh b/tests/ip-fou-sanity-test/runtest.sh new file mode 100755 index 0000000..77123b7 --- /dev/null +++ b/tests/ip-fou-sanity-test/runtest.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-fou-sanity-test +# Description: Test basic ip address label funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "modprobe fou" + rlRun "cp ip-fou-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip fou tests" + rlRun "/usr/bin/python3 /usr/bin/ip-fou-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-fou-tests.py" + rlLog "ip fou tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-l2tp-sanity-test/Makefile b/tests/ip-l2tp-sanity-test/Makefile new file mode 100644 index 0000000..7040c7c --- /dev/null +++ b/tests/ip-l2tp-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-l2tp-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip l2tp funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-l2tp-sanity-test/PURPOSE b/tests/ip-l2tp-sanity-test/PURPOSE new file mode 100644 index 0000000..4224b1d --- /dev/null +++ b/tests/ip-l2tp-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +Description: Test basic ip l2tp funcionality +Author: Susant Sahani diff --git a/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py b/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py new file mode 100755 index 0000000..1f20a14 --- /dev/null +++ b/tests/ip-l2tp-sanity-test/ip-l2tp-tests.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def add_address(self, address, interface): + subprocess.check_output(['ip', 'address', 'add', address, 'dev', interface]) + +class IPL2tpTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_veth() + self.link_exists('veth-test') + + self.add_address('192.168.11.12/24', 'veth-test') + self.add_address('192.168.11.13/24', 'test-peer') + + def tearDown(self): + self.del_veth() + + def test_add_l2tp_add_tunnel(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + + def test_add_l2tp_add_tunnel_session(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call(" ip l2tp add session tunnel_id 3000 session_id 1000 peer_session_id 2000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '3000', 'session_id' ,'1000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp del session tunnel_id 3000 session_id 1000", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + + def test_setup_l2tp(self): + + r = subprocess.call("ip l2tp add tunnel tunnel_id 3000 peer_tunnel_id 4000 encap udp local 192.168.11.12 remote 192.168.11.13 udp_sport 5000 udp_dport 6000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.12 to 192.168.11.13") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 5000/6000") + + r = subprocess.call(" ip l2tp add session tunnel_id 3000 session_id 1000 peer_session_id 2000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '3000', 'session_id' ,'1000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp add tunnel tunnel_id 4000 peer_tunnel_id 3000 encap udp local 192.168.11.13 remote 192.168.11.12 udp_sport 6000 udp_dport 5000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'tunnel', 'tunnel_id', '3000']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "From 192.168.11.13 to 192.168.11.12") + self.assertRegex(output, "Peer tunnel 4000") + self.assertRegex(output, "UDP source / dest ports: 6000/5000") + + r = subprocess.call("ip l2tp add session tunnel_id 4000 session_id 2000 peer_session_id 1000", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'l2tp', 'show', 'session', 'tunnel_id', '4000', 'session_id' ,'2000']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip link set l2tpeth0 up mtu 1488", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip link set l2tpeth0 up mtu 1488", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip addr add 10.42.1.1 peer 10.42.1.2 dev l2tpeth0", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip addr add 10.42.1.2 peer 10.42.1.1 dev l2tpeth1", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + + output=subprocess.check_output(['ping', '10.42.1.2','-c', '5']).rstrip().decode('utf-8') + print(output) + + r = subprocess.call("ip l2tp del session tunnel_id 3000 session_id 1000", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip l2tp del session tunnel_id 4000 session_id 2000", shell=True) + self.assertEqual(r, 0) + + r = subprocess.call("ip l2tp del tunnel tunnel_id 3000", shell=True) + self.assertEqual(r, 0) + r = subprocess.call("ip l2tp del tunnel tunnel_id 4000", shell=True) + self.assertEqual(r, 0) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-l2tp-sanity-test/runtest.sh b/tests/ip-l2tp-sanity-test/runtest.sh new file mode 100755 index 0000000..75b0589 --- /dev/null +++ b/tests/ip-l2tp-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-l2tp-sanity-test +# Description: Test basic ip l2tp funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-l2tp-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip l2tp tests" + rlRun "/usr/bin/python3 /usr/bin/ip-l2tp-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-l2tp-tests.py" + rlLog "ip l2tp tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-link-sanity-test/Makefile b/tests/ip-link-sanity-test/Makefile new file mode 100644 index 0000000..cf63c96 --- /dev/null +++ b/tests/ip-link-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-link-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip link funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-link-sanity-test/PURPOSE b/tests/ip-link-sanity-test/PURPOSE new file mode 100644 index 0000000..146b66e --- /dev/null +++ b/tests/ip-link-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-link-sanity-test +Description: Test basic ip link funcionality +Author: Susant Sahani diff --git a/tests/ip-link-sanity-test/ip-link-tests.py b/tests/ip-link-sanity-test/ip-link-tests.py new file mode 100755 index 0000000..a13d952 --- /dev/null +++ b/tests/ip-link-sanity-test/ip-link-tests.py @@ -0,0 +1,342 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def read_attr(self, link, attribute): + """Read a link attributed from the sysfs.""" + + with open(os.path.join('/sys/class/net', link, attribute)) as f: + return f.readline().strip() + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPLinkSetDevTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def tearDown(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_set_dev_mtu(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'mtu', '9000']) + self.assertEqual('9000', self.read_attr('dummy-test', 'mtu')) + + def test_set_dev_up_down(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'up']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'UP,LOWER_UP') + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'down']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertNotRegex(output, 'UP,LOWER_UP') + + def test_set_dev_address(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'address', '02:01:02:03:04:08']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'link/ether 02:01:02:03:04:08') + + def test_set_dev_alias(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'alias', 'test-test']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'test-test') + + def test_set_dev_name(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'name', 'test-test']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'test-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'test-test') + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'test-test', 'name', 'dummy-test']) + + def test_set_dev_multicast(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'multicast', 'on']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'MULTICAST') + + def test_set_dev_all_multicast(self): + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'allmulticast', 'on']) + output=subprocess.check_output(['ip', 'link', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + self.assertRegex(output, 'ALLMULTI') + + +class IPLinkKindTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + """ Setup """ + pass + + def tearDown(self): + pass + + def test_add_veth_pair(self): + + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'veth-peer-test']) + + self.link_exists('veth-test') + self.link_exists('veth-peer-test') + + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def test_add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vcan(self): + + subprocess.check_output(['ip', 'link', 'add', 'vcan-test', 'type', 'vcan']) + + self.link_exists('vcan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vcan-test']) + + def test_add_vxcan(self): + + subprocess.check_output(['ip', 'link', 'add', 'vxcan-test', 'type', 'vxcan']) + + self.link_exists('vxcan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vxcan-test']) + + def test_add_vlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'vlantest.100', 'type', 'vlan', 'id', '100']) + + self.link_exists('vlantest.100') + + subprocess.check_output(['ip', 'link', 'del', 'vlantest.100']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_macvlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'macvlan-test', 'type', 'macvlan', 'mode', 'bridge']) + + self.link_exists('macvlan-test') + + subprocess.check_output(['ip', 'link', 'del', 'macvlan-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_macvtap(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'macvtap-test', 'type', 'macvtap', 'mode', 'bridge']) + + self.link_exists('macvtap-test') + + subprocess.check_output(['ip', 'link', 'del', 'macvtap-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_bridge(self): + + subprocess.check_output(['ip', 'link', 'add', 'bridge-test', 'type', 'bridge']) + + self.link_exists('bridge-test') + + subprocess.check_output(['ip', 'link', 'del', 'bridge-test']) + + def test_add_bond(self): + + subprocess.check_output(['ip', 'link', 'add', 'bond-test', 'type', 'bond']) + + self.link_exists('bond-test') + + subprocess.check_output(['ip', 'link', 'del', 'bond-test']) + + def test_add_team(self): + + subprocess.check_output(['ip', 'link', 'add', 'team-test', 'type', 'team']) + + self.link_exists('team-test') + + subprocess.check_output(['ip', 'link', 'del', 'team-test']) + + def test_add_ipip_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-ipiptun', 'mode', 'ipip', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-ipiptun') + + subprocess.check_output(['ip', 'link', 'del', 'test-ipiptun']) + + def test_add_gre_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-gretun', 'mode', 'gre', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-gretun') + + subprocess.check_output(['ip', 'link', 'del', 'test-gretun']) + + def test_add_gretap_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-gretap', 'type', 'gretap', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-gretap') + + subprocess.check_output(['ip', 'link', 'del', 'test-gretap']) + + def test_add_ip6gre_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-ip6gre', 'type', 'ip6gre', 'remote', '2a00:ffde:4567:edde::4987', 'local', '2001:473:fece:cafe::5179']) + + self.link_exists('test-ip6gre') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6gre']) + + def test_add_ip6gretap_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'test-ip6gretap', 'type', 'ip6gretap', 'remote', '2a00:ffde:4567:edde::4987', 'local', '2001:473:fece:cafe::5179']) + + self.link_exists('test-ip6gretap') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6gretap']) + + def test_add_erspan_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-erspan', 'type', 'erspan', 'seq', 'key', '100','erspan', '123', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-erspan') + + subprocess.check_output(['ip', 'link', 'del', 'test-erspan']) + + def test_add_ip6erspan_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-ip6erspan', 'type', 'erspan', 'seq', 'key', '101','erspan', '1234', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-ip6erspan') + + subprocess.check_output(['ip', 'link', 'del', 'test-ip6erspan']) + + def test_add_sit_tunnel(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'test-sittun', 'mode', 'sit', 'remote', '10.3.3.3', 'local', '10.4.4.4', 'ttl' ,'64']) + + self.link_exists('test-sittun') + + subprocess.check_output(['ip', 'link', 'del', 'test-sittun']) + + def test_add_vti_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-vtitun', 'type', 'vti', 'remote', '10.3.3.3', 'local', '10.4.4.4']) + + self.link_exists('test-vtitun') + + subprocess.check_output(['ip', 'link', 'del', 'test-vtitun']) + + def test_add_geneve_tunnel(self): + + subprocess.check_output(['ip', 'link', 'add', 'dev', 'test-geneve-tun', 'type', 'geneve', 'remote', '10.3.3.3', 'vni', '1234']) + + self.link_exists('test-geneve-tun') + + subprocess.check_output(['ip', 'link', 'del', 'test-geneve-tun']) + + def test_add_ipvlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'bridge']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'private']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'name', 'test-ipvlan', 'type', 'ipvlan','mode', 'l2', 'vepa']) + self.link_exists('test-ipvlan') + subprocess.check_output(['ip', 'link', 'del', 'test-ipvlan']) + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vxlan(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'vxlan-test', 'type', 'vxlan', 'id', '42', 'group', '239.1.1.1', 'dev', 'dummy-test' ,'dstport', '4789']) + self.link_exists('vxlan-test') + + subprocess.check_output(['ip', 'link', 'del', 'vxlan-test']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def test_add_vrf(self): + + subprocess.check_output(['ip', 'link', 'add', 'vrf-test', 'type', 'vrf', 'table', '10']) + + self.link_exists('vrf-test') + + subprocess.check_output(['ip', 'link', 'del', 'vrf-test']) + + def test_add_macsec(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'link', 'add', 'link', 'dummy-test', 'test-macsec', 'type', 'macsec']) + + self.link_exists('test-macsec') + + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'tx', 'sa', '0', 'pn', '1', 'on', 'key', '02', '09876543210987654321098765432109']) + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'rx', 'address', '56:68:a5:c2:4c:14', 'port', '1']) + subprocess.check_output(['ip', 'macsec', 'add', 'test-macsec', 'rx', 'address', '56:68:a5:c2:4c:14', 'port', '1', 'sa', '0', 'pn', '1', 'on', 'key', '01', '12345678901234567890123456789012']) + + subprocess.check_output(['ip', 'link', 'del', 'test-macsec']) + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-link-sanity-test/runtest.sh b/tests/ip-link-sanity-test/runtest.sh new file mode 100755 index 0000000..65daf1f --- /dev/null +++ b/tests/ip-link-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-link-sanity-test +# Description: Test basic ip link funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-link-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip link tests" + rlRun "/usr/bin/python3 /usr/bin/ip-link-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-link-tests.py" + rlLog "ip link tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-neigh-sanity-test/Makefile b/tests/ip-neigh-sanity-test/Makefile new file mode 100644 index 0000000..fdff35f --- /dev/null +++ b/tests/ip-neigh-sanity-test/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +# Description: Test basic ip neigh functionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-neigh-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Jaroslav Aster " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip neigh funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-neigh-sanity-test/PURPOSE b/tests/ip-neigh-sanity-test/PURPOSE new file mode 100644 index 0000000..189a8e2 --- /dev/null +++ b/tests/ip-neigh-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +Description: Test basic ip neigh funcionality +Author: Jaroslav Aster diff --git a/tests/ip-neigh-sanity-test/runtest.sh b/tests/ip-neigh-sanity-test/runtest.sh new file mode 100644 index 0000000..0930b01 --- /dev/null +++ b/tests/ip-neigh-sanity-test/runtest.sh @@ -0,0 +1,234 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/ip-neigh-sanity-test +# Description: Test basic ip neigh funcionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" +TEST_IFACE="test-iface" +TEST_IP4_PREFIX="192.168.100" +TEST_IP6_PREFIX="2000::" +TEST_MAC_PREFIX="00:c0:7b:7d:00" +rlIsRHEL '>=7' && MAN_PAGE="ip-neighbour" || MAN_PAGE="ip" +MESSAGES="/var/log/messages" +TMP_MESSAGES="$(mktemp)" + + +create_dummy_iface() +{ + rlRun "ip link add name ${TEST_IFACE} type dummy" 0 "Creating dummy interface: '${TEST_IFACE}'." +} + +delete_dummy_iface() +{ + rlRun "ip link del ${TEST_IFACE}" 0 "Removing dummy interface: '${TEST_IFACE}'." + rlRun "rmmod dummy" 0,1 "Removing dummy module." +} + + +rlJournalStart + rlPhaseStartSetup + rlCheckRpm "$PACKAGE" + create_dummy_iface + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + for word in add del change replace show flush all proxy to dev nud unused permanent reachable probe failed incomplete stale delay noarp none; do + if ! { [ "$word" = "unused" ] || [ "$word" = "all" ]; }; then + rlRun "ip n help 2>&1 | grep -e '[^[:alnum:]]${word}[^[:alnum:]]'" 0 "Checking there is '${word}' in ip neighbour help." + fi + rlRun "man ${MAN_PAGE} | col -b | grep -e '[^[:alnum:]]${word}[^[:alnum:]]'" 0 "Checking there is '${word}' in ${MAN_PAGE} man page." + done + rlPhaseEnd + fi + + rlPhaseStartTest "Functional Test" + rlLogInfo "IPv4" + rlRun "ip neigh add ${TEST_IP4_PREFIX}.1 lladdr ${TEST_MAC_PREFIX}:c6 dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.1 | grep 'PERMANENT'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.2 lladdr ${TEST_MAC_PREFIX}:c7 dev ${TEST_IFACE}" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.2 | grep 'PERMANENT'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.3 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.3 | grep 'NOARP'" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.4 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.4 | grep 'NOARP'" + + rlRun "ip neigh add lladdr ${TEST_MAC_PREFIX}:ce dev ${TEST_IFACE} proxy ${TEST_IP4_PREFIX}.10" + rlIsRHEL ">=7" && rlRun "ip neigh show proxy | grep ${TEST_IP4_PREFIX}.10" + + rlRun "test $(ip neigh show dev ${TEST_IFACE} | wc -l) -eq 2" 0 "There are two items in neighbours." + + rlRun "ip neigh del ${TEST_IP4_PREFIX}.1 dev ${TEST_IFACE}" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.1 | grep 'FAILED'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.2 lladdr ${TEST_MAC_PREFIX}:ca dev ${TEST_IFACE} nud reachable" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.2 | grep 'REACHABLE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.3 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.3 | grep 'PERMANENT'" + + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud permanent | wc -l) -eq 1" 0 "There is one permanent item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud reachable | wc -l) -eq 1" 0 "There is one reachable item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud noarp | wc -l) -eq 1" 0 "There is one noarp item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} nud failed | wc -l) -eq 1" 0 "There is one failed item in neighbours." + rlIsRHEL ">=7" && rlRun "test $(ip neigh show dev ${TEST_IFACE} proxy | wc -l) -eq 1" 0 "There is one proxy item in neighbours." + rlRun "test $(ip neigh show dev ${TEST_IFACE} | grep -e PERMANENT -e REACHABLE -e FAILED | wc -l) -eq 3" 0 "There are three permanent or reachable or failed items in neighbours." + + rlRun "ip neigh show dev ${TEST_IFACE} unused" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE} nud delay" + rlRun "ip neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + rlRun "ip neigh show nud all | grep '${TEST_IP4_PREFIX}.4'" + + rlRun "ip -s neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + rlRun "ip -s -s neigh flush ${TEST_IP4_PREFIX}.4 dev ${TEST_IFACE}" + + rlRun "ip neigh add ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud permanent" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'PERMANENT'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud reachable" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'REACHABLE'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud probe" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'PROBE'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud failed" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'FAILED'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud incomplete" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep 'INCOMPLETE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud stale" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep '${TEST_MAC_PREFIX}:cb' | grep 'STALE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud delay" + rlRun "ip neigh show ${TEST_IP4_PREFIX}.11 | grep -e 'DELAY' -e 'PROBE'" + + rlRun "ip neigh replace ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud noarp" + rlRun "ip neigh show nud all ${TEST_IP4_PREFIX}.11 | grep 'NOARP'" + + rlRun "ip neigh change ${TEST_IP4_PREFIX}.11 dev ${TEST_IFACE} nud none" + rlRun "ip neigh show nud none | grep ${TEST_IP4_PREFIX}.11" + + rlRun "ip neigh show ${TEST_IP4_PREFIX}.0/24" + + rlLogInfo "IPv6" + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}1 lladdr ${TEST_MAC_PREFIX}:c6 dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}1 | grep 'PERMANENT'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}2 lladdr ${TEST_MAC_PREFIX}:c7 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}2 | grep 'PERMANENT'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}3 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}3 | grep 'NOARP'" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}4 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}4 | grep 'NOARP'" + + rlRun "ip -6 neigh add lladdr ${TEST_MAC_PREFIX}:ce dev ${TEST_IFACE} proxy ${TEST_IP6_PREFIX}10" + rlIsRHEL ">=7" && rlRun "ip -6 neigh show proxy | grep ${TEST_IP6_PREFIX}10" + + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} | wc -l) -eq 2" 0 "There are two items in neighbours." + + rlRun "ip -6 neigh del ${TEST_IP6_PREFIX}1 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}1 | grep 'FAILED'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}2 lladdr ${TEST_MAC_PREFIX}:ca dev ${TEST_IFACE} nud reachable" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}2 | grep 'REACHABLE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}3 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}3 | grep 'PERMANENT'" + + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud permanent | wc -l) -eq 1" 0 "There is one permanent item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud reachable | wc -l) -eq 1" 0 "There is one reachable item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud noarp | wc -l) -eq 1" 0 "There is one noarp item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} nud failed | wc -l) -eq 1" 0 "There is one failed item in neighbours." + rlIsRHEL ">=7" && rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} proxy | wc -l) -eq 1" 0 "There is one proxy item in neighbours." + rlRun "test $(ip -6 neigh show dev ${TEST_IFACE} | grep -e PERMANENT -e REACHABLE -e FAILED | wc -l) -eq 3" 0 "There are three permanent or reachable or failed items in neighbours." + + rlRun "ip -6 neigh show dev ${TEST_IFACE} unused" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE} nud delay" + rlRun "ip -6 neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + rlRun "ip -6 neigh show nud all | grep '${TEST_IP6_PREFIX}4'" + + rlRun "ip -6 -s neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + rlRun "ip -6 -s -s neigh flush ${TEST_IP6_PREFIX}4 dev ${TEST_IFACE}" + + rlRun "ip -6 neigh add ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:c8 dev ${TEST_IFACE} nud permanent" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'PERMANENT'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud reachable" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'REACHABLE'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud probe" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'PROBE'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:c9 dev ${TEST_IFACE} nud failed" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'FAILED'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud incomplete" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep 'INCOMPLETE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 lladdr ${TEST_MAC_PREFIX}:cb dev ${TEST_IFACE} nud stale" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep '${TEST_MAC_PREFIX}:cb' | grep 'STALE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud delay" + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}11 | grep -e 'DELAY' -e 'PROBE'" + + rlRun "ip -6 neigh replace ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud noarp" + rlRun "ip -6 neigh show nud all ${TEST_IP6_PREFIX}11 | grep 'NOARP'" + + rlRun "ip -6 neigh change ${TEST_IP6_PREFIX}11 dev ${TEST_IFACE} nud none" + rlRun "ip -6 neigh show nud none | grep ${TEST_IP6_PREFIX}11" + + rlRun "ip -6 neigh show ${TEST_IP6_PREFIX}0/24" + rlPhaseEnd + + rlPhaseStartTest + pushd /tmp # because of coredump file + tail -f -n 0 "$MESSAGES" > "$TMP_MESSAGES" & + tail_pid="$!" + rlRun "ip neigh add ${TEST_IP4_PREFIX}.11 lladdr ${TEST_MAC_PREFIX}:c16 dev ${TEST_IFACE} nud permanent" 1,255 + kill "$tail_pid" + rlRun "grep -i -e 'segfault' -e 'unhandled signal' -e 'User process fault' ${TMP_MESSAGES}" 1 "Checking there is no segfault in /var/log/messages." + popd + rlPhaseEnd + + rlPhaseStartCleanup + delete_dummy_iface + rlRun "rm ${TMP_MESSAGES}" 0 "Removing tmp files and dirs." + rlPhaseEnd + + rlJournalPrintText +rlJournalEnd diff --git a/tests/ip-neighbor-sanity-test/Makefile b/tests/ip-neighbor-sanity-test/Makefile new file mode 100644 index 0000000..67178fd --- /dev/null +++ b/tests/ip-neighbor-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +# Description: Test basic ip neighbor funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-neighbor-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip neighbor funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-neighbor-sanity-test/PURPOSE b/tests/ip-neighbor-sanity-test/PURPOSE new file mode 100644 index 0000000..cad9d8d --- /dev/null +++ b/tests/ip-neighbor-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +Description: Test basic ip neighbor funcionality +Author: Susant Sahani diff --git a/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py b/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py new file mode 100755 index 0000000..940bdb0 --- /dev/null +++ b/tests/ip-neighbor-sanity-test/ip-neighbor-tests.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbour-sanity-test +# Description: Test basic ip neighbour funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPNeighborTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_neighbor(self): + + subprocess.call("ip neighbor add 192.168.100.1 lladdr 00:c0:7b:7d:00:c8 dev dummy-test nud permanent", shell=True) + output=subprocess.check_output(['ip', 'neighbour', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.100.1 lladdr 00:c0:7b:7d:00:c8 PERMANENT") + + subprocess.call("ip neighbor del 192.168.100.1 dev dummy-test", shell=True) + + def test_replace_neighbor(self): + + subprocess.call("ip neighbor add 192.168.99.254 lladdr 00:80:c8:27:69:2d dev dummy-test", shell=True) + output=subprocess.check_output(['ip', 'neighbour', 'show', 'dev', 'dummy-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.99.254 lladdr 00:80:c8:27:69:2d PERMANENT") + + subprocess.call("ip neighbor change 192.168.99.254 lladdr 00:80:c8:27:69:2d dev dummy-test", shell=True) + print(output) + self.assertRegex(output, "192.168.99.254 lladdr 00:80:c8:27:69:2d PERMANENT") + + subprocess.call("ip neighbor del 192.168.99.254 dev dummy-test", shell=True) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-neighbor-sanity-test/runtest.sh b/tests/ip-neighbor-sanity-test/runtest.sh new file mode 100755 index 0000000..dd5aba5 --- /dev/null +++ b/tests/ip-neighbor-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-neighbor-sanity-test +# Description: Test basic ip neighbor funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-neighbor-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip neighbor tests" + rlRun "/usr/bin/python3 /usr/bin/ip-neighbor-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-neighbor-tests.py" + rlLog "ip neighbor tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-netns-sanity-test/Makefile b/tests/ip-netns-sanity-test/Makefile new file mode 100644 index 0000000..f4cfc49 --- /dev/null +++ b/tests/ip-netns-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-ns-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip netns funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-netns-sanity-test/PURPOSE b/tests/ip-netns-sanity-test/PURPOSE new file mode 100644 index 0000000..169a84d --- /dev/null +++ b/tests/ip-netns-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-netns-sanity-test +Description: Test basic ip netns funcionality +Author: Susant Sahani diff --git a/tests/ip-netns-sanity-test/ip-netns-tests.py b/tests/ip-netns-sanity-test/ip-netns-tests.py new file mode 100755 index 0000000..78bcb8a --- /dev/null +++ b/tests/ip-netns-sanity-test/ip-netns-tests.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class GenericUtilities(): + + def path_exists(self, path): + self.assertTrue(os.path.exists(os.path.join('/var/run/netns', path))) + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + + def add_dummy(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPNsTests(unittest.TestCase, GenericUtilities): + + def test_add_ns(self): + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + + def test_add_dummy_interface_to_ns(self): + + self.add_dummy() + self.link_exists('dummy-test') + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'netns', 'net-ns-test']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "dummy-test") + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + self.addCleanup(subprocess.call, ['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'del', 'dummy-test']) + + def test_add_veth_interface_to_ns(self): + + self.add_veth() + self.link_exists('veth-test') + + subprocess.check_output(['ip', 'netns', 'add', 'net-ns-test']) + self.path_exists('net-ns-test') + + output=subprocess.check_output(['ip', 'netns', 'list']).rstrip().decode('utf-8') + self.assertRegex(output, "net-ns-test") + + subprocess.check_output(['ip', 'link', 'set', 'dev', 'test-peer', 'netns', 'net-ns-test']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "test-peer") + + # Setup IP address of veth-test. + subprocess.check_output(['ip', 'addr', 'add', '10.200.1.1/24', 'dev', 'veth-test']) + subprocess.check_output(['ip', 'link', 'set', 'veth-test', 'up']) + + # Setup IP address of v-peer1. + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'addr', 'add',' 10.200.1.2/24', 'dev', 'test-peer']) + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'set', 'test-peer', 'up']) + subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'set', 'lo', 'up']) + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'addr', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "test-peer") + self.assertRegex(output, "lo: ") + self.assertRegex(output, "inet 10.200.1.2/24") + + output=subprocess.check_output(['ip', 'netns', 'exec', 'net-ns-test', 'ping', '10.200.1.1', '-c', '5']).rstrip().decode('utf-8') + print(output) + + self.addCleanup(subprocess.call, ['ip', 'netns', 'del', 'net-ns-test']) + self.addCleanup(subprocess.call, ['ip', 'netns', 'exec', 'net-ns-test', 'ip', 'link', 'del', 'test-peer']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-netns-sanity-test/runtest.sh b/tests/ip-netns-sanity-test/runtest.sh new file mode 100755 index 0000000..c0276fd --- /dev/null +++ b/tests/ip-netns-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-Licenetnse-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-netns-sanity-test +# Description: Test basic ip netns funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-netns-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip netns tests" + rlRun "/usr/bin/python3 /usr/bin/ip-netns-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-netns-tests.py" + rlLog "ip netns tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-route-sanity-test/Makefile b/tests/ip-route-sanity-test/Makefile new file mode 100644 index 0000000..0b21130 --- /dev/null +++ b/tests/ip-route-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-route-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip route funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-route-sanity-test/PURPOSE b/tests/ip-route-sanity-test/PURPOSE new file mode 100644 index 0000000..792d9ba --- /dev/null +++ b/tests/ip-route-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-route-sanity-test +Description: Test basic ip route funcionality +Author: Susant Sahani diff --git a/tests/ip-route-sanity-test/ip-route-tests.py b/tests/ip-route-sanity-test/ip-route-tests.py new file mode 100755 index 0000000..2845cae --- /dev/null +++ b/tests/ip-route-sanity-test/ip-route-tests.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_dummy(self): + """ Setup """ + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + subprocess.check_output(['ip', 'link', 'set', 'dev', 'dummy-test', 'up']) + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + +class IPRouteTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + + def tearDown(self): + self.del_dummy() + + def test_add_route(self): + + subprocess.check_output(['ip', 'route', 'add', '192.168.1.0/24', 'dev', 'dummy-test']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.1.0/24 dev dummy-test scope link") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24', 'dev', 'dummy-test']) + + def test_add_route_table(self): + + subprocess.check_output(['ip', 'route', 'add', 'table', '555', '192.168.1.0/24', 'dev', 'dummy-test']) + + output=subprocess.check_output(['ip', 'route', 'show', 'table', '555']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "192.168.1.0/24 dev dummy-test scope link") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24', 'dev', 'dummy-test', 'table', '555']) + + def test_add_blackhole(self): + + subprocess.check_output(['ip', 'route', 'add', 'blackhole', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "blackhole 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_unreachable(self): + + subprocess.check_output(['ip', 'route', 'add', 'unreachable', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "unreachable 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_prohibit(self): + + subprocess.check_output(['ip', 'route', 'add', 'prohibit', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "prohibit 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + def test_add_throw(self): + + subprocess.check_output(['ip', 'route', 'add', 'throw', '192.168.1.0/24']) + + output=subprocess.check_output(['ip', 'route', 'show']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "throw 192.168.1.0/24") + + subprocess.check_output(['ip', 'route', 'delete', '192.168.1.0/24']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-route-sanity-test/runtest.sh b/tests/ip-route-sanity-test/runtest.sh new file mode 100755 index 0000000..13340fc --- /dev/null +++ b/tests/ip-route-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-route-sanity-test +# Description: Test basic ip route funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-route-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip route tests" + rlRun "/usr/bin/python3 /usr/bin/ip-route-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-route-tests.py" + rlLog "ip route tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-rule-sanity-test/Makefile b/tests/ip-rule-sanity-test/Makefile new file mode 100644 index 0000000..13181bc --- /dev/null +++ b/tests/ip-rule-sanity-test/Makefile @@ -0,0 +1,63 @@ +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Makefile of /CoreOS/iproute/Sanity/ip-rule-sanity-test +# Description: Test basic ip rule functionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-rule-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Jaroslav Aster " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip rule funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-rule-sanity-test/PURPOSE b/tests/ip-rule-sanity-test/PURPOSE new file mode 100644 index 0000000..ecffb48 --- /dev/null +++ b/tests/ip-rule-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-rule-sanity-test +Description: Test basic ip rule funcionality +Author: Jaroslav Aster diff --git a/tests/ip-rule-sanity-test/runtest.sh b/tests/ip-rule-sanity-test/runtest.sh new file mode 100644 index 0000000..d094b20 --- /dev/null +++ b/tests/ip-rule-sanity-test/runtest.sh @@ -0,0 +1,107 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/iproute/Sanity/ip-rule-sanity-test +# Description: Test basic ip rule funcionality +# Author: Jaroslav Aster +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2014 Red Hat, Inc. All rights reserved. +# +# This copyrighted material is made available to anyone wishing +# to use, modify, copy, or redistribute it subject to the terms +# and conditions of the GNU General Public License version 2. +# +# This program is distributed in the hope that it will be +# useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +# PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program; if not, write to the Free +# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" +DEFAULT_IFACE="$(ip route show | grep default | sed 's/.*dev \([^ ]\+\) .*/\1/' | head -n 1)" +rlIsRHEL '>=7' && IP_RULE_MANPAGE="ip-rule" || IP_RULE_MANPAGE="ip" + + +rlJournalStart + rlPhaseStartSetup + rlCheckRpm "$PACKAGE" + rlPhaseEnd + + rlPhaseStartTest "Basic sanity test" + rlRun "ip rule list" + + rlRun "ip rule add from 172.29.0.0/24 to 172.29.1.0/24 table 1110" + rlRun "ip rule add not from 172.29.0.0/24 to 172.29.1.0/24 table 1111" + rlRun "ip -6 rule add from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32 table 1111" + rlIsRHEL '>=7' && rlRun "ip rule add oif ${DEFAULT_IFACE} table 1111" + rlRun "ip rule add iif ${DEFAULT_IFACE} tos 10 table 1112" + rlRun "ip rule add fwmark 123 pref 100 table 1112" + rlRun "ip rule add not fwmark 124 pref 101 unreachable" + rlRun "ip rule add fwmark 125 pref 102 prohibit" + rlRun "ip rule add fwmark 126 pref 103 unicast" + rlRun "ip rule add from 172.29.2.0/24 tos 10 blackhole" + rlRun "ip rule add from 172.29.0.0/24 tos 6 prio 99 goto 103" + + rlRun "ip rule list" + + rlRun "ip rule list | grep 'from 172.29.0.0/24 to 172.29.1.0/24'" + rlRun "ip rule list | grep 'not from 172.29.0.0/24 to 172.29.1.0/24'" + rlRun "ip -6 rule list | grep 'from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32'" + rlIsRHEL '>=7' && rlRun "ip rule list | grep 'oif ${DEFAULT_IFACE}'" + ! rlIsFedora && rlRun "ip rule list | grep 'tos lowdelay iif ${DEFAULT_IFACE}'" + rlRun "ip rule list | grep 'from all fwmark 0x7b'" + rlRun "ip rule list | grep 'not from all fwmark 0x7c unreachable'" + rlRun "ip rule list | grep 'from all fwmark 0x7d prohibit'" + rlRun "ip rule list | grep 'from all fwmark 0x7e'" + ! rlIsFedora && rlRun "ip rule list | grep 'from 172.29.2.0/24 tos lowdelay blackhole'" + rlRun "ip rule list | grep 'from 172.29.0.0/24 tos 0x06 goto 103'" + + rlRun "ip rule list" + + rlRun "ip rule del from 172.29.0.0/24 to 172.29.1.0/24" + rlRun "ip rule del not from 172.29.0.0/24 to 172.29.1.0/24" + rlRun "ip -6 rule del from 2404:6800:4003:801::1015/32 to 2404:6800:4003:801::1014/32" + rlIsRHEL '>=7' && rlRun "ip rule del oif ${DEFAULT_IFACE}" + ! rlIsFedora && rlRun "ip rule del iif ${DEFAULT_IFACE} tos lowdelay" + rlRun "ip rule del fwmark 123 pref 100" + rlRun "ip rule del not fwmark 124 pref 101 unreachable" + rlRun "ip rule del fwmark 125 pref 102 prohibit" + rlRun "ip rule del fwmark 126 pref 103 unicast" + rlRun "ip rule del from 172.29.2.0/24 tos 10 blackhole" + rlRun "ip rule del from 172.29.0.0/24 tos 6 prio 99 goto 103" + + rlRun "ip rule list" + rlPhaseEnd + + if rlIsRHEL '>=7'; then + rlPhaseStartTest + saved_rule=$(ip rule list | grep '^0' | cut -d : -f 2 | head -n 1) + rlRun "ip rule del prio 0" 0 "Removing rule with prio 0." + rlRun "ip rule add prio 0 ${saved_rule}" 0 "Re-creating rule with prio 0." + rlRun "man ${IP_RULE_MANPAGE} | col -b | grep 'Rule 0 is special. It cannot be deleted or overridden.'" 1 + rlPhaseEnd + fi + + rlPhaseStartTest + rlRun "man ${IP_RULE_MANPAGE} | col -b | grep 'reject'" 1 + rlRun "ip rule help 2>&1 | grep 'reject'" 1 + rlPhaseEnd + + rlPhaseStartCleanup + rlPhaseEnd + + rlJournalPrintText +rlJournalEnd diff --git a/tests/ip-token-sanity-test/Makefile b/tests/ip-token-sanity-test/Makefile new file mode 100644 index 0000000..ac08865 --- /dev/null +++ b/tests/ip-token-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-token-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip token funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-token-sanity-test/PURPOSE b/tests/ip-token-sanity-test/PURPOSE new file mode 100644 index 0000000..21b7c1d --- /dev/null +++ b/tests/ip-token-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-token-sanity-test +Description: Test basic ip token funcionality +Author: Susant Sahani diff --git a/tests/ip-token-sanity-test/ip-token-tests.py b/tests/ip-token-sanity-test/ip-token-tests.py new file mode 100755 index 0000000..138168b --- /dev/null +++ b/tests/ip-token-sanity-test/ip-token-tests.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + + def add_veth(self): + subprocess.check_output(['ip', 'link', 'add', 'veth-test', 'type', 'veth', 'peer', 'name', 'test-peer']) + + def del_veth(self): + subprocess.check_output(['ip', 'link', 'del', 'veth-test']) + +class IPTokenTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_veth() + self.link_exists('veth-test') + + def tearDown(self): + self.del_veth() + + def test_add_token(self): + + r = subprocess.call("ip token set ::1a:2b:3c:4d/64 dev veth-test", shell=True) + self.assertEqual(r, 0) + + output=subprocess.check_output(['ip', 'token', 'get', 'dev', 'veth-test']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "token ::1a:2b:3c:4d dev veth-test") + + r = subprocess.call("ip token del ::1a:2b:3c:4d/64 dev veth-test", shell=True) + self.assertEqual(r, 0) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-token-sanity-test/runtest.sh b/tests/ip-token-sanity-test/runtest.sh new file mode 100755 index 0000000..82a0ab5 --- /dev/null +++ b/tests/ip-token-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-token-sanity-test +# Description: Test basic ip token funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-token-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip token tests" + rlRun "/usr/bin/python3 /usr/bin/ip-token-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-token-tests.py" + rlLog "ip token tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-tunnel-sanity-test/Makefile b/tests/ip-tunnel-sanity-test/Makefile new file mode 100644 index 0000000..cffa119 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-tunnel-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip tunnel funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-tunnel-sanity-test/PURPOSE b/tests/ip-tunnel-sanity-test/PURPOSE new file mode 100644 index 0000000..0b8f618 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +Description: Test basic ip tunnel funcionality +Author: Susant Sahani diff --git a/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py b/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py new file mode 100755 index 0000000..58b7641 --- /dev/null +++ b/tests/ip-tunnel-sanity-test/ip-tunnel-tests.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def add_dummy(self): + subprocess.check_output(['ip', 'link', 'add', 'dummy-test', 'type', 'dummy']) + self.link_exists('dummy-test') + + def del_dummy(self): + subprocess.check_output(['ip', 'link', 'del', 'dummy-test']) + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPTunnelTests(unittest.TestCase, IPLinkUtilities): + + def setUp(self): + self.add_dummy() + self.link_exists('dummy-test') + + def tearDown(self): + self.del_dummy() + + def test_add_ipip(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'ipiptun-test', 'mode', 'ipip', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('ipiptun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "ipiptun-test: ip/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'ipiptun-test']) + + def test_add_gre(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'gretun-test', 'mode', 'gre', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('gretun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "gretun-test: gre/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'gretun-test']) + + def test_add_sit(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'sittun-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('sittun-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "sittun-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'sittun-test']) + + def test_add_isatap(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'isatap-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('isatap-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "isatap-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'isatap-test']) + + def test_add_vti(self): + + subprocess.check_output(['ip', 'tunnel', 'add', 'vti-test', 'mode', 'sit', 'local', '10.3.3.3', 'remote', '10.4.4.4', 'ttl', '64', 'dev', 'dummy-test']) + self.link_exists('vti-test') + + output=subprocess.check_output(['ip', 'tunnel']).rstrip().decode('utf-8') + print(output) + self.assertRegex(output, "vti-test: ipv6/ip remote 10.4.4.4 local 10.3.3.3 dev dummy-test ttl 64") + + subprocess.check_output(['ip', 'link', 'del', 'vti-test']) + + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-tunnel-sanity-test/runtest.sh b/tests/ip-tunnel-sanity-test/runtest.sh new file mode 100755 index 0000000..58a154d --- /dev/null +++ b/tests/ip-tunnel-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tunnel-sanity-test +# Description: Test basic ip tunnel funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-tunnel-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip tunnel tests" + rlRun "/usr/bin/python3 /usr/bin/ip-tunnel-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-tunnel-tests.py" + rlLog "ip tunnel tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/ip-tuntap-sanity-test/Makefile b/tests/ip-tuntap-sanity-test/Makefile new file mode 100644 index 0000000..5f35f52 --- /dev/null +++ b/tests/ip-tuntap-sanity-test/Makefile @@ -0,0 +1,47 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +export TEST=/CoreOS/iproute/Sanity/ip-tuntap-sanity-test +export TESTVERSION=1.0 + +BUILT_FILES= + +FILES=$(METADATA) runtest.sh Makefile PURPOSE + +.PHONY: all install download clean + +run: $(FILES) build + ./runtest.sh + +build: $(BUILT_FILES) + test -x runtest.sh || chmod a+x runtest.sh + +clean: + rm -f *~ $(BUILT_FILES) + + +include /usr/share/rhts/lib/rhts-make.include + +$(METADATA): Makefile + @echo "Owner: Susant Sahani " > $(METADATA) + @echo "Name: $(TEST)" >> $(METADATA) + @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) + @echo "Path: $(TEST_DIR)" >> $(METADATA) + @echo "Description: Test basic ip tuntap funcionality" >> $(METADATA) + @echo "Type: Sanity" >> $(METADATA) + @echo "TestTime: 15m" >> $(METADATA) + @echo "RunFor: iproute" >> $(METADATA) + @echo "Requires: iproute" >> $(METADATA) + @echo "Priority: Normal" >> $(METADATA) + @echo "License: GPLv2" >> $(METADATA) + @echo "Confidential: no" >> $(METADATA) + @echo "Destructive: no" >> $(METADATA) + + rhts-lint $(METADATA) diff --git a/tests/ip-tuntap-sanity-test/PURPOSE b/tests/ip-tuntap-sanity-test/PURPOSE new file mode 100644 index 0000000..7c6223a --- /dev/null +++ b/tests/ip-tuntap-sanity-test/PURPOSE @@ -0,0 +1,3 @@ +PURPOSE of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +Description: Test basic ip tuntap funcionality +Author: Susant Sahani diff --git a/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py b/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py new file mode 100755 index 0000000..9f59a9f --- /dev/null +++ b/tests/ip-tuntap-sanity-test/ip-tuntap-tests.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +# ~~~ + +import errno +import os +import sys +import time +import unittest +import subprocess +import signal +import shutil + +def setUpModule(): + + if shutil.which('ip') is None: + raise OSError(errno.ENOENT, 'ip not found') + +class IPLinkUtilities(): + + def link_exists(self, link): + self.assertTrue(os.path.exists(os.path.join('/sys/class/net', link))) + +class IPTuntapTests(unittest.TestCase, IPLinkUtilities): + + def test_add_tap(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tap-test', 'mode', 'tap']) + self.link_exists('tap-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tap-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tap-test: tap") + + subprocess.check_output(['ip', 'link', 'del', 'tap-test']) + + def test_add_tun(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tun-test', 'mode', 'tun']) + self.link_exists('tun-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tun-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tun-test: tun") + + subprocess.check_output(['ip', 'link', 'del', 'tun-test']) + + def test_add_tun_user_group(self): + + subprocess.check_output(['ip', 'tuntap', 'add', 'name', 'tun-test', 'mode', 'tun', 'user', 'root', 'group', 'root']) + self.link_exists('tun-test') + + output=subprocess.check_output(['ip', 'tuntap', 'show', 'dev', 'tun-test']).rstrip().decode('utf-8') + self.assertRegex(output, "tun-test: tun") + self.assertRegex(output, "user 0 group 0") + + subprocess.check_output(['ip', 'link', 'del', 'tun-test']) + +if __name__ == '__main__': + unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, + verbosity=2)) diff --git a/tests/ip-tuntap-sanity-test/runtest.sh b/tests/ip-tuntap-sanity-test/runtest.sh new file mode 100755 index 0000000..00bfe05 --- /dev/null +++ b/tests/ip-tuntap-sanity-test/runtest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-2.1+ +# ~~~ +# runtest.sh of /CoreOS/iproute/Sanity/ip-tuntap-sanity-test +# Description: Test basic ip tuntap funcionality +# +# Author: Susant Sahani +# Copyright (c) 2018 Red Hat, Inc. +#~~~ + +# Include Beaker environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +PACKAGE="iproute" + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm $PACKAGE + rlRun "cp ip-tuntap-tests.py /usr/bin" + rlPhaseEnd + + rlPhaseStartTest + rlLog "ip tuntap tests" + rlRun "/usr/bin/python3 /usr/bin/ip-tuntap-tests.py" + rlPhaseEnd + + rlPhaseStartCleanup + rlRun "rm /usr/bin/ip-tuntap-tests.py" + rlLog "ip tuntap tests done" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd + +rlGetTestState diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..ae233e0 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,27 @@ +--- +# Tests that run in all contexts +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + - atomic + tests: + - ip-neigh-sanity-test + - ip-rule-sanity-test + - bridge-utility + - ip-link-sanity-test + - ip-address-sanity-test + - ip-address-label-sanity-test + - ip-fou-sanity-test + - ip-token-sanity-test + - ip-tuntap-sanity-test + - ip-tunnel-sanity-test + - ip-l2tp-sanity-test + - ip-netns-sanity-test + - ip-route-sanity-test + - ip-neighbor-sanity-test + required_packages: + - iproute + - bridge-utils + - python3