monitor: pass config to nlmon_create

Expand nlmon_create to be useful for both pcaps and monitoring. Doing
this also lets iwmon filter pcaps based on --no-ies,rtnl,scan etc
flags since they are part of the config.
This commit is contained in:
James Prestwood 2022-10-26 13:45:57 -07:00 committed by Denis Kenzior
parent 5d8b86ff7c
commit 5ebcc48814
3 changed files with 13 additions and 12 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);