- fformat (stdout, "{\n");
- fformat (stdout, "\"time\": \"%.9f\",\n", deltat);
- fformat (stdout, "\"start_evt\": \"%s\",\n", start_evt);
- fformat (stdout, "\"end_evt\": \"%s\",\n", end_evt);
- fformat (stdout, "\"rx_data\": %lld,\n", em->stats.rx_total);
- fformat (stdout, "\"tx_rx\": %lld,\n", em->stats.tx_total);
- fformat (stdout, "\"closing\": {\n");
- fformat (stdout, " \"reset\": { \"q\": %d, \"s\": %d },\n",
+ u8 start_evt_missing = !(em->timing.events_sent & em->timing.start_event);
+ u8 end_evt_missing = (em->rx_results_diff || em->tx_results_diff) ? 0 :
+ !(em->timing.events_sent & em->timing.end_event);
+ f64 deltat = start_evt_missing || end_evt_missing ? 0 :
+ em->timing.end_time - em->timing.start_time;
+
+ if (start_evt_missing)
+ ECHO_FAIL (ECHO_FAIL_MISSING_START_EVENT,
+ "Expected event %v to happen, but it did not!", start_evt);
+
+ if (end_evt_missing)
+ ECHO_FAIL (ECHO_FAIL_MISSING_END_EVENT,
+ "Expected event %v to happen, but it did not!", end_evt);
+
+ fformat (stdout, "vpp_echo JSON stats:\n{\n");
+ fformat (stdout, " \"role\": \"%s\",\n",
+ em->i_am_master ? "server" : "client");
+ fformat (stdout, " \"time\": \"%.9f\",\n", deltat);
+ fformat (stdout, " \"start_evt\": \"%v\",\n", start_evt);
+ fformat (stdout, " \"start_evt_missing\": \"%s\",\n",
+ start_evt_missing ? "True" : "False");
+ fformat (stdout, " \"end_evt\": \"%v\",\n", end_evt);
+ fformat (stdout, " \"end_evt_missing\": \"%s\",\n",
+ end_evt_missing ? "True" : "False");
+ fformat (stdout, " \"rx_data\": %lld,\n", em->stats.rx_total);
+ fformat (stdout, " \"tx_data\": %lld,\n", em->stats.tx_total);
+ fformat (stdout, " \"rx_bits_per_second\": %.1f,\n",
+ em->stats.rx_total * 8 / deltat);
+ fformat (stdout, " \"tx_bits_per_second\": %.1f,\n",
+ em->stats.tx_total * 8 / deltat);
+ fformat (stdout, " \"closing\": {\n");
+ fformat (stdout, " \"reset\": { \"q\": %d, \"s\": %d },\n",