Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include "in-addr-util.h" 5 : : 6 : : #include "conf-parser.h" 7 : : #include "netdev/netdev.h" 8 : : #include "netdev/fou-tunnel.h" 9 : : 10 : : typedef enum Ip6TnlMode { 11 : : NETDEV_IP6_TNL_MODE_IP6IP6, 12 : : NETDEV_IP6_TNL_MODE_IPIP6, 13 : : NETDEV_IP6_TNL_MODE_ANYIP6, 14 : : _NETDEV_IP6_TNL_MODE_MAX, 15 : : _NETDEV_IP6_TNL_MODE_INVALID = -1, 16 : : } Ip6TnlMode; 17 : : 18 : : typedef enum IPv6FlowLabel { 19 : : NETDEV_IPV6_FLOWLABEL_INHERIT = 0xFFFFF + 1, 20 : : _NETDEV_IPV6_FLOWLABEL_MAX, 21 : : _NETDEV_IPV6_FLOWLABEL_INVALID = -1, 22 : : } IPv6FlowLabel; 23 : : 24 : : typedef struct Tunnel { 25 : : NetDev meta; 26 : : 27 : : uint8_t encap_limit; 28 : : 29 : : int family; 30 : : int ipv6_flowlabel; 31 : : int allow_localremote; 32 : : int gre_erspan_sequence; 33 : : int isatap; 34 : : 35 : : unsigned ttl; 36 : : unsigned tos; 37 : : unsigned flags; 38 : : 39 : : uint32_t key; 40 : : uint32_t ikey; 41 : : uint32_t okey; 42 : : uint32_t erspan_index; 43 : : 44 : : union in_addr_union local; 45 : : union in_addr_union remote; 46 : : 47 : : Ip6TnlMode ip6tnl_mode; 48 : : FooOverUDPEncapType fou_encap_type; 49 : : 50 : : bool pmtudisc; 51 : : bool copy_dscp; 52 : : bool independent; 53 : : bool fou_tunnel; 54 : : bool assign_to_loopback; 55 : : 56 : : uint16_t encap_src_port; 57 : : uint16_t fou_destination_port; 58 : : 59 : : struct in6_addr sixrd_prefix; 60 : : uint8_t sixrd_prefixlen; 61 : : } Tunnel; 62 : : 63 [ # # # # : 0 : DEFINE_NETDEV_CAST(IPIP, Tunnel); # # ] 64 [ # # # # : 0 : DEFINE_NETDEV_CAST(GRE, Tunnel); # # ] 65 [ # # # # : 0 : DEFINE_NETDEV_CAST(GRETAP, Tunnel); # # ] 66 [ # # # # : 0 : DEFINE_NETDEV_CAST(IP6GRE, Tunnel); # # ] 67 [ # # # # : 0 : DEFINE_NETDEV_CAST(IP6GRETAP, Tunnel); # # ] 68 [ # # # # : 0 : DEFINE_NETDEV_CAST(SIT, Tunnel); # # ] 69 [ # # # # : 0 : DEFINE_NETDEV_CAST(VTI, Tunnel); # # ] 70 [ # # # # : 0 : DEFINE_NETDEV_CAST(VTI6, Tunnel); # # ] 71 [ # # # # : 0 : DEFINE_NETDEV_CAST(IP6TNL, Tunnel); # # ] 72 [ # # # # : 0 : DEFINE_NETDEV_CAST(ERSPAN, Tunnel); # # ] 73 : : extern const NetDevVTable ipip_vtable; 74 : : extern const NetDevVTable sit_vtable; 75 : : extern const NetDevVTable vti_vtable; 76 : : extern const NetDevVTable vti6_vtable; 77 : : extern const NetDevVTable gre_vtable; 78 : : extern const NetDevVTable gretap_vtable; 79 : : extern const NetDevVTable ip6gre_vtable; 80 : : extern const NetDevVTable ip6gretap_vtable; 81 : : extern const NetDevVTable ip6tnl_vtable; 82 : : extern const NetDevVTable erspan_vtable; 83 : : 84 : : const char *ip6tnl_mode_to_string(Ip6TnlMode d) _const_; 85 : : Ip6TnlMode ip6tnl_mode_from_string(const char *d) _pure_; 86 : : 87 : : CONFIG_PARSER_PROTOTYPE(config_parse_ip6tnl_mode); 88 : : CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_address); 89 : : CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_flowlabel); 90 : : CONFIG_PARSER_PROTOTYPE(config_parse_encap_limit); 91 : : CONFIG_PARSER_PROTOTYPE(config_parse_tunnel_key); 92 : : CONFIG_PARSER_PROTOTYPE(config_parse_6rd_prefix);