Ethereal-dev: [Ethereal-dev] Response to bug 379 [PATCH]
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Jaap Keuter <jaap.keuter@xxxxxxxxx>
Date: Fri, 16 Dec 2005 14:07:19 +0100 (CET)
Hi list, Mikko Tiihonen filed bug 379 including a patch for editcap. This wasn't picked up so far. I've ported the patch to svn 16820 and included a documentation patch. Thanx, Jaap
Index: editcap.c =================================================================== --- editcap.c (revision 16820) +++ editcap.c (working copy) @@ -212,8 +212,10 @@ fprintf(stderr, "Usage: editcap [-r] [-h] [-v] [-T <encap type>] [-E <probability>]\n"); fprintf(stderr, " [-F <capture type>] [-s <snaplen>] [-t <time adjustment>]\n"); + fprintf(stderr, " [-c <packets per file>]\n"); fprintf(stderr, " <infile> <outfile> [ <record#>[-<record#>] ... ]\n"); fprintf(stderr, " where\n"); + fprintf(stderr, " \t-c <packets per file> If given splits the output to different files\n"); fprintf(stderr, " \t-E <probability> specifies the probability (between 0 and 1)\n"); fprintf(stderr, " \t that a particular byte will will have an error.\n"); fprintf(stderr, " \t-F <capture type> specifies the capture file type to write:\n"); @@ -260,10 +262,13 @@ const struct wtap_pkthdr *phdr; int err_type; guint8 *buf; + int split_packet_count = 0; + int written_count = 0; + char *filename; /* Process the options first */ - while ((opt = getopt(argc, argv, "E:F:hrs:t:T:v")) !=-1) { + while ((opt = getopt(argc, argv, "E:F:hrs:c:t:T:v")) !=-1) { switch (opt) { @@ -286,6 +291,20 @@ } break; + case 'c': + split_packet_count = strtol(optarg, &p, 10); + if (p == optarg || *p != '\0') { + fprintf(stderr, "editcap: \"%s\" isn't a valid packet count\n", + optarg); + exit(1); + } + if (split_packet_count <= 0) { + fprintf(stderr, "editcap: \"%d\" packet count must be larger than zero\n", + split_packet_count); + exit(1); + } + break; + case 'h': case '?': /* Bad options if GNU getopt */ usage(); @@ -372,11 +391,21 @@ if (out_frame_type == -2) out_frame_type = wtap_file_encap(wth); - pdh = wtap_dump_open(argv[optind + 1], out_file_type, + if (split_packet_count > 0) { + filename = (char *) malloc(strlen(argv[optind+1]) + 20); + if (!filename) { + exit(5); + } + sprintf(filename, "%s-%05d", argv[optind+1], 0); + } else { + filename = argv[optind+1]; + } + + pdh = wtap_dump_open(filename, out_file_type, out_frame_type, wtap_snapshot_length(wth), FALSE /* compressed */, &err); if (pdh == NULL) { - fprintf(stderr, "editcap: Can't open or create %s: %s\n", argv[optind+1], + fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, wtap_strerror(err)); exit(1); @@ -387,6 +416,31 @@ while (wtap_read(wth, &err, &err_info, &data_offset)) { + if (split_packet_count > 0 && (written_count % split_packet_count == 0)) { + if (!wtap_dump_close(pdh, &err)) { + + fprintf(stderr, "editcap: Error writing to %s: %s\n", filename, + wtap_strerror(err)); + exit(1); + } + + sprintf(filename, "%s-%05d",argv[optind+1], count / split_packet_count); + + if (verbose) { + fprintf(stderr, "Continuing writing in file %s\n", filename); + } + + pdh = wtap_dump_open(filename, out_file_type, + out_frame_type, wtap_snapshot_length(wth), FALSE /* compressed */, &err); + if (pdh == NULL) { + + fprintf(stderr, "editcap: Can't open or create %s: %s\n", filename, + wtap_strerror(err)); + exit(1); + + } + } + if ((!selected(count) && !keep_em) || (selected(count) && keep_em)) { @@ -486,11 +540,13 @@ &err)) { fprintf(stderr, "editcap: Error writing to %s: %s\n", - argv[optind + 1], wtap_strerror(err)); + filename, wtap_strerror(err)); exit(1); } + written_count++; + } count++; @@ -514,7 +570,7 @@ if (!wtap_dump_close(pdh, &err)) { - fprintf(stderr, "editcap: Error writing to %s: %s\n", argv[optind + 1], + fprintf(stderr, "editcap: Error writing to %s: %s\n", filename, wtap_strerror(err)); exit(1);
Index: editcap.pod =================================================================== --- editcap.pod (revision 16820) +++ editcap.pod (working copy) @@ -6,6 +6,7 @@ =head1 SYNOPSYS B<editcap> +S<[ B<-c> packets per file]> S<[ B<-E> error probability]> S<[ B<-F> file format ]> S<[ B<-h> ]> @@ -135,6 +136,11 @@ I<end> (removing them all if B<-r> isn't specified, including them all if B<-r> is specified). +If the B<-c> flag is used to specify the amount of packets in a capture +file, the output file will be created with a suffix -nnnnn. The suffix +starts at 00000. No more then the specified number of packets are written +in the output file before the next output file is opened. + If the B<-s> flag is used to specify a snapshot length, frames in the input file with more captured data than the specified snapshot length will have only the amount of data specified by the snapshot length @@ -175,6 +181,10 @@ =over 4 +=item -c + +Sets the number of packets per output file. + =item -E Sets the probabilty that bytes in the output file are randomly changed.
- Follow-Ups:
- SV: [Ethereal-dev] Response to bug 379 [PATCH]
- From: Anders Broman
- SV: [Ethereal-dev] Response to bug 379 [PATCH]
- From: Anders Broman
- SV: [Ethereal-dev] Response to bug 379 [PATCH]
- Prev by Date: [Ethereal-dev] Fix for bug 373 [PATCH]
- Next by Date: [Ethereal-dev] [PATCH] packet-ospf.c
- Previous by thread: SV: [Ethereal-dev] Fix for bug 373 [PATCH]
- Next by thread: SV: [Ethereal-dev] Response to bug 379 [PATCH]
- Index(es):