system-linux: fix strncpy bounds
[project/netifd.git] / iprule.h
1 /*
2  * netifd - network interface daemon
3  * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org>
4  * Copyright (C) 2013 Jo-Philipp Wich <jow@openwrt.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2
8  * as published by the Free Software Foundation
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  */
15 #ifndef __IPRULE_H
16 #define __IPRULE_H
17
18 #include "interface-ip.h"
19
20 #define IPRULE_PRIORITY_ADDR            10000
21 #define IPRULE_PRIORITY_ADDR_MASK       20000
22 #define IPRULE_PRIORITY_NW              90000
23 #define IPRULE_PRIORITY_REJECT          4200000000
24
25 enum iprule_flags {
26         /* address family for rule */
27         IPRULE_INET4            = (0 << 0),
28         IPRULE_INET6            = (1 << 0),
29         IPRULE_FAMILY           = IPRULE_INET4 | IPRULE_INET6,
30
31         /* rule specifies input device */
32         IPRULE_IN               = (1 << 2),
33
34         /* rule specifies output device */
35         IPRULE_OUT              = (1 << 3),
36
37         /* rule specifies src */
38         IPRULE_SRC              = (1 << 4),
39
40         /* rule specifies dest */
41         IPRULE_DEST             = (1 << 5),
42
43         /* rule specifies priority */
44         IPRULE_PRIORITY         = (1 << 6),
45
46         /* rule specifies diffserv/tos */
47         IPRULE_TOS              = (1 << 7),
48
49         /* rule specifies fwmark */
50         IPRULE_FWMARK           = (1 << 8),
51
52         /* rule specifies fwmask */
53         IPRULE_FWMASK           = (1 << 9),
54
55         /* rule performs table lookup */
56         IPRULE_LOOKUP           = (1 << 10),
57
58         /* rule performs routing action */
59         IPRULE_ACTION           = (1 << 11),
60
61         /* rule is a goto */
62         IPRULE_GOTO             = (1 << 12),
63
64         /* rule suppresses results by prefix length */
65         IPRULE_SUP_PREFIXLEN    = (1 << 13),
66 };
67
68 struct iprule {
69         struct vlist_node node;
70         unsigned int order;
71
72         /* everything below is used as avl tree key */
73         enum iprule_flags flags;
74
75         bool invert;
76
77         char in_dev[IFNAMSIZ + 1];
78         char out_dev[IFNAMSIZ + 1];
79
80         unsigned int src_mask;
81         union if_addr src_addr;
82
83         unsigned int dest_mask;
84         union if_addr dest_addr;
85
86         unsigned int priority;
87         unsigned int tos;
88
89         unsigned int fwmark;
90         unsigned int fwmask;
91
92         unsigned int lookup;
93         unsigned int sup_prefixlen;
94         unsigned int action;
95         unsigned int gotoid;
96 };
97
98 extern struct vlist_tree iprules;
99 extern const struct uci_blob_param_list rule_attr_list;
100
101 void iprule_add(struct blob_attr *attr, bool v6);
102 void iprule_update_start(void);
103 void iprule_update_complete(void);
104
105 #endif