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)); } }
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"); }