Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
File: pcap.c Progetto: 4hosi/FreeRDP
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
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;
}