Esempio n. 1
0
/* 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;
}
Esempio n. 2
0
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;
}