linux/net/bpfilter/main.c
<<
>>
Prefs
   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}
  65