Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include <inttypes.h> 5 : : #include <netinet/in.h> 6 : : #include <linux/fib_rules.h> 7 : : #include <stdbool.h> 8 : : 9 : : #include "in-addr-util.h" 10 : : #include "conf-parser.h" 11 : : 12 : : typedef struct RoutingPolicyRule RoutingPolicyRule; 13 : : 14 : : #include "networkd-link.h" 15 : : #include "networkd-network.h" 16 : : #include "networkd-util.h" 17 : : 18 : : typedef struct Network Network; 19 : : typedef struct Link Link; 20 : : typedef struct NetworkConfigSection NetworkConfigSection; 21 : : typedef struct Manager Manager; 22 : : 23 : : struct RoutingPolicyRule { 24 : : Manager *manager; 25 : : Network *network; 26 : : Link *link; 27 : : NetworkConfigSection *section; 28 : : 29 : : bool invert_rule; 30 : : 31 : : uint8_t tos; 32 : : uint8_t protocol; 33 : : 34 : : uint32_t table; 35 : : uint32_t fwmark; 36 : : uint32_t fwmask; 37 : : uint32_t priority; 38 : : 39 : : AddressFamily address_family; /* Specified by Family= */ 40 : : int family; /* Automatically determined by From= or To= */ 41 : : unsigned char to_prefixlen; 42 : : unsigned char from_prefixlen; 43 : : 44 : : char *iif; 45 : : char *oif; 46 : : 47 : : union in_addr_union to; 48 : : union in_addr_union from; 49 : : 50 : : struct fib_rule_port_range sport; 51 : : struct fib_rule_port_range dport; 52 : : 53 : : LIST_FIELDS(RoutingPolicyRule, rules); 54 : : }; 55 : : 56 : : int routing_policy_rule_new(RoutingPolicyRule **ret); 57 : : void routing_policy_rule_free(RoutingPolicyRule *rule); 58 : : 59 [ - + # # ]: 28 : DEFINE_NETWORK_SECTION_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free); 60 : : int routing_policy_rule_section_verify(RoutingPolicyRule *rule); 61 : : 62 : : int routing_policy_rule_configure(RoutingPolicyRule *address, Link *link, link_netlink_message_handler_t callback); 63 : : int routing_policy_rule_remove(RoutingPolicyRule *routing_policy_rule, Link *link, link_netlink_message_handler_t callback); 64 : : 65 : : int routing_policy_rule_add_foreign(Manager *m, RoutingPolicyRule *rule, RoutingPolicyRule **ret); 66 : : int routing_policy_rule_get(Manager *m, RoutingPolicyRule *rule, RoutingPolicyRule **ret); 67 : : int routing_policy_rule_make_local(Manager *m, RoutingPolicyRule *rule); 68 : : int routing_policy_serialize_rules(Set *rules, FILE *f); 69 : : int routing_policy_load_rules(const char *state_file, Set **rules); 70 : : void routing_policy_rule_purge(Manager *m, Link *link); 71 : : 72 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_tos); 73 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_table); 74 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_fwmark_mask); 75 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_prefix); 76 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_priority); 77 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_device); 78 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_port_range); 79 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_ip_protocol); 80 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_invert); 81 : : CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_family);