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 <net/if.h>
#include <linux/if_link.h> #include <linux/if_link.h>
#include <arpa/inet.h>
#include "../libbpf/src/bpf.h" #include "../libbpf/src/bpf.h"
#include "../libbpf/src/libbpf.h" #include "../libbpf/src/libbpf.h"
@@ -20,10 +21,12 @@
// Command line variables. // Command line variables.
static char *configFile; static char *configFile;
static int help = 0; static int help = 0;
static int list = 0;
const struct option opts[] = const struct option opts[] =
{ {
{"config", required_argument, NULL, 'c'}, {"config", required_argument, NULL, 'c'},
{"list", no_argument, &list, 'l'},
{"help", no_argument, &help, 'h'}, {"help", no_argument, &help, 'h'},
{NULL, 0, NULL, 0} {NULL, 0, NULL, 0}
}; };
@@ -42,7 +45,7 @@ void parse_command_line(int argc, char *argv[])
{ {
int c; 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) switch (c)
{ {
@@ -271,6 +274,67 @@ int main(int argc, char *argv[])
// Update config. // Update config.
update_config(&conf, configFile); 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. // Get device.
int dev; int dev;