diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-02-04 13:45:29 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-02-04 13:45:39 +0100 |
commit | 18de0969c5763ce119692b59f8622c379e79c6cc (patch) | |
tree | d1f05e8c456b5ddb04c19af7541d8cec8bf59b2a | |
parent | Fix generator name in hibernate-resume-generator's drop-in (diff) | |
download | systemd-18de0969c5763ce119692b59f8622c379e79c6cc.tar.xz systemd-18de0969c5763ce119692b59f8622c379e79c6cc.zip |
network: split TrafficControlQueueingDiscipline section into small pieces
Closes #14763.
-rw-r--r-- | man/systemd.network.xml | 160 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 585 | ||||
-rw-r--r-- | src/network/networkd-network.c | 8 | ||||
-rw-r--r-- | src/network/tc/codel.c | 14 | ||||
-rw-r--r-- | src/network/tc/codel.h | 6 | ||||
-rw-r--r-- | src/network/tc/fq-codel.c | 48 | ||||
-rw-r--r-- | src/network/tc/fq-codel.h | 14 | ||||
-rw-r--r-- | src/network/tc/fq.c | 22 | ||||
-rw-r--r-- | src/network/tc/fq.h | 10 | ||||
-rw-r--r-- | src/network/tc/netem.c | 28 | ||||
-rw-r--r-- | src/network/tc/netem.h | 6 | ||||
-rw-r--r-- | src/network/tc/qdisc.c | 5 | ||||
-rw-r--r-- | src/network/tc/qdisc.h | 2 | ||||
-rw-r--r-- | src/network/tc/sfq.c | 2 | ||||
-rw-r--r-- | src/network/tc/sfq.h | 2 | ||||
-rw-r--r-- | src/network/tc/tbf.c | 48 | ||||
-rw-r--r-- | src/network/tc/tbf.h | 4 | ||||
-rw-r--r-- | test/fuzz/fuzz-network-parser/directives.network | 77 | ||||
-rw-r--r-- | test/test-network/conf/25-qdisc-fq-codel.network | 32 | ||||
-rw-r--r-- | test/test-network/conf/25-qdisc-netem-and-fqcodel.network | 28 | ||||
-rw-r--r-- | test/test-network/conf/25-qdisc-tbf-and-sfq.network | 16 |
21 files changed, 616 insertions, 501 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 1492f2032a..e3bd1bbda2 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2263,10 +2263,11 @@ </refsect1> <refsect1> - <title>[TrafficControlQueueingDiscipline] Section Options</title> - <para>The <literal>[TrafficControlQueueingDiscipline]</literal> section manages the Traffic control. It can be used - to configure the kernel packet scheduler and simulate packet delay and loss for UDP or TCP applications, - or limit the bandwidth usage of a particular service to simulate internet connections.</para> + <title>[NetworkEmulator] Section Options</title> + <para>The <literal>[NetworkEmulator]</literal> section manages the queueing discipline (qdisc) of + the network emulator. It can be used to configure the kernel packet scheduler and simulate packet + delay and loss for UDP or TCP applications, or limit the bandwidth usage of a particular service to + simulate internet connections.</para> <variablelist class='network-directives'> <varlistentry> @@ -2278,7 +2279,7 @@ </varlistentry> <varlistentry> - <term><varname>NetworkEmulatorDelaySec=</varname></term> + <term><varname>DelaySec=</varname></term> <listitem> <para>Specifies the fixed amount of delay to be added to all packets going out of the interface. Defaults to unset.</para> @@ -2286,7 +2287,7 @@ </varlistentry> <varlistentry> - <term><varname>NetworkEmulatorDelayJitterSec=</varname></term> + <term><varname>DelayJitterSec=</varname></term> <listitem> <para>Specifies the chosen delay to be added to the packets outgoing to the network interface. Defaults to unset.</para> @@ -2294,7 +2295,7 @@ </varlistentry> <varlistentry> - <term><varname>NetworkEmulatorPacketLimit=</varname></term> + <term><varname>PacketLimit=</varname></term> <listitem> <para>Specifies the maximum number of packets the qdisc may hold queued at a time. An unsigned integer ranges 0 to 4294967294. Defaults to 1000.</para> @@ -2302,7 +2303,7 @@ </varlistentry> <varlistentry> - <term><varname>NetworkEmulatorLossRate=</varname></term> + <term><varname>LossRate=</varname></term> <listitem> <para>Specifies an independent loss probability to be added to the packets outgoing from the network interface. Takes a percentage value, suffixed with "%". Defaults to unset.</para> @@ -2310,15 +2311,31 @@ </varlistentry> <varlistentry> - <term><varname>NetworkEmulatorDuplicateRate=</varname></term> + <term><varname>DuplicateRate=</varname></term> <listitem> <para>Specifies that the chosen percent of packets is duplicated before queuing them. Takes a percentage value, suffixed with "%". Defaults to unset.</para> </listitem> </varlistentry> + </variablelist> + </refsect1> + <refsect1> + <title>[TokenBufferFilter] Section Options</title> + <para>The <literal>[TokenBufferFilter]</literal> section manages the queueing discipline (qdisc) of + token buffer filter (tbf).</para> + + <variablelist class='network-directives'> <varlistentry> - <term><varname>TokenBufferFilterLatencySec=</varname></term> + <term><varname>Parent=</varname></term> + <listitem> + <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, + <literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>LatencySec=</varname></term> <listitem> <para>Specifies the latency parameter, which specifies the maximum amount of time a packet can sit in the Token Buffer Filter (TBF). Defaults to unset.</para> @@ -2326,7 +2343,7 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterLimitSize=</varname></term> + <term><varname>LimitSize=</varname></term> <listitem> <para>Takes the number of bytes that can be queued waiting for tokens to become available. When the size is suffixed with K, M, or G, it is parsed as Kilobytes, Megabytes, or Gigabytes, @@ -2335,7 +2352,7 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterBurst=</varname></term> + <term><varname>Burst=</varname></term> <listitem> <para>Specifies the size of the bucket. This is the maximum amount of bytes that tokens can be available for instantaneous transfer. When the size is suffixed with K, M, or G, it is @@ -2345,7 +2362,7 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterRate=</varname></term> + <term><varname>Rate=</varname></term> <listitem> <para>Specifies the device specific bandwidth. When suffixed with K, M, or G, the specified bandwidth is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of 1000. @@ -2354,7 +2371,7 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterMPUBytes=</varname></term> + <term><varname>MPUBytes=</varname></term> <listitem> <para>The Minimum Packet Unit (MPU) determines the minimal token usage (specified in bytes) for a packet. When suffixed with K, M, or G, the specified size is parsed as Kilobytes, @@ -2363,7 +2380,7 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterPeakRate=</varname></term> + <term><varname>PeakRate=</varname></term> <listitem> <para>Takes the maximum depletion rate of the bucket. When suffixed with K, M, or G, the specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of @@ -2372,23 +2389,55 @@ </varlistentry> <varlistentry> - <term><varname>TokenBufferFilterMTUBytes=</varname></term> + <term><varname>MTUBytes=</varname></term> <listitem> <para>Specifies the size of the peakrate bucket. When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000. Defaults to unset.</para> </listitem> </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>[StochasticFairnessQueueing] Section Options</title> + <para>The <literal>[StochasticFairnessQueueing]</literal> section manages the queueing discipline + (qdisc) of stochastic fairness queueing (sfq).</para> + + <variablelist class='network-directives'> + <varlistentry> + <term><varname>Parent=</varname></term> + <listitem> + <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, + <literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para> + </listitem> + </varlistentry> <varlistentry> - <term><varname>StochasticFairnessQueueingPerturbPeriodSec=</varname></term> + <term><varname>PerturbPeriodSec=</varname></term> <listitem> <para>Specifies the interval in seconds for queue algorithm perturbation. Defaults to unset.</para> </listitem> </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>[ControlledDelay] Section Options</title> + <para>The <literal>[ControlledDelay]</literal> section manages the queueing discipline (qdisc) of + controlled delay (CoDel).</para> + <variablelist class='network-directives'> <varlistentry> - <term><varname>ControlledDelayPacketLimit=</varname></term> + <term><varname>Parent=</varname></term> + <listitem> + <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, + <literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>PacketLimit=</varname></term> <listitem> <para>Specifies the hard lmit on the queue size in number of packets. When this limit is reached, incoming packets are dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para> @@ -2396,7 +2445,7 @@ </varlistentry> <varlistentry> - <term><varname>ControlledDelayTargetSec=</varname></term> + <term><varname>TargetSec=</varname></term> <listitem> <para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay. Defaults to unset and kernel's default is used.</para> @@ -2404,7 +2453,7 @@ </varlistentry> <varlistentry> - <term><varname>ControlledDelayIntervalSec=</varname></term> + <term><varname>IntervalSec=</varname></term> <listitem> <para>Takes a timespan. This is used to ensure that the measured minimum delay does not become too stale. Defaults to unset and kernel's default is used.</para> @@ -2412,7 +2461,7 @@ </varlistentry> <varlistentry> - <term><varname>ControlledDelayECN=</varname></term> + <term><varname>ECN=</varname></term> <listitem> <para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to unset and kernel's default is used.</para> @@ -2420,15 +2469,31 @@ </varlistentry> <varlistentry> - <term><varname>ControlledDelayCEThresholdSec=</varname></term> + <term><varname>CEThresholdSec=</varname></term> <listitem> <para>Takes a timespan. This sets a threshold above which all packets are marked with ECN Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para> </listitem> </varlistentry> + </variablelist> + </refsect1> + <refsect1> + <title>[FairQueueingControlledDelay] Section Options</title> + <para>The <literal>[FairQueueingControlledDelay]</literal> section manages the queueing discipline + (qdisc) of fair queuing controlled delay (FQ-CoDel).</para> + + <variablelist class='network-directives'> <varlistentry> - <term><varname>FairQueuingControlledDelayPacketLimit=</varname></term> + <term><varname>Parent=</varname></term> + <listitem> + <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, + <literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><varname>PacketLimit=</varname></term> <listitem> <para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are dropped. Defaults to unset and kernel's default is used.</para> @@ -2436,7 +2501,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayMemoryLimit=</varname></term> + <term><varname>MemoryLimit=</varname></term> <listitem> <para>Specifies the limit on the total number of bytes that can be queued in this FQ-CoDel instance. When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes, @@ -2445,7 +2510,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayFlows=</varname></term> + <term><varname>Flows=</varname></term> <listitem> <para>Specifies the number of flows into which the incoming packets are classified. Defaults to unset and kernel's default is used.</para> @@ -2453,7 +2518,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayTargetSec=</varname></term> + <term><varname>TargetSec=</varname></term> <listitem> <para>Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay. Defaults to unset and kernel's default is used.</para> @@ -2461,7 +2526,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayIntervalSec=</varname></term> + <term><varname>IntervalSec=</varname></term> <listitem> <para>Takes a timespan. This is used to ensure that the measured minimum delay does not become too stale. Defaults to unset and kernel's default is used.</para> @@ -2469,7 +2534,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayQuantum=</varname></term> + <term><varname>Quantum=</varname></term> <listitem> <para>Specifies the number of bytes used as 'deficit' in the fair queuing algorithmtimespan. When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes, @@ -2478,7 +2543,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayECN=</varname></term> + <term><varname>ECN=</varname></term> <listitem> <para>Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to unset and kernel's default is used.</para> @@ -2486,15 +2551,31 @@ </varlistentry> <varlistentry> - <term><varname>FairQueuingControlledDelayCEThresholdSec=</varname></term> + <term><varname>CEThresholdSec=</varname></term> <listitem> <para>Takes a timespan. This sets a threshold above which all packets are marked with ECN Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para> </listitem> </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>[FairQueueTrafficPolicing] Section Options</title> + <para>The <literal>[FairQueueTrafficPolicing]</literal> section manages the queueing discipline + (qdisc) of fair queue traffic policing (FQ).</para> + + <variablelist class='network-directives'> + <varlistentry> + <term><varname>Parent=</varname></term> + <listitem> + <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, + <literal>clsact</literal> or <literal>ingress</literal>. Defaults to <literal>root</literal>.</para> + </listitem> + </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingPacketLimit=</varname></term> + <term><varname>PacketLimit=</varname></term> <listitem> <para>Specifies the hard limit on the real queue size. When this limit is reached, incoming packets are dropped. Defaults to unset and kernel's default is used.</para> @@ -2502,7 +2583,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingFlowLimit=</varname></term> + <term><varname>FlowLimit=</varname></term> <listitem> <para>Specifies the hard limit on the maximum number of packets queued per flow. Defaults to unset and kernel's default is used.</para> @@ -2510,7 +2591,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingQuantum=</varname></term> + <term><varname>Quantum=</varname></term> <listitem> <para>Specifies the credit per dequeue RR round, i.e. the amount of bytes a flow is allowed to dequeue at once. When suffixed with K, M, or G, the specified size is parsed as Kilobytes, @@ -2520,7 +2601,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingInitialQuantum=</varname></term> + <term><varname>InitialQuantum=</varname></term> <listitem> <para>Specifies the initial sending rate credit, i.e. the amount of bytes a new flow is allowed to dequeue initially. When suffixed with K, M, or G, the specified size is parsed as @@ -2530,7 +2611,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingMaximumRate=</varname></term> + <term><varname>MaximumRate=</varname></term> <listitem> <para>Specifies the maximum sending rate of a flow. When suffixed with K, M, or G, the specified size is parsed as Kilobits, Megabits, or Gigabits, respectively, to the base of @@ -2539,7 +2620,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingBuckets=</varname></term> + <term><varname>Buckets=</varname></term> <listitem> <para>Specifies the size of the hash table used for flow lookups. Defaults to unset and kernel's default is used.</para> @@ -2547,7 +2628,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingOrphanMask=</varname></term> + <term><varname>OrphanMask=</varname></term> <listitem> <para>Takes an unsigned integer. For packets not owned by a socket, fq is able to mask a part of hash and reduce number of buckets associated with the traffic. Defaults to unset and @@ -2556,7 +2637,7 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingPacing=</varname></term> + <term><varname>Pacing=</varname></term> <listitem> <para>Takes a boolean, and enables or disables flow pacing. Defaults to unset and kernel's default is used.</para> @@ -2564,13 +2645,12 @@ </varlistentry> <varlistentry> - <term><varname>FairQueueTrafficPolicingCEThresholdSec=</varname></term> + <term><varname>CEThresholdSec=</varname></term> <listitem> <para>Takes a timespan. This sets a threshold above which all packets are marked with ECN Congestion Experienced (CE). Defaults to unset and kernel's default is used.</para> </listitem> </varlistentry> - </variablelist> </refsect1> diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 00a8914f8f..490e1b12ed 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -27,291 +27,302 @@ struct ConfigPerfItem; %struct-type %includes %% -Match.MACAddress, config_parse_hwaddrs, 0, offsetof(Network, match_mac) -Match.PermanentMACAddress, config_parse_hwaddrs, 0, offsetof(Network, match_permanent_mac) -Match.Path, config_parse_match_strv, 0, offsetof(Network, match_path) -Match.Driver, config_parse_match_strv, 0, offsetof(Network, match_driver) -Match.Type, config_parse_match_strv, 0, offsetof(Network, match_type) -Match.WLANInterfaceType, config_parse_match_strv, 0, offsetof(Network, match_wlan_iftype) -Match.SSID, config_parse_match_strv, 0, offsetof(Network, match_ssid) -Match.BSSID, config_parse_hwaddrs, 0, offsetof(Network, match_bssid) -Match.Name, config_parse_match_ifnames, 1, offsetof(Network, match_name) -Match.Property, config_parse_match_property, 0, offsetof(Network, match_property) -Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(Network, conditions) -Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, conditions) -Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, conditions) -Match.KernelVersion, config_parse_net_condition, CONDITION_KERNEL_VERSION, offsetof(Network, conditions) -Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(Network, conditions) -Link.MACAddress, config_parse_hwaddr, 0, offsetof(Network, mac) -Link.MTUBytes, config_parse_mtu, AF_UNSPEC, offsetof(Network, mtu) -Link.ARP, config_parse_tristate, 0, offsetof(Network, arp) -Link.Multicast, config_parse_tristate, 0, offsetof(Network, multicast) -Link.AllMulticast, config_parse_tristate, 0, offsetof(Network, allmulticast) -Link.Unmanaged, config_parse_bool, 0, offsetof(Network, unmanaged) -Link.RequiredForOnline, config_parse_required_for_online, 0, 0 -Network.Description, config_parse_string, 0, offsetof(Network, description) -Network.Bridge, config_parse_ifname, 0, offsetof(Network, bridge_name) -Network.Bond, config_parse_ifname, 0, offsetof(Network, bond_name) -Network.VLAN, config_parse_stacked_netdev, NETDEV_KIND_VLAN, offsetof(Network, stacked_netdev_names) -Network.MACVLAN, config_parse_stacked_netdev, NETDEV_KIND_MACVLAN, offsetof(Network, stacked_netdev_names) -Network.MACVTAP, config_parse_stacked_netdev, NETDEV_KIND_MACVTAP, offsetof(Network, stacked_netdev_names) -Network.IPVLAN, config_parse_stacked_netdev, NETDEV_KIND_IPVLAN, offsetof(Network, stacked_netdev_names) -Network.IPVTAP, config_parse_stacked_netdev, NETDEV_KIND_IPVTAP, offsetof(Network, stacked_netdev_names) -Network.VXLAN, config_parse_stacked_netdev, NETDEV_KIND_VXLAN, offsetof(Network, stacked_netdev_names) -Network.L2TP, config_parse_stacked_netdev, NETDEV_KIND_L2TP, offsetof(Network, stacked_netdev_names) -Network.MACsec, config_parse_stacked_netdev, NETDEV_KIND_MACSEC, offsetof(Network, stacked_netdev_names) -Network.Tunnel, config_parse_stacked_netdev, _NETDEV_KIND_TUNNEL, offsetof(Network, stacked_netdev_names) -Network.Xfrm, config_parse_stacked_netdev, NETDEV_KIND_XFRM, offsetof(Network, stacked_netdev_names) -Network.VRF, config_parse_ifname, 0, offsetof(Network, vrf_name) -Network.DHCP, config_parse_dhcp, 0, offsetof(Network, dhcp) -Network.DHCPServer, config_parse_bool, 0, offsetof(Network, dhcp_server) -Network.LinkLocalAddressing, config_parse_link_local_address_family, 0, offsetof(Network, link_local) -Network.IPv4LLRoute, config_parse_bool, 0, offsetof(Network, ipv4ll_route) -Network.DefaultRouteOnDevice, config_parse_bool, 0, offsetof(Network, default_route_on_device) -Network.IPv6Token, config_parse_ipv6token, 0, offsetof(Network, ipv6_token) -Network.LLDP, config_parse_lldp_mode, 0, offsetof(Network, lldp_mode) -Network.EmitLLDP, config_parse_lldp_emit, 0, offsetof(Network, lldp_emit) -Network.Address, config_parse_address, 0, 0 -Network.Gateway, config_parse_gateway, 0, 0 -Network.Domains, config_parse_domains, 0, 0 -Network.DNS, config_parse_dns, 0, 0 -Network.DNSDefaultRoute, config_parse_tristate, 0, offsetof(Network, dns_default_route) -Network.LLMNR, config_parse_resolve_support, 0, offsetof(Network, llmnr) -Network.MulticastDNS, config_parse_resolve_support, 0, offsetof(Network, mdns) -Network.DNSOverTLS, config_parse_dns_over_tls_mode, 0, offsetof(Network, dns_over_tls_mode) -Network.DNSSEC, config_parse_dnssec_mode, 0, offsetof(Network, dnssec_mode) -Network.DNSSECNegativeTrustAnchors, config_parse_dnssec_negative_trust_anchors, 0, 0 -Network.NTP, config_parse_ntp, 0, offsetof(Network, ntp) -Network.IPForward, config_parse_address_family_with_kernel, 0, offsetof(Network, ip_forward) -Network.IPMasquerade, config_parse_bool, 0, offsetof(Network, ip_masquerade) -Network.IPv6PrivacyExtensions, config_parse_ipv6_privacy_extensions, 0, offsetof(Network, ipv6_privacy_extensions) -Network.IPv6AcceptRA, config_parse_tristate, 0, offsetof(Network, ipv6_accept_ra) -Network.IPv6AcceptRouterAdvertisements, config_parse_tristate, 0, offsetof(Network, ipv6_accept_ra) -Network.IPv6DuplicateAddressDetection, config_parse_int, 0, offsetof(Network, ipv6_dad_transmits) -Network.IPv6HopLimit, config_parse_int, 0, offsetof(Network, ipv6_hop_limit) -Network.IPv6ProxyNDP, config_parse_tristate, 0, offsetof(Network, ipv6_proxy_ndp) -Network.IPv6MTUBytes, config_parse_mtu, AF_INET6, offsetof(Network, ipv6_mtu) -Network.ActiveSlave, config_parse_bool, 0, offsetof(Network, active_slave) -Network.PrimarySlave, config_parse_bool, 0, offsetof(Network, primary_slave) -Network.IPv4ProxyARP, config_parse_tristate, 0, offsetof(Network, proxy_arp) -Network.ProxyARP, config_parse_tristate, 0, offsetof(Network, proxy_arp) -Network.IPv6ProxyNDPAddress, config_parse_ipv6_proxy_ndp_address, 0, 0 -Network.BindCarrier, config_parse_strv, 0, offsetof(Network, bind_carrier) -Network.ConfigureWithoutCarrier, config_parse_bool, 0, offsetof(Network, configure_without_carrier) -Network.IgnoreCarrierLoss, config_parse_bool, 0, offsetof(Network, ignore_carrier_loss) -Network.KeepConfiguration, config_parse_keep_configuration, 0, offsetof(Network, keep_configuration) -Address.Address, config_parse_address, 0, 0 -Address.Peer, config_parse_address, 0, 0 -Address.Broadcast, config_parse_broadcast, 0, 0 -Address.Label, config_parse_label, 0, 0 -Address.PreferredLifetime, config_parse_lifetime, 0, 0 -Address.HomeAddress, config_parse_address_flags, 0, 0 -Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0 -Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */ -Address.AddPrefixRoute, config_parse_address_flags, 0, 0 -Address.AutoJoin, config_parse_address_flags, 0, 0 -Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0 -Address.Scope, config_parse_address_scope, 0, 0 -IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0 -IPv6AddressLabel.Label, config_parse_address_label, 0, 0 -Neighbor.Address, config_parse_neighbor_address, 0, 0 -Neighbor.LinkLayerAddress, config_parse_neighbor_lladdr, 0, 0 -Neighbor.MACAddress, config_parse_neighbor_hwaddr, 0, 0 /* deprecated */ -RoutingPolicyRule.TypeOfService, config_parse_routing_policy_rule_tos, 0, 0 -RoutingPolicyRule.Priority, config_parse_routing_policy_rule_priority, 0, 0 -RoutingPolicyRule.Table, config_parse_routing_policy_rule_table, 0, 0 -RoutingPolicyRule.FirewallMark, config_parse_routing_policy_rule_fwmark_mask, 0, 0 -RoutingPolicyRule.From, config_parse_routing_policy_rule_prefix, 0, 0 -RoutingPolicyRule.To, config_parse_routing_policy_rule_prefix, 0, 0 -RoutingPolicyRule.IncomingInterface, config_parse_routing_policy_rule_device, 0, 0 -RoutingPolicyRule.OutgoingInterface, config_parse_routing_policy_rule_device, 0, 0 -RoutingPolicyRule.IPProtocol, config_parse_routing_policy_rule_ip_protocol, 0, 0 -RoutingPolicyRule.SourcePort, config_parse_routing_policy_rule_port_range, 0, 0 -RoutingPolicyRule.DestinationPort, config_parse_routing_policy_rule_port_range, 0, 0 -RoutingPolicyRule.InvertRule, config_parse_routing_policy_rule_invert, 0, 0 -RoutingPolicyRule.Family, config_parse_routing_policy_rule_family, 0, 0 -RoutingPolicyRule.User, config_parse_routing_policy_rule_uid_range, 0, 0 -RoutingPolicyRule.SuppressPrefixLength, config_parse_routing_policy_rule_suppress_prefixlen, 0, 0 -Route.Gateway, config_parse_gateway, 0, 0 -Route.Destination, config_parse_destination, 0, 0 -Route.Source, config_parse_destination, 0, 0 -Route.Metric, config_parse_route_priority, 0, 0 -Route.Scope, config_parse_route_scope, 0, 0 -Route.PreferredSource, config_parse_preferred_src, 0, 0 -Route.Table, config_parse_route_table, 0, 0 -Route.MTUBytes, config_parse_route_mtu, AF_UNSPEC, 0 -Route.GatewayOnLink, config_parse_gateway_onlink, 0, 0 -Route.GatewayOnlink, config_parse_gateway_onlink, 0, 0 -Route.IPv6Preference, config_parse_ipv6_route_preference, 0, 0 -Route.Protocol, config_parse_route_protocol, 0, 0 -Route.Type, config_parse_route_type, 0, 0 -Route.InitialCongestionWindow, config_parse_tcp_window, 0, 0 -Route.InitialAdvertisedReceiveWindow, config_parse_tcp_window, 0, 0 -Route.QuickAck, config_parse_quickack, 0, 0 -Route.FastOpenNoCookie, config_parse_fast_open_no_cookie, 0, 0 -Route.TTLPropagate, config_parse_route_ttl_propagate, 0, 0 -Route.MultiPathRoute, config_parse_multipath_route, 0, 0 -NextHop.Id, config_parse_nexthop_id, 0, 0 -NextHop.Gateway, config_parse_nexthop_gateway, 0, 0 -DHCPv4.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) -DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_use_dns) -DHCPv4.RoutesToDNS, config_parse_bool, 0, offsetof(Network, dhcp_routes_to_dns) -DHCPv4.UseNTP, config_parse_bool, 0, offsetof(Network, dhcp_use_ntp) -DHCPv4.UseSIP, config_parse_bool, 0, offsetof(Network, dhcp_use_sip) -DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) -DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) -DHCPv4.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) -DHCPv4.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) -DHCPv4.RequestOptions, config_parse_dhcp_request_options, 0, 0 -DHCPv4.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) -DHCPv4.SendHostname, config_parse_bool, 0, offsetof(Network, dhcp_send_hostname) -DHCPv4.Hostname, config_parse_hostname, 0, offsetof(Network, dhcp_hostname) -DHCPv4.RequestBroadcast, config_parse_bool, 0, offsetof(Network, dhcp_broadcast) -DHCPv4.VendorClassIdentifier, config_parse_string, 0, offsetof(Network, dhcp_vendor_class_identifier) -DHCPv4.MaxAttempts, config_parse_dhcp_max_attempts, 0, 0 -DHCPv4.UserClass, config_parse_dhcp_user_class, 0, offsetof(Network, dhcp_user_class) -DHCPv4.DUIDType, config_parse_duid_type, 0, offsetof(Network, duid) -DHCPv4.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Network, duid) -DHCPv4.RouteMetric, config_parse_unsigned, 0, offsetof(Network, dhcp_route_metric) -DHCPv4.RouteTable, config_parse_section_route_table, 0, 0 -DHCPv4.UseTimezone, config_parse_bool, 0, offsetof(Network, dhcp_use_timezone) -DHCPv4.IAID, config_parse_iaid, 0, 0 -DHCPv4.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port) -DHCPv4.SendRelease, config_parse_bool, 0, offsetof(Network, dhcp_send_release) -DHCPv4.SendDecline, config_parse_bool, 0, offsetof(Network, dhcp_send_decline) -DHCPv4.BlackList, config_parse_dhcp_black_listed_ip_address, 0, 0 -DHCPv4.IPServiceType, config_parse_ip_service_type, 0, offsetof(Network, ip_service_type) -DHCPv4.SendOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_client_send_options) -DHCPv4.RouteMTUBytes, config_parse_mtu, AF_INET, offsetof(Network, dhcp_route_mtu) -DHCPv6.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp6_use_dns) -DHCPv6.UseNTP, config_parse_bool, 0, offsetof(Network, dhcp6_use_ntp) -DHCPv6.RapidCommit, config_parse_bool, 0, offsetof(Network, rapid_commit) -DHCPv6.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information) -DHCPv6.PrefixDelegationHint, config_parse_dhcp6_pd_hint, 0, 0 -IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_autonomous_prefix) -IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_onlink_prefix) -IPv6AcceptRA.UseDNS, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_dns) -IPv6AcceptRA.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, ipv6_accept_ra_use_domains) -IPv6AcceptRA.RouteTable, config_parse_section_route_table, 0, 0 -IPv6AcceptRA.BlackList, config_parse_ndisc_black_listed_prefix, 0, 0 -DHCPServer.MaxLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_max_lease_time_usec) -DHCPServer.DefaultLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_default_lease_time_usec) -DHCPServer.EmitDNS, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_dns) -DHCPServer.DNS, config_parse_dhcp_server_dns, 0, 0 -DHCPServer.EmitNTP, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_ntp) -DHCPServer.NTP, config_parse_dhcp_server_ntp, 0, 0 -DHCPServer.EmitSIP, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_sip) -DHCPServer.SIP, config_parse_dhcp_server_sip, 0, 0 -DHCPServer.EmitRouter, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_router) -DHCPServer.EmitTimezone, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_timezone) -DHCPServer.Timezone, config_parse_timezone, 0, offsetof(Network, dhcp_server_timezone) -DHCPServer.PoolOffset, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_offset) -DHCPServer.PoolSize, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_size) -DHCPServer.SendOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_server_send_options) -Bridge.Cost, config_parse_uint32, 0, offsetof(Network, cost) -Bridge.UseBPDU, config_parse_tristate, 0, offsetof(Network, use_bpdu) -Bridge.HairPin, config_parse_tristate, 0, offsetof(Network, hairpin) -Bridge.FastLeave, config_parse_tristate, 0, offsetof(Network, fast_leave) -Bridge.AllowPortToBeRoot, config_parse_tristate, 0, offsetof(Network, allow_port_to_be_root) -Bridge.UnicastFlood, config_parse_tristate, 0, offsetof(Network, unicast_flood) -Bridge.MulticastFlood, config_parse_tristate, 0, offsetof(Network, multicast_flood) -Bridge.MulticastToUnicast, config_parse_tristate, 0, offsetof(Network, multicast_to_unicast) -Bridge.NeighborSuppression, config_parse_tristate, 0, offsetof(Network, neighbor_suppression) -Bridge.Learning, config_parse_tristate, 0, offsetof(Network, learning) -Bridge.ProxyARP, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp) -Bridge.ProxyARPWiFi, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp_wifi) -Bridge.Priority, config_parse_bridge_port_priority, 0, offsetof(Network, priority) -Bridge.MulticastRouter, config_parse_multicast_router, 0, offsetof(Network, multicast_router) -BridgeFDB.MACAddress, config_parse_fdb_hwaddr, 0, 0 -BridgeFDB.VLANId, config_parse_fdb_vlan_id, 0, 0 -BridgeFDB.Destination, config_parse_fdb_destination, 0, 0 -BridgeFDB.VNI, config_parse_fdb_vxlan_vni, 0, 0 -BridgeFDB.AssociatedWith, config_parse_fdb_ntf_flags, 0, 0 -BridgeVLAN.PVID, config_parse_brvlan_pvid, 0, 0 -BridgeVLAN.VLAN, config_parse_brvlan_vlan, 0, 0 -BridgeVLAN.EgressUntagged, config_parse_brvlan_untagged, 0, 0 -Network.IPv6PrefixDelegation, config_parse_router_prefix_delegation, 0, 0 -IPv6PrefixDelegation.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) -IPv6PrefixDelegation.Managed, config_parse_bool, 0, offsetof(Network, router_managed) -IPv6PrefixDelegation.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) -IPv6PrefixDelegation.RouterPreference, config_parse_router_preference, 0, 0 -IPv6PrefixDelegation.EmitDNS, config_parse_bool, 0, offsetof(Network, router_emit_dns) -IPv6PrefixDelegation.DNS, config_parse_radv_dns, 0, 0 -IPv6PrefixDelegation.EmitDomains, config_parse_bool, 0, offsetof(Network, router_emit_domains) -IPv6PrefixDelegation.Domains, config_parse_radv_search_domains, 0, 0 -IPv6PrefixDelegation.DNSLifetimeSec, config_parse_sec, 0, offsetof(Network, router_dns_lifetime_usec) -IPv6Prefix.Prefix, config_parse_prefix, 0, 0 -IPv6Prefix.OnLink, config_parse_prefix_flags, 0, 0 -IPv6Prefix.AddressAutoconfiguration, config_parse_prefix_flags, 0, 0 -IPv6Prefix.ValidLifetimeSec, config_parse_prefix_lifetime, 0, 0 -IPv6Prefix.PreferredLifetimeSec, config_parse_prefix_lifetime, 0, 0 -IPv6RoutePrefix.Route, config_parse_route_prefix, 0, 0 -IPv6RoutePrefix.LifetimeSec, config_parse_route_prefix_lifetime, 0, 0 -CAN.BitRate, config_parse_si_uint64, 0, offsetof(Network, can_bitrate) -CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point) -CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us) -CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling) -TrafficControlQueueingDiscipline.Parent, config_parse_tc_qdiscs_parent, 0, 0 -TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_tc_network_emulator_delay, 0, 0 -TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_tc_network_emulator_delay, 0, 0 -TrafficControlQueueingDiscipline.NetworkEmulatorLossRate, config_parse_tc_network_emulator_rate, 0, 0 -TrafficControlQueueingDiscipline.NetworkEmulatorDuplicateRate, config_parse_tc_network_emulator_rate, 0, 0 -TrafficControlQueueingDiscipline.NetworkEmulatorPacketLimit, config_parse_tc_network_emulator_packet_limit, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterRate, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterBurst, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterLimitSize, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterMTUBytes, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterMPUBytes, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterPeakRate, config_parse_tc_token_buffer_filter_size, 0, 0 -TrafficControlQueueingDiscipline.TokenBufferFilterLatencySec, config_parse_tc_token_buffer_filter_latency, 0, 0 -TrafficControlQueueingDiscipline.StochasticFairnessQueueingPerturbPeriodSec, config_parse_tc_stochastic_fairness_queueing_perturb_period, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayPacketLimit, config_parse_tc_fair_queuing_controlled_delay_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayMemoryLimit, config_parse_tc_fair_queuing_controlled_delay_size, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayFlows, config_parse_tc_fair_queuing_controlled_delay_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayQuantum, config_parse_tc_fair_queuing_controlled_delay_size, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayTargetSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayIntervalSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayCEThresholdSec, config_parse_tc_fair_queuing_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.FairQueuingControlledDelayECN, config_parse_tc_fair_queuing_controlled_delay_bool, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingPacketLimit, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingFlowLimit, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingQuantum, config_parse_tc_fair_queue_traffic_policing_size, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingInitialQuantum, config_parse_tc_fair_queue_traffic_policing_size, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingMaximumRate, config_parse_tc_fair_queue_traffic_policing_max_rate, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingBuckets, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingOrphanMask, config_parse_tc_fair_queue_traffic_policing_u32, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingPacing, config_parse_tc_fair_queue_traffic_policing_bool, 0, 0 -TrafficControlQueueingDiscipline.FairQueueTrafficPolicingCEThresholdSec, config_parse_tc_fair_queue_traffic_policing_usec, 0, 0 -TrafficControlQueueingDiscipline.ControlledDelayPacketLimit, config_parse_tc_controlled_delay_u32, 0, 0 -TrafficControlQueueingDiscipline.ControlledDelayTargetSec, config_parse_tc_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.ControlledDelayIntervalSec, config_parse_tc_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.ControlledDelayCEThresholdSec, config_parse_tc_controlled_delay_usec, 0, 0 -TrafficControlQueueingDiscipline.ControlledDelayECN, config_parse_tc_controlled_delay_bool, 0, 0 +Match.MACAddress, config_parse_hwaddrs, 0, offsetof(Network, match_mac) +Match.PermanentMACAddress, config_parse_hwaddrs, 0, offsetof(Network, match_permanent_mac) +Match.Path, config_parse_match_strv, 0, offsetof(Network, match_path) +Match.Driver, config_parse_match_strv, 0, offsetof(Network, match_driver) +Match.Type, config_parse_match_strv, 0, offsetof(Network, match_type) +Match.WLANInterfaceType, config_parse_match_strv, 0, offsetof(Network, match_wlan_iftype) +Match.SSID, config_parse_match_strv, 0, offsetof(Network, match_ssid) +Match.BSSID, config_parse_hwaddrs, 0, offsetof(Network, match_bssid) +Match.Name, config_parse_match_ifnames, 1, offsetof(Network, match_name) +Match.Property, config_parse_match_property, 0, offsetof(Network, match_property) +Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(Network, conditions) +Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(Network, conditions) +Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(Network, conditions) +Match.KernelVersion, config_parse_net_condition, CONDITION_KERNEL_VERSION, offsetof(Network, conditions) +Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(Network, conditions) +Link.MACAddress, config_parse_hwaddr, 0, offsetof(Network, mac) +Link.MTUBytes, config_parse_mtu, AF_UNSPEC, offsetof(Network, mtu) +Link.ARP, config_parse_tristate, 0, offsetof(Network, arp) +Link.Multicast, config_parse_tristate, 0, offsetof(Network, multicast) +Link.AllMulticast, config_parse_tristate, 0, offsetof(Network, allmulticast) +Link.Unmanaged, config_parse_bool, 0, offsetof(Network, unmanaged) +Link.RequiredForOnline, config_parse_required_for_online, 0, 0 +Network.Description, config_parse_string, 0, offsetof(Network, description) +Network.Bridge, config_parse_ifname, 0, offsetof(Network, bridge_name) +Network.Bond, config_parse_ifname, 0, offsetof(Network, bond_name) +Network.VLAN, config_parse_stacked_netdev, NETDEV_KIND_VLAN, offsetof(Network, stacked_netdev_names) +Network.MACVLAN, config_parse_stacked_netdev, NETDEV_KIND_MACVLAN, offsetof(Network, stacked_netdev_names) +Network.MACVTAP, config_parse_stacked_netdev, NETDEV_KIND_MACVTAP, offsetof(Network, stacked_netdev_names) +Network.IPVLAN, config_parse_stacked_netdev, NETDEV_KIND_IPVLAN, offsetof(Network, stacked_netdev_names) +Network.IPVTAP, config_parse_stacked_netdev, NETDEV_KIND_IPVTAP, offsetof(Network, stacked_netdev_names) +Network.VXLAN, config_parse_stacked_netdev, NETDEV_KIND_VXLAN, offsetof(Network, stacked_netdev_names) +Network.L2TP, config_parse_stacked_netdev, NETDEV_KIND_L2TP, offsetof(Network, stacked_netdev_names) +Network.MACsec, config_parse_stacked_netdev, NETDEV_KIND_MACSEC, offsetof(Network, stacked_netdev_names) +Network.Tunnel, config_parse_stacked_netdev, _NETDEV_KIND_TUNNEL, offsetof(Network, stacked_netdev_names) +Network.Xfrm, config_parse_stacked_netdev, NETDEV_KIND_XFRM, offsetof(Network, stacked_netdev_names) +Network.VRF, config_parse_ifname, 0, offsetof(Network, vrf_name) +Network.DHCP, config_parse_dhcp, 0, offsetof(Network, dhcp) +Network.DHCPServer, config_parse_bool, 0, offsetof(Network, dhcp_server) +Network.LinkLocalAddressing, config_parse_link_local_address_family, 0, offsetof(Network, link_local) +Network.IPv4LLRoute, config_parse_bool, 0, offsetof(Network, ipv4ll_route) +Network.DefaultRouteOnDevice, config_parse_bool, 0, offsetof(Network, default_route_on_device) +Network.IPv6Token, config_parse_ipv6token, 0, offsetof(Network, ipv6_token) +Network.LLDP, config_parse_lldp_mode, 0, offsetof(Network, lldp_mode) +Network.EmitLLDP, config_parse_lldp_emit, 0, offsetof(Network, lldp_emit) +Network.Address, config_parse_address, 0, 0 +Network.Gateway, config_parse_gateway, 0, 0 +Network.Domains, config_parse_domains, 0, 0 +Network.DNS, config_parse_dns, 0, 0 +Network.DNSDefaultRoute, config_parse_tristate, 0, offsetof(Network, dns_default_route) +Network.LLMNR, config_parse_resolve_support, 0, offsetof(Network, llmnr) +Network.MulticastDNS, config_parse_resolve_support, 0, offsetof(Network, mdns) +Network.DNSOverTLS, config_parse_dns_over_tls_mode, 0, offsetof(Network, dns_over_tls_mode) +Network.DNSSEC, config_parse_dnssec_mode, 0, offsetof(Network, dnssec_mode) +Network.DNSSECNegativeTrustAnchors, config_parse_dnssec_negative_trust_anchors, 0, 0 +Network.NTP, config_parse_ntp, 0, offsetof(Network, ntp) +Network.IPForward, config_parse_address_family_with_kernel, 0, offsetof(Network, ip_forward) +Network.IPMasquerade, config_parse_bool, 0, offsetof(Network, ip_masquerade) +Network.IPv6PrivacyExtensions, config_parse_ipv6_privacy_extensions, 0, offsetof(Network, ipv6_privacy_extensions) +Network.IPv6AcceptRA, config_parse_tristate, 0, offsetof(Network, ipv6_accept_ra) +Network.IPv6AcceptRouterAdvertisements, config_parse_tristate, 0, offsetof(Network, ipv6_accept_ra) +Network.IPv6DuplicateAddressDetection, config_parse_int, 0, offsetof(Network, ipv6_dad_transmits) +Network.IPv6HopLimit, config_parse_int, 0, offsetof(Network, ipv6_hop_limit) +Network.IPv6ProxyNDP, config_parse_tristate, 0, offsetof(Network, ipv6_proxy_ndp) +Network.IPv6MTUBytes, config_parse_mtu, AF_INET6, offsetof(Network, ipv6_mtu) +Network.ActiveSlave, config_parse_bool, 0, offsetof(Network, active_slave) +Network.PrimarySlave, config_parse_bool, 0, offsetof(Network, primary_slave) +Network.IPv4ProxyARP, config_parse_tristate, 0, offsetof(Network, proxy_arp) +Network.ProxyARP, config_parse_tristate, 0, offsetof(Network, proxy_arp) +Network.IPv6ProxyNDPAddress, config_parse_ipv6_proxy_ndp_address, 0, 0 +Network.BindCarrier, config_parse_strv, 0, offsetof(Network, bind_carrier) +Network.ConfigureWithoutCarrier, config_parse_bool, 0, offsetof(Network, configure_without_carrier) +Network.IgnoreCarrierLoss, config_parse_bool, 0, offsetof(Network, ignore_carrier_loss) +Network.KeepConfiguration, config_parse_keep_configuration, 0, offsetof(Network, keep_configuration) +Address.Address, config_parse_address, 0, 0 +Address.Peer, config_parse_address, 0, 0 +Address.Broadcast, config_parse_broadcast, 0, 0 +Address.Label, config_parse_label, 0, 0 +Address.PreferredLifetime, config_parse_lifetime, 0, 0 +Address.HomeAddress, config_parse_address_flags, 0, 0 +Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0 +Address.PrefixRoute, config_parse_address_flags, 0, 0 /* deprecated */ +Address.AddPrefixRoute, config_parse_address_flags, 0, 0 +Address.AutoJoin, config_parse_address_flags, 0, 0 +Address.DuplicateAddressDetection, config_parse_duplicate_address_detection, 0, 0 +Address.Scope, config_parse_address_scope, 0, 0 +IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0 +IPv6AddressLabel.Label, config_parse_address_label, 0, 0 +Neighbor.Address, config_parse_neighbor_address, 0, 0 +Neighbor.LinkLayerAddress, config_parse_neighbor_lladdr, 0, 0 +Neighbor.MACAddress, config_parse_neighbor_hwaddr, 0, 0 /* deprecated */ +RoutingPolicyRule.TypeOfService, config_parse_routing_policy_rule_tos, 0, 0 +RoutingPolicyRule.Priority, config_parse_routing_policy_rule_priority, 0, 0 +RoutingPolicyRule.Table, config_parse_routing_policy_rule_table, 0, 0 +RoutingPolicyRule.FirewallMark, config_parse_routing_policy_rule_fwmark_mask, 0, 0 +RoutingPolicyRule.From, config_parse_routing_policy_rule_prefix, 0, 0 +RoutingPolicyRule.To, config_parse_routing_policy_rule_prefix, 0, 0 +RoutingPolicyRule.IncomingInterface, config_parse_routing_policy_rule_device, 0, 0 +RoutingPolicyRule.OutgoingInterface, config_parse_routing_policy_rule_device, 0, 0 +RoutingPolicyRule.IPProtocol, config_parse_routing_policy_rule_ip_protocol, 0, 0 +RoutingPolicyRule.SourcePort, config_parse_routing_policy_rule_port_range, 0, 0 +RoutingPolicyRule.DestinationPort, config_parse_routing_policy_rule_port_range, 0, 0 +RoutingPolicyRule.InvertRule, config_parse_routing_policy_rule_invert, 0, 0 +RoutingPolicyRule.Family, config_parse_routing_policy_rule_family, 0, 0 +RoutingPolicyRule.User, config_parse_routing_policy_rule_uid_range, 0, 0 +RoutingPolicyRule.SuppressPrefixLength, config_parse_routing_policy_rule_suppress_prefixlen, 0, 0 +Route.Gateway, config_parse_gateway, 0, 0 +Route.Destination, config_parse_destination, 0, 0 +Route.Source, config_parse_destination, 0, 0 +Route.Metric, config_parse_route_priority, 0, 0 +Route.Scope, config_parse_route_scope, 0, 0 +Route.PreferredSource, config_parse_preferred_src, 0, 0 +Route.Table, config_parse_route_table, 0, 0 +Route.MTUBytes, config_parse_route_mtu, AF_UNSPEC, 0 +Route.GatewayOnLink, config_parse_gateway_onlink, 0, 0 +Route.GatewayOnlink, config_parse_gateway_onlink, 0, 0 +Route.IPv6Preference, config_parse_ipv6_route_preference, 0, 0 +Route.Protocol, config_parse_route_protocol, 0, 0 +Route.Type, config_parse_route_type, 0, 0 +Route.InitialCongestionWindow, config_parse_tcp_window, 0, 0 +Route.InitialAdvertisedReceiveWindow, config_parse_tcp_window, 0, 0 +Route.QuickAck, config_parse_quickack, 0, 0 +Route.FastOpenNoCookie, config_parse_fast_open_no_cookie, 0, 0 +Route.TTLPropagate, config_parse_route_ttl_propagate, 0, 0 +Route.MultiPathRoute, config_parse_multipath_route, 0, 0 +NextHop.Id, config_parse_nexthop_id, 0, 0 +NextHop.Gateway, config_parse_nexthop_gateway, 0, 0 +DHCPv4.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) +DHCPv4.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp_use_dns) +DHCPv4.RoutesToDNS, config_parse_bool, 0, offsetof(Network, dhcp_routes_to_dns) +DHCPv4.UseNTP, config_parse_bool, 0, offsetof(Network, dhcp_use_ntp) +DHCPv4.UseSIP, config_parse_bool, 0, offsetof(Network, dhcp_use_sip) +DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) +DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) +DHCPv4.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) +DHCPv4.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) +DHCPv4.RequestOptions, config_parse_dhcp_request_options, 0, 0 +DHCPv4.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) +DHCPv4.SendHostname, config_parse_bool, 0, offsetof(Network, dhcp_send_hostname) +DHCPv4.Hostname, config_parse_hostname, 0, offsetof(Network, dhcp_hostname) +DHCPv4.RequestBroadcast, config_parse_bool, 0, offsetof(Network, dhcp_broadcast) +DHCPv4.VendorClassIdentifier, config_parse_string, 0, offsetof(Network, dhcp_vendor_class_identifier) +DHCPv4.MaxAttempts, config_parse_dhcp_max_attempts, 0, 0 +DHCPv4.UserClass, config_parse_dhcp_user_class, 0, offsetof(Network, dhcp_user_class) +DHCPv4.DUIDType, config_parse_duid_type, 0, offsetof(Network, duid) +DHCPv4.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Network, duid) +DHCPv4.RouteMetric, config_parse_unsigned, 0, offsetof(Network, dhcp_route_metric) +DHCPv4.RouteTable, config_parse_section_route_table, 0, 0 +DHCPv4.UseTimezone, config_parse_bool, 0, offsetof(Network, dhcp_use_timezone) +DHCPv4.IAID, config_parse_iaid, 0, 0 +DHCPv4.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port) +DHCPv4.SendRelease, config_parse_bool, 0, offsetof(Network, dhcp_send_release) +DHCPv4.SendDecline, config_parse_bool, 0, offsetof(Network, dhcp_send_decline) +DHCPv4.BlackList, config_parse_dhcp_black_listed_ip_address, 0, 0 +DHCPv4.IPServiceType, config_parse_ip_service_type, 0, offsetof(Network, ip_service_type) +DHCPv4.SendOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_client_send_options) +DHCPv4.RouteMTUBytes, config_parse_mtu, AF_INET, offsetof(Network, dhcp_route_mtu) +DHCPv6.UseDNS, config_parse_bool, 0, offsetof(Network, dhcp6_use_dns) +DHCPv6.UseNTP, config_parse_bool, 0, offsetof(Network, dhcp6_use_ntp) +DHCPv6.RapidCommit, config_parse_bool, 0, offsetof(Network, rapid_commit) +DHCPv6.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information) +DHCPv6.PrefixDelegationHint, config_parse_dhcp6_pd_hint, 0, 0 +IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_autonomous_prefix) +IPv6AcceptRA.UseOnLinkPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_onlink_prefix) +IPv6AcceptRA.UseDNS, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_dns) +IPv6AcceptRA.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, ipv6_accept_ra_use_domains) +IPv6AcceptRA.RouteTable, config_parse_section_route_table, 0, 0 +IPv6AcceptRA.BlackList, config_parse_ndisc_black_listed_prefix, 0, 0 +DHCPServer.MaxLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_max_lease_time_usec) +DHCPServer.DefaultLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_default_lease_time_usec) +DHCPServer.EmitDNS, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_dns) +DHCPServer.DNS, config_parse_dhcp_server_dns, 0, 0 +DHCPServer.EmitNTP, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_ntp) +DHCPServer.NTP, config_parse_dhcp_server_ntp, 0, 0 +DHCPServer.EmitSIP, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_sip) +DHCPServer.SIP, config_parse_dhcp_server_sip, 0, 0 +DHCPServer.EmitRouter, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_router) +DHCPServer.EmitTimezone, config_parse_bool, 0, offsetof(Network, dhcp_server_emit_timezone) +DHCPServer.Timezone, config_parse_timezone, 0, offsetof(Network, dhcp_server_timezone) +DHCPServer.PoolOffset, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_offset) +DHCPServer.PoolSize, config_parse_uint32, 0, offsetof(Network, dhcp_server_pool_size) +DHCPServer.SendOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_server_send_options) +Bridge.Cost, config_parse_uint32, 0, offsetof(Network, cost) +Bridge.UseBPDU, config_parse_tristate, 0, offsetof(Network, use_bpdu) +Bridge.HairPin, config_parse_tristate, 0, offsetof(Network, hairpin) +Bridge.FastLeave, config_parse_tristate, 0, offsetof(Network, fast_leave) +Bridge.AllowPortToBeRoot, config_parse_tristate, 0, offsetof(Network, allow_port_to_be_root) +Bridge.UnicastFlood, config_parse_tristate, 0, offsetof(Network, unicast_flood) +Bridge.MulticastFlood, config_parse_tristate, 0, offsetof(Network, multicast_flood) +Bridge.MulticastToUnicast, config_parse_tristate, 0, offsetof(Network, multicast_to_unicast) +Bridge.NeighborSuppression, config_parse_tristate, 0, offsetof(Network, neighbor_suppression) +Bridge.Learning, config_parse_tristate, 0, offsetof(Network, learning) +Bridge.ProxyARP, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp) +Bridge.ProxyARPWiFi, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp_wifi) +Bridge.Priority, config_parse_bridge_port_priority, 0, offsetof(Network, priority) +Bridge.MulticastRouter, config_parse_multicast_router, 0, offsetof(Network, multicast_router) +BridgeFDB.MACAddress, config_parse_fdb_hwaddr, 0, 0 +BridgeFDB.VLANId, config_parse_fdb_vlan_id, 0, 0 +BridgeFDB.Destination, config_parse_fdb_destination, 0, 0 +BridgeFDB.VNI, config_parse_fdb_vxlan_vni, 0, 0 +BridgeFDB.AssociatedWith, config_parse_fdb_ntf_flags, 0, 0 +BridgeVLAN.PVID, config_parse_brvlan_pvid, 0, 0 +BridgeVLAN.VLAN, config_parse_brvlan_vlan, 0, 0 +BridgeVLAN.EgressUntagged, config_parse_brvlan_untagged, 0, 0 +Network.IPv6PrefixDelegation, config_parse_router_prefix_delegation, 0, 0 +IPv6PrefixDelegation.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) +IPv6PrefixDelegation.Managed, config_parse_bool, 0, offsetof(Network, router_managed) +IPv6PrefixDelegation.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) +IPv6PrefixDelegation.RouterPreference, config_parse_router_preference, 0, 0 +IPv6PrefixDelegation.EmitDNS, config_parse_bool, 0, offsetof(Network, router_emit_dns) +IPv6PrefixDelegation.DNS, config_parse_radv_dns, 0, 0 +IPv6PrefixDelegation.EmitDomains, config_parse_bool, 0, offsetof(Network, router_emit_domains) +IPv6PrefixDelegation.Domains, config_parse_radv_search_domains, 0, 0 +IPv6PrefixDelegation.DNSLifetimeSec, config_parse_sec, 0, offsetof(Network, router_dns_lifetime_usec) +IPv6Prefix.Prefix, config_parse_prefix, 0, 0 +IPv6Prefix.OnLink, config_parse_prefix_flags, 0, 0 +IPv6Prefix.AddressAutoconfiguration, config_parse_prefix_flags, 0, 0 +IPv6Prefix.ValidLifetimeSec, config_parse_prefix_lifetime, 0, 0 +IPv6Prefix.PreferredLifetimeSec, config_parse_prefix_lifetime, 0, 0 +IPv6RoutePrefix.Route, config_parse_route_prefix, 0, 0 +IPv6RoutePrefix.LifetimeSec, config_parse_route_prefix_lifetime, 0, 0 +CAN.BitRate, config_parse_si_uint64, 0, offsetof(Network, can_bitrate) +CAN.SamplePoint, config_parse_permille, 0, offsetof(Network, can_sample_point) +CAN.RestartSec, config_parse_sec, 0, offsetof(Network, can_restart_us) +CAN.TripleSampling, config_parse_tristate, 0, offsetof(Network, can_triple_sampling) +ControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_CODEL, 0 +ControlledDelay.PacketLimit, config_parse_controlled_delay_u32, QDISC_KIND_CODEL, 0 +ControlledDelay.TargetSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0 +ControlledDelay.IntervalSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0 +ControlledDelay.CEThresholdSec, config_parse_controlled_delay_usec, QDISC_KIND_CODEL, 0 +ControlledDelay.ECN, config_parse_controlled_delay_bool, QDISC_KIND_CODEL, 0 +FairQueueTrafficPolicing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.PacketLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.FlowLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.Quantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.InitialQuantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.MaximumRate, config_parse_fair_queue_traffic_policing_max_rate, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.Buckets, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.OrphanMask, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.Pacing, config_parse_fair_queue_traffic_policing_bool, QDISC_KIND_FQ, 0 +FairQueueTrafficPolicing.CEThresholdSec, config_parse_fair_queue_traffic_policing_usec, QDISC_KIND_FQ, 0 +FairQueueingControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.PacketLimit, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.MemoryLimit, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.Flows, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.Quantum, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.TargetSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.IntervalSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.CEThresholdSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0 +FairQueueingControlledDelay.ECN, config_parse_fair_queueing_controlled_delay_bool, QDISC_KIND_FQ_CODEL, 0 +NetworkEmulator.Parent, config_parse_qdisc_parent, QDISC_KIND_NETEM, 0 +NetworkEmulator.DelaySec, config_parse_network_emulator_delay, QDISC_KIND_NETEM, 0 +NetworkEmulator.DelayJitterSec, config_parse_network_emulator_delay, QDISC_KIND_NETEM, 0 +NetworkEmulator.LossRate, config_parse_network_emulator_rate, QDISC_KIND_NETEM, 0 +NetworkEmulator.DuplicateRate, config_parse_network_emulator_rate, QDISC_KIND_NETEM, 0 +NetworkEmulator.PacketLimit, config_parse_network_emulator_packet_limit, QDISC_KIND_NETEM, 0 +StochasticFairnessQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_SFQ, 0 +StochasticFairnessQueueing.PerturbPeriodSec, config_parse_stochastic_fairness_queueing_perturb_period, QDISC_KIND_SFQ, 0 +TokenBufferFilter.Parent, config_parse_qdisc_parent, QDISC_KIND_TBF, 0 +TokenBufferFilter.Rate, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.Burst, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.LimitSize, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.MTUBytes, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.MPUBytes, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.PeakRate, config_parse_token_buffer_filter_size, QDISC_KIND_TBF, 0 +TokenBufferFilter.LatencySec, config_parse_token_buffer_filter_latency, QDISC_KIND_TBF, 0 /* backwards compatibility: do not add new entries to this section */ -Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local) -DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) -DHCP.UseDNS, config_parse_dhcp_use_dns, 0, 0 -DHCP.UseNTP, config_parse_dhcp_use_ntp, 0, 0 -DHCP.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) -DHCP.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) -DHCP.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) -DHCP.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) -DHCP.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) -DHCP.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) -DHCP.SendHostname, config_parse_bool, 0, offsetof(Network, dhcp_send_hostname) -DHCP.Hostname, config_parse_hostname, 0, offsetof(Network, dhcp_hostname) -DHCP.RequestBroadcast, config_parse_bool, 0, offsetof(Network, dhcp_broadcast) -DHCP.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical) -DHCP.VendorClassIdentifier, config_parse_string, 0, offsetof(Network, dhcp_vendor_class_identifier) -DHCP.UserClass, config_parse_dhcp_user_class, 0, offsetof(Network, dhcp_user_class) -DHCP.DUIDType, config_parse_duid_type, 0, offsetof(Network, duid) -DHCP.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Network, duid) -DHCP.RouteMetric, config_parse_unsigned, 0, offsetof(Network, dhcp_route_metric) -DHCP.RouteTable, config_parse_section_route_table, 0, 0 -DHCP.UseTimezone, config_parse_bool, 0, offsetof(Network, dhcp_use_timezone) -DHCP.IAID, config_parse_iaid, 0, 0 -DHCP.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port) -DHCP.RapidCommit, config_parse_bool, 0, offsetof(Network, rapid_commit) -DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information) -DHCPv4.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) -DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical) +Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local) +DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) +DHCP.UseDNS, config_parse_dhcp_use_dns, 0, 0 +DHCP.UseNTP, config_parse_dhcp_use_ntp, 0, 0 +DHCP.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) +DHCP.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) +DHCP.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) +DHCP.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) +DHCP.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) +DHCP.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) +DHCP.SendHostname, config_parse_bool, 0, offsetof(Network, dhcp_send_hostname) +DHCP.Hostname, config_parse_hostname, 0, offsetof(Network, dhcp_hostname) +DHCP.RequestBroadcast, config_parse_bool, 0, offsetof(Network, dhcp_broadcast) +DHCP.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical) +DHCP.VendorClassIdentifier, config_parse_string, 0, offsetof(Network, dhcp_vendor_class_identifier) +DHCP.UserClass, config_parse_dhcp_user_class, 0, offsetof(Network, dhcp_user_class) +DHCP.DUIDType, config_parse_duid_type, 0, offsetof(Network, duid) +DHCP.DUIDRawData, config_parse_duid_rawdata, 0, offsetof(Network, duid) +DHCP.RouteMetric, config_parse_unsigned, 0, offsetof(Network, dhcp_route_metric) +DHCP.RouteTable, config_parse_section_route_table, 0, 0 +DHCP.UseTimezone, config_parse_bool, 0, offsetof(Network, dhcp_use_timezone) +DHCP.IAID, config_parse_iaid, 0, 0 +DHCP.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port) +DHCP.RapidCommit, config_parse_bool, 0, offsetof(Network, rapid_commit) +DHCP.ForceDHCPv6PDOtherInformation, config_parse_bool, 0, offsetof(Network, dhcp6_force_pd_other_information) +DHCPv4.UseDomainName, config_parse_dhcp_use_domains, 0, offsetof(Network, dhcp_use_domains) +DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical) +TrafficControlQueueingDiscipline.Parent, config_parse_qdisc_parent, QDISC_KIND_NETEM, 0 +TrafficControlQueueingDiscipline.NetworkEmulatorDelaySec, config_parse_network_emulator_delay, 0, 0 +TrafficControlQueueingDiscipline.NetworkEmulatorDelayJitterSec, config_parse_network_emulator_delay, 0, 0 +TrafficControlQueueingDiscipline.NetworkEmulatorLossRate, config_parse_network_emulator_rate, 0, 0 +TrafficControlQueueingDiscipline.NetworkEmulatorDuplicateRate, config_parse_network_emulator_rate, 0, 0 +TrafficControlQueueingDiscipline.NetworkEmulatorPacketLimit, config_parse_network_emulator_packet_limit, 0, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 4fd48be52a..8a8f420897 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -481,7 +481,13 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "IPv6Prefix\0" "IPv6RoutePrefix\0" "TrafficControlQueueingDiscipline\0" - "CAN\0", + "CAN\0" + "ControlledDelay\0" + "FairQueueTrafficPolicing\0" + "FairQueueingControlledDelay\0" + "NetworkEmulator\0" + "StochasticFairnessQueueing\0" + "TokenBufferFilter\0", config_item_perf_lookup, network_network_gperf_lookup, CONFIG_PARSE_WARN, network); if (r < 0) diff --git a/src/network/tc/codel.c b/src/network/tc/codel.c index 24b5720c41..65c724da75 100644 --- a/src/network/tc/codel.c +++ b/src/network/tc/codel.c @@ -74,7 +74,7 @@ static int controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_me return 0; } -int config_parse_tc_controlled_delay_u32( +int config_parse_controlled_delay_u32( const char *unit, const char *filename, unsigned line, @@ -125,7 +125,7 @@ int config_parse_tc_controlled_delay_u32( return 0; } -int config_parse_tc_controlled_delay_usec( +int config_parse_controlled_delay_usec( const char *unit, const char *filename, unsigned line, @@ -157,17 +157,17 @@ int config_parse_tc_controlled_delay_usec( cd = CODEL(qdisc); - if (streq(lvalue, "ControlledDelayTargetSec")) + if (streq(lvalue, "TargetSec")) p = &cd->target_usec; - else if (streq(lvalue, "ControlledDelayIntervalSec")) + else if (streq(lvalue, "IntervalSec")) p = &cd->interval_usec; - else if (streq(lvalue, "ControlledDelayCEThresholdSec")) + else if (streq(lvalue, "CEThresholdSec")) p = &cd->ce_threshold_usec; else assert_not_reached("Invalid lvalue"); if (isempty(rvalue)) { - if (streq(lvalue, "ControlledDelayCEThresholdSec")) + if (streq(lvalue, "CEThresholdSec")) *p = USEC_INFINITY; else *p = 0; @@ -189,7 +189,7 @@ int config_parse_tc_controlled_delay_usec( return 0; } -int config_parse_tc_controlled_delay_bool( +int config_parse_controlled_delay_bool( const char *unit, const char *filename, unsigned line, diff --git a/src/network/tc/codel.h b/src/network/tc/codel.h index 075423dec1..4023a7dee5 100644 --- a/src/network/tc/codel.h +++ b/src/network/tc/codel.h @@ -19,6 +19,6 @@ typedef struct ControlledDelay { DEFINE_QDISC_CAST(CODEL, ControlledDelay); extern const QDiscVTable codel_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_u32); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_usec); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_controlled_delay_bool); +CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_u32); +CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_usec); +CONFIG_PARSER_PROTOTYPE(config_parse_controlled_delay_bool); diff --git a/src/network/tc/fq-codel.c b/src/network/tc/fq-codel.c index a64b77651c..6c7932c70f 100644 --- a/src/network/tc/fq-codel.c +++ b/src/network/tc/fq-codel.c @@ -10,8 +10,8 @@ #include "qdisc.h" #include "string-util.h" -static int fair_queuing_controlled_delay_init(QDisc *qdisc) { - FairQueuingControlledDelay *fqcd; +static int fair_queueing_controlled_delay_init(QDisc *qdisc) { + FairQueueingControlledDelay *fqcd; assert(qdisc); @@ -24,8 +24,8 @@ static int fair_queuing_controlled_delay_init(QDisc *qdisc) { return 0; } -static int fair_queuing_controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { - FairQueuingControlledDelay *fqcd; +static int fair_queueing_controlled_delay_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { + FairQueueingControlledDelay *fqcd; int r; assert(link); @@ -93,7 +93,7 @@ static int fair_queuing_controlled_delay_fill_message(Link *link, QDisc *qdisc, return 0; } -int config_parse_tc_fair_queuing_controlled_delay_u32( +int config_parse_fair_queueing_controlled_delay_u32( const char *unit, const char *filename, unsigned line, @@ -106,7 +106,7 @@ int config_parse_tc_fair_queuing_controlled_delay_u32( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueuingControlledDelay *fqcd; + FairQueueingControlledDelay *fqcd; Network *network = data; uint32_t *p; int r; @@ -125,9 +125,9 @@ int config_parse_tc_fair_queuing_controlled_delay_u32( fqcd = FQ_CODEL(qdisc); - if (streq(lvalue, "FairQueuingControlledDelayPacketLimit")) + if (streq(lvalue, "PacketLimit")) p = &fqcd->packet_limit; - else if (streq(lvalue, "FairQueuingControlledDelayFlows")) + else if (streq(lvalue, "Flows")) p = &fqcd->flows; else assert_not_reached("Invalid lvalue."); @@ -152,7 +152,7 @@ int config_parse_tc_fair_queuing_controlled_delay_u32( return 0; } -int config_parse_tc_fair_queuing_controlled_delay_usec( +int config_parse_fair_queueing_controlled_delay_usec( const char *unit, const char *filename, unsigned line, @@ -165,7 +165,7 @@ int config_parse_tc_fair_queuing_controlled_delay_usec( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueuingControlledDelay *fqcd; + FairQueueingControlledDelay *fqcd; Network *network = data; usec_t *p; int r; @@ -184,17 +184,17 @@ int config_parse_tc_fair_queuing_controlled_delay_usec( fqcd = FQ_CODEL(qdisc); - if (streq(lvalue, "FairQueuingControlledDelayTargetSec")) + if (streq(lvalue, "TargetSec")) p = &fqcd->target_usec; - else if (streq(lvalue, "FairQueuingControlledDelayIntervalSec")) + else if (streq(lvalue, "IntervalSec")) p = &fqcd->interval_usec; - else if (streq(lvalue, "FairQueuingControlledDelayCEThresholdSec")) + else if (streq(lvalue, "CEThresholdSec")) p = &fqcd->ce_threshold_usec; else assert_not_reached("Invalid lvalue."); if (isempty(rvalue)) { - if (streq(lvalue, "FairQueuingControlledDelayCEThresholdSec")) + if (streq(lvalue, "CEThresholdSec")) *p = USEC_INFINITY; else *p = 0; @@ -216,7 +216,7 @@ int config_parse_tc_fair_queuing_controlled_delay_usec( return 0; } -int config_parse_tc_fair_queuing_controlled_delay_bool( +int config_parse_fair_queueing_controlled_delay_bool( const char *unit, const char *filename, unsigned line, @@ -229,7 +229,7 @@ int config_parse_tc_fair_queuing_controlled_delay_bool( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueuingControlledDelay *fqcd; + FairQueueingControlledDelay *fqcd; Network *network = data; int r; @@ -268,7 +268,7 @@ int config_parse_tc_fair_queuing_controlled_delay_bool( return 0; } -int config_parse_tc_fair_queuing_controlled_delay_size( +int config_parse_fair_queueing_controlled_delay_size( const char *unit, const char *filename, unsigned line, @@ -281,7 +281,7 @@ int config_parse_tc_fair_queuing_controlled_delay_size( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueuingControlledDelay *fqcd; + FairQueueingControlledDelay *fqcd; Network *network = data; uint64_t sz; uint32_t *p; @@ -301,15 +301,15 @@ int config_parse_tc_fair_queuing_controlled_delay_size( fqcd = FQ_CODEL(qdisc); - if (streq(lvalue, "FairQueuingControlledDelayMemoryLimit")) + if (streq(lvalue, "MemoryLimit")) p = &fqcd->memory_limit; - else if (streq(lvalue, "FairQueuingControlledDelayQuantum")) + else if (streq(lvalue, "Quantum")) p = &fqcd->quantum; else assert_not_reached("Invalid lvalue."); if (isempty(rvalue)) { - if (streq(lvalue, "FairQueuingControlledMemoryLimit")) + if (streq(lvalue, "MemoryLimit")) *p = UINT32_MAX; else *p = 0; @@ -339,8 +339,8 @@ int config_parse_tc_fair_queuing_controlled_delay_size( } const QDiscVTable fq_codel_vtable = { - .object_size = sizeof(FairQueuingControlledDelay), + .object_size = sizeof(FairQueueingControlledDelay), .tca_kind = "fq_codel", - .init = fair_queuing_controlled_delay_init, - .fill_message = fair_queuing_controlled_delay_fill_message, + .init = fair_queueing_controlled_delay_init, + .fill_message = fair_queueing_controlled_delay_fill_message, }; diff --git a/src/network/tc/fq-codel.h b/src/network/tc/fq-codel.h index aa74216fa4..1a80963df6 100644 --- a/src/network/tc/fq-codel.h +++ b/src/network/tc/fq-codel.h @@ -6,7 +6,7 @@ #include "qdisc.h" #include "time-util.h" -typedef struct FairQueuingControlledDelay { +typedef struct FairQueueingControlledDelay { QDisc meta; uint32_t packet_limit; @@ -17,12 +17,12 @@ typedef struct FairQueuingControlledDelay { usec_t interval_usec; usec_t ce_threshold_usec; int ecn; -} FairQueuingControlledDelay; +} FairQueueingControlledDelay; -DEFINE_QDISC_CAST(FQ_CODEL, FairQueuingControlledDelay); +DEFINE_QDISC_CAST(FQ_CODEL, FairQueueingControlledDelay); extern const QDiscVTable fq_codel_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_u32); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_usec); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_bool); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queuing_controlled_delay_size); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_u32); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_usec); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_bool); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queueing_controlled_delay_size); diff --git a/src/network/tc/fq.c b/src/network/tc/fq.c index 58a008f4c2..30ec71cbad 100644 --- a/src/network/tc/fq.c +++ b/src/network/tc/fq.c @@ -102,7 +102,7 @@ static int fair_queue_traffic_policing_fill_message(Link *link, QDisc *qdisc, sd return 0; } -int config_parse_tc_fair_queue_traffic_policing_u32( +int config_parse_fair_queue_traffic_policing_u32( const char *unit, const char *filename, unsigned line, @@ -134,13 +134,13 @@ int config_parse_tc_fair_queue_traffic_policing_u32( fq = FQ(qdisc); - if (streq(lvalue, "FairQueueTrafficPolicingPacketLimit")) + if (streq(lvalue, "PacketLimit")) p = &fq->packet_limit; - else if (streq(lvalue, "FairQueueTrafficPolicingFlowLimit")) + else if (streq(lvalue, "FlowLimit")) p = &fq->flow_limit; - else if (streq(lvalue, "FairQueueTrafficPolicingBuckets")) + else if (streq(lvalue, "Buckets")) p = &fq->buckets; - else if (streq(lvalue, "FairQueueTrafficPolicingOrphanMask")) + else if (streq(lvalue, "OrphanMask")) p = &fq->orphan_mask; else assert_not_reached("Invalid lvalue"); @@ -165,7 +165,7 @@ int config_parse_tc_fair_queue_traffic_policing_u32( return 0; } -int config_parse_tc_fair_queue_traffic_policing_size( +int config_parse_fair_queue_traffic_policing_size( const char *unit, const char *filename, unsigned line, @@ -198,9 +198,9 @@ int config_parse_tc_fair_queue_traffic_policing_size( fq = FQ(qdisc); - if (streq(lvalue, "FairQueueTrafficPolicingQuantum")) + if (streq(lvalue, "Quantum")) p = &fq->quantum; - else if (streq(lvalue, "FairQueueTrafficPolicingInitialQuantum")) + else if (streq(lvalue, "InitialQuantum")) p = &fq->initial_quantum; else assert_not_reached("Invalid lvalue"); @@ -232,7 +232,7 @@ int config_parse_tc_fair_queue_traffic_policing_size( return 0; } -int config_parse_tc_fair_queue_traffic_policing_bool( +int config_parse_fair_queue_traffic_policing_bool( const char *unit, const char *filename, unsigned line, @@ -284,7 +284,7 @@ int config_parse_tc_fair_queue_traffic_policing_bool( return 0; } -int config_parse_tc_fair_queue_traffic_policing_usec( +int config_parse_fair_queue_traffic_policing_usec( const char *unit, const char *filename, unsigned line, @@ -343,7 +343,7 @@ int config_parse_tc_fair_queue_traffic_policing_usec( return 0; } -int config_parse_tc_fair_queue_traffic_policing_max_rate( +int config_parse_fair_queue_traffic_policing_max_rate( const char *unit, const char *filename, unsigned line, diff --git a/src/network/tc/fq.h b/src/network/tc/fq.h index 5a171b2acf..9bce285605 100644 --- a/src/network/tc/fq.h +++ b/src/network/tc/fq.h @@ -22,8 +22,8 @@ typedef struct FairQueueTrafficPolicing { DEFINE_QDISC_CAST(FQ, FairQueueTrafficPolicing); extern const QDiscVTable fq_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_u32); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_size); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_bool); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_usec); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_fair_queue_traffic_policing_max_rate); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_u32); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_size); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_bool); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_usec); +CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_max_rate); diff --git a/src/network/tc/netem.c b/src/network/tc/netem.c index f74be288e1..7d0add9e30 100644 --- a/src/network/tc/netem.c +++ b/src/network/tc/netem.c @@ -10,7 +10,7 @@ #include "networkd-manager.h" #include "parse-util.h" #include "qdisc.h" -#include "string-util.h" +#include "strv.h" #include "tc-util.h" static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { @@ -54,7 +54,7 @@ static int network_emulator_fill_message(Link *link, QDisc *qdisc, sd_netlink_me return 0; } -int config_parse_tc_network_emulator_delay( +int config_parse_network_emulator_delay( const char *unit, const char *filename, unsigned line, @@ -87,9 +87,9 @@ int config_parse_tc_network_emulator_delay( ne = NETEM(qdisc); if (isempty(rvalue)) { - if (streq(lvalue, "NetworkEmulatorDelaySec")) + if (STR_IN_SET(lvalue, "DelaySec", "NetworkEmulatorDelaySec")) ne->delay = USEC_INFINITY; - else if (streq(lvalue, "NetworkEmulatorDelayJitterSec")) + else if (STR_IN_SET(lvalue, "DelayJitterSec", "NetworkEmulatorDelayJitterSec")) ne->jitter = USEC_INFINITY; qdisc = NULL; @@ -104,9 +104,9 @@ int config_parse_tc_network_emulator_delay( return 0; } - if (streq(lvalue, "NetworkEmulatorDelaySec")) + if (STR_IN_SET(lvalue, "DelaySec", "NetworkEmulatorDelaySec")) ne->delay = u; - else if (streq(lvalue, "NetworkEmulatorDelayJitterSec")) + else if (STR_IN_SET(lvalue, "DelayJitterSec", "NetworkEmulatorDelayJitterSec")) ne->jitter = u; qdisc = NULL; @@ -114,7 +114,7 @@ int config_parse_tc_network_emulator_delay( return 0; } -int config_parse_tc_network_emulator_rate( +int config_parse_network_emulator_rate( const char *unit, const char *filename, unsigned line, @@ -147,9 +147,9 @@ int config_parse_tc_network_emulator_rate( ne = NETEM(qdisc); if (isempty(rvalue)) { - if (streq(lvalue, "NetworkEmulatorLossRate")) + if (STR_IN_SET(lvalue, "LossRate", "NetworkEmulatorLossRate")) ne->loss = 0; - else if (streq(lvalue, "NetworkEmulatorDuplicateRate")) + else if (STR_IN_SET(lvalue, "DuplicateRate", "NetworkEmulatorDuplicateRate")) ne->duplicate = 0; qdisc = NULL; @@ -164,16 +164,16 @@ int config_parse_tc_network_emulator_rate( return 0; } - if (streq(lvalue, "NetworkEmulatorLossRate")) + if (STR_IN_SET(lvalue, "LossRate", "NetworkEmulatorLossRate")) ne->loss = rate; - else if (streq(lvalue, "NetworkEmulatorDuplicateRate")) + else if (STR_IN_SET(lvalue, "DuplicateRate", "NetworkEmulatorDuplicateRate")) ne->duplicate = rate; qdisc = NULL; return 0; } -int config_parse_tc_network_emulator_packet_limit( +int config_parse_network_emulator_packet_limit( const char *unit, const char *filename, unsigned line, @@ -214,8 +214,8 @@ int config_parse_tc_network_emulator_packet_limit( r = safe_atou(rvalue, &ne->limit); if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, r, - "Failed to parse 'NetworkEmulatorPacketLimit=', ignoring assignment: %s", - rvalue); + "Failed to parse '%s=', ignoring assignment: %s", + lvalue, rvalue); return 0; } diff --git a/src/network/tc/netem.h b/src/network/tc/netem.h index 7bf27e34fd..6319c72521 100644 --- a/src/network/tc/netem.h +++ b/src/network/tc/netem.h @@ -20,6 +20,6 @@ typedef struct NetworkEmulator { DEFINE_QDISC_CAST(NETEM, NetworkEmulator); extern const QDiscVTable netem_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_delay); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_rate); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_network_emulator_packet_limit); +CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_delay); +CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_rate); +CONFIG_PARSER_PROTOTYPE(config_parse_network_emulator_packet_limit); diff --git a/src/network/tc/qdisc.c b/src/network/tc/qdisc.c index 38086a8975..ee0637bf32 100644 --- a/src/network/tc/qdisc.c +++ b/src/network/tc/qdisc.c @@ -234,7 +234,7 @@ int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact) { return 0; } -int config_parse_tc_qdiscs_parent( +int config_parse_qdisc_parent( const char *unit, const char *filename, unsigned line, @@ -254,8 +254,9 @@ int config_parse_tc_qdiscs_parent( assert(lvalue); assert(rvalue); assert(data); + assert(ltype >= 0 && ltype < _QDISC_KIND_MAX); - r = qdisc_new_static(_QDISC_KIND_INVALID, network, filename, section_line, &qdisc); + r = qdisc_new_static(ltype, network, filename, section_line, &qdisc); if (r < 0) return r; diff --git a/src/network/tc/qdisc.h b/src/network/tc/qdisc.h index 506c737935..bae4d1ab3f 100644 --- a/src/network/tc/qdisc.h +++ b/src/network/tc/qdisc.h @@ -63,7 +63,7 @@ int qdisc_section_verify(QDisc *qdisc, bool *has_root, bool *has_clsact); DEFINE_NETWORK_SECTION_FUNCTIONS(QDisc, qdisc_free); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_qdiscs_parent); +CONFIG_PARSER_PROTOTYPE(config_parse_qdisc_parent); #include "codel.h" #include "fq-codel.h" diff --git a/src/network/tc/sfq.c b/src/network/tc/sfq.c index fc0c9bfc27..ee66409b94 100644 --- a/src/network/tc/sfq.c +++ b/src/network/tc/sfq.c @@ -31,7 +31,7 @@ static int stochastic_fairness_queueing_fill_message(Link *link, QDisc *qdisc, s return 0; } -int config_parse_tc_stochastic_fairness_queueing_perturb_period( +int config_parse_stochastic_fairness_queueing_perturb_period( const char *unit, const char *filename, unsigned line, diff --git a/src/network/tc/sfq.h b/src/network/tc/sfq.h index d29bcc2e93..19c8decf13 100644 --- a/src/network/tc/sfq.h +++ b/src/network/tc/sfq.h @@ -15,4 +15,4 @@ typedef struct StochasticFairnessQueueing { DEFINE_QDISC_CAST(SFQ, StochasticFairnessQueueing); extern const QDiscVTable sfq_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_stochastic_fairness_queueing_perturb_period); +CONFIG_PARSER_PROTOTYPE(config_parse_stochastic_fairness_queueing_perturb_period); diff --git a/src/network/tc/tbf.c b/src/network/tc/tbf.c index 7dfc565111..3b068b4ab4 100644 --- a/src/network/tc/tbf.c +++ b/src/network/tc/tbf.c @@ -110,7 +110,7 @@ static int token_buffer_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink return 0; } -int config_parse_tc_token_buffer_filter_size( +int config_parse_token_buffer_filter_size( const char *unit, const char *filename, unsigned line, @@ -143,17 +143,17 @@ int config_parse_tc_token_buffer_filter_size( tbf = TBF(qdisc); if (isempty(rvalue)) { - if (streq(lvalue, "TokenBufferFilterRate")) + if (streq(lvalue, "Rate")) tbf->rate = 0; - else if (streq(lvalue, "TokenBufferFilterBurst")) + else if (streq(lvalue, "Burst")) tbf->burst = 0; - else if (streq(lvalue, "TokenBufferFilterLimitSize")) + else if (streq(lvalue, "LimitSize")) tbf->limit = 0; - else if (streq(lvalue, "TokenBufferFilterMTUBytes")) + else if (streq(lvalue, "MTUBytes")) tbf->mtu = 0; - else if (streq(lvalue, "TokenBufferFilterMPUBytes")) + else if (streq(lvalue, "MPUBytes")) tbf->mpu = 0; - else if (streq(lvalue, "TokenBufferFilterPeakRate")) + else if (streq(lvalue, "PeakRate")) tbf->peak_rate = 0; qdisc = NULL; @@ -168,17 +168,17 @@ int config_parse_tc_token_buffer_filter_size( return 0; } - if (streq(lvalue, "TokenBufferFilterRate")) + if (streq(lvalue, "Rate")) tbf->rate = k / 8; - else if (streq(lvalue, "TokenBufferFilterBurst")) + else if (streq(lvalue, "Burst")) tbf->burst = k; - else if (streq(lvalue, "TokenBufferFilterLimitSize")) + else if (streq(lvalue, "LimitSize")) tbf->limit = k; - else if (streq(lvalue, "TokenBufferFilterMPUBytes")) + else if (streq(lvalue, "MPUBytes")) tbf->mpu = k; - else if (streq(lvalue, "TokenBufferFilterMTUBytes")) + else if (streq(lvalue, "MTUBytes")) tbf->mtu = k; - else if (streq(lvalue, "TokenBufferFilterPeakRate")) + else if (streq(lvalue, "PeakRate")) tbf->peak_rate = k / 8; qdisc = NULL; @@ -186,7 +186,7 @@ int config_parse_tc_token_buffer_filter_size( return 0; } -int config_parse_tc_token_buffer_filter_latency( +int config_parse_token_buffer_filter_latency( const char *unit, const char *filename, unsigned line, @@ -245,32 +245,32 @@ static int token_buffer_filter_verify(QDisc *qdisc) { if (tbf->limit > 0 && tbf->latency > 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: Specifying both TokenBufferFilterLimitSize= and TokenBufferFilterLatencySec= is not allowed. " - "Ignoring [TrafficControlQueueingDiscipline] section from line %u.", + "%s: Specifying both LimitSize= and LatencySec= is not allowed. " + "Ignoring [TokenBufferFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->limit == 0 && tbf->latency == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: Either TokenBufferFilterLimitSize= or TokenBufferFilterLatencySec= is required. " - "Ignoring [TrafficControlQueueingDiscipline] section from line %u.", + "%s: Either LimitSize= or LatencySec= is required. " + "Ignoring [TokenBufferFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->rate == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: TokenBufferFilterRate= is mandatory. " - "Ignoring [TrafficControlQueueingDiscipline] section from line %u.", + "%s: Rate= is mandatory. " + "Ignoring [TokenBufferFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->burst == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: TokenBufferFilterBurst= is mandatory. " - "Ignoring [TrafficControlQueueingDiscipline] section from line %u.", + "%s: Burst= is mandatory. " + "Ignoring [TokenBufferFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->peak_rate > 0 && tbf->mtu == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), - "%s: TokenBufferFilterMTUBytes= is mandatory when TokenBufferFilterPeakRate= is specified. " - "Ignoring [TrafficControlQueueingDiscipline] section from line %u.", + "%s: MTUBytes= is mandatory when PeakRate= is specified. " + "Ignoring [TokenBufferFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); return 0; diff --git a/src/network/tc/tbf.h b/src/network/tc/tbf.h index 317dc03107..5695dbc07b 100644 --- a/src/network/tc/tbf.h +++ b/src/network/tc/tbf.h @@ -21,5 +21,5 @@ typedef struct TokenBufferFilter { DEFINE_QDISC_CAST(TBF, TokenBufferFilter); extern const QDiscVTable tbf_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_tc_token_buffer_filter_latency); -CONFIG_PARSER_PROTOTYPE(config_parse_tc_token_buffer_filter_size); +CONFIG_PARSER_PROTOTYPE(config_parse_token_buffer_filter_latency); +CONFIG_PARSER_PROTOTYPE(config_parse_token_buffer_filter_size); diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 7262ae1ee2..70d5245749 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -270,6 +270,53 @@ SendOption= [NextHop] Id= Gateway= +[NetworkEmulator] +Parent= +DelaySec= +DelayJitterSec= +LossRate= +DuplicateRate= +PacketLimit= +[TokenBufferFilter] +Parent= +Rate= +Burst= +LimitSize= +MTUBytes= +MPUBytes= +PeakRate= +LatencySec= +[StochasticFairnessQueueing] +Parent= +PerturbPeriodSec= +[FairQueueingControlledDelay] +Parent= +PacketLimit= +MemoryLimit= +Flows= +Quantum= +TargetSec= +IntervalSec= +CEThresholdSec= +ECN= +[FairQueueTrafficPolicing] +Parent= +PacketLimit= +FlowLimit= +Quantum= +InitialQuantum= +MaximumRate= +Buckets= +OrphanMask= +Pacing= +CEThresholdSec= +[ControlledDelay] +Parent= +PacketLimit= +TargetSec= +IntervalSec= +CEThresholdSec= +ECN= [TrafficControlQueueingDiscipline] Parent= NetworkEmulatorDelaySec= @@ -277,33 +324,3 @@ NetworkEmulatorDelayJitterSec= NetworkEmulatorLossRate= NetworkEmulatorDuplicateRate= NetworkEmulatorPacketLimit= -TokenBufferFilterRate= -TokenBufferFilterBurst= -TokenBufferFilterLimitSize= -TokenBufferFilterMTUBytes= -TokenBufferFilterMPUBytes= -TokenBufferFilterPeakRate= -TokenBufferFilterLatencySec= -StochasticFairnessQueueingPerturbPeriodSec= -FairQueuingControlledDelayPacketLimit= -FairQueuingControlledDelayMemoryLimit= -FairQueuingControlledDelayFlows= -FairQueuingControlledDelayQuantum= -FairQueuingControlledDelayTargetSec= -FairQueuingControlledDelayIntervalSec= -FairQueuingControlledDelayCEThresholdSec= -FairQueuingControlledDelayECN= -FairQueueTrafficPolicingPacketLimit= -FairQueueTrafficPolicingFlowLimit= -FairQueueTrafficPolicingQuantum= -FairQueueTrafficPolicingInitialQuantum= -FairQueueTrafficPolicingMaximumRate= -FairQueueTrafficPolicingBuckets= -FairQueueTrafficPolicingOrphanMask= -FairQueueTrafficPolicingPacing= -FairQueueTrafficPolicingCEThresholdSec= -ControlledDelayPacketLimit= -ControlledDelayTargetSec= -ControlledDelayIntervalSec= -ControlledDelayCEThresholdSec= -ControlledDelayECN= diff --git a/test/test-network/conf/25-qdisc-fq-codel.network b/test/test-network/conf/25-qdisc-fq-codel.network index 20bcca2e50..f682b426e7 100644 --- a/test/test-network/conf/25-qdisc-fq-codel.network +++ b/test/test-network/conf/25-qdisc-fq-codel.network @@ -5,22 +5,22 @@ Name=dummy98 IPv6AcceptRA=no Address=10.1.2.3/16 -[TrafficControlQueueingDiscipline] +[FairQueueTrafficPolicing] Parent=root -FairQueueTrafficPolicingPacketLimit=1000 -FairQueueTrafficPolicingFlowLimit=200 -FairQueueTrafficPolicingQuantum=1500 -FairQueueTrafficPolicingInitialQuantum=13000 -FairQueueTrafficPolicingMaximumRate=1M -FairQueueTrafficPolicingBuckets=512 -FairQueueTrafficPolicingOrphanMask=511 -FairQueueTrafficPolicingPacing=yes -FairQueueTrafficPolicingCEThresholdSec=100ms +PacketLimit=1000 +FlowLimit=200 +Quantum=1500 +InitialQuantum=13000 +MaximumRate=1M +Buckets=512 +OrphanMask=511 +Pacing=yes +CEThresholdSec=100ms -[TrafficControlQueueingDiscipline] +[ControlledDelay] Parent=clsact -ControlledDelayPacketLimit=2000 -ControlledDelayTargetSec=10ms -ControlledDelayIntervalSec=50ms -ControlledDelayECN=yes -ControlledDelayCEThresholdSec=100ms +PacketLimit=2000 +TargetSec=10ms +IntervalSec=50ms +ECN=yes +CEThresholdSec=100ms diff --git a/test/test-network/conf/25-qdisc-netem-and-fqcodel.network b/test/test-network/conf/25-qdisc-netem-and-fqcodel.network index 0e2ad74176..f6e1f2b958 100644 --- a/test/test-network/conf/25-qdisc-netem-and-fqcodel.network +++ b/test/test-network/conf/25-qdisc-netem-and-fqcodel.network @@ -5,20 +5,20 @@ Name=dummy98 IPv6AcceptRA=no Address=10.1.2.3/16 -[TrafficControlQueueingDiscipline] +[NetworkEmulator] Parent=root -NetworkEmulatorDelaySec=50ms -NetworkEmulatorDelayJitterSec=10ms -NetworkEmulatorLossRate=20% -NetworkEmulatorPacketLimit=100 +DelaySec=50ms +DelayJitterSec=10ms +LossRate=20% +PacketLimit=100 -[TrafficControlQueueingDiscipline] +[FairQueueingControlledDelay] Parent=ingress -FairQueuingControlledDelayPacketLimit=20480 -FairQueuingControlledDelayMemoryLimit=64M -FairQueuingControlledDelayFlows=2048 -FairQueuingControlledDelayTargetSec=10ms -FairQueuingControlledDelayIntervalSec=200ms -FairQueuingControlledDelayQuantum=1400 -FairQueuingControlledDelayECN=yes -FairQueuingControlledDelayCEThresholdSec=100ms +PacketLimit=20480 +MemoryLimit=64M +Flows=2048 +TargetSec=10ms +IntervalSec=200ms +Quantum=1400 +ECN=yes +CEThresholdSec=100ms diff --git a/test/test-network/conf/25-qdisc-tbf-and-sfq.network b/test/test-network/conf/25-qdisc-tbf-and-sfq.network index 781add219f..680dd6b46d 100644 --- a/test/test-network/conf/25-qdisc-tbf-and-sfq.network +++ b/test/test-network/conf/25-qdisc-tbf-and-sfq.network @@ -5,14 +5,14 @@ Name=test1 IPv6AcceptRA=no Address=10.1.2.4/16 -[TrafficControlQueueingDiscipline] +[TokenBufferFilter] Parent=root -TokenBufferFilterRate=1G -TokenBufferFilterBurst=5K -TokenBufferFilterLatencySec=70msec -TokenBufferFilterPeakRate=100G -TokenBufferFilterMTUBytes=1M +Rate=1G +Burst=5K +LatencySec=70msec +PeakRate=100G +MTUBytes=1M -[TrafficControlQueueingDiscipline] +[StochasticFairnessQueueing] Parent=clsact -StochasticFairnessQueueingPerturbPeriodSec=5sec +PerturbPeriodSec=5sec |