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