interface-ip: set prefix indicator flag when IPv6 prefix lifetime changes
[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
65 struct iprule {
66         struct vlist_node node;
67         unsigned int order;
68
69         /* everything below is used as avl tree key */
70         enum iprule_flags flags;
71
72         bool invert;
73
74         char in_dev[IFNAMSIZ + 1];
75         char out_dev[IFNAMSIZ + 1];
76
77         unsigned int src_mask;
78         union if_addr src_addr;
79
80         unsigned int dest_mask;
81         union if_addr dest_addr;
82
83         unsigned int priority;
84         unsigned int tos;
85
86         unsigned int fwmark;
87         unsigned int fwmask;
88
89         unsigned int lookup;
90         unsigned int action;
91         unsigned int gotoid;
92 };
93
94 extern struct vlist_tree iprules;
95 extern const struct uci_blob_param_list rule_attr_list;
96
97 void iprule_add(struct blob_attr *attr, bool v6);
98 void iprule_update_start(void);
99 void iprule_update_complete(void);
100
101 #endif