/* CSP Management Protocol handler */ int csp_cmp_handler(csp_conn_t * conn, csp_packet_t * packet) { int ret = CSP_ERR_INVAL; struct csp_cmp_message * cmp = (struct csp_cmp_message *) packet->data; /* Ignore everything but requests */ if (cmp->type != CSP_CMP_REQUEST) return ret; switch (cmp->code) { case CSP_CMP_IDENT: ret = do_cmp_ident(cmp); packet->length = CMP_SIZE(ident); break; case CSP_CMP_ROUTE_SET: ret = do_cmp_route_set(cmp); packet->length = CMP_SIZE(route_set); break; case CSP_CMP_IF_STATS: ret = do_cmp_if_stats(cmp); packet->length = CMP_SIZE(if_stats); break; default: ret = CSP_ERR_INVAL; break; } cmp->type = CSP_CMP_REPLY; return ret; }
bool tltest_json_stream_enc(const char *file, int line, const char *n, const struct tltest_json_stream_enc t) { bool passed = true; uint8_t obuf[TLTEST_JSON_STREAM_ENC_BUF_SIZE] = {0,}; struct test_meta meta; size_t olen = t.olen_in; size_t irun = t.irun_in; size_t idig = t.idig_in; size_t orem; bool fit; test_meta_init(&meta, t.orem_in); #define FAIL(_fmt, _args...) \ do { \ fprintf(stderr, "%s: " _fmt "\n", n, ##_args); \ passed = false; \ } while (0) #define CMP_SIZE(_name) \ do { \ if (_name != t._name##_out) { \ FAIL(#_name " %zu != %zu", _name, t._name##_out); \ } \ } while (0) #define CMP_BOOL(_name) \ do { \ if (_name != t._name##_out) { \ FAIL(#_name " %s != %s", \ BOOL_STR(_name), BOOL_STR(t._name##_out)); \ } \ } while (0) fit = t.func(TLOG_TRX_STATE_ROOT, &meta.dispatcher, obuf, &olen, &irun, &idig, t.ibuf_in, t.ilen_in); orem = meta.rem; CMP_BOOL(fit); CMP_SIZE(orem); CMP_SIZE(olen); CMP_SIZE(irun); CMP_SIZE(idig); if (memcmp(obuf, t.obuf_out, TLTEST_JSON_STREAM_ENC_BUF_SIZE) != 0) { fprintf(stderr, "%s: obuf mismatch:\n", n); tltest_diff(stderr, obuf, TLTEST_JSON_STREAM_ENC_BUF_SIZE, t.obuf_out, TLTEST_JSON_STREAM_ENC_BUF_SIZE); passed = false; } #undef CMP_SIZE #undef CMP_BOOL #undef FAIL fprintf(stderr, "%s %s:%d %s\n", (passed ? "PASS" : "FAIL"), file, line, n); return passed; }