コード例 #1
0
ファイル: pf.c プロジェクト: FluentDevelopment/greyd
static void
packet_received(u_char *args, const struct pcap_pkthdr *h, const u_char *sp)
{
    FW_handle_T handle = (FW_handle_T) args;
    struct fw_handle *fwh = handle->fwh;
    sa_family_t af;
    u_int8_t hdrlen;
    u_int32_t caplen = h->caplen;
    const struct ip *ip = NULL;
    const struct pfloghdr *hdr;
    char addr[INET6_ADDRSTRLEN] = { '\0' };
    int track_outbound;

    track_outbound = Config_get_int(handle->config, "track_outbound",
                                    "firewall", TRACK_OUTBOUND);

    hdr = (const struct pfloghdr *)sp;
    if(hdr->length < MIN_PFLOG_HDRLEN) {
        i_warning("invalid pflog header length (%u/%u). "
            "packet dropped.", hdr->length, MIN_PFLOG_HDRLEN);
        return;
    }
    hdrlen = BPF_WORDALIGN(hdr->length);

    if(caplen < hdrlen) {
        i_warning("pflog header larger than caplen (%u/%u). "
            "packet dropped.", hdrlen, caplen);
        return;
    }

    /* We're interested in passed packets */
    if(hdr->action != PF_PASS)
        return;

    af = hdr->af;
    if(af == AF_INET) {
        ip = (const struct ip *) (sp + hdrlen);
        if(hdr->dir == PF_IN) {
            inet_ntop(af, &ip->ip_src, addr,
                      sizeof(addr));
        }
        else if(hdr->dir == PF_OUT && track_outbound) {
            inet_ntop(af, &ip->ip_dst, addr,
                      sizeof(addr));
        }
    }

    if(addr[0] != '\0') {
        i_debug("packet received: direction = %s, addr = %s",
                (hdr->dir == PF_IN ? "in" : "out"), addr);
        List_insert_after(fwh->entries, strdup(addr));
    }
}
コード例 #2
0
ファイル: list_test.c プロジェクト: xhnsworks/v-engine
void TestData_list_uint_test(TestData _test)
{
    uint i = 0;
    ///list _lst;
    List _lst = List_new(Vptr, malloc, free);
    List lst;
    Iterator iter;


    for (; i < _test->count; i++)
    {
        _test->data[i].uint32_var = i;
    }

    printf("push back begin test\n");

    lst = List_Init(_lst, Uint32, malloc, free);
    for (i = 0; i < _test->count; i++)
    {
        Iterator iter = List_push_back(lst, _test->data[i]);
        if (List_get_value(iter).uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", List_get_value(iter).uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", List_get_value(iter).uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    i = _test->count - 1;
    iter = List_end(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_prev(iter);
        i--;
    }
    List_Dest(lst);
    printf("push back test end\n");
    ///
    printf("insert after test0 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    for (i = 1; i < _test->count; i++)
    {
        iter = List_insert_after(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert after test0 end\n");
    ///
    printf("insert after test1 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    List_push_back(lst, _test->data[_test->count - 1]);
    for (i = 1; i < _test->count - 1; i++)
    {
        iter = List_insert_after(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert after test1 end\n");
    ///
    printf("insert before test0 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[_test->count - 1]);
    for (i = _test->count - 2; i; i--)
    {
        iter = List_insert_before(lst, iter, _test->data[i]);
    }
    List_insert_before(lst, iter, _test->data[0]);
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert before test0 end\n");
    ///
    ///
    printf("insert before test1 begin\n");
    lst = List_Init(lst, Uint32, malloc, free);
    iter = List_push_back(lst, _test->data[0]);
    List_push_back(lst, _test->data[_test->count - 1]);
    iter = List_end(lst);
    for (i = _test->count - 2; i; i--)
    {
        iter = List_insert_before(lst, iter, _test->data[i]);
    }
    i = 0;
    iter = List_begin(lst);
    while (iter)
    {
        var tmp = List_get_value(iter);
        if (tmp.uint32_var != _test->data[i].uint32_var)
        {
#if BIT_WIDTH == 64
            printf("data error! tmp %d data %d i %I64d count %I64d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#else
            printf("data error! tmp %d data %d i %d count %d", tmp.uint32_var, _test->data[i].uint32_var, i, _test->count);
            getchar();
            exit(0);
#endif
        }
        iter = List_next(iter);
        i++;
    }
    List_Dest(lst);
    printf("insert before test1 end\n");
    ///

    printf("test succ\n");
}