1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */ 2*4dc78e53SAndroid Build Coastguard Worker /* 3*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2003-2010 Thomas Graf <[email protected]> 4*4dc78e53SAndroid Build Coastguard Worker */ 5*4dc78e53SAndroid Build Coastguard Worker 6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_RULE_H_ 7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_RULE_H_ 8*4dc78e53SAndroid Build Coastguard Worker 9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h> 10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/cache.h> 11*4dc78e53SAndroid Build Coastguard Worker #include <netlink/addr.h> 12*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/route.h> 13*4dc78e53SAndroid Build Coastguard Worker #include <linux/fib_rules.h> 14*4dc78e53SAndroid Build Coastguard Worker 15*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 16*4dc78e53SAndroid Build Coastguard Worker extern "C" { 17*4dc78e53SAndroid Build Coastguard Worker #endif 18*4dc78e53SAndroid Build Coastguard Worker 19*4dc78e53SAndroid Build Coastguard Worker struct rtnl_rule; 20*4dc78e53SAndroid Build Coastguard Worker 21*4dc78e53SAndroid Build Coastguard Worker /* General */ 22*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_rule * rtnl_rule_alloc(void); 23*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_put(struct rtnl_rule *); 24*4dc78e53SAndroid Build Coastguard Worker 25*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_alloc_cache(struct nl_sock *, int, 26*4dc78e53SAndroid Build Coastguard Worker struct nl_cache **); 27*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_dump(struct rtnl_rule *, FILE *, struct nl_dump_params *); 28*4dc78e53SAndroid Build Coastguard Worker 29*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_build_add_request(struct rtnl_rule *, int, 30*4dc78e53SAndroid Build Coastguard Worker struct nl_msg **); 31*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_add(struct nl_sock *, struct rtnl_rule *, int); 32*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_build_delete_request(struct rtnl_rule *, int, 33*4dc78e53SAndroid Build Coastguard Worker struct nl_msg **); 34*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_delete(struct nl_sock *, struct rtnl_rule *, int); 35*4dc78e53SAndroid Build Coastguard Worker 36*4dc78e53SAndroid Build Coastguard Worker 37*4dc78e53SAndroid Build Coastguard Worker /* attribute modification */ 38*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_family(struct rtnl_rule *, int); 39*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_family(struct rtnl_rule *); 40*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_prio(struct rtnl_rule *, uint32_t); 41*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_prio(struct rtnl_rule *); 42*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_mark(struct rtnl_rule *, uint32_t); 43*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_mark(struct rtnl_rule *); 44*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_mask(struct rtnl_rule *, uint32_t); 45*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_mask(struct rtnl_rule *); 46*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_table(struct rtnl_rule *, uint32_t); 47*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_table(struct rtnl_rule *); 48*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_dsfield(struct rtnl_rule *, uint8_t); 49*4dc78e53SAndroid Build Coastguard Worker extern uint8_t rtnl_rule_get_dsfield(struct rtnl_rule *); 50*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_src(struct rtnl_rule *, struct nl_addr *); 51*4dc78e53SAndroid Build Coastguard Worker extern struct nl_addr * rtnl_rule_get_src(struct rtnl_rule *); 52*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_dst(struct rtnl_rule *, struct nl_addr *); 53*4dc78e53SAndroid Build Coastguard Worker extern struct nl_addr * rtnl_rule_get_dst(struct rtnl_rule *); 54*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_action(struct rtnl_rule *, uint8_t); 55*4dc78e53SAndroid Build Coastguard Worker extern uint8_t rtnl_rule_get_action(struct rtnl_rule *); 56*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_iif(struct rtnl_rule *, const char *); 57*4dc78e53SAndroid Build Coastguard Worker extern char * rtnl_rule_get_iif(struct rtnl_rule *); 58*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_oif(struct rtnl_rule *, const char *); 59*4dc78e53SAndroid Build Coastguard Worker extern char * rtnl_rule_get_oif(struct rtnl_rule *); 60*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_realms(struct rtnl_rule *, uint32_t); 61*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_realms(struct rtnl_rule *); 62*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_goto(struct rtnl_rule *, uint32_t); 63*4dc78e53SAndroid Build Coastguard Worker extern uint32_t rtnl_rule_get_goto(struct rtnl_rule *); 64*4dc78e53SAndroid Build Coastguard Worker extern void rtnl_rule_set_l3mdev(struct rtnl_rule *, int); 65*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_l3mdev(struct rtnl_rule *); 66*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_protocol(struct rtnl_rule *, uint8_t); 67*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_protocol(struct rtnl_rule *, uint8_t *); 68*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_ipproto(struct rtnl_rule *, uint8_t); 69*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_ipproto(struct rtnl_rule *, uint8_t *); 70*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_sport(struct rtnl_rule *, uint16_t start); 71*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_sport_range(struct rtnl_rule *, 72*4dc78e53SAndroid Build Coastguard Worker uint16_t start, 73*4dc78e53SAndroid Build Coastguard Worker uint16_t end); 74*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_sport(struct rtnl_rule *, uint16_t *start, 75*4dc78e53SAndroid Build Coastguard Worker uint16_t *end); 76*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_dport(struct rtnl_rule *, uint16_t start); 77*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_set_dport_range(struct rtnl_rule *, 78*4dc78e53SAndroid Build Coastguard Worker uint16_t start, 79*4dc78e53SAndroid Build Coastguard Worker uint16_t end); 80*4dc78e53SAndroid Build Coastguard Worker extern int rtnl_rule_get_dport(struct rtnl_rule *, uint16_t *start, 81*4dc78e53SAndroid Build Coastguard Worker uint16_t *end); 82*4dc78e53SAndroid Build Coastguard Worker 83*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus 84*4dc78e53SAndroid Build Coastguard Worker } 85*4dc78e53SAndroid Build Coastguard Worker #endif 86*4dc78e53SAndroid Build Coastguard Worker 87*4dc78e53SAndroid Build Coastguard Worker #endif 88