New upstream version 18.02
[deb_dpdk.git] / test / test / test_devargs.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2014 6WIND S.A.
3  */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <sys/queue.h>
9
10 #include <rte_debug.h>
11 #include <rte_devargs.h>
12
13 #include "test.h"
14
15 /* clear devargs list that was modified by the test */
16 static void free_devargs_list(void)
17 {
18         struct rte_devargs *devargs;
19
20         while (!TAILQ_EMPTY(&devargs_list)) {
21                 devargs = TAILQ_FIRST(&devargs_list);
22                 TAILQ_REMOVE(&devargs_list, devargs, next);
23                 free(devargs->args);
24                 free(devargs);
25         }
26 }
27
28 static int
29 test_devargs(void)
30 {
31         struct rte_devargs_list save_devargs_list;
32         struct rte_devargs *devargs;
33
34         /* save the real devargs_list, it is restored at the end of the test */
35         save_devargs_list = devargs_list;
36         TAILQ_INIT(&devargs_list);
37
38         /* test valid cases */
39         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:00.1") < 0)
40                 goto fail;
41         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "0000:5:00.0") < 0)
42                 goto fail;
43         if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "04:00.0,arg=val") < 0)
44                 goto fail;
45         if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "0000:01:00.1") < 0)
46                 goto fail;
47         if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) != 2)
48                 goto fail;
49         if (rte_eal_devargs_type_count(RTE_DEVTYPE_BLACKLISTED_PCI) != 2)
50                 goto fail;
51         if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 0)
52                 goto fail;
53         if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring0") < 0)
54                 goto fail;
55         if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,key=val,k2=val2") < 0)
56                 goto fail;
57         if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 2)
58                 goto fail;
59         free_devargs_list();
60
61         /* check virtual device with argument parsing */
62         if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "net_ring1,k1=val,k2=val2") < 0)
63                 goto fail;
64         devargs = TAILQ_FIRST(&devargs_list);
65         if (strncmp(devargs->name, "net_ring1",
66                         sizeof(devargs->name)) != 0)
67                 goto fail;
68         if (!devargs->args || strcmp(devargs->args, "k1=val,k2=val2") != 0)
69                 goto fail;
70         free_devargs_list();
71
72         /* check PCI device with empty argument parsing */
73         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "04:00.1") < 0)
74                 goto fail;
75         devargs = TAILQ_FIRST(&devargs_list);
76         if (strcmp(devargs->name, "04:00.1") != 0)
77                 goto fail;
78         if (!devargs->args || strcmp(devargs->args, "") != 0)
79                 goto fail;
80         free_devargs_list();
81
82         /* test error case: bad PCI address */
83         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "08:1") == 0)
84                 goto fail;
85         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "00.1") == 0)
86                 goto fail;
87         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "foo") == 0)
88                 goto fail;
89         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, ",") == 0)
90                 goto fail;
91         if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "000f:0:0") == 0)
92                 goto fail;
93
94         devargs_list = save_devargs_list;
95         return 0;
96
97  fail:
98         free_devargs_list();
99         devargs_list = save_devargs_list;
100         return -1;
101 }
102
103 REGISTER_TEST_COMMAND(devargs_autotest, test_devargs);