1 /*
2  * Copyright (c) 2024 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <zephyr/logging/log.h>
8 LOG_MODULE_DECLARE(net_shell);
9 
10 #include <stdint.h>
11 #include <zephyr/net/socket.h>
12 
13 #include "net_shell_private.h"
14 
cmd_net_dhcpv6_client_start(const struct shell * sh,size_t argc,char * argv[])15 static int cmd_net_dhcpv6_client_start(const struct shell *sh, size_t argc, char *argv[])
16 {
17 #if defined(CONFIG_NET_DHCPV6)
18 	struct net_if *iface = NULL;
19 	int idx;
20 
21 	if (argc < 1) {
22 		PR_ERROR("Correct usage: net dhcpv6 client %s <index>\n", "start");
23 		return -EINVAL;
24 	}
25 
26 	idx = get_iface_idx(sh, argv[1]);
27 	if (idx < 0) {
28 		return -ENOEXEC;
29 	}
30 
31 	iface = net_if_get_by_index(idx);
32 	if (!iface) {
33 		PR_WARNING("No such interface in index %d\n", idx);
34 		return -ENOEXEC;
35 	}
36 
37 	net_dhcpv6_restart(iface);
38 
39 #else /* CONFIG_NET_DHCPV6 */
40 	PR_INFO("Set %s to enable %s support.\n", "CONFIG_NET_DHCPV6", "Dhcpv6");
41 #endif /* CONFIG_NET_DHCPV6 */
42 	return 0;
43 }
44 
cmd_net_dhcpv6_client_stop(const struct shell * sh,size_t argc,char * argv[])45 static int cmd_net_dhcpv6_client_stop(const struct shell *sh, size_t argc, char *argv[])
46 {
47 #if defined(CONFIG_NET_DHCPV6)
48 	struct net_if *iface = NULL;
49 	int idx;
50 
51 	if (argc < 1) {
52 		PR_ERROR("Correct usage: net dhcpv6 client %s <index>\n", "stop");
53 		return -EINVAL;
54 	}
55 
56 	idx = get_iface_idx(sh, argv[1]);
57 	if (idx < 0) {
58 		return -ENOEXEC;
59 	}
60 
61 	iface = net_if_get_by_index(idx);
62 	if (!iface) {
63 		PR_WARNING("No such interface in index %d\n", idx);
64 		return -ENOEXEC;
65 	}
66 
67 	net_dhcpv6_stop(iface);
68 
69 #else /* CONFIG_NET_DHCPV6 */
70 	PR_INFO("Set %s to enable %s support.\n", "CONFIG_NET_DHCPV6", "Dhcpv6");
71 #endif /* CONFIG_NET_DHCPV6 */
72 	return 0;
73 }
74 
75 SHELL_STATIC_SUBCMD_SET_CREATE(net_cmd_dhcpv6_client,
76 	SHELL_CMD_ARG(start, NULL, "Start the Dhcpv6 client operation on the interface.\n"
77 		      "'net dhcpv6 client start <index>'\n"
78 		      "<index> is the network interface index.",
79 		      cmd_net_dhcpv6_client_start, 2, 0),
80 	SHELL_CMD_ARG(stop, NULL, "Stop the Dhcpv6 client operation on the interface.\n"
81 		      "'net dhcpv6 client stop <index>'\n"
82 		      "<index> is the network interface index.",
83 		      cmd_net_dhcpv6_client_stop, 2, 0),
84 	SHELL_SUBCMD_SET_END
85 );
86 
87 SHELL_STATIC_SUBCMD_SET_CREATE(net_cmd_dhcpv6,
88 	SHELL_CMD(client, &net_cmd_dhcpv6_client,
89 		  "Dhcpv6 client management.",
90 		  NULL),
91 	SHELL_SUBCMD_SET_END
92 );
93 
94 SHELL_SUBCMD_ADD((net), dhcpv6, &net_cmd_dhcpv6, "Manage DHPCv6 services.",
95 		 NULL, 1, 0);
96