From 18de0969c5763ce119692b59f8622c379e79c6cc Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 4 Feb 2020 21:45:29 +0900 Subject: [PATCH 1/3] network: split TrafficControlQueueingDiscipline section into small pieces Closes #14763. --- man/systemd.network.xml | 162 +++-- src/network/networkd-network-gperf.gperf | 585 +++++++++--------- src/network/networkd-network.c | 8 +- src/network/tc/codel.c | 14 +- src/network/tc/codel.h | 6 +- src/network/tc/fq-codel.c | 48 +- src/network/tc/fq-codel.h | 14 +- src/network/tc/fq.c | 22 +- src/network/tc/fq.h | 10 +- src/network/tc/netem.c | 28 +- src/network/tc/netem.h | 6 +- src/network/tc/qdisc.c | 5 +- src/network/tc/qdisc.h | 2 +- src/network/tc/sfq.c | 2 +- src/network/tc/sfq.h | 2 +- src/network/tc/tbf.c | 48 +- src/network/tc/tbf.h | 4 +- .../fuzz-network-parser/directives.network | 77 ++- .../conf/25-qdisc-fq-codel.network | 32 +- .../conf/25-qdisc-netem-and-fqcodel.network | 28 +- .../conf/25-qdisc-tbf-and-sfq.network | 16 +- 21 files changed, 617 insertions(+), 502 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 @@ - [TrafficControlQueueingDiscipline] Section Options - The [TrafficControlQueueingDiscipline] 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. + [NetworkEmulator] Section Options + The [NetworkEmulator] 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. @@ -2278,7 +2279,7 @@ - NetworkEmulatorDelaySec= + DelaySec= Specifies the fixed amount of delay to be added to all packets going out of the interface. Defaults to unset. @@ -2286,7 +2287,7 @@ - NetworkEmulatorDelayJitterSec= + DelayJitterSec= Specifies the chosen delay to be added to the packets outgoing to the network interface. Defaults to unset. @@ -2294,7 +2295,7 @@ - NetworkEmulatorPacketLimit= + PacketLimit= Specifies the maximum number of packets the qdisc may hold queued at a time. An unsigned integer ranges 0 to 4294967294. Defaults to 1000. @@ -2302,7 +2303,7 @@ - NetworkEmulatorLossRate= + LossRate= 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. @@ -2310,15 +2311,31 @@ - NetworkEmulatorDuplicateRate= + DuplicateRate= Specifies that the chosen percent of packets is duplicated before queuing them. Takes a percentage value, suffixed with "%". Defaults to unset. + + + + + [TokenBufferFilter] Section Options + The [TokenBufferFilter] section manages the queueing discipline (qdisc) of + token buffer filter (tbf). + + + + Parent= + + Specifies the parent Queueing Discipline (qdisc). Takes one of root, + clsact or ingress. Defaults to root. + + - TokenBufferFilterLatencySec= + LatencySec= Specifies the latency parameter, which specifies the maximum amount of time a packet can sit in the Token Buffer Filter (TBF). Defaults to unset. @@ -2326,7 +2343,7 @@ - TokenBufferFilterLimitSize= + LimitSize= 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 @@ - TokenBufferFilterBurst= + Burst= 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 @@ - TokenBufferFilterRate= + Rate= 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 @@ - TokenBufferFilterMPUBytes= + MPUBytes= 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 @@ - TokenBufferFilterPeakRate= + PeakRate= 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 @@ - TokenBufferFilterMTUBytes= + MTUBytes= 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. + + + + [StochasticFairnessQueueing] Section Options + The [StochasticFairnessQueueing] section manages the queueing discipline + (qdisc) of stochastic fairness queueing (sfq). + + - StochasticFairnessQueueingPerturbPeriodSec= + Parent= - Specifies the interval in seconds for queue algorithm perturbation. Defaults to unset. + Specifies the parent Queueing Discipline (qdisc). Takes one of root, + clsact or ingress. Defaults to root. - ControlledDelayPacketLimit= + PerturbPeriodSec= + + Specifies the interval in seconds for queue algorithm perturbation. Defaults to unset. + + + + + + + [ControlledDelay] Section Options + The [ControlledDelay] section manages the queueing discipline (qdisc) of + controlled delay (CoDel). + + + + Parent= + + Specifies the parent Queueing Discipline (qdisc). Takes one of root, + clsact or ingress. Defaults to root. + + + + + PacketLimit= 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. @@ -2396,7 +2445,7 @@ - ControlledDelayTargetSec= + TargetSec= Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay. Defaults to unset and kernel's default is used. @@ -2404,7 +2453,7 @@ - ControlledDelayIntervalSec= + IntervalSec= 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. @@ -2412,7 +2461,7 @@ - ControlledDelayECN= + ECN= Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to unset and kernel's default is used. @@ -2420,15 +2469,31 @@ - ControlledDelayCEThresholdSec= + CEThresholdSec= 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. + + + + + [FairQueueingControlledDelay] Section Options + The [FairQueueingControlledDelay] section manages the queueing discipline + (qdisc) of fair queuing controlled delay (FQ-CoDel). + + + + Parent= + + Specifies the parent Queueing Discipline (qdisc). Takes one of root, + clsact or ingress. Defaults to root. + + - FairQueuingControlledDelayPacketLimit= + PacketLimit= 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. @@ -2436,7 +2501,7 @@ - FairQueuingControlledDelayMemoryLimit= + MemoryLimit= 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 @@ - FairQueuingControlledDelayFlows= + Flows= Specifies the number of flows into which the incoming packets are classified. Defaults to unset and kernel's default is used. @@ -2453,7 +2518,7 @@ - FairQueuingControlledDelayTargetSec= + TargetSec= Takes a timespan. Specifies the acceptable minimum standing/persistent queue delay. Defaults to unset and kernel's default is used. @@ -2461,7 +2526,7 @@ - FairQueuingControlledDelayIntervalSec= + IntervalSec= 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. @@ -2469,7 +2534,7 @@ - FairQueuingControlledDelayQuantum= + Quantum= 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 @@ - FairQueuingControlledDelayECN= + ECN= Takes a boolean. This can be used to mark packets instead of dropping them. Defaults to unset and kernel's default is used. @@ -2486,15 +2551,31 @@ - FairQueuingControlledDelayCEThresholdSec= + CEThresholdSec= 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. + + + + + [FairQueueTrafficPolicing] Section Options + The [FairQueueTrafficPolicing] section manages the queueing discipline + (qdisc) of fair queue traffic policing (FQ). + + + + Parent= + + Specifies the parent Queueing Discipline (qdisc). Takes one of root, + clsact or ingress. Defaults to root. + + - FairQueueTrafficPolicingPacketLimit= + PacketLimit= 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. @@ -2502,7 +2583,7 @@ - FairQueueTrafficPolicingFlowLimit= + FlowLimit= Specifies the hard limit on the maximum number of packets queued per flow. Defaults to unset and kernel's default is used. @@ -2510,7 +2591,7 @@ - FairQueueTrafficPolicingQuantum= + Quantum= 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 @@ - FairQueueTrafficPolicingInitialQuantum= + InitialQuantum= 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 @@ - FairQueueTrafficPolicingMaximumRate= + MaximumRate= 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 @@ - FairQueueTrafficPolicingBuckets= + Buckets= Specifies the size of the hash table used for flow lookups. Defaults to unset and kernel's default is used. @@ -2547,7 +2628,7 @@ - FairQueueTrafficPolicingOrphanMask= + OrphanMask= 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 @@ - FairQueueTrafficPolicingPacing= + Pacing= Takes a boolean, and enables or disables flow pacing. Defaults to unset and kernel's default is used. @@ -2564,13 +2645,12 @@ - FairQueueTrafficPolicingCEThresholdSec= + CEThresholdSec= 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. - 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 From 60ed2dcfc7ea7bd9e561e0040d3953868abba293 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 4 Feb 2020 17:22:41 +0100 Subject: [PATCH 2/3] =?UTF-8?q?network:=20TokenBufferFilter=E2=86=92TokenB?= =?UTF-8?q?ucketFilter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This never made into a release, so we can change the name with impunity. Noticed by Davide Pesavento. --- NEWS | 2 +- man/systemd.network.xml | 8 ++--- src/network/networkd-network-gperf.gperf | 16 +++++----- src/network/networkd-network.c | 2 +- src/network/tc/tbf.c | 32 +++++++++---------- src/network/tc/tbf.h | 10 +++--- .../fuzz-network-parser/directives.network | 2 +- .../conf/25-qdisc-tbf-and-sfq.network | 2 +- 8 files changed, 37 insertions(+), 37 deletions(-) diff --git a/NEWS b/NEWS index 74dc7e368e..169c97f430 100644 --- a/NEWS +++ b/NEWS @@ -125,7 +125,7 @@ CHANGES WITH 245 in spe: marking a process so that it is killed implicitly whenever the event source watching it is freed). - * systemd-networkd gained support for configuring Token Buffer Filter + * systemd-networkd gained support for configuring Token Bucket Filter (TBF) parameters in its qdisc configuration support. Similar, support for Stochastic Fairness Queuing (SFQ), Controlled-Delay Active Queue Management (CoDel), Fair Queue (FQ) has been added. diff --git a/man/systemd.network.xml b/man/systemd.network.xml index e3bd1bbda2..ad03be6db7 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2321,9 +2321,9 @@ - [TokenBufferFilter] Section Options - The [TokenBufferFilter] section manages the queueing discipline (qdisc) of - token buffer filter (tbf). + [TokenBucketFilter] Section Options + The [TokenBucketFilter] section manages the queueing discipline (qdisc) of + token bucket filter (tbf). @@ -2338,7 +2338,7 @@ LatencySec= Specifies the latency parameter, which specifies the maximum amount of time a - packet can sit in the Token Buffer Filter (TBF). Defaults to unset. + packet can sit in the Token Bucket Filter (TBF). Defaults to unset. diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 490e1b12ed..d29814820d 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -284,14 +284,14 @@ NetworkEmulator.DuplicateRate, config_parse_network_emulator_rate, 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 +TokenBucketFilter.Parent, config_parse_qdisc_parent, QDISC_KIND_TBF, 0 +TokenBucketFilter.Rate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.Burst, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.LimitSize, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.MTUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.MPUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.PeakRate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0 +TokenBucketFilter.LatencySec, config_parse_token_bucket_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) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 8a8f420897..6f49e2a9f4 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -487,7 +487,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "FairQueueingControlledDelay\0" "NetworkEmulator\0" "StochasticFairnessQueueing\0" - "TokenBufferFilter\0", + "TokenBucketFilter\0", config_item_perf_lookup, network_network_gperf_lookup, CONFIG_PARSE_WARN, network); if (r < 0) diff --git a/src/network/tc/tbf.c b/src/network/tc/tbf.c index 3b068b4ab4..0682ab4cc6 100644 --- a/src/network/tc/tbf.c +++ b/src/network/tc/tbf.c @@ -15,10 +15,10 @@ #include "tc-util.h" #include "util.h" -static int token_buffer_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { +static int token_bucket_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { uint32_t rtab[256], ptab[256]; struct tc_tbf_qopt opt = {}; - TokenBufferFilter *tbf; + TokenBucketFilter *tbf; int r; assert(link); @@ -110,7 +110,7 @@ static int token_buffer_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink return 0; } -int config_parse_token_buffer_filter_size( +int config_parse_token_bucket_filter_size( const char *unit, const char *filename, unsigned line, @@ -124,7 +124,7 @@ int config_parse_token_buffer_filter_size( _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; Network *network = data; - TokenBufferFilter *tbf; + TokenBucketFilter *tbf; uint64_t k; int r; @@ -186,7 +186,7 @@ int config_parse_token_buffer_filter_size( return 0; } -int config_parse_token_buffer_filter_latency( +int config_parse_token_bucket_filter_latency( const char *unit, const char *filename, unsigned line, @@ -200,7 +200,7 @@ int config_parse_token_buffer_filter_latency( _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; Network *network = data; - TokenBufferFilter *tbf; + TokenBucketFilter *tbf; usec_t u; int r; @@ -240,45 +240,45 @@ int config_parse_token_buffer_filter_latency( return 0; } -static int token_buffer_filter_verify(QDisc *qdisc) { - TokenBufferFilter *tbf = TBF(qdisc); +static int token_bucket_filter_verify(QDisc *qdisc) { + TokenBucketFilter *tbf = TBF(qdisc); if (tbf->limit > 0 && tbf->latency > 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "%s: Specifying both LimitSize= and LatencySec= is not allowed. " - "Ignoring [TokenBufferFilter] section from line %u.", + "Ignoring [TokenBucketFilter] 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 LimitSize= or LatencySec= is required. " - "Ignoring [TokenBufferFilter] section from line %u.", + "Ignoring [TokenBucketFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->rate == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "%s: Rate= is mandatory. " - "Ignoring [TokenBufferFilter] section from line %u.", + "Ignoring [TokenBucketFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); if (tbf->burst == 0) return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "%s: Burst= is mandatory. " - "Ignoring [TokenBufferFilter] section from line %u.", + "Ignoring [TokenBucketFilter] 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: MTUBytes= is mandatory when PeakRate= is specified. " - "Ignoring [TokenBufferFilter] section from line %u.", + "Ignoring [TokenBucketFilter] section from line %u.", qdisc->section->filename, qdisc->section->line); return 0; } const QDiscVTable tbf_vtable = { - .object_size = sizeof(TokenBufferFilter), + .object_size = sizeof(TokenBucketFilter), .tca_kind = "tbf", - .fill_message = token_buffer_filter_fill_message, - .verify = token_buffer_filter_verify + .fill_message = token_bucket_filter_fill_message, + .verify = token_bucket_filter_verify }; diff --git a/src/network/tc/tbf.h b/src/network/tc/tbf.h index 5695dbc07b..b66aef206c 100644 --- a/src/network/tc/tbf.h +++ b/src/network/tc/tbf.h @@ -6,7 +6,7 @@ #include "qdisc.h" #include "time-util.h" -typedef struct TokenBufferFilter { +typedef struct TokenBucketFilter { QDisc meta; uint64_t rate; @@ -16,10 +16,10 @@ typedef struct TokenBufferFilter { usec_t latency; size_t limit; size_t mpu; -} TokenBufferFilter; +} TokenBucketFilter; -DEFINE_QDISC_CAST(TBF, TokenBufferFilter); +DEFINE_QDISC_CAST(TBF, TokenBucketFilter); extern const QDiscVTable tbf_vtable; -CONFIG_PARSER_PROTOTYPE(config_parse_token_buffer_filter_latency); -CONFIG_PARSER_PROTOTYPE(config_parse_token_buffer_filter_size); +CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_latency); +CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_size); diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 70d5245749..52bf005f1b 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -277,7 +277,7 @@ DelayJitterSec= LossRate= DuplicateRate= PacketLimit= -[TokenBufferFilter] +[TokenBucketFilter] Parent= Rate= Burst= 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 680dd6b46d..e10317de91 100644 --- a/test/test-network/conf/25-qdisc-tbf-and-sfq.network +++ b/test/test-network/conf/25-qdisc-tbf-and-sfq.network @@ -5,7 +5,7 @@ Name=test1 IPv6AcceptRA=no Address=10.1.2.4/16 -[TokenBufferFilter] +[TokenBucketFilter] Parent=root Rate=1G Burst=5K From ca58d00c68bce8ac33439fccd81491bf04205fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 4 Feb 2020 17:35:12 +0100 Subject: [PATCH 3/3] =?UTF-8?q?network:=20FairQueueTrafficPolicing?= =?UTF-8?q?=E2=86=92FairQueueing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This never made into a release, so we can change the name with impunity. Suggested by Davide Pesavento. I opted to add the "ing" ending. "Fair queuing" is the name of the general concept and algorithm, and "Fair queue" is mostly used for the implementation name. --- NEWS | 2 +- man/systemd.network.xml | 4 ++-- src/network/networkd-network-gperf.gperf | 20 +++++++++---------- src/network/networkd-network.c | 2 +- src/network/tc/fq.c | 16 +++++++-------- src/network/tc/fq.h | 6 +++--- .../fuzz-network-parser/directives.network | 2 +- .../conf/25-qdisc-fq-codel.network | 2 +- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/NEWS b/NEWS index 169c97f430..7ec0057e68 100644 --- a/NEWS +++ b/NEWS @@ -128,7 +128,7 @@ CHANGES WITH 245 in spe: * systemd-networkd gained support for configuring Token Bucket Filter (TBF) parameters in its qdisc configuration support. Similar, support for Stochastic Fairness Queuing (SFQ), Controlled-Delay Active - Queue Management (CoDel), Fair Queue (FQ) has been added. + Queue Management (CoDel), Fair Queueing (FQ) has been added. * systemd-networkd gained support for Intermediate Functional Block (IFB) network devices. diff --git a/man/systemd.network.xml b/man/systemd.network.xml index ad03be6db7..37c5cfb485 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -2561,8 +2561,8 @@ - [FairQueueTrafficPolicing] Section Options - The [FairQueueTrafficPolicing] section manages the queueing discipline + [FairQueueing] Section Options + The [FairQueueing] section manages the queueing discipline (qdisc) of fair queue traffic policing (FQ). diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index d29814820d..80500332e6 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -257,16 +257,16 @@ ControlledDelay.TargetSec, config_parse_controlled_delay_usec, 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 +FairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0 +FairQueueing.PacketLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueing.FlowLimit, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueing.Quantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0 +FairQueueing.InitialQuantum, config_parse_fair_queue_traffic_policing_size, QDISC_KIND_FQ, 0 +FairQueueing.MaximumRate, config_parse_fair_queue_traffic_policing_max_rate, QDISC_KIND_FQ, 0 +FairQueueing.Buckets, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueing.OrphanMask, config_parse_fair_queue_traffic_policing_u32, QDISC_KIND_FQ, 0 +FairQueueing.Pacing, config_parse_fair_queue_traffic_policing_bool, QDISC_KIND_FQ, 0 +FairQueueing.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 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 6f49e2a9f4..1e293dfd64 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -483,7 +483,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "TrafficControlQueueingDiscipline\0" "CAN\0" "ControlledDelay\0" - "FairQueueTrafficPolicing\0" + "FairQueueing\0" "FairQueueingControlledDelay\0" "NetworkEmulator\0" "StochasticFairnessQueueing\0" diff --git a/src/network/tc/fq.c b/src/network/tc/fq.c index 30ec71cbad..28ee64fa69 100644 --- a/src/network/tc/fq.c +++ b/src/network/tc/fq.c @@ -12,7 +12,7 @@ #include "util.h" static int fair_queue_traffic_policing_init(QDisc *qdisc) { - FairQueueTrafficPolicing *fq; + FairQueueing *fq; assert(qdisc); @@ -25,7 +25,7 @@ static int fair_queue_traffic_policing_init(QDisc *qdisc) { } static int fair_queue_traffic_policing_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) { - FairQueueTrafficPolicing *fq; + FairQueueing *fq; int r; assert(link); @@ -115,7 +115,7 @@ int config_parse_fair_queue_traffic_policing_u32( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueueTrafficPolicing *fq; + FairQueueing *fq; Network *network = data; uint32_t *p; int r; @@ -178,7 +178,7 @@ int config_parse_fair_queue_traffic_policing_size( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueueTrafficPolicing *fq; + FairQueueing *fq; Network *network = data; uint64_t sz; uint32_t *p; @@ -245,7 +245,7 @@ int config_parse_fair_queue_traffic_policing_bool( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueueTrafficPolicing *fq; + FairQueueing *fq; Network *network = data; int r; @@ -297,7 +297,7 @@ int config_parse_fair_queue_traffic_policing_usec( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueueTrafficPolicing *fq; + FairQueueing *fq; Network *network = data; usec_t sec; int r; @@ -356,7 +356,7 @@ int config_parse_fair_queue_traffic_policing_max_rate( void *userdata) { _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL; - FairQueueTrafficPolicing *fq; + FairQueueing *fq; Network *network = data; uint64_t sz; int r; @@ -404,7 +404,7 @@ int config_parse_fair_queue_traffic_policing_max_rate( const QDiscVTable fq_vtable = { .init = fair_queue_traffic_policing_init, - .object_size = sizeof(FairQueueTrafficPolicing), + .object_size = sizeof(FairQueueing), .tca_kind = "fq", .fill_message = fair_queue_traffic_policing_fill_message, }; diff --git a/src/network/tc/fq.h b/src/network/tc/fq.h index 9bce285605..0e8ced03d0 100644 --- a/src/network/tc/fq.h +++ b/src/network/tc/fq.h @@ -5,7 +5,7 @@ #include "conf-parser.h" #include "qdisc.h" -typedef struct FairQueueTrafficPolicing { +typedef struct FairQueueing { QDisc meta; uint32_t packet_limit; @@ -17,9 +17,9 @@ typedef struct FairQueueTrafficPolicing { uint32_t orphan_mask; int pacing; usec_t ce_threshold_usec; -} FairQueueTrafficPolicing; +} FairQueueing; -DEFINE_QDISC_CAST(FQ, FairQueueTrafficPolicing); +DEFINE_QDISC_CAST(FQ, FairQueueing); extern const QDiscVTable fq_vtable; CONFIG_PARSER_PROTOTYPE(config_parse_fair_queue_traffic_policing_u32); diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 52bf005f1b..180a30c32c 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -299,7 +299,7 @@ TargetSec= IntervalSec= CEThresholdSec= ECN= -[FairQueueTrafficPolicing] +[FairQueueing] Parent= PacketLimit= FlowLimit= diff --git a/test/test-network/conf/25-qdisc-fq-codel.network b/test/test-network/conf/25-qdisc-fq-codel.network index f682b426e7..de74c1b5d2 100644 --- a/test/test-network/conf/25-qdisc-fq-codel.network +++ b/test/test-network/conf/25-qdisc-fq-codel.network @@ -5,7 +5,7 @@ Name=dummy98 IPv6AcceptRA=no Address=10.1.2.3/16 -[FairQueueTrafficPolicing] +[FairQueueing] Parent=root PacketLimit=1000 FlowLimit=200