Added list option for printing config.

This commit is contained in:
Christian Deacon
2020-05-05 13:56:23 +00:00
parent 209142f2e0
commit 988cf4f6d0

View File

@@ -10,6 +10,7 @@
#include <net/if.h>
#include <linux/if_link.h>
#include <arpa/inet.h>
#include "../libbpf/src/bpf.h"
#include "../libbpf/src/libbpf.h"
@@ -20,10 +21,12 @@
// Command line variables.
static char *configFile;
static int help = 0;
static int list = 0;
const struct option opts[] =
{
{"config", required_argument, NULL, 'c'},
{"list", no_argument, &list, 'l'},
{"help", no_argument, &help, 'h'},
{NULL, 0, NULL, 0}
};
@@ -42,7 +45,7 @@ void parse_command_line(int argc, char *argv[])
{
int c;
while ((c = getopt_long(argc, argv, "c:h", opts, 0)) != -1)
while ((c = getopt_long(argc, argv, "c:hl", opts, 0)) != -1)
{
switch (c)
{
@@ -271,6 +274,67 @@ int main(int argc, char *argv[])
// Update config.
update_config(&conf, configFile);
// Check for list option.
if (list)
{
fprintf(stdout, "Details:\n");
fprintf(stdout, "Interface Name => %s\n", conf.interface);
fprintf(stdout, "Update Time => %" PRIu16 "\n", conf.updateTime);
fprintf(stdout, "Filters Count => %" PRIu16 "\n\n", conf.filterCount);
for (uint16_t i = 0; i < conf.filterCount; i++)
{
fprintf(stdout, "Filter #" PRIu16 ":\n");
// Main.
fprintf(stdout, "Enabled => %" PRIu8 "\n", conf.filters[i].enabled);
fprintf(stdout, "Action => %" PRIu8 " (0 = Block, 1 = Allow).\n", conf.filters[i].action);
// IP addresses.
struct sockaddr_in sin;
sin.sin_addr.s_addr = conf.filters[i].srcIP;
fprintf(stdout, "Source IP => %s\n", inet_ntoa(sin.sin_addr));
struct sockaddr_in din;
din.sin_addr.s_addr = conf.filters[i].dstIP;
fprintf(stdout, "Destination IP => %s\n", inet_ntoa(din.sin_addr));
// Other IP header information.
fprintf(stdout, "Max Length => %" PRIu16 "\n", conf.filters[i].max_len);
fprintf(stdout, "Min Length => %" PRIu16 "\n", conf.filters[i].min_len);
fprintf(stdout, "Max TTL => %" PRIu8 "\n", conf.filters[i].max_ttl);
fprintf(stdout, "Min TTL => %" PRIu8 "\n", conf.filters[i].min_ttl);
fprintf(stdout, "Max ID => %" PRIu32 "\n", conf.filters[i].max_id);
fprintf(stdout, "Min ID => %" PRIu32 "\n", conf.filters[i].min_id);
fprintf(stdout, "TOS => %" PRIu8 "\n", conf.filters[i].tos);
// TCP Options.
fprintf(stdout, "TCP Enabled => %" PRIu8 "\n", conf.filters[i].tcpopts.enabled);
fprintf(stdout, "TCP Source Port => %" PRIu16 "\n", conf.filters[i].tcpopts.sport);
fprintf(stdout, "TCP Destination Port => %" PRIu16 "\n", conf.filters[i].tcpopts.dport);
fprintf(stdout, "TCP URG Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.urg);
fprintf(stdout, "TCP ACK Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.ack);
fprintf(stdout, "TCP RST Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.rst);
fprintf(stdout, "TCP PSH Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.psh);
fprintf(stdout, "TCP SYN Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.syn);
fprintf(stdout, "TCP FIN Flag => %" PRIu8 "\n", conf.filters[i].tcpopts.fin);
// UDP Options.
fprintf(stdout, "UDP Enabled => %" PRIu8 "\n", conf.filters[i].udpopts.enabled);
fprintf(stdout, "UDP Source Port => %" PRIu16 "\n", conf.filters[i].udpopts.sport);
fprintf(stdout, "UDP Destination Port => %" PRIu16 "\n", conf.filters[i].udpopts.dport);
// ICMP Options.
fprintf(stdout, "ICMP Enabled => %" PRIu8 "\n", conf.filters[i].icmpopts.enabled);
fprintf(stdout, "ICMP Code => %" PRIu8 "\n", conf.filters[i].icmpopts.code);
fprintf(stdout, "ICMP Type => %" PRIu8 "\n", conf.filters[i].icmpopts.type);
fprintf(stdout, "\n");
}
exit(EXIT_SUCCESS);
}
// Get device.
int dev;