Ping; report failures to the terminal
[vpp.git] / src / vnet / ip / ping.h
index 8f41f45..442ba73 100644 (file)
@@ -26,12 +26,18 @@ typedef enum
   PING_RESPONSE_IP4,
 } ping_response_type_t;
 
+#define foreach_ip46_ping_result                                      \
+  _ (OK, "OK")                                                        \
+  _ (ALLOC_FAIL, "packet allocation failed")                          \
+  _ (NO_INTERFACE, "no egress interface")                             \
+  _ (NO_TABLE, "no IPv6 Table for lookup")                            \
+  _ (NO_SRC_ADDRESS, "no source address for egress interface")        \
+
 typedef enum
 {
-  SEND_PING_OK = 0,
-  SEND_PING_ALLOC_FAIL,
-  SEND_PING_NO_INTERFACE,
-  SEND_PING_NO_TABLE,
+#define _(v, s) SEND_PING_##v,
+    foreach_ip46_ping_result
+#undef _
 } send_ip46_ping_result_t;
 
 /*
@@ -42,6 +48,7 @@ typedef struct ping_run_t
   u16 icmp_id;
   u16 curr_seq;
   uword cli_process_id;
+  uword cli_thread_index;
 } ping_run_t;
 
 typedef struct ping_main_t
@@ -54,31 +61,36 @@ typedef struct ping_main_t
   ping_run_t *ping_run_by_icmp_id;
 } ping_main_t;
 
-ping_main_t ping_main;
+extern ping_main_t ping_main;
 
 #define PING_DEFAULT_DATA_LEN 60
 #define PING_DEFAULT_INTERVAL 1.0
 
-#define PING_MAXIMUM_DATA_SIZE 2000
+#define PING_MAXIMUM_DATA_SIZE (VLIB_BUFFER_DATA_SIZE - sizeof(ip6_header_t) - sizeof(icmp46_header_t) - offsetof(icmp46_echo_request_t, data))
+
+/* *INDENT-OFF* */
+
+typedef CLIB_PACKED (struct {
+  u16 id;
+  u16 seq;
+  f64 time_sent;
+  u8 data[0];
+}) icmp46_echo_request_t;
 
-typedef CLIB_PACKED (struct
-                    {
-                    u16 id;
-                    u16 seq; f64 time_sent; u8 data[PING_MAXIMUM_DATA_SIZE];
-                    }) icmp46_echo_request_t;
 
+typedef CLIB_PACKED (struct {
+  ip6_header_t ip6;
+  icmp46_header_t icmp;
+  icmp46_echo_request_t icmp_echo;
+}) icmp6_echo_request_header_t;
 
-typedef CLIB_PACKED (struct
-                    {
-                    ip6_header_t ip6;
-                    icmp46_header_t icmp; icmp46_echo_request_t icmp_echo;
-                    }) icmp6_echo_request_header_t;
+typedef CLIB_PACKED (struct {
+  ip4_header_t ip4;
+  icmp46_header_t icmp;
+  icmp46_echo_request_t icmp_echo;
+}) icmp4_echo_request_header_t;
 
-typedef CLIB_PACKED (struct
-                    {
-                    ip4_header_t ip4;
-                    icmp46_header_t icmp; icmp46_echo_request_t icmp_echo;
-                    }) icmp4_echo_request_header_t;
+/* *INDENT-ON* */
 
 
 typedef struct