void loop_handler(pt_loop_t * loop, event_t * event, void * user_data)
{
    traceroute_event_t         * traceroute_event;
    const traceroute_options_t * traceroute_options;
    const traceroute_data_t    * traceroute_data;
    mda_event_t                * mda_event;
    mda_data_t                 * mda_data;
    const char                 * algorithm_name;

    switch (event->type) {
    case ALGORITHM_HAS_TERMINATED:
        algorithm_name = event->issuer->algorithm->name;
        if (strcmp(algorithm_name, "mda") == 0) {
            mda_data = event->issuer->data;
            printf("Lattice:\n");
            lattice_dump(mda_data->lattice, (ELEMENT_DUMP) mda_lattice_elt_dump);
            printf("\n");
            mda_data_free(mda_data);
        }

        // Tell to the algorithm it can free its data
        pt_stop_instance(loop, event->issuer);

        // Kill the loop
        pt_loop_terminate(loop);
        break;
    case ALGORITHM_EVENT:
        algorithm_name = event->issuer->algorithm->name;
        if (strcmp(algorithm_name, "mda") == 0) {
            mda_event = event->data;
            traceroute_options = event->issuer->options; // mda_options inherits traceroute_options
            switch (mda_event->type) {
            case MDA_NEW_LINK:
                mda_link_dump(mda_event->data, traceroute_options->do_resolv);
                break;
            default:
                break;
            }
        } else if (strcmp(algorithm_name, "traceroute") == 0) {
            traceroute_event   = event->data;
            traceroute_options = event->issuer->options;
            traceroute_data    = event->issuer->data;

            // Forward this event to the default traceroute handler
            // See libparistraceroute/algorithms/traceroute.c
            traceroute_handler(loop, traceroute_event, traceroute_options, traceroute_data);
        }
        break;
    default:
        break;
    }
    event_free(event);
}
Exemplo n.º 2
0
/*
 * fpga_dump
 *	generic multiplexing code
 */
int fpga_dump(int devnum, const void *buf, size_t bsize)
{
	int ret_val = FPGA_FAIL;           /* assume failure */
	const fpga_desc *desc = fpga_validate(devnum, buf, bsize,
					      (char *)__func__);

	if (desc) {
		switch (desc->devtype) {
		case fpga_xilinx:
#if defined(CONFIG_FPGA_XILINX)
			ret_val = xilinx_dump(desc->devdesc, buf, bsize);
#else
			fpga_no_sup((char *)__func__, "Xilinx devices");
#endif
			break;
		case fpga_altera:
#if defined(CONFIG_FPGA_ALTERA)
			ret_val = altera_dump(desc->devdesc, buf, bsize);
#else
			fpga_no_sup((char *)__func__, "Altera devices");
#endif
			break;
		case fpga_lattice:
#if defined(CONFIG_FPGA_LATTICE)
			ret_val = lattice_dump(desc->devdesc, buf, bsize);
#else
			fpga_no_sup((char *)__func__, "Lattice devices");
#endif
			break;
		default:
			printf("%s: Invalid or unsupported device type %d\n",
			       __func__, desc->devtype);
		}
	}

	return ret_val;
}