%{
#if __GNUC__ >= 7
_Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"")
#endif
#include <stddef.h>
#include "conf-parser.h"
#include "network-internal.h"
#include "netdev/bond.h"
#include "netdev/bridge.h"
#include "netdev/geneve.h"
#include "netdev/ipvlan.h"
#include "netdev/macvlan.h"
#include "netdev/tunnel.h"
#include "netdev/tuntap.h"
#include "netdev/veth.h"
#include "netdev/vlan.h"
#include "netdev/vxlan.h"
#include "netdev/vrf.h"
#include "netdev/netdev.h"
#include "netdev/vxcan.h"
#include "netdev/wireguard.h"
#include "vlan-util.h"
%}
struct ConfigPerfItem;
%null_strings
%language=ANSI-C
%define slot-name section_and_lvalue
%define hash-function-name network_netdev_gperf_hash
%define lookup-function-name network_netdev_gperf_lookup
%readonly-tables
%omit-struct-type
%struct-type
%includes
%%
Match.Host,                        config_parse_net_condition,           CONDITION_HOST,                offsetof(NetDev, match_host)
Match.Virtualization,              config_parse_net_condition,           CONDITION_VIRTUALIZATION,      offsetof(NetDev, match_virt)
Match.KernelCommandLine,           config_parse_net_condition,           CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, match_kernel_cmdline)
Match.KernelVersion,               config_parse_net_condition,           CONDITION_KERNEL_VERSION,      offsetof(NetDev, match_kernel_version)
Match.Architecture,                config_parse_net_condition,           CONDITION_ARCHITECTURE,        offsetof(NetDev, match_arch)
NetDev.Description,                config_parse_string,                  0,                             offsetof(NetDev, description)
NetDev.Name,                       config_parse_ifname,                  0,                             offsetof(NetDev, ifname)
NetDev.Kind,                       config_parse_netdev_kind,             0,                             offsetof(NetDev, kind)
NetDev.MTUBytes,                   config_parse_iec_size,                0,                             offsetof(NetDev, mtu)
NetDev.MACAddress,                 config_parse_hwaddr,                  0,                             offsetof(NetDev, mac)
VLAN.Id,                           config_parse_vlanid,                  0,                             offsetof(VLan, id)
VLAN.GVRP,                         config_parse_tristate,                0,                             offsetof(VLan, gvrp)
VLAN.MVRP,                         config_parse_tristate,                0,                             offsetof(VLan, mvrp)
VLAN.LooseBinding,                 config_parse_tristate,                0,                             offsetof(VLan, loose_binding)
VLAN.ReorderHeader,                config_parse_tristate,                0,                             offsetof(VLan, reorder_hdr)
MACVLAN.Mode,                      config_parse_macvlan_mode,            0,                             offsetof(MacVlan, mode)
MACVTAP.Mode,                      config_parse_macvlan_mode,            0,                             offsetof(MacVlan, mode)
IPVLAN.Mode,                       config_parse_ipvlan_mode,             0,                             offsetof(IPVlan, mode)
IPVLAN.Flags,                      config_parse_ipvlan_flags,             0,                            offsetof(IPVlan, flags)
Tunnel.Local,                      config_parse_tunnel_address,          0,                             offsetof(Tunnel, local)
Tunnel.Remote,                     config_parse_tunnel_address,          0,                             offsetof(Tunnel, remote)
Tunnel.TOS,                        config_parse_unsigned,                0,                             offsetof(Tunnel, tos)
Tunnel.TTL,                        config_parse_unsigned,                0,                             offsetof(Tunnel, ttl)
Tunnel.Key,                        config_parse_tunnel_key,              0,                             offsetof(Tunnel, key)
Tunnel.InputKey,                   config_parse_tunnel_key,              0,                             offsetof(Tunnel, ikey)
Tunnel.OutputKey,                  config_parse_tunnel_key,              0,                             offsetof(Tunnel, okey)
Tunnel.DiscoverPathMTU,            config_parse_bool,                    0,                             offsetof(Tunnel, pmtudisc)
Tunnel.Mode,                       config_parse_ip6tnl_mode,             0,                             offsetof(Tunnel, ip6tnl_mode)
Tunnel.IPv6FlowLabel,              config_parse_ipv6_flowlabel,          0,                             offsetof(Tunnel, ipv6_flowlabel)
Tunnel.CopyDSCP,                   config_parse_bool,                    0,                             offsetof(Tunnel, copy_dscp)
Tunnel.EncapsulationLimit,         config_parse_encap_limit,             0,                             offsetof(Tunnel, encap_limit)
Tunnel.Independent,                config_parse_bool,                    0,                             offsetof(Tunnel, independent)
Tunnel.AllowLocalRemote,           config_parse_tristate,                0,                             offsetof(Tunnel, allow_localremote)
Peer.Name,                         config_parse_ifname,                  0,                             offsetof(Veth, ifname_peer)
Peer.MACAddress,                   config_parse_hwaddr,                  0,                             offsetof(Veth, mac_peer)
VXCAN.Peer,                        config_parse_ifname,                  0,                             offsetof(VxCan, ifname_peer)
VXLAN.Id,                          config_parse_uint64,                  0,                             offsetof(VxLan, id)
VXLAN.Group,                       config_parse_vxlan_address,           0,                             offsetof(VxLan, remote)
VXLAN.Local,                       config_parse_vxlan_address,           0,                             offsetof(VxLan, local)
VXLAN.Remote,                      config_parse_vxlan_address,           0,                             offsetof(VxLan, remote)
VXLAN.TOS,                         config_parse_unsigned,                0,                             offsetof(VxLan, tos)
VXLAN.TTL,                         config_parse_unsigned,                0,                             offsetof(VxLan, ttl)
VXLAN.MacLearning,                 config_parse_bool,                    0,                             offsetof(VxLan, learning)
VXLAN.ARPProxy,                    config_parse_bool,                    0,                             offsetof(VxLan, arp_proxy)
VXLAN.ReduceARPProxy,              config_parse_bool,                    0,                             offsetof(VxLan, arp_proxy)
VXLAN.L2MissNotification,          config_parse_bool,                    0,                             offsetof(VxLan, l2miss)
VXLAN.L3MissNotification,          config_parse_bool,                    0,                             offsetof(VxLan, l3miss)
VXLAN.RouteShortCircuit,           config_parse_bool,                    0,                             offsetof(VxLan, route_short_circuit)
VXLAN.UDPCheckSum,                 config_parse_bool,                    0,                             offsetof(VxLan, udpcsum)
VXLAN.UDPChecksum,                 config_parse_bool,                    0,                             offsetof(VxLan, udpcsum)
VXLAN.UDP6ZeroCheckSumRx,          config_parse_bool,                    0,                             offsetof(VxLan, udp6zerocsumrx)
VXLAN.UDP6ZeroChecksumRx,          config_parse_bool,                    0,                             offsetof(VxLan, udp6zerocsumrx)
VXLAN.UDP6ZeroCheckSumTx,          config_parse_bool,                    0,                             offsetof(VxLan, udp6zerocsumtx)
VXLAN.UDP6ZeroChecksumTx,          config_parse_bool,                    0,                             offsetof(VxLan, udp6zerocsumtx)
VXLAN.RemoteChecksumTx,            config_parse_bool,                    0,                             offsetof(VxLan, remote_csum_tx)
VXLAN.RemoteChecksumRx,            config_parse_bool,                    0,                             offsetof(VxLan, remote_csum_rx)
VXLAN.FDBAgeingSec,                config_parse_sec,                     0,                             offsetof(VxLan, fdb_ageing)
VXLAN.GroupPolicyExtension,        config_parse_bool,                    0,                             offsetof(VxLan, group_policy)
VXLAN.MaximumFDBEntries,           config_parse_unsigned,                0,                             offsetof(VxLan, max_fdb)
VXLAN.PortRange,                   config_parse_port_range,              0,                             0
VXLAN.DestinationPort,             config_parse_ip_port,                 0,                             offsetof(VxLan, dest_port)
VXLAN.FlowLabel,                   config_parse_flow_label,              0,                             0
GENEVE.Id,                         config_parse_geneve_vni,              0,                             offsetof(Geneve, id)
GENEVE.Remote,                     config_parse_geneve_address,          0,                             offsetof(Geneve, remote)
GENEVE.TOS,                        config_parse_uint8,                   0,                             offsetof(Geneve, tos)
GENEVE.TTL,                        config_parse_uint8,                   0,                             offsetof(Geneve, ttl)
GENEVE.UDPChecksum,                config_parse_bool,                    0,                             offsetof(Geneve, udpcsum)
GENEVE.UDP6ZeroCheckSumRx,         config_parse_bool,                    0,                             offsetof(Geneve, udp6zerocsumrx)
GENEVE.UDP6ZeroCheckSumTx,         config_parse_bool,                    0,                             offsetof(Geneve, udp6zerocsumtx)
GENEVE.DestinationPort,            config_parse_ip_port,                 0,                             offsetof(Geneve, dest_port)
GENEVE.FlowLabel,                  config_parse_geneve_flow_label,       0,                             0
Tun.OneQueue,                      config_parse_bool,                    0,                             offsetof(TunTap, one_queue)
Tun.MultiQueue,                    config_parse_bool,                    0,                             offsetof(TunTap, multi_queue)
Tun.PacketInfo,                    config_parse_bool,                    0,                             offsetof(TunTap, packet_info)
Tun.User,                          config_parse_string,                  0,                             offsetof(TunTap, user_name)
Tun.Group,                         config_parse_string,                  0,                             offsetof(TunTap, group_name)
Tap.OneQueue,                      config_parse_bool,                    0,                             offsetof(TunTap, one_queue)
Tap.MultiQueue,                    config_parse_bool,                    0,                             offsetof(TunTap, multi_queue)
Tap.PacketInfo,                    config_parse_bool,                    0,                             offsetof(TunTap, packet_info)
Tap.VNetHeader,                    config_parse_bool,                    0,                             offsetof(TunTap, vnet_hdr)
Tap.User,                          config_parse_string,                  0,                             offsetof(TunTap, user_name)
Tap.Group,                         config_parse_string,                  0,                             offsetof(TunTap, group_name)
Bond.Mode,                         config_parse_bond_mode,               0,                             offsetof(Bond, mode)
Bond.TransmitHashPolicy,           config_parse_bond_xmit_hash_policy,   0,                             offsetof(Bond, xmit_hash_policy)
Bond.LACPTransmitRate,             config_parse_bond_lacp_rate,          0,                             offsetof(Bond, lacp_rate)
Bond.AdSelect,                     config_parse_bond_ad_select,          0,                             offsetof(Bond, ad_select)
Bond.FailOverMACPolicy,            config_parse_bond_fail_over_mac,      0,                             offsetof(Bond, fail_over_mac)
Bond.ARPIPTargets,                 config_parse_arp_ip_target_address,   0,                             0
Bond.ARPValidate,                  config_parse_bond_arp_validate,       0,                             offsetof(Bond, arp_validate)
Bond.ARPAllTargets,                config_parse_bond_arp_all_targets,    0,                             offsetof(Bond, arp_all_targets)
Bond.PrimaryReselectPolicy,        config_parse_bond_primary_reselect,   0,                             offsetof(Bond, primary_reselect)
Bond.ResendIGMP,                   config_parse_unsigned,                0,                             offsetof(Bond, resend_igmp)
Bond.PacketsPerSlave,              config_parse_unsigned,                0,                             offsetof(Bond, packets_per_slave)
Bond.GratuitousARP,                config_parse_unsigned,                0,                             offsetof(Bond, num_grat_arp)
Bond.AllSlavesActive,              config_parse_unsigned,                0,                             offsetof(Bond, all_slaves_active)
Bond.MinLinks,                     config_parse_unsigned,                0,                             offsetof(Bond, min_links)
Bond.MIIMonitorSec,                config_parse_sec,                     0,                             offsetof(Bond, miimon)
Bond.UpDelaySec,                   config_parse_sec,                     0,                             offsetof(Bond, updelay)
Bond.DownDelaySec,                 config_parse_sec,                     0,                             offsetof(Bond, downdelay)
Bond.ARPIntervalSec,               config_parse_sec,                     0,                             offsetof(Bond, arp_interval)
Bond.LearnPacketIntervalSec,       config_parse_sec,                     0,                             offsetof(Bond, lp_interval)
Bridge.HelloTimeSec,               config_parse_sec,                     0,                             offsetof(Bridge, hello_time)
Bridge.MaxAgeSec,                  config_parse_sec,                     0,                             offsetof(Bridge, max_age)
Bridge.AgeingTimeSec,              config_parse_sec,                     0,                             offsetof(Bridge, ageing_time)
Bridge.ForwardDelaySec,            config_parse_sec,                     0,                             offsetof(Bridge, forward_delay)
Bridge.Priority,                   config_parse_uint16,                  0,                             offsetof(Bridge, priority)
Bridge.GroupForwardMask,           config_parse_uint16,                  0,                             offsetof(Bridge, group_fwd_mask)
Bridge.DefaultPVID,                config_parse_default_port_vlanid,     0,                             offsetof(Bridge, default_pvid)
Bridge.MulticastQuerier,           config_parse_tristate,                0,                             offsetof(Bridge, mcast_querier)
Bridge.MulticastSnooping,          config_parse_tristate,                0,                             offsetof(Bridge, mcast_snooping)
Bridge.VLANFiltering,              config_parse_tristate,                0,                             offsetof(Bridge, vlan_filtering)
Bridge.STP,                        config_parse_tristate,                0,                             offsetof(Bridge, stp)
VRF.TableId,                       config_parse_uint32,                  0,                             offsetof(Vrf, table) /* deprecated */
VRF.Table,                         config_parse_route_table,             0,                             offsetof(Vrf, table)
WireGuard.FwMark,                  config_parse_unsigned,                0,                             offsetof(Wireguard, fwmark)
WireGuard.ListenPort,              config_parse_wireguard_listen_port,   0,                             offsetof(Wireguard, port)
WireGuard.PrivateKey,              config_parse_wireguard_private_key,   0,                             0
WireGuardPeer.AllowedIPs,          config_parse_wireguard_allowed_ips,   0,                             0
WireGuardPeer.Endpoint,            config_parse_wireguard_endpoint,      0,                             0
WireGuardPeer.PublicKey,           config_parse_wireguard_public_key,    0,                             0
WireGuardPeer.PresharedKey,        config_parse_wireguard_preshared_key, 0,                             0
WireGuardPeer.PersistentKeepalive, config_parse_wireguard_keepalive,     0,                             0
