Motr  M0
node_u.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #include <stdio.h> /* printf */
24 #include <string.h> /* strlen */
25 
26 #include "lib/getopts.h" /* m0_getopts */
27 #include "lib/errno.h" /* EINVAL */
28 #include "lib/memory.h" /* m0_alloc */
29 #include "lib/semaphore.h" /* m0_semaphore_down */
30 
31 #include "motr/init.h" /* m0_init */
32 #include "module/instance.h" /* m0 */
33 
34 #include "net/test/user_space/common_u.h" /* m0_net_test_u_str_copy */
35 #include "net/test/node.h"
36 #include "net/test/initfini.h" /* m0_net_test_init */
37 
63 static bool config_check(struct m0_net_test_node_cfg *cfg)
64 {
65  return cfg->ntnc_addr != NULL && cfg->ntnc_addr_console != NULL;
66 }
67 
68 static void config_free(struct m0_net_test_node_cfg *cfg)
69 {
72 }
73 
74 static void config_print(struct m0_net_test_node_cfg *cfg)
75 {
76  m0_net_test_u_print_s("cfg->ntnc_addr\t\t= %s\n", cfg->ntnc_addr);
77  m0_net_test_u_print_s("cfg->ntnc_addr_console\t= %s\n",
78  cfg->ntnc_addr_console);
79  m0_net_test_u_print_time("cfg->ntnc_send_timeout",
80  cfg->ntnc_send_timeout);
81 }
82 
83 static int configure(int argc, char *argv[], struct m0_net_test_node_cfg *cfg)
84 {
85  bool list_if = false;
86 
87  M0_GETOPTS("m0nettestd", argc, argv,
88  M0_STRINGARG('a', "Test node commands endpoint",
89  LAMBDA(void, (const char *addr) {
91  })),
92  M0_STRINGARG('c', "Test console commands endpoint",
93  LAMBDA(void, (const char *addr) {
95  })),
97  M0_IFLISTARG(&list_if),
98  M0_HELPARG('?'),
99  );
100  if (!list_if)
101  config_print(cfg);
102  return list_if ? 1 : config_check(cfg) ? 0 : -1;
103 }
104 
105 int main(int argc, char *argv[])
106 {
107  static struct m0 instance;
108 
109  int rc;
110  struct m0_net_test_node_ctx node;
111  struct m0_net_test_node_cfg cfg = {
112  .ntnc_addr = NULL,
113  .ntnc_addr_console = NULL,
115  .ntnc_send_timeout = M0_MKTIME(3, 0)
116  };
117 
118  m0_net_test_u_printf_v("m0_init()\n");
119  rc = m0_init(&instance);
120  m0_net_test_u_print_error("Motr initialization failed.", rc);
121  if (rc != 0)
122  return rc;
123 
124  rc = m0_net_test_init();
125  m0_net_test_u_print_error("Net-test initialization failed", rc);
126  if (rc != 0)
127  goto motr_fini;
128 
132  rc = configure(argc, argv, &cfg);
133  if (rc != 0) {
134  if (rc == 1) {
136  rc = 0;
137  } else {
139  m0_net_test_u_printf("Error in configuration.\n");
140  config_free(&cfg);
141  }
142  goto net_test_fini;
143  }
144 
145  m0_net_test_u_printf_v("m0_net_test_node_init()\n");
146  rc = m0_net_test_node_init(&node, &cfg);
147  m0_net_test_u_print_error("Test node initialization failed.", rc);
148  if (rc != 0)
149  goto cfg_free;
150 
151  m0_net_test_u_printf_v("m0_net_test_node_start()\n");
153  m0_net_test_u_print_error("Test node start failed.", rc);
154  if (rc != 0)
155  goto node_fini;
156 
157  m0_net_test_u_printf_v("waiting...\n");
158  m0_semaphore_down(&node.ntnc_thread_finished_sem);
159 
160  m0_net_test_u_printf_v("m0_net_test_node_stop()\n");
162 node_fini:
163  m0_net_test_u_printf_v("m0_net_test_node_fini()\n");
165 cfg_free:
166  config_free(&cfg);
169 motr_fini:
170  m0_net_test_u_printf_v("m0_fini()\n");
171  m0_fini();
172 
173  return rc;
174 }
175 
180 /*
181  * Local variables:
182  * c-indentation-style: "K&R"
183  * c-basic-offset: 8
184  * tab-width: 8
185  * fill-column: 79
186  * scroll-step: 1
187  * End:
188  */
int m0_net_test_init(void)
Definition: initfini.c:37
#define M0_GETOPTS(progname, argc, argv,...)
Definition: getopts.h:169
static int net_test_fini(void)
Definition: main.c:54
int m0_net_test_u_printf_v(const char *fmt,...)
Definition: common_u.c:174
void m0_net_test_node_stop(struct m0_net_test_node_ctx *ctx)
Definition: node.c:932
#define NULL
Definition: misc.h:38
static bool config_check(struct m0_net_test_node_cfg *cfg)
Definition: node_u.c:63
void m0_fini(void)
Definition: init.c:318
#define M0_VERBOSEFLAGARG
Definition: common_u.h:43
#define M0_IFLISTARG(pflag)
Definition: common_u.h:45
static struct net_test_cmd_node * node
Definition: commands.c:72
void m0_net_test_fini(void)
Definition: initfini.c:42
void m0_net_test_u_lnet_info(void)
Definition: common_u.c:122
int m0_init(struct m0 *instance)
Definition: init.c:310
void m0_net_test_u_print_time(char *name, m0_time_t time)
Definition: common_u.c:70
char * ntnc_addr_console
Definition: node.h:195
char * ntnc_addr
Definition: node.h:193
#define M0_STRINGARG(ch, desc, func)
Definition: getopts.h:207
#define LAMBDA(T,...)
Definition: thread.h:153
int m0_net_test_node_start(struct m0_net_test_node_ctx *ctx)
Definition: node.c:921
int m0_net_test_u_printf(const char *fmt,...)
Definition: common_u.c:163
Definition: instance.h:80
Definition: xcode.h:73
m0_time_t ntnc_send_timeout
Definition: node.h:197
void m0_net_test_node_fini(struct m0_net_test_node_ctx *ctx)
Definition: node.c:915
static int configure(int argc, char *argv[], struct m0_net_test_node_cfg *cfg)
Definition: node_u.c:83
int m0_net_test_node_init(struct m0_net_test_node_ctx *ctx, struct m0_net_test_node_cfg *cfg)
Definition: node.c:909
void m0_net_test_u_print_error(const char *s, int code)
Definition: common_u.c:59
#define M0_HELPARG(ch)
Definition: getopts.h:242
void m0_net_test_u_print_s(const char *fmt, const char *str)
Definition: common_u.c:65
static struct m0 instance
Definition: main.c:78
static void config_free(struct m0_net_test_node_cfg *cfg)
Definition: node_u.c:68
void m0_net_test_u_str_free(char *str)
Definition: common_u.c:54
char * m0_net_test_u_str_copy(const char *str)
Definition: common_u.c:45
#define M0_MKTIME(secs, ns)
Definition: time.h:86
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
Definition: semaphore.c:49
static void config_print(struct m0_net_test_node_cfg *cfg)
Definition: node_u.c:74
int32_t rc
Definition: trigger_fop.h:47
int main(int argc, char *argv[])
Definition: node_u.c:105