int main(int argc OVS_UNUSED, char *argv[]) { struct ofp_match expected_match; FILE *flows, *pcap; int retval; int n = 0, errors = 0; set_program_name(argv[0]); flows = stdin; pcap = fdopen(3, "rb"); if (!pcap) { ovs_fatal(errno, "failed to open fd 3 for reading"); } retval = pcap_read_header(pcap); if (retval) { ovs_fatal(retval > 0 ? retval : 0, "reading pcap header failed"); } while (fread(&expected_match, sizeof expected_match, 1, flows)) { struct ofpbuf *packet; struct ofp_match extracted_match; struct cls_rule rule; struct flow flow; n++; retval = pcap_read(pcap, &packet); if (retval == EOF) { ovs_fatal(0, "unexpected end of file reading pcap file"); } else if (retval) { ovs_fatal(retval, "error reading pcap file"); } flow_extract(packet, 0, 1, &flow); cls_rule_init_exact(&flow, 0, &rule); ofputil_cls_rule_to_match(&rule, &extracted_match); if (memcmp(&expected_match, &extracted_match, sizeof expected_match)) { char *exp_s = ofp_match_to_string(&expected_match, 2); char *got_s = ofp_match_to_string(&extracted_match, 2); errors++; printf("mismatch on packet #%d (1-based).\n", n); printf("Packet:\n"); ofp_print_packet(stdout, packet->data, packet->size, packet->size); ovs_hex_dump(stdout, packet->data, packet->size, 0, true); printf("Expected flow:\n%s\n", exp_s); printf("Actually extracted flow:\n%s\n", got_s); printf("\n"); free(exp_s); free(got_s); } ofpbuf_delete(packet); } printf("checked %d packets, %d errors\n", n, errors); return errors != 0; }
rdpPcap* pcap_open(char* name, BOOL write) { rdpPcap* pcap; FILE* pcap_fp = fopen(name, write ? "w+b" : "rb"); if (pcap_fp == NULL) { WLog_ERR(TAG, "opening pcap dump"); return NULL; } pcap = (rdpPcap*) calloc(1, sizeof(rdpPcap)); if (!pcap) goto fail_close; pcap->name = name; pcap->write = write; pcap->record_count = 0; pcap->fp = pcap_fp; if (write) { pcap->header.magic_number = 0xA1B2C3D4; pcap->header.version_major = 2; pcap->header.version_minor = 4; pcap->header.thiszone = 0; pcap->header.sigfigs = 0; pcap->header.snaplen = 0xFFFFFFFF; pcap->header.network = 0; if (!pcap_write_header(pcap, &pcap->header)) goto fail; } else { fseek(pcap->fp, 0, SEEK_END); pcap->file_size = (int) ftell(pcap->fp); fseek(pcap->fp, 0, SEEK_SET); if (!pcap_read_header(pcap, &pcap->header)) goto fail; } return pcap; fail: free(pcap); fail_close: fclose(pcap_fp); return NULL; }
rdpPcap* pcap_open(char* name, BOOL write) { rdpPcap* pcap; FILE* pcap_fp = fopen(name, write ? "w+" : "r"); if (pcap_fp == NULL) { perror("opening pcap dump"); return NULL; } pcap = (rdpPcap*) malloc(sizeof(rdpPcap)); if (pcap != NULL) { ZeroMemory(pcap, sizeof(rdpPcap)); pcap->name = name; pcap->write = write; pcap->record_count = 0; pcap->fp = pcap_fp; if (write) { pcap->header.magic_number = 0xA1B2C3D4; pcap->header.version_major = 2; pcap->header.version_minor = 4; pcap->header.thiszone = 0; pcap->header.sigfigs = 0; pcap->header.snaplen = 0xFFFFFFFF; pcap->header.network = 0; pcap_write_header(pcap, &pcap->header); } else { fseek(pcap->fp, 0, SEEK_END); pcap->file_size = (int) ftell(pcap->fp); fseek(pcap->fp, 0, SEEK_SET); pcap_read_header(pcap, &pcap->header); } } return pcap; }
int pcap_open(PCAP_reader_p *ctx_p, pcap_hdr_t *out_hdr, const char *filename) { FILE *fptr = (filename ? fopen(filename, "rb") : stdin); PCAP_reader_p ctx; int rv; (*ctx_p) = NULL; if (!fptr) { // Couldn't open the file. return -1; } ctx = (PCAP_reader_p)malloc(SIZEOF_PCAP_READER); if (!ctx) { fclose(fptr); // Out of memory. return -2; } ctx->file = fptr; rv = pcap_read_header(ctx, out_hdr); if (rv != 1) { // Header read failed. fclose(ctx->file); free(ctx); return -4; } (*ctx_p) = ctx; return 0; }
rdpPcap* pcap_open(char* name, boolean write) { rdpPcap* pcap; pcap = (rdpPcap*) xzalloc(sizeof(rdpPcap)); if (pcap != NULL) { pcap->name = name; pcap->write = write; pcap->record_count = 0; if (write) { pcap->fp = fopen(name, "w+"); pcap->header.magic_number = 0xA1B2C3D4; pcap->header.version_major = 2; pcap->header.version_minor = 4; pcap->header.thiszone = 0; pcap->header.sigfigs = 0; pcap->header.snaplen = 0xFFFFFFFF; pcap->header.network = 0; pcap_write_header(pcap, &pcap->header); } else { pcap->fp = fopen(name, "r"); fseek(pcap->fp, 0, SEEK_END); pcap->file_size = (int) ftell(pcap->fp); fseek(pcap->fp, 0, SEEK_SET); pcap_read_header(pcap, &pcap->header); } } return pcap; }