void send_key(char key, int fd) { char cmd[64]; if (key == 'p') { usleep(1*500*1000); return; } else if (key == 'P') { usleep(1*2000*1000); return; } key = toupper(key); if (key >= '0' && key <= '9') { key -= '0'; } else if (key >= 'A' && key <= 'F') { key = key - 'A' + 10; } else if (key == 'R') { key = 16; } else if (key == 'G') { key = 20; } else if (key == 'I' || key == ' ') { key = 24; } else if (key == 'S') { key = 28; } else { fprintf(stderr, "Bad key code: '%c', %d\n", key, key); exit(1); } sprintf(cmd, "O,%d,0,0\n", key); run_ok(cmd, fd); usleep(1*40*1000); run_ok("PO,B,0,1\n", fd); usleep(1*40*1000); }
int main(int argc, char* argv[]) { char const* const dev = argc >= 3 ? argv[2] : "/dev/cu.usbmodem411"; int fd = ubw_init(dev); printf("%s", run("V\n", fd)); if (argc < 2) return 0; run_ok("O,0,255,0\n", fd); run_ok("C,0,0,0,0\n", fd); char const* code = argv[1]; printf("Code: [%s]\n", code); while (*code) { send_key(*code, fd); code += 1; } }
void test_benchmark_tap(int argc, char **argv) { struct pg_error *error = NULL; struct pg_brick *tap_enter; struct pg_brick *tap_exit; struct pg_bench bench; struct pg_bench_stats stats; struct ether_addr mac1 = {{0x52,0x54,0x00,0x12,0x34,0x11}}; struct ether_addr mac2 = {{0x52,0x54,0x00,0x12,0x34,0x21}}; uint32_t len; tap_enter = pg_tap_new("tap 0", "bench0", &error); g_assert(tap_enter); g_assert(!error); tap_exit = pg_tap_new("tap 1", "bench1", &error); g_assert(tap_exit); g_assert(!error); /* put both tap in a linux bridge */ run_ok("brctl -h &> /dev/null"); run("ip netns del bench &> /dev/null"); run_ok("ip netns add bench"); run_ok("ip netns exec bench ip link set dev lo up"); run_ok("ip link set bench0 up netns bench"); run_ok("ip link set bench1 up netns bench"); run_ok("ip netns exec bench brctl addbr br0"); run_ok("ip netns exec bench brctl addif br0 bench0"); run_ok("ip netns exec bench brctl addif br0 bench1"); run_ok("ip netns exec bench ip link set br0 up"); g_assert(!pg_bench_init(&bench, "tap", argc, argv, &error)); bench.input_brick = tap_enter; bench.input_side = WEST_SIDE; bench.output_brick = tap_exit; bench.output_side = WEST_SIDE; bench.output_poll = true; bench.max_burst_cnt = 100000; bench.count_brick = NULL; bench.pkts_nb = 64; bench.pkts_mask = pg_mask_firsts(64); bench.pkts = pg_packets_create(bench.pkts_mask); bench.pkts = pg_packets_append_ether( bench.pkts, bench.pkts_mask, &mac1, &mac2, ETHER_TYPE_IPv4); len = sizeof(struct ipv4_hdr) + sizeof(struct udp_hdr) + 1400; pg_packets_append_ipv4( bench.pkts, bench.pkts_mask, 0x000000EE, 0x000000CC, len, 17); bench.pkts = pg_packets_append_udp( bench.pkts, bench.pkts_mask, 1000, 2000, 1400); bench.pkts = pg_packets_append_blank(bench.pkts, bench.pkts_mask, 1400); g_assert(!pg_bench_run(&bench, &stats, &error)); pg_bench_print(&stats); pg_packets_free(bench.pkts, bench.pkts_mask); pg_brick_destroy(tap_enter); pg_brick_destroy(tap_exit); run("ip netns del bench"); }