diff --git a/src/config.c b/src/config.c index 734d3e8..2dd8df6 100644 --- a/src/config.c +++ b/src/config.c @@ -10,7 +10,7 @@ FILE *file; -void setcfgdefaults(struct config_map *cfg) +void setcfgdefaults(struct config *cfg) { cfg->updateTime = 0; cfg->interface = "eth0"; @@ -93,7 +93,7 @@ int opencfg(const char *FileName) return 0; } -int readcfg(struct config_map *cfg) +int readcfg(struct config *cfg) { // Not sure why this would be set to NULL after checking for it in OpenConfig(), but just for safety. if (file == NULL) diff --git a/src/config.h b/src/config.h index 9a49269..7cd36e5 100644 --- a/src/config.h +++ b/src/config.h @@ -2,7 +2,7 @@ #include "xdpfw.h" -struct config_map +struct config { char *interface; uint16_t updateTime; @@ -10,6 +10,6 @@ struct config_map struct filter filters[MAX_FILTERS]; }; -void setcfgdefaults(struct config_map *cfg); +void setcfgdefaults(struct config *cfg); int opencfg(const char *FileName); -int readcfg(struct config_map *cfg); \ No newline at end of file +int readcfg(struct config *cfg); \ No newline at end of file diff --git a/src/xdpfw.c b/src/xdpfw.c index b8e32d6..e883173 100644 --- a/src/xdpfw.c +++ b/src/xdpfw.c @@ -31,7 +31,7 @@ void signalHndl(int tmp) cont = 0; } -void updatefilters(struct config_map *conf) +void updatefilters(struct config *cfg) { // Loop through all filters and delete the map. for (uint8_t i = 0; i < MAX_FILTERS; i++) @@ -45,38 +45,38 @@ void updatefilters(struct config_map *conf) for (uint32_t i = 0; i < MAX_FILTERS; i++) { // Check if we have a valid ID. - if (conf->filters[i].id < 1) + if (cfg->filters[i].id < 1) { break; } // Attempt to update BPF map. - if (bpf_map_update_elem(filter_map_fd, &i, &conf->filters[i], BPF_ANY) == -1) + if (bpf_map_update_elem(filter_map_fd, &i, &cfg->filters[i], BPF_ANY) == -1) { fprintf(stderr, "Error updating BPF item #%d\n", i); } } } -int updateconfig(struct config_map *conf, char *configFile) +int updateconfig(struct config *cfg, char *cfgfile) { // Open config file. - if (opencfg(configFile) != 0) + if (opencfg(cfgfile) != 0) { - fprintf(stderr, "Error opening filters file: %s\n", configFile); + fprintf(stderr, "Error opening filters file: %s\n", cfgfile); return -1; } - setcfgdefaults(conf); + setcfgdefaults(cfg); for (uint16_t i = 0; i < MAX_FILTERS; i++) { - conf->filters[i] = (struct filter) {0}; + cfg->filters[i] = (struct filter) {0}; } // Read config and check for errors. - if (readcfg(conf) != 0) + if (readcfg(cfg) != 0) { fprintf(stderr, "Error reading filters file.\n"); @@ -265,27 +265,27 @@ int main(int argc, char *argv[]) } // Initialize config. - struct config_map *conf = malloc(sizeof(struct config_map)); + struct config cfg = {0}; - setcfgdefaults(conf); + setcfgdefaults(&cfg); // Create last updated variable. time_t lastUpdated = time(NULL); time_t statsLastUpdated = time(NULL); // Update config. - updateconfig(conf, cmd.cfgfile); + updateconfig(&cfg, cmd.cfgfile); // Check for list option. if (cmd.list) { fprintf(stdout, "Details:\n"); - fprintf(stdout, "Interface Name => %s\n", conf->interface); - fprintf(stdout, "Update Time => %" PRIu16 "\n", conf->updateTime); + fprintf(stdout, "Interface Name => %s\n", cfg.interface); + fprintf(stdout, "Update Time => %" PRIu16 "\n", cfg.updateTime); for (uint16_t i = 0; i < MAX_FILTERS; i++) { - if (conf->filters[i].id < 1) + if (cfg.filters[i].id < 1) { break; } @@ -293,49 +293,49 @@ int main(int argc, char *argv[]) fprintf(stdout, "Filter #%" PRIu16 ":\n", (i + 1)); // Main. - fprintf(stdout, "ID => %d\n", conf->filters[i].id); - fprintf(stdout, "Enabled => %" PRIu8 "\n", conf->filters[i].enabled); - fprintf(stdout, "Action => %" PRIu8 " (0 = Block, 1 = Allow).\n", conf->filters[i].action); + fprintf(stdout, "ID => %d\n", cfg.filters[i].id); + fprintf(stdout, "Enabled => %" PRIu8 "\n", cfg.filters[i].enabled); + fprintf(stdout, "Action => %" PRIu8 " (0 = Block, 1 = Allow).\n", cfg.filters[i].action); // IP addresses. struct sockaddr_in sin; - sin.sin_addr.s_addr = conf->filters[i].srcIP; + sin.sin_addr.s_addr = cfg.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; + din.sin_addr.s_addr = cfg.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, "TOS => %" PRIu8 "\n", conf->filters[i].tos); - fprintf(stdout, "PPS => %" PRIu64 "\n", conf->filters[i].pps); - fprintf(stdout, "BPS => %" PRIu64 "\n\n", conf->filters[i].bps); - fprintf(stdout, "Block Time => %" PRIu64 "\n\n", conf->filters[i].blockTime); + fprintf(stdout, "Max Length => %" PRIu16 "\n", cfg.filters[i].max_len); + fprintf(stdout, "Min Length => %" PRIu16 "\n", cfg.filters[i].min_len); + fprintf(stdout, "Max TTL => %" PRIu8 "\n", cfg.filters[i].max_ttl); + fprintf(stdout, "Min TTL => %" PRIu8 "\n", cfg.filters[i].min_ttl); + fprintf(stdout, "TOS => %" PRIu8 "\n", cfg.filters[i].tos); + fprintf(stdout, "PPS => %" PRIu64 "\n", cfg.filters[i].pps); + fprintf(stdout, "BPS => %" PRIu64 "\n\n", cfg.filters[i].bps); + fprintf(stdout, "Block Time => %" PRIu64 "\n\n", cfg.filters[i].blockTime); // 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\n", conf->filters[i].tcpopts.fin); + fprintf(stdout, "TCP Enabled => %" PRIu8 "\n", cfg.filters[i].tcpopts.enabled); + fprintf(stdout, "TCP Source Port => %" PRIu16 "\n", cfg.filters[i].tcpopts.sport); + fprintf(stdout, "TCP Destination Port => %" PRIu16 "\n", cfg.filters[i].tcpopts.dport); + fprintf(stdout, "TCP URG Flag => %" PRIu8 "\n", cfg.filters[i].tcpopts.urg); + fprintf(stdout, "TCP ACK Flag => %" PRIu8 "\n", cfg.filters[i].tcpopts.ack); + fprintf(stdout, "TCP RST Flag => %" PRIu8 "\n", cfg.filters[i].tcpopts.rst); + fprintf(stdout, "TCP PSH Flag => %" PRIu8 "\n", cfg.filters[i].tcpopts.psh); + fprintf(stdout, "TCP SYN Flag => %" PRIu8 "\n", cfg.filters[i].tcpopts.syn); + fprintf(stdout, "TCP FIN Flag => %" PRIu8 "\n\n", cfg.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\n", conf->filters[i].udpopts.dport); + fprintf(stdout, "UDP Enabled => %" PRIu8 "\n", cfg.filters[i].udpopts.enabled); + fprintf(stdout, "UDP Source Port => %" PRIu16 "\n", cfg.filters[i].udpopts.sport); + fprintf(stdout, "UDP Destination Port => %" PRIu16 "\n\n", cfg.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, "ICMP Enabled => %" PRIu8 "\n", cfg.filters[i].icmpopts.enabled); + fprintf(stdout, "ICMP Code => %" PRIu8 "\n", cfg.filters[i].icmpopts.code); + fprintf(stdout, "ICMP Type => %" PRIu8 "\n", cfg.filters[i].icmpopts.type); fprintf(stdout, "\n\n"); } @@ -346,9 +346,9 @@ int main(int argc, char *argv[]) // Get device. int ifidx; - if ((ifidx = if_nametoindex(conf->interface)) < 0) + if ((ifidx = if_nametoindex(cfg.interface)) < 0) { - fprintf(stderr, "Error finding device %s.\n", conf->interface); + fprintf(stderr, "Error finding device %s.\n", cfg.interface); return EXIT_FAILURE; } @@ -393,7 +393,7 @@ int main(int argc, char *argv[]) } // Update BPF maps. - updatefilters(conf); + updatefilters(&cfg); // Signal. signal(SIGINT, signalHndl); @@ -407,20 +407,20 @@ int main(int argc, char *argv[]) time_t curTime = time(NULL); // Check for auto-update. - if (conf->updateTime > 0 && (curTime - lastUpdated) > conf->updateTime) + if (cfg.updateTime > 0 && (curTime - lastUpdated) > cfg.updateTime) { // Update config. - updateconfig(conf, cmd.cfgfile); + updateconfig(&cfg, cmd.cfgfile); // Update BPF maps. - updatefilters(conf); + updatefilters(&cfg); // Update last updated variable. lastUpdated = time(NULL); } // Update stats. - if ((curTime - statsLastUpdated) > 2 && !conf->nostats) + if ((curTime - statsLastUpdated) > 2 && !cfg.nostats) { uint32_t key = 0; struct xdpfw_stats stats[cpus]; @@ -449,7 +449,7 @@ int main(int argc, char *argv[]) attachxdp(ifidx, -1, &cmd); // Free config. - free(conf); + free(&cfg); // Add spacing. fprintf(stdout, "\n");