2 * netifd - network interface daemon
3 * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org>
4 * Copyright (C) 2013 Jo-Philipp Wich <jow@openwrt.org>
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
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.
18 #include "interface-ip.h"
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
26 /* address family for rule */
27 IPRULE_INET4
= (0 << 0),
28 IPRULE_INET6
= (1 << 0),
29 IPRULE_FAMILY
= IPRULE_INET4
| IPRULE_INET6
,
31 /* rule specifies input device */
34 /* rule specifies output device */
35 IPRULE_OUT
= (1 << 3),
37 /* rule specifies src */
38 IPRULE_SRC
= (1 << 4),
40 /* rule specifies dest */
41 IPRULE_DEST
= (1 << 5),
43 /* rule specifies priority */
44 IPRULE_PRIORITY
= (1 << 6),
46 /* rule specifies diffserv/tos */
47 IPRULE_TOS
= (1 << 7),
49 /* rule specifies fwmark */
50 IPRULE_FWMARK
= (1 << 8),
52 /* rule specifies fwmask */
53 IPRULE_FWMASK
= (1 << 9),
55 /* rule performs table lookup */
56 IPRULE_LOOKUP
= (1 << 10),
58 /* rule performs routing action */
59 IPRULE_ACTION
= (1 << 11),
62 IPRULE_GOTO
= (1 << 12),
64 /* rule suppresses results by prefix length */
65 IPRULE_SUP_PREFIXLEN
= (1 << 13),
69 struct vlist_node node
;
72 /* to receive interface events */
73 struct interface_user in_iface_user
;
74 struct interface_user out_iface_user
;
77 char in_dev
[IFNAMSIZ
+ 1];
78 char out_dev
[IFNAMSIZ
+ 1];
80 /* everything below is used as avl tree key */
81 /* don't change the order */
83 /* uci interface name */
87 enum iprule_flags flags
;
91 unsigned int src_mask
;
92 union if_addr src_addr
;
94 unsigned int dest_mask
;
95 union if_addr dest_addr
;
97 unsigned int priority
;
104 unsigned int sup_prefixlen
;
109 extern struct vlist_tree iprules
;
110 extern const struct uci_blob_param_list rule_attr_list
;
112 void iprule_add(struct blob_attr
*attr
, bool v6
);
113 void iprule_update_start(void);
114 void iprule_update_complete(void);