Esempio n. 1
0
  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);
  }
Esempio n. 2
0
  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);
  }
Esempio n. 3
0
  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);
  }
Esempio n. 4
0
  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);
  }
Esempio n. 5
0
 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);
 }
Esempio n. 6
0
  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);
  }
Esempio n. 7
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);
  }
Esempio n. 8
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);
  }
Esempio n. 9
0
  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);
  }
Esempio n. 10
0
  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);
  }
Esempio n. 11
0
  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);
  }
Esempio n. 12
0
  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);
  }
Esempio n. 13
0
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;
}
Esempio n. 14
0
 void test_missing(){
   argc = generate_argv(argv, "programname", "--starttime", NULL);
   CPPUNIT_ASSERT_FAILURE(filter_from_argv(&argc, argv, &filter), 1);
 }