1 
2 #if AOS_COMP_CLI
3 #include <string.h>
4 #include <stdbool.h>
5 #include "lwip/opt.h"
6 #include "lwip/netif.h"
7 #include "lwip/debug.h"
8 #include "lwip/err.h"
9 #include "aos/cli.h"
10 #include "aos/kernel.h"
11 #include "uservice/uservice.h"
12 #include "uservice/eventid.h"
13 /******************************************************
14  *                      Macros
15  ******************************************************/
16 /******************************************************
17  *                    Constants
18  ******************************************************/
19 
20 /******************************************************
21  *                   Enumerations
22  ******************************************************/
23 
24 /******************************************************
25  *                 Type Definitions
26  ******************************************************/
27 
28 /******************************************************
29  *                    Structures
30  ******************************************************/
31 
32 /******************************************************
33  *               Function Declarations
34  ******************************************************/
35 static void _cli_ping_cmd( int argc, char **argv );
36 void _cli_ping_help_command( int argc, char **argv );
37 extern void ping_run( int argc, char **argv );
38 
39 /******************************************************
40  *               Variables Definitions
41  ******************************************************/
42 
43 /******************************************************
44  *               Function Definitions
45  ******************************************************/
_cli_ping_cmd(int argc,char ** argv)46 static void _cli_ping_cmd( int argc, char **argv )
47 {
48     return ping_run(argc, argv);
49 }
_cli_ping_help_cmd(int argc,char ** argv)50 void _cli_ping_help_cmd( int argc, char **argv )
51 {
52     aos_cli_printf("Usage: ping  [-c count] [-i interval] [-s packetsize] [-w timeout] destination\n");
53     aos_cli_printf("       ping  [-h]\n");
54     aos_cli_printf("       ping  [-e]\n");
55     aos_cli_printf("  -c,        Stop after sending count ECHO_REQUEST packets\n");
56     aos_cli_printf("  -i,        Wait milliseconds between sending each packet\n");
57     aos_cli_printf("  -s,        Specifies the number of data bytes to be sent\n");
58     aos_cli_printf("  -w,        Time to wait for a response, in millisecond\n");
59     aos_cli_printf("  -h,        Show help\n");
60     aos_cli_printf("  -e,        Exit ping\n");
61     aos_cli_printf("Example:\n");
62     aos_cli_printf("ping www.aliyun.com\n");
63     aos_cli_printf("ping -c 3 -i 100 -s 1300 -w 1000 www.aliyun.com\n");
64 }
65 
ping_cmd(int argc,char ** argv)66 static int ping_cmd(int argc, char **argv )
67 {
68 	struct netif *net_if = NULL;
69 
70     NETIF_FOREACH(net_if) {
71         if (netif_is_up(net_if) && netif_is_link_up(net_if)
72             && !ip_addr_isany(&net_if->ip_addr)
73             && !ip_addr_isloopback(&net_if->ip_addr)) {
74             break;
75         }
76     }
77 
78     if(net_if == NULL) {
79         aos_cli_printf("Connect network first!\n");
80         return -1;
81     }
82 
83     if ( argc < 2 ) {
84          aos_cli_printf("Invalid command\n");
85          _cli_ping_help_cmd( 0, NULL );
86         return -1;
87     }
88 
89     if ( strcmp( argv[1], "-h" ) == 0 ) {
90         _cli_ping_help_cmd( argc - 2, &argv[2] );
91     }
92     else {
93         _cli_ping_cmd( argc - 1, &argv[1] );
94     }
95     return 0;
96 }
97 
98 /* reg args: fun, cmd, description*/
99 ALIOS_CLI_CMD_REGISTER(ping_cmd, ping, Ping command)
100 #endif /* AOS_COMP_CLI */
101