Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ fun getAllAIGeneratedValidators(): Map<Validator, OptionValueInformation> {
Validator("config_parse_iaid", "AF_INET") to ConfigParseIaidOptionValue() as OptionValueInformation,
Validator("config_parse_in_addr_non_null", "AF_INET") to ConfigParseInAddrNonNullOptionValue() as OptionValueInformation,
Validator("config_parse_ip_masquerade", "0") to ConfigParseIpMasqueradeOptionValue() as OptionValueInformation,
Validator("config_parse_ip_protocol", "true") to ConfigParseIpProtocolOptionValue() as OptionValueInformation,
Validator("config_parse_ip_reverse_path_filter", "0") to ConfigParseIpReversePathFilterOptionValue() as OptionValueInformation,
Validator("config_parse_ipoib_mode", "0") to ConfigParseIpoibModeOptionValue() as OptionValueInformation,
Validator("config_parse_ipv4_force_igmp_version", "0") to ConfigParseIpv4ForceIgmpVersionOptionValue() as OptionValueInformation,
Expand Down Expand Up @@ -163,11 +164,13 @@ fun getAllAIGeneratedValidators(): Map<Validator, OptionValueInformation> {
Validator("config_parse_rx_tx_queues", "0") to ConfigParseRxTxQueuesOptionValue() as OptionValueInformation,
Validator("config_parse_service_restart_mode", "0") to ConfigParseServiceRestartModeOptionValue() as OptionValueInformation,
Validator("config_parse_socket_defer_trigger", "0") to ConfigParseSocketDeferTriggerOptionValue() as OptionValueInformation,
Validator("config_parse_sr_iov_link_state", "0") to ConfigParseSrIovLinkStateOptionValue() as OptionValueInformation,
Validator("config_parse_sr_iov_num_vfs", "0") to ConfigParseSrIovNumVfsOptionValue() as OptionValueInformation,
Validator("config_parse_sr_iov_vlan_proto", "0") to ConfigParseSrIovVlanProtoOptionValue() as OptionValueInformation,
Validator("config_parse_swap_priority", "0") to ConfigParseSwapPriorityOptionValue() as OptionValueInformation,
Validator("config_parse_tcp_window", "0") to ConfigParseTcpWindowOptionValue() as OptionValueInformation,
Validator("config_parse_timezone_mode", "0") to ConfigParseTimezoneModeOptionValue() as OptionValueInformation,
Validator("config_parse_trigger_unit", "0") to ConfigParseTriggerUnitOptionValue() as OptionValueInformation,
Validator("config_parse_tunnel_mode", "0") to ConfigParseTunnelModeOptionValue() as OptionValueInformation,
Validator("config_parse_txqueuelen", "0") to ConfigParseTxqueuelenOptionValue() as OptionValueInformation,
Validator("config_parse_unit_condition_string", "CONDITION_AC_POWER") to ConfigParseUnitConditionStringOptionValue() as OptionValueInformation,
Expand All @@ -186,6 +189,38 @@ fun getAllAIGeneratedValidators(): Map<Validator, OptionValueInformation> {
Validator("config_parse_wlan_iftype", "0") to ConfigParseWlanIftypeOptionValue() as OptionValueInformation,
Validator("config_parse_ad_actor_system", "0") to ConfigParseAdActorSystemOptionValue() as OptionValueInformation,
Validator("config_parse_address_section", "ADDRESS_SCOPE") to ConfigParseAddressSectionAddressScopeOptionValue() as OptionValueInformation,
Validator("config_parse_string", "CONFIG_PARSE_STRING_SAFE") to ConfigParseStringOptionValue() as OptionValueInformation,
Validator("config_parse_bind_user_shell", "0") to ConfigParseBindUserShellOptionValue() as OptionValueInformation,
Validator("config_parse_cake_priority_queueing_preset", "QDISC_KIND_CAKE") to ConfigParseCakePriorityQueueingPresetOptionValue() as OptionValueInformation,
Validator("config_parse_hostname", "0") to ConfigParseHostnameOptionValue() as OptionValueInformation,
Validator("config_parse_device_allow", "0") to ConfigParseDeviceAllowOptionValue() as OptionValueInformation,
Validator("config_parse_ifname", "0") to ConfigParseIfnameOptionValue() as OptionValueInformation,
Validator("config_parse_dns", "0") to ConfigParseDnsOptionValue() as OptionValueInformation,
Validator("config_parse_dns_name", "0") to ConfigParseDnsNameOptionValue() as OptionValueInformation,
Validator("config_parse_wol", "0") to ConfigParseWolOptionValue() as OptionValueInformation,
Validator("config_parse_dnssec_mode", "0") to ConfigParseDnssecModeOptionValue() as OptionValueInformation,
Validator("config_parse_protect_hostname", "0") to ConfigParseProtectHostnameOptionValue() as OptionValueInformation,
Validator("config_parse_ip_tos", "0") to ConfigParseIpTosOptionValue() as OptionValueInformation,
Validator("config_parse_required_family_for_online", "0") to ConfigParseRequiredFamilyForOnlineOptionValue() as OptionValueInformation,
Validator("config_parse_fq_bool", "QDISC_KIND_FQ") to ConfigParseFairQueueingBoolOptionValue() as OptionValueInformation,
Validator("config_parse_fq_size", "QDISC_KIND_FQ") to ConfigParseFairQueueingSizeOptionValue() as OptionValueInformation,
Validator("config_parse_fq_u32", "QDISC_KIND_FQ") to ConfigParseFairQueueingU32OptionValue() as OptionValueInformation,
Validator("config_parse_si_uint64", "0") to ConfigParseSiUint64OptionValue() as OptionValueInformation,
Validator("config_parse_fdb_vlan_id", "0") to ConfigParseFdbVlanIdOptionValue() as OptionValueInformation,
Validator("config_parse_dhcp_socket_priority", "0") to ConfigParseDhcpSocketPriorityOptionValue() as OptionValueInformation,
Validator("config_parse_cake_rtt", "QDISC_KIND_CAKE") to ConfigParseCakeRttOptionValue() as OptionValueInformation,
Validator("config_parse_coalesce_sec", "0") to ConfigParseCoalesceSecOptionValue() as OptionValueInformation,
Validator("config_parse_codel_usec", "QDISC_KIND_CODEL") to ConfigParseControlledDelayUsecOptionValue() as OptionValueInformation,
Validator("config_parse_tbf_latency", "QDISC_KIND_TBF") to ConfigParseTokenBucketFilterLatencyOptionValue() as OptionValueInformation,
Validator("config_parse_service_timeout", "0") to ConfigParseServiceTimeoutOptionValue() as OptionValueInformation,
Validator("config_parse_service_timeout_abort", "0") to ConfigParseServiceTimeoutAbortOptionValue() as OptionValueInformation,
Validator("config_parse_job_running_timeout_sec", "0") to ConfigParseJobRunningTimeoutSecOptionValue() as OptionValueInformation,
Validator("config_parse_exec_secure_bits", "0") to ConfigParseExecSecureBitsOptionValue() as OptionValueInformation,
Validator("config_parse_namespace_flags", "0") to ConfigParseNamespaceFlagsOptionValue() as OptionValueInformation,
Validator("config_parse_can_bitrate", "0") to ConfigParseCanBitrateOptionValue() as OptionValueInformation,
Validator("config_parse_can_time_quanta", "0") to ConfigParseCanTimeQuantaOptionValue() as OptionValueInformation,
Validator("config_parse_fdname", "0") to ConfigParseFdnameOptionValue() as OptionValueInformation,
Validator("config_parse_udev_property_name", "0") to ConfigParseUdevPropertyNameOptionValue() as OptionValueInformation,

)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for Files.BindUserShell (.nspawn).
* C Function: config_parse_bind_user_shell(0)
*
* The C path calls parse_user_shell which accepts either:
* - an absolute, normalized path (path_is_absolute && path_is_normalized), or
* - a boolean (parse_boolean)
*/
class ConfigParseBindUserShellOptionValue : SimpleGrammarOptionValues(
"config_parse_bind_user_shell",
SequenceCombinator(
AlternativeCombinator(
BOOLEAN,
RegexTerminal("/[^\\s]+", "/[^\\s]+")
),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for CAKE.PriorityQueueingPreset (.network).
* C Function: config_parse_cake_priority_queueing_preset(QDISC_KIND_CAKE)
*
* Accepts the 5 entries in cake_priority_queueing_preset_table:
* besteffort, precedence, diffserv3, diffserv4, diffserv8.
*/
class ConfigParseCakePriorityQueueingPresetOptionValue : SimpleGrammarOptionValues(
"config_parse_cake_priority_queueing_preset",
SequenceCombinator(
FlexibleLiteralChoiceTerminal("besteffort", "precedence", "diffserv3", "diffserv4", "diffserv8"),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for CAKE.RTTSec (.network).
* C Function: config_parse_cake_rtt(QDISC_KIND_CAKE)
*
* Calls parse_sec, which accepts "infinity", a fractional or integer number
* with any of systemd's time-unit suffixes, and compound forms like "1h 30s".
*/
class ConfigParseCakeRttOptionValue : SimpleGrammarOptionValues(
"config_parse_cake_rtt",
SequenceCombinator(TIME_VALUE, EOF())
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for CAN.BitRate and CAN.DataBitRate.
* C Function: config_parse_can_bitrate(0) in src/network/networkd-can.c.
*
* Internally calls parse_size(rvalue, 1000, &sz). parse_size accepts a decimal
* number (with optional fractional part) optionally suffixed with B/K/M/G/T/P/E.
* The result must fit in a uint32_t; the range check is not enforced here.
*/
class ConfigParseCanBitrateOptionValue : SimpleGrammarOptionValues(
"config_parse_can_bitrate",
SequenceCombinator(
RegexTerminal(
"[0-9]+(?:\\.[0-9]+)?\\s*[BKMGTPE]?",
"[0-9]+(?:\\.[0-9]+)?\\s*[BKMGTPE]?"
),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for CAN.TimeQuantaNSec, CAN.DataTimeQuantaNSec.
* C Function: config_parse_can_time_quanta(0)
*
* Per parse_nsec, accepts "infinity", a fractional or integer number with any of
* systemd's time-unit suffixes (default unit: nanoseconds), and compound forms
* like "1ms 500us".
*/
class ConfigParseCanTimeQuantaOptionValue : SimpleGrammarOptionValues(
"config_parse_can_time_quanta",
SequenceCombinator(TIME_VALUE, EOF())
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for Link.{RxCoalesceSec, RxCoalesceIrqSec, TxCoalesceSec, TxCoalesceIrqSec,
* StatisticsBlockCoalesceSec, RxCoalesceLowSec, TxCoalesceLowSec,
* RxCoalesceHighSec, TxCoalesceHighSec, CoalescePacketRateSampleIntervalSec}.
* C Function: config_parse_coalesce_sec(0)
*
* Calls parse_sec, which accepts "infinity", a fractional or integer number with any
* of systemd's time-unit suffixes, and compound forms like "1h 30s".
*/
class ConfigParseCoalesceSecOptionValue : SimpleGrammarOptionValues(
"config_parse_coalesce_sec",
SequenceCombinator(TIME_VALUE, EOF())
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for ControlledDelay.TargetSec, ControlledDelay.IntervalSec, ControlledDelay.CEThresholdSec
* C Function: config_parse_codel_usec(QDISC_KIND_CODEL)
*
* Calls parse_sec, which accepts "infinity", a fractional or integer number with any
* of systemd's time-unit suffixes, and compound forms like "1h 30s".
*/
class ConfigParseControlledDelayUsecOptionValue : SimpleGrammarOptionValues(
"config_parse_codel_usec",
SequenceCombinator(TIME_VALUE, EOF())
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for {Service,Socket,Mount,Swap,Slice,Scope}.DeviceAllow.
* C Function: config_parse_device_allow(0)
*
* Per valid_device_allow_pattern + cgroup_device_permissions_from_string:
* - device specifier is either a /dev/... path or a block-/char- prefixed device class
* - optional whitespace + permissions, where permissions is a single token of [rwm]+
*/
class ConfigParseDeviceAllowOptionValue : SimpleGrammarOptionValues(
"config_parse_device_allow",
SequenceCombinator(
AlternativeCombinator(
RegexTerminal("(block-|char-)\\S+", "(block-|char-)\\S+"),
RegexTerminal("/dev/\\S+", "/dev/\\S+")
),
ZeroOrOne(
SequenceCombinator(
WhitespaceTerminal(),
RegexTerminal("[rwm]+", "[rwm]+")
)
),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.*
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues

/**
* Validator for DHCPv4.SocketPriority
* C Function: config_parse_dhcp_socket_priority(0)
* Used by Options: DHCPv4.SocketPriority
*
* The C implementation uses safe_atoi() with no range restriction beyond what fits in a
* signed 32-bit int. SO_PRIORITY values 0..6 are typical, but the parser itself accepts
* any signed int. Empty values are allowed (clears the setting) and so are skipped here.
*/
class ConfigParseDhcpSocketPriorityOptionValue : SimpleGrammarOptionValues(
"config_parse_dhcp_socket_priority",
SequenceCombinator(
IntegerTerminal(Int.MIN_VALUE.toLong(), Int.MAX_VALUE.toLong() + 1L),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.EOF
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.RegexTerminal
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.SequenceCombinator

/**
* Validator for config_parse_dns_name(0).
*
* Used by .network DHCPServer.Domain, DHCPServer.BootServerName, DHCPServer.LocalLeaseDomain.
*
* Mirrors dns_name_is_valid (no DNS_LABEL_LDH flag): each label is a non-empty
* sequence of any characters except '.' (label separator) and '\' (escape
* introducer); labels are joined by single dots; an optional trailing dot
* denotes a fully-qualified name. Empty labels (e.g. ".." or a leading ".")
* are rejected. This is intentionally far more permissive than hostname
* validation — leading/trailing hyphens, underscores, spaces, and most
* printable punctuation are all accepted by the C validator.
*/
class ConfigParseDnsNameOptionValue : SimpleGrammarOptionValues(
"config_parse_dns_name",
SequenceCombinator(
RegexTerminal(
"[^.\\\\\\p{Cntrl}]+(?:\\.[^.\\\\\\p{Cntrl}]+)*\\.?",
"[^.\\\\\\p{Cntrl}]+(?:\\.[^.\\\\\\p{Cntrl}]+)*\\.?"
),
EOF()
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.ai

import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.SimpleGrammarOptionValues
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.AlternativeCombinator
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.EOF
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.IPV4_ADDR
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.IPV6_ADDR
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.IntegerTerminal
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.LiteralChoiceTerminal
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.RegexTerminal
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.SequenceCombinator
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.WhitespaceTerminal
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.ZeroOrMore
import net.sjrx.intellij.plugins.systemdunitfiles.semanticdata.optionvalues.grammar.ZeroOrOne

private val DNS_PORT = IntegerTerminal(0, 65536)
private val DNS_IFACE = RegexTerminal("[A-Za-z0-9_][A-Za-z0-9_.-]*", "[A-Za-z0-9_][A-Za-z0-9_.-]*")
private val DNS_IFACE_SUFFIX = SequenceCombinator(LiteralChoiceTerminal("%"), DNS_IFACE)

private val DNS_IPV4_ENTRY = SequenceCombinator(
IPV4_ADDR,
ZeroOrOne(SequenceCombinator(LiteralChoiceTerminal(":"), DNS_PORT)),
ZeroOrOne(DNS_IFACE_SUFFIX)
)
private val DNS_IPV6_BRACKETED_ENTRY = SequenceCombinator(
LiteralChoiceTerminal("["),
IPV6_ADDR,
LiteralChoiceTerminal("]"),
ZeroOrOne(SequenceCombinator(LiteralChoiceTerminal(":"), DNS_PORT)),
ZeroOrOne(DNS_IFACE_SUFFIX)
)
private val DNS_IPV6_BARE_ENTRY = SequenceCombinator(
IPV6_ADDR,
ZeroOrOne(DNS_IFACE_SUFFIX)
)
private val DNS_ENTRY = AlternativeCombinator(
DNS_IPV6_BRACKETED_ENTRY,
DNS_IPV4_ENTRY,
DNS_IPV6_BARE_ENTRY
)

/**
* Validator for Network.DNS (.network).
*
* C Function: config_parse_dns(0)
*
* Accepts a whitespace-separated list of DNS server addresses. Each entry is an IPv4
* or IPv6 address. IPv4 addresses may optionally include a port suffix (":port") and
* an interface suffix ("%iface"). IPv6 addresses can be bare, or bracketed with a port
* ("[ipv6]:port") and may also have an interface suffix.
*/
class ConfigParseDnsOptionValue : SimpleGrammarOptionValues(
"config_parse_dns",
SequenceCombinator(
DNS_ENTRY,
ZeroOrMore(SequenceCombinator(WhitespaceTerminal(), DNS_ENTRY)),
EOF()
)
)
Loading
Loading