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 80000
21 #define IPRULE_PRIORITY_NW 90000
22 #define IPRULE_PRIORITY_REJECT 4200000000
25 /* address family for rule */
26 IPRULE_INET4 = (0 << 0),
27 IPRULE_INET6 = (1 << 0),
28 IPRULE_FAMILY = IPRULE_INET4 | IPRULE_INET6,
30 /* rule specifies input device */
33 /* rule specifies output device */
34 IPRULE_OUT = (1 << 3),
36 /* rule specifies src */
37 IPRULE_SRC = (1 << 4),
39 /* rule specifies dest */
40 IPRULE_DEST = (1 << 5),
42 /* rule specifies priority */
43 IPRULE_PRIORITY = (1 << 6),
45 /* rule specifies diffserv/tos */
46 IPRULE_TOS = (1 << 7),
48 /* rule specifies fwmark */
49 IPRULE_FWMARK = (1 << 8),
51 /* rule specifies fwmask */
52 IPRULE_FWMASK = (1 << 9),
54 /* rule performs table lookup */
55 IPRULE_LOOKUP = (1 << 10),
57 /* rule performs routing action */
58 IPRULE_ACTION = (1 << 11),
61 IPRULE_GOTO = (1 << 12),
65 struct vlist_node node;
68 /* everything below is used as avl tree key */
69 enum iprule_flags flags;
73 char in_dev[IFNAMSIZ + 1];
74 char out_dev[IFNAMSIZ + 1];
76 unsigned int src_mask;
77 union if_addr src_addr;
79 unsigned int dest_mask;
80 union if_addr dest_addr;
82 unsigned int priority;
93 extern struct vlist_tree iprules;
94 extern const struct uci_blob_param_list rule_attr_list;
96 void iprule_add(struct blob_attr *attr, bool v6);
97 void iprule_update_start(void);
98 void iprule_update_complete(void);