@@ -895,6 +895,51 @@ get_next_file(FILE *VFile, char *ptr)
895
895
return ret ;
896
896
}
897
897
898
+ static int
899
+ open_pcap_file (const char * path , const netdissect_options * ndo )
900
+ {
901
+ int dlt ;
902
+ const char * dlt_name ;
903
+ char ebuf [PCAP_ERRBUF_SIZE ];
904
+ static int sll_warning_printed = 0 ;
905
+
906
+ #ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
907
+ pd = pcap_open_offline_with_tstamp_precision (path ,
908
+ ndo -> ndo_tstamp_precision , ebuf );
909
+ #else
910
+ pd = pcap_open_offline (path , ebuf );
911
+ #endif
912
+
913
+ if (pd == NULL )
914
+ error ("%s" , ebuf );
915
+ #ifdef HAVE_CAPSICUM
916
+ cap_rights_init (& rights , CAP_READ );
917
+ if (cap_rights_limit (fileno (pcap_file (pd )), & rights ) < 0 &&
918
+ errno != ENOSYS ) {
919
+ error ("unable to limit pcap descriptor" );
920
+ }
921
+ #endif
922
+ dlt = pcap_datalink (pd );
923
+ dlt_name = pcap_datalink_val_to_name (dlt );
924
+ fprintf (stderr , "reading from file %s" , path );
925
+ if (dlt_name == NULL ) {
926
+ fprintf (stderr , ", link-type %u" , dlt );
927
+ } else {
928
+ fprintf (stderr , ", link-type %s (%s)" , dlt_name ,
929
+ pcap_datalink_val_to_description (dlt ));
930
+ }
931
+ fprintf (stderr , ", snapshot length %d\n" , pcap_snapshot (pd ));
932
+ #ifdef DLT_LINUX_SLL2
933
+ if (!sll_warning_printed && dlt == DLT_LINUX_SLL2 )
934
+ {
935
+ fprintf (stderr , "Warning: interface names might be incorrect\n" );
936
+ sll_warning_printed = 1 ;
937
+ }
938
+ #endif
939
+
940
+ return dlt ;
941
+ }
942
+
898
943
#ifdef HAVE_CASPER
899
944
static cap_channel_t *
900
945
capdns_setup (void )
@@ -1476,7 +1521,6 @@ main(int argc, char **argv)
1476
1521
char * endp ;
1477
1522
pcap_handler callback ;
1478
1523
int dlt ;
1479
- const char * dlt_name ;
1480
1524
struct bpf_program fcode ;
1481
1525
#ifndef _WIN32
1482
1526
void (* oldhandler )(int );
@@ -2121,36 +2165,7 @@ main(int argc, char **argv)
2121
2165
RFileName = VFileLine ;
2122
2166
}
2123
2167
2124
- #ifdef HAVE_PCAP_SET_TSTAMP_PRECISION
2125
- pd = pcap_open_offline_with_tstamp_precision (RFileName ,
2126
- ndo -> ndo_tstamp_precision , ebuf );
2127
- #else
2128
- pd = pcap_open_offline (RFileName , ebuf );
2129
- #endif
2130
-
2131
- if (pd == NULL )
2132
- error ("%s" , ebuf );
2133
- #ifdef HAVE_CAPSICUM
2134
- cap_rights_init (& rights , CAP_READ );
2135
- if (cap_rights_limit (fileno (pcap_file (pd )), & rights ) < 0 &&
2136
- errno != ENOSYS ) {
2137
- error ("unable to limit pcap descriptor" );
2138
- }
2139
- #endif
2140
- dlt = pcap_datalink (pd );
2141
- dlt_name = pcap_datalink_val_to_name (dlt );
2142
- fprintf (stderr , "reading from file %s" , RFileName );
2143
- if (dlt_name == NULL ) {
2144
- fprintf (stderr , ", link-type %u" , dlt );
2145
- } else {
2146
- fprintf (stderr , ", link-type %s (%s)" , dlt_name ,
2147
- pcap_datalink_val_to_description (dlt ));
2148
- }
2149
- fprintf (stderr , ", snapshot length %d\n" , pcap_snapshot (pd ));
2150
- #ifdef DLT_LINUX_SLL2
2151
- if (dlt == DLT_LINUX_SLL2 )
2152
- fprintf (stderr , "Warning: interface names might be incorrect\n" );
2153
- #endif
2168
+ dlt = open_pcap_file (RFileName , ndo );
2154
2169
} else if (dflag && !device ) {
2155
2170
int dump_dlt = DLT_EN10MB ;
2156
2171
/*
@@ -2604,6 +2619,8 @@ DIAG_ON_ASSIGN_ENUM
2604
2619
* to a file from the -V file). Print a message to
2605
2620
* the standard error on UN*X.
2606
2621
*/
2622
+ const char * dlt_name ;
2623
+
2607
2624
if (!ndo -> ndo_vflag && !WFileName ) {
2608
2625
(void )fprintf (stderr ,
2609
2626
"%s: verbose output suppressed, use -v[v]... for full protocol decode\n" ,
@@ -2683,17 +2700,7 @@ DIAG_ON_ASSIGN_ENUM
2683
2700
int new_dlt ;
2684
2701
2685
2702
RFileName = VFileLine ;
2686
- pd = pcap_open_offline (RFileName , ebuf );
2687
- if (pd == NULL )
2688
- error ("%s" , ebuf );
2689
- #ifdef HAVE_CAPSICUM
2690
- cap_rights_init (& rights , CAP_READ );
2691
- if (cap_rights_limit (fileno (pcap_file (pd )),
2692
- & rights ) < 0 && errno != ENOSYS ) {
2693
- error ("unable to limit pcap descriptor" );
2694
- }
2695
- #endif
2696
- new_dlt = pcap_datalink (pd );
2703
+ new_dlt = open_pcap_file (RFileName , ndo );
2697
2704
if (new_dlt != dlt ) {
2698
2705
/*
2699
2706
* The new file has a different
@@ -2735,20 +2742,6 @@ DIAG_ON_ASSIGN_ENUM
2735
2742
*/
2736
2743
if (pcap_setfilter (pd , & fcode ) < 0 )
2737
2744
error ("%s" , pcap_geterr (pd ));
2738
-
2739
- /*
2740
- * Report the new file.
2741
- */
2742
- dlt_name = pcap_datalink_val_to_name (dlt );
2743
- fprintf (stderr , "reading from file %s" , RFileName );
2744
- if (dlt_name == NULL ) {
2745
- fprintf (stderr , ", link-type %u" , dlt );
2746
- } else {
2747
- fprintf (stderr , ", link-type %s (%s)" ,
2748
- dlt_name ,
2749
- pcap_datalink_val_to_description (dlt ));
2750
- }
2751
- fprintf (stderr , ", snapshot length %d\n" , pcap_snapshot (pd ));
2752
2745
}
2753
2746
}
2754
2747
}
0 commit comments