Initial import
[project/qosify.git] / qosify.h
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * Copyright (C) 2021 Felix Fietkau <nbd@nbd.name>
4 */
5 #ifndef __QOS_CLASSIFY_H
6 #define __QOS_CLASSIFY_H
7
8 #include <stdbool.h>
9
10 #include <bpf/bpf.h>
11 #include <bpf/libbpf.h>
12
13 #include "qosify-bpf.h"
14
15 #include <libubox/utils.h>
16 #include <libubox/avl.h>
17 #include <libubox/blobmsg.h>
18 #include <libubox/ulog.h>
19
20 #include <netinet/in.h>
21
22 #define CLASSIFY_PROG_PATH "/lib/bpf/qosify-bpf.o"
23 #define CLASSIFY_PIN_PATH "/sys/fs/bpf/qosify"
24 #define CLASSIFY_DATA_PATH "/sys/fs/bpf/qosify_data"
25
26 enum qosify_map_id {
27 CL_MAP_TCP_PORTS,
28 CL_MAP_UDP_PORTS,
29 CL_MAP_IPV4_ADDR,
30 CL_MAP_IPV6_ADDR,
31 CL_MAP_CONFIG,
32 __CL_MAP_MAX,
33 };
34
35 struct qosify_map_data {
36 enum qosify_map_id id;
37
38 bool file : 1;
39 bool user : 1;
40
41 uint8_t dscp;
42 uint8_t file_dscp;
43
44 union {
45 uint32_t port;
46 struct in_addr ip;
47 struct in6_addr ip6;
48 } addr;
49 };
50
51 struct qosify_map_entry {
52 struct avl_node avl;
53
54 uint32_t timeout;
55
56 struct qosify_map_data data;
57 };
58
59
60 extern int qosify_map_timeout;
61 extern struct qosify_config config;
62
63 int qosify_loader_init(bool force_init);
64
65 int qosify_map_init(void);
66 int qosify_map_dscp_value(const char *val);
67 int qosify_map_load_file(const char *file);
68 int qosify_map_set_entry(enum qosify_map_id id, bool file, const char *str, uint8_t dscp);
69 void qosify_map_reload(void);
70 void qosify_map_clear_files(void);
71 void qosify_map_gc(void);
72 void qosify_map_dump(struct blob_buf *b);
73 void qosify_map_set_dscp_default(enum qosify_map_id id, uint8_t val);
74 void qosify_map_reset_config(void);
75 void qosify_map_update_config(void);
76
77 int qosify_iface_init(void);
78 void qosify_iface_config_update(struct blob_attr *ifaces, struct blob_attr *devs);
79 void qosify_iface_check(void);
80 void qosify_iface_status(struct blob_buf *b);
81 void qosify_iface_stop(void);
82
83 int qosify_ubus_init(void);
84 void qosify_ubus_stop(void);
85 int qosify_ubus_check_interface(const char *name, char *ifname, int ifname_len);
86
87 #endif