main.c (1114B)
1// SPDX-License-Identifier: GPL-2.0 2#define _GNU_SOURCE 3#include <sys/uio.h> 4#include <errno.h> 5#include <stdio.h> 6#include <sys/socket.h> 7#include <fcntl.h> 8#include <unistd.h> 9#include "../../include/uapi/linux/bpf.h" 10#include <asm/unistd.h> 11#include "msgfmt.h" 12 13FILE *debug_f; 14 15static int handle_get_cmd(struct mbox_request *cmd) 16{ 17 switch (cmd->cmd) { 18 case 0: 19 return 0; 20 default: 21 break; 22 } 23 return -ENOPROTOOPT; 24} 25 26static int handle_set_cmd(struct mbox_request *cmd) 27{ 28 return -ENOPROTOOPT; 29} 30 31static void loop(void) 32{ 33 while (1) { 34 struct mbox_request req; 35 struct mbox_reply reply; 36 int n; 37 38 n = read(0, &req, sizeof(req)); 39 if (n != sizeof(req)) { 40 fprintf(debug_f, "invalid request %d\n", n); 41 return; 42 } 43 44 reply.status = req.is_set ? 45 handle_set_cmd(&req) : 46 handle_get_cmd(&req); 47 48 n = write(1, &reply, sizeof(reply)); 49 if (n != sizeof(reply)) { 50 fprintf(debug_f, "reply failed %d\n", n); 51 return; 52 } 53 } 54} 55 56int main(void) 57{ 58 debug_f = fopen("/dev/kmsg", "w"); 59 setvbuf(debug_f, 0, _IOLBF, 0); 60 fprintf(debug_f, "<5>Started bpfilter\n"); 61 loop(); 62 fclose(debug_f); 63 return 0; 64}