Since gndo is only referenced in main() move it there.
extern void geonet_print(netdissect_options *ndo,const u_char *eth_hdr,const u_char *geo_pck, u_int len);
extern void calm_fast_print(netdissect_options *ndo,const u_char *eth_hdr,const u_char *calm_pck, u_int len);
-extern netdissect_options *gndo;
-
#endif /* netdissect_h */
;
void
-init_print(u_int32_t localnet, u_int32_t mask, uint32_t timezone_offset)
+init_print(netdissect_options *ndo, u_int32_t localnet, u_int32_t mask,
+ uint32_t timezone_offset)
{
thiszone = timezone_offset;
- init_addrtoname(gndo, localnet, mask);
+ init_addrtoname(ndo, localnet, mask);
init_checksum();
}
}
struct print_info
-get_print_info(int type)
+get_print_info(netdissect_options *ndo, int type)
{
+ const char *dltname;
struct print_info printinfo;
- printinfo.ndo = gndo;
+ printinfo.ndo = ndo;
printinfo.printer = lookup_printer(type);
if (printinfo.printer == NULL) {
- gndo->ndo_dltname = pcap_datalink_val_to_name(type);
- if (gndo->ndo_dltname != NULL)
+ dltname = pcap_datalink_val_to_name(type);
+ if (dltname != NULL)
error("packet printing is not supported for link type %s: use -w",
- gndo->ndo_dltname);
+ dltname);
else
error("packet printing is not supported for link type %d: use -w", type);
}
if_printer printer;
};
-void init_print(u_int32_t localnet, u_int32_t mask,
+void init_print(netdissect_options *ndo, u_int32_t localnet, u_int32_t mask,
uint32_t timezone_offset);
int has_printer(int type);
-struct print_info get_print_info(int type);
+struct print_info get_print_info(netdissect_options *ndo, int type);
void pretty_print_packet(struct print_info *print_info,
const struct pcap_pkthdr *h, const u_char *sp,
#define SIGNAL_REQ_INFO SIGUSR1
#endif
-netdissect_options Gndo;
-netdissect_options *gndo = &Gndo;
-
static int Cflag; /* rotate dump files after this many bytes */
static int Cflag_count; /* Keep track of which file number we're writing */
static int Dflag; /* list available devices and exit */
int jflag=-1; /* packet time stamp source */
int Oflag=1; /* run filter code optimizer */
int pflag=0; /* don't go promiscuous */
+ netdissect_options Gndo;
+ netdissect_options *gndo = &Gndo;
#ifdef WIN32
if(wsockinit() != 0) return 1;
#endif /* WIN32 */
+ memset(gndo, 0, sizeof(*gndo));
gndo->ndo_Rflag=1;
gndo->ndo_dlt=-1;
ndo_set_function_pointers(gndo);
free(cmdbuf);
exit(0);
}
- init_print(localnet, netmask, timezone_offset);
+ init_print(gndo, localnet, netmask, timezone_offset);
#ifndef WIN32
(void)setsignal(SIGPIPE, cleanup);
#endif
} else {
type = pcap_datalink(pd);
- printinfo = get_print_info(type);
+ printinfo = get_print_info(gndo, type);
callback = print_packet;
pcap_userdata = (u_char *)&printinfo;
}
new_dlt = pcap_datalink(pd);
if (WFileName && new_dlt != dlt)
error("%s: new dlt does not match original", RFileName);
- printinfo = get_print_info(new_dlt);
+ printinfo = get_print_info(gndo, new_dlt);
dlt_name = pcap_datalink_val_to_name(new_dlt);
if (dlt_name == NULL) {
fprintf(stderr, "reading from file %s, link-type %u\n",