void test_ip_proto(){ argc = generate_argv(argv, "programname", "--ip.proto", "tcp", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_IP_PROTO, filter.index); CPPUNIT_ASSERT_EQUAL((uint32_t)6, (uint32_t)filter.ip_proto); argc = generate_argv(argv, "programname", "--ip.proto", "6", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_IP_PROTO, filter.index); CPPUNIT_ASSERT_EQUAL((uint32_t)6, (uint32_t)filter.ip_proto); }
void test_tp_dport(){ argc = generate_argv(argv, "programname", "--tp.dport", "22/123", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_DST_PORT, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)18, filter.dst_port); CPPUNIT_ASSERT_EQUAL((uint16_t)123, filter.dst_port_mask); argc = generate_argv(argv, "programname", "--tp.dport", "ssh/123", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_DST_PORT, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)18, filter.dst_port); CPPUNIT_ASSERT_EQUAL((uint16_t)123, filter.dst_port_mask); }
void test_tp_sport(){ argc = generate_argv(argv, "programname", "--tp.sport", "80/123", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_SRC_PORT, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)80, filter.src_port); CPPUNIT_ASSERT_EQUAL((uint16_t)123, filter.src_port_mask); argc = generate_argv(argv, "programname", "--tp.sport", "http/123", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_SRC_PORT, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)80, filter.src_port); CPPUNIT_ASSERT_EQUAL((uint16_t)123, filter.src_port_mask); }
void test_eth_type(){ argc = generate_argv(argv, "programname", "--eth.type", "ip/1234", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_ETH_TYPE, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)ETH_P_IP, filter.eth_type); CPPUNIT_ASSERT_EQUAL((uint16_t)1234, filter.eth_type_mask); argc = generate_argv(argv, "programname", "--eth.type", "2048/0xffff", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_ETH_TYPE, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)ETH_P_IP, filter.eth_type); CPPUNIT_ASSERT_EQUAL((uint16_t)0xffff, filter.eth_type_mask); }
void test_equal_sign(){ argc = generate_argv(argv, "programname", "--endtime=123.4007", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_END_TIME, filter.index); CPPUNIT_ASSERT_EQUAL((uint32_t)123, filter.endtime.tv_sec); CPPUNIT_ASSERT_EQUAL((uint64_t)4007000000000, filter.endtime.tv_psec); }
void test_iface(){ argc = generate_argv(argv, "programname", "--iface", "foobar", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_IFACE, filter.index); CPPUNIT_ASSERT(strcmp(filter.iface, "foobar") == 0); }
void test_mampid(){ argc = generate_argv(argv, "programname", "--mampid", "foobar", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_MAMPID, filter.index); CPPUNIT_ASSERT(strcmp(filter.mampid, "foobar") == 0); }
void test_eth_vlan(){ argc = generate_argv(argv, "programname", "--eth.vlan", "1234/4321", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_VLAN, filter.index); CPPUNIT_ASSERT_EQUAL((uint16_t)1234, filter.vlan_tci); CPPUNIT_ASSERT_EQUAL((uint16_t)4321, filter.vlan_tci_mask); }
void test_ip_dst(){ in_addr addr = {inet_addr("1.2.3.0")}; in_addr mask = {inet_addr("255.255.255.192")}; argc = generate_argv(argv, "programname", "--ip.dst", "1.2.3.4/255.255.255.192", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_IP_DST, filter.index); CPPUNIT_ASSERT_INET_ADDR(addr, filter.ip_dst); CPPUNIT_ASSERT_INET_ADDR(mask, filter.ip_dst_mask); argc = generate_argv(argv, "programname", "--ip.dst", "1.2.3.4/26", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_IP_DST, filter.index); CPPUNIT_ASSERT_INET_ADDR(addr, filter.ip_dst); CPPUNIT_ASSERT_INET_ADDR(mask, filter.ip_dst_mask); }
void test_endtime(){ /**@todo Check all supported date formats */ argc = generate_argv(argv, "programname", "--end", "123.4007", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_END_TIME, filter.index); CPPUNIT_ASSERT_EQUAL((uint32_t)123, filter.endtime.tv_sec); CPPUNIT_ASSERT_EQUAL((uint64_t)4007000000000, filter.endtime.tv_psec); }
void test_eth_src(){ struct ether_addr addr = *ether_aton("01:00:00:00:00:02"); struct ether_addr mask1 = *ether_aton("FF:FF:FF:FF:FF:FF"); struct ether_addr mask2 = *ether_aton("FF:00:00:00:00:FF"); argc = generate_argv(argv, "programname", "--eth.src", "01:00:00:00:00:02", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_ETH_SRC, filter.index); CPPUNIT_ASSERT_ETH_ADDR(addr, filter.eth_src); CPPUNIT_ASSERT_ETH_ADDR(mask1, filter.eth_src_mask); argc = generate_argv(argv, "programname", "--eth.src", "01:00:00:00:00:02/FF:00:00:00:00:ff", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_ETH_SRC, filter.index); CPPUNIT_ASSERT_ETH_ADDR(addr, filter.eth_src); CPPUNIT_ASSERT_ETH_ADDR(mask2, filter.eth_src_mask); }
void test_eth_dst(){ argc = generate_argv(argv, "programname", "--eth.dst", "01:00:00:00:00:02/FF:00:00:00:00:00", NULL); CPPUNIT_ASSERT_SUCCESS(filter_from_argv(&argc, argv, &filter), 1); struct ether_addr addr = *ether_aton("01:00:00:00:00:00"); struct ether_addr mask = *ether_aton("FF:00:00:00:00:00"); CPPUNIT_ASSERT_EQUAL((uint32_t)FILTER_ETH_DST, filter.index); CPPUNIT_ASSERT_ETH_ADDR(addr, filter.eth_dst); CPPUNIT_ASSERT_ETH_ADDR(mask, filter.eth_dst_mask); }
int main(int argc, char *argv[]) { node_t *env_handle = NULL, *ARGV; int status = 0; memory_state_t ms; node_memstate_init(&ms, libc_malloc_wrap, libc_free_wrap, NULL); if(argc < 2) { goto cleanup; } dbgtrace_setstream(g_stream_stdout); dbgtrace_enable( 0 //| TC_MEM_ALLOC //| TC_GC_TRACING //| TC_MEM_RC //| TC_GC_VERBOSE //| TC_NODE_GC //| TC_NODE_INIT //| TC_EVAL //| TC_FMC_ALLOC ); /* initialize environment */ env_handle = node_lockroot(node_handle_new(&ms, NULL)); { node_t *name, *val; name = node_symbol_new(&ms, "_load-lib"); val = node_foreign_new(&ms, foreign_loadlib); environ_add(env_handle, name, val); name = node_symbol_new(&ms, "_read-eval"); val = node_foreign_new(&ms, foreign_read_eval); environ_add(env_handle, name, val); // NB: argv[0] is interp name ARGV = generate_argv(&ms, argc-1, argv+1); environ_add(env_handle, node_symbol_new(&ms, "ARGV"), ARGV); environ_add_builtins(env_handle, startenv, ARR_LEN(startenv)); } { node_t *eval_in_hdl, *eval_out_hdl; eval_err_t eval_stat; eval_in_hdl = node_lockroot(node_handle_new(&ms, NULL)); eval_out_hdl = node_lockroot(node_handle_new(&ms, NULL)); /* bootstrap routine: ( _read-eval ( quote ARGV[0] ) ) ( _read-eval . ( ( quote . ( ARGV[0] . () ) ) . () ) ) */ { node_t *quote_call; quote_call = node_cons_new(&ms, node_symbol_new(&ms, "quote"), node_cons_new(&ms, node_cons_car(ARGV), NULL ) ); node_handle_update(eval_in_hdl, node_cons_new(&ms, node_symbol_new(&ms, "_read-eval"), node_cons_new(&ms, quote_call, NULL ) ) ); } eval_stat = eval(&ms, env_handle, eval_in_hdl, eval_out_hdl); if(eval_stat != EVAL_OK) { status = eval_stat; } node_droproot(eval_in_hdl); node_droproot(eval_out_hdl); } cleanup: if(getenv("PAREN_FINALENV")) { environ_print(env_handle, g_stream_stdout); } if(getenv("PAREN_MEMSTAT")) { printf("total alloc: %llu total free: %llu iters: %llu cycles: %llu\n", (unsigned long long) memory_gc_count_total(&ms), (unsigned long long) memory_gc_count_free(&ms), (unsigned long long) memory_gc_count_iters(&ms), (unsigned long long) memory_gc_count_cycles(&ms)); } if(getenv("PAREN_LEAK_CHECK")) { uintptr_t total_alloc, free_alloc; memory_gc_cycle(&ms); memory_gc_cycle(&ms); total_alloc = memory_gc_count_total(&ms); free_alloc = memory_gc_count_free(&ms); if(total_alloc != free_alloc) { printf("warning: %llu allocations remain at exit!\n", (unsigned long long) (total_alloc - free_alloc)); } } if(getenv("PAREN_DUMPMEM")) { memory_gc_print_state(&ms, g_stream_stdout); } memory_state_reset(&ms); return status; }
void test_missing(){ argc = generate_argv(argv, "programname", "--starttime", NULL); CPPUNIT_ASSERT_FAILURE(filter_from_argv(&argc, argv, &filter), 1); }