diff --git a/monitor/main.c b/monitor/main.c index f0b16bbf..50b3fd27 100644 --- a/monitor/main.c +++ b/monitor/main.c @@ -569,7 +569,8 @@ done: return exit_status; } -static int process_pcap(struct pcap *pcap, uint16_t id) +static int process_pcap(struct pcap *pcap, uint16_t id, + const struct nlmon_config *config) { struct nlmon *nlmon = NULL; struct timeval tv; @@ -586,7 +587,7 @@ static int process_pcap(struct pcap *pcap, uint16_t id) return EXIT_FAILURE; } - nlmon = nlmon_create(id); + nlmon = nlmon_create(id, config); while (pcap_read(pcap, &tv, buf, snaplen, &len, &real_len)) { uint16_t arphrd_type; @@ -797,7 +798,8 @@ int main(int argc, char *argv[]) fprintf(stderr, "Invalid packet format\n"); exit_status = EXIT_FAILURE; } else - exit_status = process_pcap(pcap, nl80211_family); + exit_status = process_pcap(pcap, nl80211_family, + &config); pcap_close(pcap); diff --git a/monitor/nlmon.c b/monitor/nlmon.c index 69e86ce3..b58bef05 100644 --- a/monitor/nlmon.c +++ b/monitor/nlmon.c @@ -7253,7 +7253,7 @@ static void nlmon_message(struct nlmon *nlmon, const struct timeval *tv, } } -struct nlmon *nlmon_create(uint16_t id) +struct nlmon *nlmon_create(uint16_t id, const struct nlmon_config *config) { struct nlmon *nlmon; @@ -7261,6 +7261,10 @@ struct nlmon *nlmon_create(uint16_t id) nlmon->id = id; nlmon->req_list = l_queue_new(); + nlmon->nortnl = config->nortnl; + nlmon->nowiphy = config->nowiphy; + nlmon->noscan = config->noscan; + nlmon->noies = config->noies; return nlmon; } @@ -8449,17 +8453,12 @@ struct nlmon *nlmon_open(const char *ifname, uint16_t id, const char *pathname, } else pcap = NULL; - nlmon = l_new(struct nlmon, 1); - nlmon->id = id; + nlmon = nlmon_create(id, config); + nlmon->io = io; nlmon->pae_io = pae_io; - nlmon->req_list = l_queue_new(); nlmon->pcap = pcap; - nlmon->nortnl = config->nortnl; - nlmon->nowiphy = config->nowiphy; - nlmon->noscan = config->noscan; - nlmon->noies = config->noies; l_io_set_read_handler(nlmon->io, nlmon_receive, nlmon, NULL); l_io_set_read_handler(nlmon->pae_io, pae_receive, nlmon, NULL); diff --git a/monitor/nlmon.h b/monitor/nlmon.h index ab038fdf..d1092c11 100644 --- a/monitor/nlmon.h +++ b/monitor/nlmon.h @@ -36,7 +36,7 @@ struct nlmon *nlmon_open(const char *ifname, uint16_t id, const char *pathname, const struct nlmon_config *config); void nlmon_close(struct nlmon *nlmon); -struct nlmon *nlmon_create(uint16_t id); +struct nlmon *nlmon_create(uint16_t id, const struct nlmon_config *config); void nlmon_destroy(struct nlmon *nlmon); void nlmon_print_rtnl(struct nlmon *nlmon, const struct timeval *tv, const void *data, uint32_t size);