root/net/bpfilter/main.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. handle_get_cmd
  2. handle_set_cmd
  3. loop
  4. main

   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 
  13 FILE *debug_f;
  14 
  15 static 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 
  26 static int handle_set_cmd(struct mbox_request *cmd)
  27 {
  28         return -ENOPROTOOPT;
  29 }
  30 
  31 static 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 
  56 int main(void)
  57 {
  58         debug_f = fopen("/dev/kmsg", "w");
  59         setvbuf(debug_f, 0, _IOLBF, 0);
  60         fprintf(debug_f, "Started bpfilter\n");
  61         loop();
  62         fclose(debug_f);
  63         return 0;
  64 }

/* [<][>][^][v][top][bottom][index][help] */