Set custom LibXDP/LibBPF logging.
This commit is contained in:
@@ -118,7 +118,7 @@ The following table quickly explains the data types used within the configuratio
|
|||||||
### Main
|
### Main
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
| ---- | ---- | ------- | ----------- |
|
| ---- | ---- | ------- | ----------- |
|
||||||
| verbose | int | `1` | The verbose level for logging (0 - 4 supported so far). |
|
| verbose | int | `1` | The verbose level for logging (0 - 5 supported so far). |
|
||||||
| log_file | string | `/var/log/xdpfw/xdpfw.log` | The log file location. If the string is empty (`""`), the log file is disabled. |
|
| log_file | string | `/var/log/xdpfw/xdpfw.log` | The log file location. If the string is empty (`""`), the log file is disabled. |
|
||||||
| interface | string | `NULL` | The network interface name to attach the XDP program to (usually retrieved with `ip a` or `ifconfig`). |
|
| interface | string | `NULL` | The network interface name to attach the XDP program to (usually retrieved with `ip a` or `ifconfig`). |
|
||||||
| update_time | uint | `0` | How often to update the config and filtering rules from the file system in seconds (0 disables). |
|
| update_time | uint | `0` | How often to update the config and filtering rules from the file system in seconds (0 disables). |
|
||||||
@@ -316,6 +316,11 @@ I recommend only enabling filter logging at this time for debugging. If you'd li
|
|||||||
|
|
||||||
I will most likely implement functionality to rate limit log messages from XDP in the future.
|
I will most likely implement functionality to rate limit log messages from XDP in the future.
|
||||||
|
|
||||||
|
### LibBPF Logging
|
||||||
|
When loading the BPF/XDP program through LibXDP/LibBPF, logging is disabled unless if the `verbose` log setting is set to `5` or higher.
|
||||||
|
|
||||||
|
If the tool fails to load or attach the XDP program, it is recommended you set `verbose` to 5 or above so LibXDP outputs specific warnings and errors.
|
||||||
|
|
||||||
## My Other XDP Projects
|
## My Other XDP Projects
|
||||||
I just wanted to share other open source projects I've made which also utilize XDP (or AF_XDP sockets) for those interested. I hope code from these other projects help programmers trying to utilize XDP in their own projects!
|
I just wanted to share other open source projects I've made which also utilize XDP (or AF_XDP sockets) for those interested. I hope code from these other projects help programmers trying to utilize XDP in their own projects!
|
||||||
|
|
||||||
|
|||||||
@@ -85,8 +85,18 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
LogMsg(&cfg, 2, 0, "Loading XDP/BPF program at '%s'...", XDP_OBJ_PATH);
|
LogMsg(&cfg, 2, 0, "Loading XDP/BPF program at '%s'...", XDP_OBJ_PATH);
|
||||||
|
|
||||||
|
// Determine custom LibBPF log level.
|
||||||
|
int silent = 1;
|
||||||
|
|
||||||
|
if (cfg.verbose > 4)
|
||||||
|
{
|
||||||
|
silent = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLibBPFLogMode(silent);
|
||||||
|
|
||||||
// Load BPF object.
|
// Load BPF object.
|
||||||
struct xdp_program *prog = LoadBpfObj(XDP_OBJ_PATH);
|
struct xdp_program *prog = LoadBpfObj(XDP_OBJ_PATH, strict);
|
||||||
|
|
||||||
if (prog == NULL)
|
if (prog == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,14 +36,44 @@ int FindMapFd(struct xdp_program *prog, const char *map_name)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom print function for LibBPF that doesn't print anything (silent mode).
|
||||||
|
*
|
||||||
|
* @param level The current LibBPF log level.
|
||||||
|
* @param format The message format.
|
||||||
|
* @param args Format arguments for the message.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
static int silent_libbpf_log(enum libbpf_print_level level, const char *format, va_list args)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets custom LibBPF log mode.
|
||||||
|
*
|
||||||
|
* @param silent If 1, disables LibBPF logging entirely.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
void SetLibBPFLogMode(int silent)
|
||||||
|
{
|
||||||
|
if (silent)
|
||||||
|
{
|
||||||
|
libbpf_set_print(silent_libbpf_log);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a BPF object file.
|
* Loads a BPF object file.
|
||||||
*
|
*
|
||||||
* @param file_name The path to the BPF object file.
|
* @param file_name The path to the BPF object file.
|
||||||
|
* @param strict Whether to enable strict mode.
|
||||||
*
|
*
|
||||||
* @return XDP program structure (pointer) or NULL.
|
* @return XDP program structure (pointer) or NULL.
|
||||||
*/
|
*/
|
||||||
struct xdp_program *LoadBpfObj(const char *file_name)
|
struct xdp_program *LoadBpfObj(const char *file_name, int strict)
|
||||||
{
|
{
|
||||||
struct xdp_program *prog = xdp_program__open_file(file_name, "xdp_prog", NULL);
|
struct xdp_program *prog = xdp_program__open_file(file_name, "xdp_prog", NULL);
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#define XDP_OBJ_PATH "/etc/xdpfw/xdp_prog.o"
|
#define XDP_OBJ_PATH "/etc/xdpfw/xdp_prog.o"
|
||||||
|
|
||||||
int FindMapFd(struct xdp_program *prog, const char *map_name);
|
int FindMapFd(struct xdp_program *prog, const char *map_name);
|
||||||
struct xdp_program *LoadBpfObj(const char *file_name);
|
void SetLibBPFLogMode(int silent);
|
||||||
|
struct xdp_program *LoadBpfObj(const char *file_name, int strict);
|
||||||
int AttachXdp(struct xdp_program *prog, char** mode, int ifidx, u8 detach, cmdline_t *cmd);
|
int AttachXdp(struct xdp_program *prog, char** mode, int ifidx, u8 detach, cmdline_t *cmd);
|
||||||
void UpdateFilters(int filters_map, config__t *cfg);
|
void UpdateFilters(int filters_map, config__t *cfg);
|
||||||
Reference in New Issue
Block a user