same command line related changes as recently done with editcap
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 10 Jan 2006 23:06:05 +0000 (23:06 +0000)
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>
Tue, 10 Jan 2006 23:06:05 +0000 (23:06 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@16994 f5534014-38df-0310-8fa8-9805f1628bb7

doc/mergecap.pod
mergecap.c

index f5b6ad6a764348cf738081861ae05c59e6bb5ed0..6fc4e1270159acb5e8679ac989d391605f30dee2 100644 (file)
@@ -6,12 +6,14 @@ mergecap - Merges two or more capture files into one
 =head1 SYNOPSYS
 
 B<mergecap>
-S<[ B<-hva> ]>
-S<[ B<-s> I<snaplen> ]>
-S<[ B<-F> I<file format> ]>
-S<[ B<-T> I<encapsulation type> ]>
-S<B<-w> I<outfile>|->
-I<infile>
+S<[ B<-a> ]>
+S<[ B<-F> E<lt>I<file format>E<gt> ]>
+S<[ B<-h> ]>
+S<[ B<-s> E<lt>I<snaplen>E<gt> ]>
+S<[ B<-T> E<lt>I<encapsulation type>E<gt> ]>
+S<[ B<-v> ]>
+S<B<-w> E<lt>I<outfile>E<gt>|->
+E<lt>I<infile>E<gt>
 I<...>
 
 =head1 DESCRIPTION
@@ -21,7 +23,98 @@ a single output file specified by the B<-w> argument.  B<Mergecap> knows
 how to read B<libpcap> capture files, including those of B<tcpdump>,
 B<Ethereal>, and other tools that write captures in that format.  
 
-B<Mergecap> can read / import the following file formats:
+By default, it writes the capture file in B<libpcap> format, and writes
+all of the packets in both input capture files to the output file.  
+
+Packets from the input files are merged in chronological order based on
+each frame's timestamp, unless the B<-a> flag is specified.  B<Mergecap>
+assumes that frames within a single capture file are already stored in
+chronological order.  When the B<-a> flag is specified, packets are
+copied directly from each input file to the output file, independent of
+each frame's timestamp.
+
+The output file frame encapsulation type is set to the type of the input
+files, if all input files have the same type.  If not all of the input
+files have the same frame encapsulation type, the output file type is
+set to WTAP_ENCAP_PER_PACKET.  Note that some capture file formats, most
+notably B<libpcap>, do not currently support WTAP_ENCAP_PER_PACKET.
+This combination will cause the output file creation to fail.
+
+=head1 OPTIONS
+
+=over 4
+
+=item -a
+
+Causes the frame timestamps to be ignored, writing all packets from the
+first input file followed by all packets from the second input file.  By
+default, when B<-a> is not specified, the contents of the input files
+are merged in chronological order based on each frame's timestamp.
+
+Note: when merging, B<mergecap> assumes that packets within a capture
+file are already in chronological order.
+
+=item -F  E<lt>file formatE<gt>
+
+Sets the file format of the output capture file. B<Mergecap> can write 
+the file in several formats, B<mergecap -F> provides a list of the 
+available output formats. The default is to use the file format of the 
+first input file.
+
+=item -h
+
+Prints the version and options and exits.
+
+=item -s  E<lt>snaplenE<gt>
+
+Sets the snapshot length to use when writing the data.
+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
+written to the output file.  This may be useful if the program that is
+to read the output file cannot handle packets larger than a certain size
+(for example, the versions of snoop in Solaris 2.5.1 and Solaris 2.6
+appear to reject Ethernet frames larger than the standard Ethernet MTU,
+making them incapable of handling gigabit Ethernet captures if jumbo
+frames were used).
+
+=item -v
+
+Causes B<mergecap> to print a number of messages while it's working.
+
+=item -w  E<lt>outfileE<gt>|-
+
+Sets the output filename. If the name is 'B<->', stdout will be used.
+This setting is mandatory.
+
+=item -T  E<lt>encapsulation typeE<gt>
+
+Sets the packet encapsulation type of the output capture file.
+If the B<-T> flag is used to specify a frame encapsulation type, the
+encapsulation type of the output capture file will be forced to the
+specified type, rather than being the type appropriate to the
+encapsulation type of the input capture files.  
+
+Note that this merely
+forces the encapsulation type of the output file to be the specified
+type; the packet headers of the packets will not be translated from the
+encapsulation type of the input capture file to the specified
+encapsulation type (for example, it will not translate an Ethernet
+capture to an FDDI capture if an Ethernet capture is read and 'B<-T
+fddi>' is specified).
+
+=back
+
+=head1 CAPTURE FILE FORMATS
+
+There is no need to tell B<Mergecap> what type of
+file you are reading; it will determine the file type by itself. 
+
+B<Mergecap> is also capable of reading any of these file formats if they
+are compressed using gzip.  B<Mergecap> recognizes this directly from
+the file; the '.gz' extension is not required for this purpose.
+
+The following I<input> file formats are supported:
 
 =over 4
 
@@ -105,96 +198,10 @@ Linux Bluez Bluetooth stack B<hcidump -w> traces
 
 =back
 
-There is no need to tell B<Mergecap> what type of
-file you are reading; it will determine the file type by itself. 
-B<Mergecap> is also capable of reading any of these file formats if they
-are compressed using gzip.  B<Mergecap> recognizes this directly from
-the file; the '.gz' extension is not required for this purpose.
-
-By default, it writes the capture file in B<libpcap> format, and writes
-all of the packets in both input capture files to the output file.  The
-B<-F> flag can be used to specify the format in which to write the
-capture file; it can write the file in B<libpcap> format (standard
-B<libpcap> format, a modified format used by some patched versions of
-B<libpcap>, the format used by Red Hat Linux 6.1, or the format used by
-SuSE Linux 6.3), B<snoop> format, uncompressed B<Sniffer> format,
-Microsoft B<Network Monitor> 1.x format, the format used by
-Windows-based versions of the B<Sniffer> software, and the format used
-by Visual Networks' software.
-
-Packets from the input files are merged in chronological order based on
-each frame's timestamp, unless the B<-a> flag is specified.  B<Mergecap>
-assumes that frames within a single capture file are already stored in
-chronological order.  When the B<-a> flag is specified, packets are
-copied directly from each input file to the output file, independent of
-each frame's timestamp.
-
-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
-written to the output file.  This may be useful if the program that is
-to read the output file cannot handle packets larger than a certain size
-(for example, the versions of snoop in Solaris 2.5.1 and Solaris 2.6
-appear to reject Ethernet frames larger than the standard Ethernet MTU,
-making them incapable of handling gigabit Ethernet captures if jumbo
-frames were used).
-
-The output file frame encapsulation type is set to the type of the input
-files, if all input files have the same type.  If not all of the input
-files have the same frame encapsulation type, the output file type is
-set to WTAP_ENCAP_PER_PACKET.  Note that some capture file formats, most
-notably B<libpcap>, do not currently support WTAP_ENCAP_PER_PACKET.
-This combination will cause the output file creation to fail.
-
-If the B<-T> flag is used to specify a frame encapsulation type, the
-encapsulation type of the output capture file will be forced to the
-specified type, rather than being the type appropriate to the
-encapsulation type of the input capture files.  Note that this merely
-forces the encapsulation type of the output file to be the specified
-type; the packet headers of the packets will not be translated from the
-encapsulation type of the input capture file to the specified
-encapsulation type (for example, it will not translate an Ethernet
-capture to an FDDI capture if an Ethernet capture is read and 'B<-T
-fddi>' is specified).
-
-=head1 OPTIONS
-
-=over 4
-
-=item -w
-
-Sets the output filename. If the name is 'B<->', stdout will be used.
-
-=item -F
-
-Sets the file format of the output capture file.
-
-=item -T
-
-Sets the packet encapsulation type of the output capture file.
-
-=item -a
-
-Causes the frame timestamps to be ignored, writing all packets from the
-first input file followed by all packets from the second input file.  By
-default, when B<-a> is not specified, the contents of the input files
-are merged in chronological order based on each frame's timestamp.
-Note: when merging, B<mergecap> assumes that packets within a capture
-file are already in chronological order.
-
-=item -v
-
-Causes B<mergecap> to print a number of messages while it's working.
-
-=item -s
-
-Sets the snapshot length to use when writing the data.
-
-=item -h
-
-Prints the version and options and exits.
-
-=back
+B<Mergecap> can write the file in several output formats.
+The B<-F> flag can be used to specify the format in which to write the
+capture file, B<mergecap -F> provides a list of the available output 
+formats.
 
 =head1 SEE ALSO
 
index a74039cfe295973236ffdc06afca7002e1fc601c..778d557f7356509b44b948e71f9d789da5d4f4f9 100644 (file)
@@ -86,32 +86,55 @@ get_positive_int(const char *string, const char *name)
 static void
 usage(void)
 {
-  int i;
-  const char *string;
-
-  printf("Usage: mergecap [-hva] [-s <snaplen>] [-T <encap type>]\n");
-  printf("          [-F <capture type>] -w <outfile> <infile> [...]\n\n");
-  printf("  where\t-h produces this help listing.\n");
-  printf("       \t-v verbose operation, default is silent\n");
-  printf("       \t-a files should be concatenated, not merged\n");
-  printf("       \t     Default merges based on frame timestamps\n");
-  printf("       \t-s <snaplen>: truncate packets to <snaplen> bytes of data\n");
-  printf("       \t-w <outfile>: sets output filename to <outfile>\n");
-  printf("       \t-T <encap type> encapsulation type to use:\n");
-  for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) {
-      string = wtap_encap_short_string(i);
-      if (string != NULL)
-        printf("       \t     %s - %s\n",
-          string, wtap_encap_string(i));
-  }
-  printf("       \t     default is the same as the first input file\n");
-  printf("       \t-F <capture type> capture file type to write:\n");
-  for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) {
-    if (wtap_dump_can_open(i))
-      printf("       \t     %s - %s\n",
-        wtap_file_type_short_string(i), wtap_file_type_string(i));
-  }
-  printf("       \t     default is libpcap\n");
+
+  fprintf(stderr, "Mergecap %s"
+#ifdef SVNVERSION
+         " (" SVNVERSION ")"
+#endif
+         "\n", VERSION);
+  fprintf(stderr, "Merge two or more capture files into one.\n");
+  fprintf(stderr, "See http://www.ethereal.com for more information.\n");
+  fprintf(stderr, "\n");
+  fprintf(stderr, "Usage: mergecap [options] -w <outfile|-> <infile> ...\n");
+  fprintf(stderr, "\n");
+  fprintf(stderr, "Output:\n");
+  fprintf(stderr, "  -a                files should be concatenated, not merged\n");
+  fprintf(stderr, "                    Default merges based on frame timestamps\n");
+  fprintf(stderr, "  -s <snaplen>      truncate packets to <snaplen> bytes of data\n");
+  fprintf(stderr, "  -w <outfile|->    set the output filename to <outfile> or '-' for stdout\n");
+  fprintf(stderr, "  -F <capture type> set the output file type, default is libpcap\n");
+  fprintf(stderr, "                    an empty \"-F\" option will list the file types\n");
+  fprintf(stderr, "  -T <encap type>   set the output file encapsulation type,\n");
+  fprintf(stderr, "                    default is the same as the first input file\n");
+  fprintf(stderr, "                    an empty \"-T\" option will list the encapsulation types\n");
+  fprintf(stderr, "\n");
+  fprintf(stderr, "Miscellaneous:\n");
+  fprintf(stderr, "  -h                display this help and exit\n");
+  fprintf(stderr, "  -v                verbose output\n");
+}
+
+static void list_capture_types(void) {
+    int i;
+
+    fprintf(stderr, "editcap: The available capture file types for \"F\":\n");
+    for (i = 0; i < WTAP_NUM_FILE_TYPES; i++) {
+      if (wtap_dump_can_open(i))
+        fprintf(stderr, "    %s - %s\n",
+          wtap_file_type_short_string(i), wtap_file_type_string(i));
+    }
+}
+
+static void list_encap_types(void) {
+    int i;
+    const char *string;
+
+    fprintf(stderr, "editcap: The available encapsulation types for \"T\":\n");
+    for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) {
+        string = wtap_encap_short_string(i);
+        if (string != NULL)
+          fprintf(stderr, "    %s - %s\n",
+            string, wtap_encap_string(i));
+    }
 }
 
 int
@@ -156,6 +179,7 @@ main(int argc, char *argv[])
       if (frame_type < 0) {
        fprintf(stderr, "mergecap: \"%s\" isn't a valid encapsulation type\n",
            optarg);
+        list_encap_types();
        exit(1);
       }
       break;
@@ -165,6 +189,7 @@ main(int argc, char *argv[])
       if (file_type < 0) {
        fprintf(stderr, "mergecap: \"%s\" isn't a valid capture file type\n",
            optarg);
+        list_capture_types();
        exit(1);
       }
       break;
@@ -178,18 +203,22 @@ main(int argc, char *argv[])
       break;
 
     case 'h':
-      printf("mergecap version %s"
-#ifdef SVNVERSION
-         " (" SVNVERSION ")"
-#endif
-         "\n", VERSION);
       usage();
       exit(0);
       break;
 
     case '?':              /* Bad options if GNU getopt */
-      usage();
-      return 1;
+      switch(optopt) {
+      case'F':
+        list_capture_types();
+        break;
+      case'T':
+        list_encap_types();
+        break;
+      default:
+        usage();
+      }
+      exit(1);
       break;
 
     }