diff --git a/REFERENCE.md b/REFERENCE.md
index 42295a2e..1fffe4c9 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -62,6 +62,92 @@
* [`Systemd::Capabilities`](#Systemd--Capabilities): Defines allowed capabilities
* [`Systemd::CoredumpSettings`](#Systemd--CoredumpSettings): Configurations for coredump.conf
* [`Systemd::Dropin`](#Systemd--Dropin): custom datatype that validates filenames/paths for valid systemd dropin files
+* [`Systemd::Interface`](#Systemd--Interface): network interface definition
+* [`Systemd::Interface::Link`](#Systemd--Interface--Link): interface definition
+* [`Systemd::Interface::Link::Link`](#Systemd--Interface--Link--Link): interface definition
+* [`Systemd::Interface::Link::Link_advertise`](#Systemd--Interface--Link--Link_advertise): interface definition
+* [`Systemd::Interface::Link::Match`](#Systemd--Interface--Link--Match): interface definition
+* [`Systemd::Interface::Link::Sr_iov`](#Systemd--Interface--Link--Sr_iov): interface definition
+* [`Systemd::Interface::Netdev`](#Systemd--Interface--Netdev): interface netdev configs see: https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Bareudp`](#Systemd--Interface--Netdev--Bareudp): netdev BareUDP section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Batmanadvanced`](#Systemd--Interface--Netdev--Batmanadvanced): netdev BatmanAdvanced section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Bond`](#Systemd--Interface--Netdev--Bond): netdev Bond section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Bridge`](#Systemd--Interface--Netdev--Bridge): netdev Bridge section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Foooverudp`](#Systemd--Interface--Netdev--Foooverudp): netdev FooOverUDP section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Geneve`](#Systemd--Interface--Netdev--Geneve): netdev GENEVE section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Ipoib`](#Systemd--Interface--Netdev--Ipoib): netdev IPoIB section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Ipvlan`](#Systemd--Interface--Netdev--Ipvlan): netdev IPVLAN and IPVTAP section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::L2tp`](#Systemd--Interface--Netdev--L2tp): netdev L2TP section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::L2tpsession`](#Systemd--Interface--Netdev--L2tpsession): netdev L2TPSession section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Macsec`](#Systemd--Interface--Netdev--Macsec): netdev MACsec section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Macsecreceiveassociation`](#Systemd--Interface--Netdev--Macsecreceiveassociation): netdev MACsecReceiveAssociation section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Macsecreceivechannel`](#Systemd--Interface--Netdev--Macsecreceivechannel): netdev MACsecReceiveChannel section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Macsectransmitassociation`](#Systemd--Interface--Netdev--Macsectransmitassociation): netdev MACsecTransmitAssociation section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Macvlan`](#Systemd--Interface--Netdev--Macvlan): netdev MACVLAN and MACVTAP section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Match`](#Systemd--Interface--Netdev--Match): netdev match section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Netdev`](#Systemd--Interface--Netdev--Netdev): netdev NetDev section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Peer`](#Systemd--Interface--Netdev--Peer): netdev Peer section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Tun`](#Systemd--Interface--Netdev--Tun): netdev Tun and Tap section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Tunnel`](#Systemd--Interface--Netdev--Tunnel): netdev Tunnel section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Vlan`](#Systemd--Interface--Netdev--Vlan): netdev VLAN section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Vrf`](#Systemd--Interface--Netdev--Vrf): netdev VRF section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Vxcan`](#Systemd--Interface--Netdev--Vxcan): netdev VXCAN section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Vxlan`](#Systemd--Interface--Netdev--Vxlan): netdev VXLAN section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Wireguard`](#Systemd--Interface--Netdev--Wireguard): netdev WireGuard section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Wireguardpeer`](#Systemd--Interface--Netdev--Wireguardpeer): netdev WireGuard section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Wlan`](#Systemd--Interface--Netdev--Wlan): netdev WLAN section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Netdev::Xfrm`](#Systemd--Interface--Netdev--Xfrm): netdev Xfrm section see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+* [`Systemd::Interface::Network`](#Systemd--Interface--Network): interface definition see https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Address`](#Systemd--Interface--Network--Address): interface network Address section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Bfifo`](#Systemd--Interface--Network--Bfifo): interface network BFIFO section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Bridge`](#Systemd--Interface--Network--Bridge): interface network Bridge section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Bridgefdb`](#Systemd--Interface--Network--Bridgefdb): interface network BridgeFDB section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Bridgemdb`](#Systemd--Interface--Network--Bridgemdb): interface network BridgeMDB section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Bridgevlan`](#Systemd--Interface--Network--Bridgevlan): interface network BridgeVLAN section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Cake`](#Systemd--Interface--Network--Cake): interface network CAKE section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Can`](#Systemd--Interface--Network--Can): interface network CAN section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Controlleddelay`](#Systemd--Interface--Network--Controlleddelay): interface network ControlledDelay section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Deficitroundrobinscheduler`](#Systemd--Interface--Network--Deficitroundrobinscheduler): interface network DeficitRoundRobinScheduler section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.
+* [`Systemd::Interface::Network::Deficitroundrobinschedulerclass`](#Systemd--Interface--Network--Deficitroundrobinschedulerclass): interface network DeficitRoundRobinSchedulerClass section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.net
+* [`Systemd::Interface::Network::Dhcpprefixdelegation`](#Systemd--Interface--Network--Dhcpprefixdelegation): interface network DHCPPrefixDelegation section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Dhcpserver`](#Systemd--Interface--Network--Dhcpserver): interface network DHCPServer section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Dhcpserverstaticlease`](#Systemd--Interface--Network--Dhcpserverstaticlease): interface network DHCPServerStaticLease section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Dhcpv4`](#Systemd--Interface--Network--Dhcpv4): interface network DHCPv4 section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Dhcpv6`](#Systemd--Interface--Network--Dhcpv6): interface network DHCPv6 section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Enhancedtransmissionselection`](#Systemd--Interface--Network--Enhancedtransmissionselection): interface network EnhancedTransmissionSelection section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.netwo
+* [`Systemd::Interface::Network::Fairqueueing`](#Systemd--Interface--Network--Fairqueueing): interface network FairQueueing section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Fairqueueingcontrolleddelay`](#Systemd--Interface--Network--Fairqueueingcontrolleddelay): interface network FairQueueingControlledDelay section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network
+* [`Systemd::Interface::Network::Flowqueuepie`](#Systemd--Interface--Network--Flowqueuepie): interface network FlowQueuePIE section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Genericrandomearlydetection`](#Systemd--Interface--Network--Genericrandomearlydetection): interface network GenericRandomEarlyDetection section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network
+* [`Systemd::Interface::Network::Heavyhitterfilter`](#Systemd--Interface--Network--Heavyhitterfilter): interface network HeavyHitterFilter section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Hierarchytokenbucketclass`](#Systemd--Interface--Network--Hierarchytokenbucketclass): interface network HierarchyTokenBucketClass section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.h
+* [`Systemd::Interface::Network::Ipoib`](#Systemd--Interface--Network--Ipoib): interface network IPoIB section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6acceptra`](#Systemd--Interface--Network--Ipv6acceptra): interface network IPv6AcceptRA section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6addresslabel`](#Systemd--Interface--Network--Ipv6addresslabel): interface network IPv6AddressLabel section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6pref64prefix`](#Systemd--Interface--Network--Ipv6pref64prefix): interface network IPv6PREF64Prefix section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6prefix`](#Systemd--Interface--Network--Ipv6prefix): interface network IPv6Prefix section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6routeprefix`](#Systemd--Interface--Network--Ipv6routeprefix): interface network IPv6RoutePrefix section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Ipv6sendra`](#Systemd--Interface--Network--Ipv6sendra): interface network IPv6SendRA section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Link`](#Systemd--Interface--Network--Link): interface network Link section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Lldp`](#Systemd--Interface--Network--Lldp): interface network LLDP section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Match`](#Systemd--Interface--Network--Match): interface network Match section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Neighbor`](#Systemd--Interface--Network--Neighbor): interface network Neighbor section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Network`](#Systemd--Interface--Network--Network): interface network Network section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Networkemulator`](#Systemd--Interface--Network--Networkemulator): interface network NetworkEmulator section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Nexthop`](#Systemd--Interface--Network--Nexthop): interface network NextHop section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Pfifo`](#Systemd--Interface--Network--Pfifo): interface network PFIFO section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Pfifofast`](#Systemd--Interface--Network--Pfifofast): interface network PFIFOFast section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Pfifoheaddrop`](#Systemd--Interface--Network--Pfifoheaddrop): interface network PFIFOHeadDrop section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Pie`](#Systemd--Interface--Network--Pie): interface network PIE section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Qdisc`](#Systemd--Interface--Network--Qdisc): interface network QDisc section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Quickfairqueueingclass`](#Systemd--Interface--Network--Quickfairqueueingclass): interface network QuickFairQueueingClass section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Route`](#Systemd--Interface--Network--Route): interface network Route section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Routingpolicyrule`](#Systemd--Interface--Network--Routingpolicyrule): interface network RoutingPolicyRule section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Sr_iov`](#Systemd--Interface--Network--Sr_iov): interface network SR-IOV section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Stochasticfairblue`](#Systemd--Interface--Network--Stochasticfairblue): interface network StochasticFairBlue section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Stochasticfairnessqueueing`](#Systemd--Interface--Network--Stochasticfairnessqueueing): interface network StochasticFairnessQueueing section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.
+* [`Systemd::Interface::Network::Tokenbucketfilter`](#Systemd--Interface--Network--Tokenbucketfilter): interface network TokenBucketFilter section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+* [`Systemd::Interface::Network::Triviallinkequalizer`](#Systemd--Interface--Network--Triviallinkequalizer): interface network TrivialLinkEqualizer section definition see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
* [`Systemd::JournalRemoteSettings`](#Systemd--JournalRemoteSettings): matches Systemd journal remote config Struct
* [`Systemd::JournalUploadSettings`](#Systemd--JournalUploadSettings): matches Systemd journal upload config Struct
* [`Systemd::JournaldSettings`](#Systemd--JournaldSettings): Matches Systemd journald config Struct
@@ -2730,6 +2816,1991 @@ custom datatype that validates filenames/paths for valid systemd dropin files
Alias of `Pattern['^[^/]+\.conf$']`
+### `Systemd::Interface`
+
+network interface definition
+
+Alias of
+
+```puppet
+Struct[{
+ filename => Optional[String[1]],
+ network => Optional[Systemd::Interface::Network],
+ netdev => Optional[Systemd::Interface::Netdev],
+ link => Optional[Systemd::Interface::Link],
+}]
+```
+
+### `Systemd::Interface::Link`
+
+interface definition
+
+Alias of
+
+```puppet
+Struct[{
+ 'Match' => Optional[Systemd::Interface::Link::Match],
+ 'Link' => Optional[Systemd::Interface::Link::Link],
+ 'SR-IOV' => Optional[Systemd::Interface::Link::Sr_iov],
+}]
+```
+
+### `Systemd::Interface::Link::Link`
+
+interface definition
+
+Alias of
+
+```puppet
+Struct[{
+ 'Description' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'ImportProperty' => Optional[String[1]],
+ 'UnsetProperty' => Optional[String[1]],
+ 'Alias' => Optional[String[1]],
+ 'MACAddressPolicy' => Optional[Enum['persistent', 'random', 'none', '']],
+ 'MACAddress' => Optional[String[1]],
+ 'NamePolicy' => Optional[Enum[
+ 'kernel', 'database', 'onboard', 'slot',
+ 'path', 'mac', 'keep'
+ ]],
+ 'Name' => Optional[String[1]],
+ 'AlternativeNamesPolicy' => Optional[String[1]],
+ 'AlternativeName' => Optional[String[1]],
+ 'TransmitQueues' => Optional[Integer[1,4096]],
+ 'ReceiveQueues' => Optional[Integer[1,4096]],
+ 'TransmitQueueLength' => Optional[Integer[0, 4294967294]],
+ 'MTUBytes' => Optional[Integer[1280]],
+ 'BitsPerSecond' => Optional[String[1]],
+ 'Duplex' => Optional[String[1]],
+ 'AutoNegotiation' => Optional[Enum['yes','no']],
+ 'WakeOnLan' => Optional[Enum[
+ 'phy', 'unicast', 'multicast', 'broadcast',
+ 'arp', 'magic', 'secureon'
+ ]],
+ 'WakeOnLanPassword' => Optional[String[1]],
+ 'Port' => Optional[Enum['tp', 'aui', 'bnc', 'mii', 'fibre']],
+ 'Advertise' => Optional[Variant[
+ Systemd::Interface::Link::Link_advertise,
+ Array[Systemd::Interface::Link::Link_advertise]
+ ]],
+ 'ReceiveChecksumOffload' => Optional[Enum['yes','no']],
+ 'TransmitChecksumOffload' => Optional[Enum['yes','no']],
+ 'TCPSegmentationOffload' => Optional[Enum['yes','no']],
+ 'TCP6SegmentationOffload' => Optional[Enum['yes','no']],
+ 'GenericSegmentationOffload' => Optional[Enum['yes','no']],
+ 'GenericReceiveOffload' => Optional[Enum['yes','no']],
+ 'LargeReceiveOffload' => Optional[Enum['yes','no']],
+ 'ReceivePacketSteeringCPUMask' => Optional[String[1]],
+ 'ReceiveVLANCTAGHardwareAcceleration' => Optional[Enum['yes','no']],
+ 'TransmitVLANCTAGHardwareAcceleration'=> Optional[Enum['yes','no']],
+ 'ReceiveVLANCTAGFilter' => Optional[Enum['yes','no']],
+ 'TransmitVLANSTAGHardwareAcceleration'=> Optional[Enum['yes','no']],
+ 'NTupleFilter' => Optional[Enum['yes','no']],
+ 'RxChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'TxChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'OtherChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'CombinedChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxMiniBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxJumboBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'TxBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxFlowControl' => Optional[Enum['yes','no']],
+ 'TxFlowControl' => Optional[Enum['yes','no']],
+ 'AutoNegotiationFlowControl' => Optional[Enum['yes','no']],
+ 'GenericSegmentOffloadMaxBytes' => Optional[String[1]],
+ 'GenericSegmentOffloadMaxSegments' => Optional[Integer[1, 65535]],
+ 'UseAdaptiveRxCoalesce' => Optional[Enum['yes','no']],
+ 'UseAdaptiveTxCoalesce' => Optional[Enum['yes','no']],
+ 'RxCoalesceSec' => Optional[Integer],
+ 'RxCoalesceIrqSec' => Optional[Integer],
+ 'RxCoalesceLowSec' => Optional[Integer],
+ 'RxCoalesceHighSec' => Optional[Integer],
+ 'TxCoalesceSec' => Optional[Integer],
+ 'TxCoalesceIrqSec' => Optional[Integer],
+ 'TxCoalesceLowSec' => Optional[Integer],
+ 'TxCoalesceHighSec' => Optional[Integer],
+ 'RxMaxCoalescedFrames' => Optional[Integer],
+ 'RxMaxCoalescedIrqFrames' => Optional[Integer],
+ 'RxMaxCoalescedLowFrames' => Optional[Integer],
+ 'RxMaxCoalescedHighFrames' => Optional[Integer],
+ 'TxMaxCoalescedFrames' => Optional[Integer],
+ 'TxMaxCoalescedIrqFrames' => Optional[Integer],
+ 'TxMaxCoalescedLowFrames' => Optional[Integer],
+ 'TxMaxCoalescedHighFrames' => Optional[Integer],
+ 'CoalescePacketRateLow' => Optional[Integer],
+ 'CoalescePacketRateHigh' => Optional[Integer],
+ 'CoalescePacketRateSampleIntervalSec' => Optional[Integer],
+ 'StatisticsBlockCoalesceSec' => Optional[Integer[1]],
+ 'MDI' => Optional[Enum['straight', 'mdi', 'crossover', 'mdi-x', 'mdix', 'auto']],
+ 'SR_IOVVirtualFunctions' => Optional[Integer[0, 2147483647]],
+}]
+```
+
+### `Systemd::Interface::Link::Link_advertise`
+
+interface definition
+
+Alias of `Enum['10baset-full', '10baset1l-full', '10baset-half', '100basefx-full', '100baset-full', '100baset1-full', '100basefx-half', '100baset-half', '1000basekx-ful', '1000baset-full', '1000baset1-full', '1000basex-full', '1000baset-half', '2500baset-full', '2500basex-full', '5000baset-full', '10000baser-fec', '10000basecr-full', '10000baseer-full', '10000basekr-full', '10000basekx4-full', '10000baselr-full', '10000baselrm-full', '10000basesr-full', '10000baset-full', '20000basekr2-full', '20000basemld2-full', '25000basecr-full', '25000basekr-full', '25000basesr-full', '40000basecr4-full', '40000basekr4-full', '40000baselr4-full', '40000basesr4-full', '50000basecr-full', '50000basecr2-full', '50000basedr-full', '50000basekr-full', '50000basekr2-full', '50000baselr-er-fr-full', '50000basesr-full', '50000basesr2-full', '56000basecr4-full', '56000basekr4-full', '56000baselr4-full', '56000basesr4-full', '100000basecr-full', '100000basecr2-full', '100000basecr4-full', '100000basedr-full', '100000basedr2-full', '100000basekr-full', '100000basekr2-full', '100000basekr4-full', '100000baselr-er-fr-full', '100000baselr2-er2-fr2-full', '100000baselr4-er4-full', '100000basesr-full', '100000basesr2-full', '100000basesr4-full', '200000basecr2-full', '200000basecr4-full', '200000basedr2-full', '200000basedr4-full', '200000basekr2-full', '200000basekr4-full', '200000baselr2-er2-fr2-full', '200000baselr4-er4-fr4-full', '200000basesr2-full', '200000basesr4-full', '400000basecr4-full', '400000basecr8-full', '400000basedr4-full', '400000basedr8-full', '400000basekr4-full', '400000basekr8-full', '400000baselr4-er4-fr4-full', '400000baselr8-er8-fr8-full', '400000basesr4-full', '400000basesr8-full', '800000basecr8-full', '800000basedr8-2-full', '800000basedr8-full', '800000basekr8-full', '800000basesr8-full', '800000basevr8-full', 'asym-pause', 'aui', 'autonegotiation', 'backplane', 'bnc', 'fec-baser', 'fec-llrs', 'fec-none', 'fec-rs', 'fibre', 'mii', 'pause', 'tp']`
+
+### `Systemd::Interface::Link::Match`
+
+interface definition
+
+Alias of
+
+```puppet
+Struct[{
+ 'Name' => Optional[String[1]],
+ 'MACAddress' => Optional[String[1]],
+ 'PermanentMACAddress' => Optional[String[1]],
+ 'Path' => Optional[String[1]],
+ 'Driver' => Optional[String[1]],
+ 'Type' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'OriginalName' => Optional[String[1]],
+ 'SSID' => Optional[String[1]],
+ 'BSSID' => Optional[String[1]],
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Link::Sr_iov`
+
+interface definition
+
+Alias of
+
+```puppet
+Struct[{
+ 'VirtualFunction' => Optional[Integer[0,2147483646]],
+ 'VLANId' => Optional[Integer[1,4095]],
+ 'QualityOfService' => Optional[Integer[1,4294967294]],
+ 'VLANProtocol' => Optional[Enum['802.1Q', '802.1ad']],
+ 'MACSpoofCheck' => Optional[Enum['yes','no']],
+ 'QueryReceiveSideScaling' => Optional[Enum['yes','no']],
+ 'Trust' => Optional[Enum['yes','no']],
+ 'LinkState' => Optional[Enum['yes','no','auto']],
+ 'MACAddress' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev`
+
+interface netdev configs
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Match' => Optional[Systemd::Interface::Netdev::Match],
+ 'NetDev' => Optional[Systemd::Interface::Netdev::Netdev],
+ 'Bridge' => Optional[Systemd::Interface::Netdev::Bridge],
+ 'Vlan' => Optional[Systemd::Interface::Netdev::Vlan],
+ 'MACVLAN' => Optional[Systemd::Interface::Netdev::Macvlan],
+ 'MACVTAP' => Optional[Systemd::Interface::Netdev::Macvlan],
+ 'IPVLAN' => Optional[Systemd::Interface::Netdev::Ipvlan],
+ 'IPVTAP' => Optional[Systemd::Interface::Netdev::Ipvlan],
+ 'VXLAN' => Optional[Systemd::Interface::Netdev::Vxlan],
+ 'GENEVE' => Optional[Systemd::Interface::Netdev::Geneve],
+ 'BareUDP' => Optional[Systemd::Interface::Netdev::Bareudp],
+ 'L2TP' => Optional[Systemd::Interface::Netdev::L2tp],
+ 'L2TPSession' => Optional[Systemd::Interface::Netdev::L2tpsession],
+ 'MACsec' => Optional[Systemd::Interface::Netdev::Macsec],
+ 'MACsecReceiveChannel' => Optional[Systemd::Interface::Netdev::Macsecreceivechannel],
+ 'MACsecTransmitAssociation' => Optional[Systemd::Interface::Netdev::Macsectransmitassociation],
+ 'MACsecReceiveAssociation' => Optional[Systemd::Interface::Netdev::Macsecreceiveassociation],
+ 'Tunnel' => Optional[Systemd::Interface::Netdev::Tunnel],
+ 'FooOverUDP' => Optional[Systemd::Interface::Netdev::Foooverudp],
+ 'Peer' => Optional[Systemd::Interface::Netdev::Peer],
+ 'VXCAN' => Optional[Systemd::Interface::Netdev::Vxcan],
+ 'Tun' => Optional[Systemd::Interface::Netdev::Tun],
+ 'Tap' => Optional[Systemd::Interface::Netdev::Tun],
+ 'WireGuard' => Optional[Systemd::Interface::Netdev::Wireguard],
+ 'WireGuardPeer' => Optional[Systemd::Interface::Netdev::Wireguardpeer],
+ 'Bond' => Optional[Systemd::Interface::Netdev::Bond],
+ 'Xfrm' => Optional[Systemd::Interface::Netdev::Xfrm],
+ 'VRF' => Optional[Systemd::Interface::Netdev::Vrf],
+ 'BatmanAdvanced' => Optional[Systemd::Interface::Netdev::Batmanadvanced],
+ 'IPoIB' => Optional[Systemd::Interface::Netdev::Ipoib],
+ 'WLAN' => Optional[Systemd::Interface::Netdev::Wlan],
+}]
+```
+
+### `Systemd::Interface::Netdev::Bareudp`
+
+netdev BareUDP section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'DestinationPort' => Integer[1, 65535],
+ 'EtherType' => Enum['ipv4', 'ipv6', 'mpls-uc', 'mpls-mc'],
+}]
+```
+
+### `Systemd::Interface::Netdev::Batmanadvanced`
+
+netdev BatmanAdvanced section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'GatewayMode' => Optional[Enum['off', 'server', 'client']],
+ 'Aggregation' => Optional[Enum['yes','no']],
+ 'BridgeLoopAvoidance' => Optional[Enum['yes','no']],
+ 'DistributedArpTable' => Optional[Enum['yes','no']],
+ 'Fragmentation' => Optional[Enum['yes','no']],
+ 'HopPenalty' => Optional[Integer[0,255]],
+ 'OriginatorIntervalSec' => Optional[String[1]],
+ 'GatewayBandwidthDown' => Optional[String[1]],
+ 'GatewayBandwidthUp' => Optional[String[1]],
+ 'RoutingAlgorithm' => Optional[Enum['batman-v', 'batman-iv']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Bond`
+
+netdev Bond section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Mode' => Optional[Enum[
+ 'balance-rr', 'active-backup', 'balance-xor',
+ 'broadcast', '802.3ad', 'balance-tlb', 'balance-alb'
+ ]],
+ 'TransmitHashPolicy' => Optional[Enum['layer2', 'layer3+4', 'layer2+3', 'encap2+3', 'encap3+4']],
+ 'LACPTransmitRate' => Optional[Enum['slow','fast']],
+ 'MIIMonitorSec' => Optional[Integer],
+ 'PeerNotifyDelaySec' => Optional[Integer[0,300]],
+ 'UpDelaySec' => Optional[Integer[0]],
+ 'DownDelaySec' => Optional[Integer[0]],
+ 'LearnPacketIntervalSec' => Optional[Integer[1]],
+ 'AdSelect' => Optional[Enum['stable', 'bandwidth', 'count']],
+ 'AdActorSystemPriority' => Optional[Integer[1,65535]],
+ 'AdUserPortKey' => Optional[Integer[1,1023]],
+ 'AdActorSystem' => Optional[String[1]],
+ 'FailOverMACPolicy' => Optional[Enum['none', 'active', 'follow']],
+ 'ARPValidate' => Optional[Enum['none', 'active', 'backup', 'all']],
+ 'ARPIntervalSec' => Optional[String[1]],
+ 'ARPIPTargets' => Optional[String[1]],
+ 'ARPAllTargets' => Optional[Enum['any','all']],
+ 'PrimaryReselectPolicy' => Optional[Enum['alwayas', 'better', 'failure']],
+ 'ResendIGMP' => Optional[Integer[0,255]],
+ 'PacketsPerSlave' => Optional[Integer[0,65535]],
+ 'GratuitousARP' => Optional[Integer[0,255]],
+ 'AllSlavesActive' => Optional[Enum['yes','no']],
+ 'DynamicTransmitLoadBalancing' => Optional[Enum['yes','no']],
+ 'MinLinks' => Optional[Integer],
+ 'ARPMissedMax' => Optional[Integer],
+}]
+```
+
+### `Systemd::Interface::Netdev::Bridge`
+
+netdev Bridge section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Description' => Optional[String[1]],
+ 'HelloTimeSec' => Optional[Integer[1]],
+ 'MaxAgeSec' => Optional[Integer[1]],
+ 'ForwardDelaySec' => Optional[Integer[1]],
+ 'AgeingTimeSec' => Optional[Integer[1]],
+ 'Priority' => Optional[Integer[0, 65535]],
+ 'GroupForwardMask' => Optional[String[1]],
+ 'DefaultPVID' => Optional[Variant[Enum['none'],String[1, 4094]]],
+ 'MulticastQuerier' => Optional[Enum['yes','no']],
+ 'MulticastSnooping' => Optional[Enum['yes','no']],
+ 'VLANFiltering' => Optional[Enum['yes','no']],
+ 'STP' => Optional[Enum['yes','no']],
+ 'MulticastIGMPVersion' => Optional[Integer[2,3]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Foooverudp`
+
+netdev FooOverUDP section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Encapsulation' => Optional[Enum['FooOverUDP','GenericUDPEncapsulation']],
+ 'Port' => Integer[1],
+ 'PeerPort' => Optional[Integer[1]],
+ 'Protocol' => Optional[Variant[Enum['gre','ipip'], Integer[1,255]]],
+ 'Peer' => Optional[String[1]],
+ 'Local' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Geneve`
+
+netdev GENEVE section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Id' => Integer[0,16777215],
+ 'Remote' => Optional[String[1]],
+ 'TOS' => Optional[Integer[1,255]],
+ 'TTL' => Optional[Variant[Enum['inherit'], Integer[0,255]]],
+ 'UDPChecksum' => Optional[Enum['yes', 'no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes', 'no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes', 'no']],
+ 'DestinationPort' => Optional[Integer[1]],
+ 'FlowLabel' => Optional[String[1]],
+ 'IPDoNotFragment' => Optional[Enum['yes', 'no']],
+ 'InheritInnerProtocol' => Optional[Enum['yes', 'no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Ipoib`
+
+netdev IPoIB section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'PartitionKey' => Optional[Integer[1]],
+ 'Mode' => Optional[Enum['datagram','connected']],
+ 'IgnoreUserspaceMulticastGroup' => Optional[Enum['yes', 'no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Ipvlan`
+
+netdev IPVLAN and IPVTAP section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Mode' => Optional[Enum['L2', 'L3', 'L3S']],
+ 'Flags' => Optional[Enum['bridge', 'private', 'vepa']],
+}]
+```
+
+### `Systemd::Interface::Netdev::L2tp`
+
+netdev L2TP section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'TunnelId' => Integer[1,4294967295],
+ 'PeerTunnelId' => Integer[1,4294967295],
+ 'Remote' => String[1],
+ 'Local' => Optional[Variant[Enum['auto', 'static', 'dynamic'],String[1]]],
+ 'EncapsulationType' => Optional[Enum['udp','ip']],
+ 'UDPSourcePort' => Optional[Integer[1]],
+ 'UDPDestinationPort' => Optional[Integer[1]],
+ 'UDPChecksum' => Optional[Enum['yes' ,'no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes' ,'no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes' ,'no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::L2tpsession`
+
+netdev L2TPSession section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Name' => String[1],
+ 'SessionId' => Integer[1,4294967295],
+ 'PeerSessionId' => Integer[1,4294967295],
+ 'Layer2SpecificHeader' => Optional[Enum['none', 'default']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Macsec`
+
+netdev MACsec section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Port' => Optional[Integer[1, 65535]],
+ 'Encrypt' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Macsecreceiveassociation`
+
+netdev MACsecReceiveAssociation section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Port' => Integer[1, 65535],
+ 'MACAddress' => String[1],
+ 'PacketNumber' => Optional[Variant[Integer[1,4],Integer[294,295],Integer[967,967]]],
+ 'KeyId' => Optional[Integer[0,255]],
+ 'Key' => Optional[String[1]],
+ 'KeyFile' => Optional[String[1]],
+ 'Activate' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Macsecreceivechannel`
+
+netdev MACsecReceiveChannel section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Port' => Integer[1, 65535],
+ 'MACAddress' => String[1],
+}]
+```
+
+### `Systemd::Interface::Netdev::Macsectransmitassociation`
+
+netdev MACsecTransmitAssociation section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'PacketNumber' => Optional[Variant[Integer[1,4],Integer[294,295],Integer[967,967]]],
+ 'KeyId' => Optional[Integer[0,255]],
+ 'Key' => Optional[String[1]],
+ 'KeyFile' => Optional[String[1]],
+ 'Activate' => Optional[Enum['yes','no']],
+ 'UseForEncoding' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Macvlan`
+
+netdev MACVLAN and MACVTAP section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Mode' => Optional[Enum['private', 'vepa', 'bridge', 'passthru', 'source']],
+ 'SourceMACAddress' => Optional[Variant[String[1],Array[String[1]]]],
+ 'BroadcastMulticastQueueLength' => Optional[Integer[0,4294967294]],
+ 'BroadcastQueueThreshold' => Optional[Variant[Enum['no'],Integer[0,2147483647]]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Match`
+
+netdev match section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Netdev`
+
+netdev NetDev section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Description' => Optional[String[1]],
+ 'Name' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+ 'MACAddress' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Peer`
+
+netdev Peer section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Name' => String[1],
+ 'MACAddress' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Tun`
+
+netdev Tun and Tap section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MultiQueue' => Optional[Enum['yes','no']],
+ 'PacketInfo' => Optional[Enum['yes','no']],
+ 'VNetHeader' => Optional[Enum['yes','no']],
+ 'User' => Optional[String[1]],
+ 'Group' => Optional[String[1]],
+ 'KeepCarrier' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Tunnel`
+
+netdev Tunnel section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'External' => Optional[Enum['yes','no']],
+ 'Local' => Optional[Variant[Enum['any', 'ipv4_link_local', 'ipv6_link_local', 'dhcp4', 'dhcp6', 'slaac'], String[1]]],
+ 'Remote' => Optional[Variant[Enum['any'], String[1]]],
+ 'TOS' => Optional[String[1]],
+ 'TTL' => Optional[Integer[1,255]],
+ 'DiscoverPathMTU' => Optional[Enum['yes','no']],
+ 'IgnoreDontFragment' => Optional[Enum['yes','no']],
+ 'IPv6FlowLabel' => Optional[String[1]],
+ 'CopyDSCP' => Optional[Enum['yes','no']],
+ 'EncapsulationLimit' => Optional[Integer[1,255]],
+ 'Key' => Optional[String[1]],
+ 'InputKey' => Optional[String[1]],
+ 'OutputKey' => Optional[String[1]],
+ 'Mode' => Optional[Enum['ip6ip6', 'ipip6', 'any']],
+ 'Independent' => Optional[Enum['yes','no']],
+ 'AssignToLoopback' => Optional[Enum['yes','no']],
+ 'AllowLocalRemote' => Optional[Enum['yes','no']],
+ 'FooOverUDP' => Optional[Enum['yes','no']],
+ 'FOUDestinationPort' => Optional[Integer[1]],
+ 'FOUSourcePort' => Optional[Integer[0]],
+ 'Encapsulation' => Optional[Enum['FooOverUDP','GenericUDPEncapsulation']],
+ 'IPv6RapidDeploymentPrefix' => Optional[String[1]],
+ 'ISATAP' => Optional[Enum['yes','no']],
+ 'SerializeTunneledPackets' => Optional[Enum['yes','no']],
+ 'ERSPANVersion' => Optional[Integer[0,2]],
+ 'ERSPANIndex' => Optional[Integer[0,1048575]],
+ 'ERSPANDirection' => Optional[Enum['ingress','egress']],
+ 'ERSPANHardwareId' => Optional[Integer[0,63]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Vlan`
+
+netdev VLAN section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Id' => Optional[Integer[0,4094]],
+ 'Protocol' => Optional[Enum['802.1q','802.1ad']],
+ 'GVRP' => Optional[Enum['yes','no']],
+ 'MVRP' => Optional[Enum['yes','no']],
+ 'LooseBinding' => Optional[Enum['yes','no']],
+ 'ReorderHeader' => Optional[Enum['yes','no']],
+ 'EgressQOSMaps' => Optional[String[1]],
+ 'IngressQOSMaps' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Vrf`
+
+netdev VRF section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Table' => Integer[0],
+}]
+```
+
+### `Systemd::Interface::Netdev::Vxcan`
+
+netdev VXCAN section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Peer' => String[1],
+}]
+```
+
+### `Systemd::Interface::Netdev::Vxlan`
+
+netdev VXLAN section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'VNI' => Optional[Integer[1, 16777215]],
+ 'Remote' => Optional[String[1]],
+ 'Local' => Optional[Variant[Enum['ipv4_link_local', 'ipv6_link_local', 'dhcp4', 'dhcp6', 'slaac'], String[1]]],
+ 'Group' => Optional[String[1]],
+ 'TOS' => Optional[String[1]],
+ 'TTL' => Optional[Variant[Enum['inherit'], Integer[0,255]]],
+ 'MacLearning' => Optional[Enum['yes','no']],
+ 'FDBAgeingSec' => Optional[String[1]],
+ 'MaximumFDBEntries' => Optional[Integer[1]],
+ 'ReduceARPProxy' => Optional[Enum['yes','no']],
+ 'L2MissNotification' => Optional[Enum['yes','no']],
+ 'L3MissNotification' => Optional[Enum['yes','no']],
+ 'RouteShortCircuit' => Optional[Enum['yes','no']],
+ 'UDPChecksum' => Optional[Enum['yes','no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes','no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes','no']],
+ 'RemoteChecksumTx' => Optional[Enum['yes','no']],
+ 'RemoteChecksumRx' => Optional[Enum['yes','no']],
+ 'GroupPolicyExtension' => Optional[Enum['yes','no']],
+ 'GenericProtocolExtension' => Optional[Enum['yes','no']],
+ 'DestinationPort' => Optional[Integer[1]],
+ 'PortRange' => Optional[String[1]],
+ 'FlowLabel' => Optional[Integer[0,1048575]],
+ 'IPDoNotFragment' => Optional[Enum['yes','no']],
+ 'Independent' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Wireguard`
+
+netdev WireGuard section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'PrivateKey' => Optional[String[1]],
+ 'PrivateKeyFile' => Optional[Stdlib::Absolutepath],
+ 'ListenPort' => Optional[Variant[Integer[1,65535], Enum['auto']]],
+ 'FirewallMark' => Optional[Integer[1,4294967295]],
+ 'RouteTable' => Optional[Variant[String[1],Integer[1,4294967295]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Wireguardpeer`
+
+netdev WireGuard section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'PublicKey' => Optional[String[1]],
+ 'PresharedKey' => Optional[String[1]],
+ 'PresharedKeyFile' => Optional[Stdlib::Absolutepath],
+ 'AllowedIPs' => Optional[Variant[String, Array[String]]],
+ 'Endpoint' => Optional[String[1]],
+ 'PersistentKeepalive' => Optional[Variant[Integer[0,65535],Enum['off']]],
+ 'RouteTable' => Optional[Variant[Integer[0,4294967295],String[1]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+}]
+```
+
+### `Systemd::Interface::Netdev::Wlan`
+
+netdev WLAN section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'PhysicalDevice' => Optional[Variant[Integer[0], String[1]]],
+ 'Type' => Enum['ad-hoc', 'station', 'ap', 'ap-vlan', 'wds',
+ 'monitor', 'mesh-point', 'p2p-client', 'p2p-go', 'p2p-device', 'ocb', 'nan'],
+ 'WDS' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Netdev::Xfrm`
+
+netdev Xfrm section
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'InterfaceId' => Optional[Variant[Integer[1],String[1]]],
+ 'Independent' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Network`
+
+interface definition
+see https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Match' => Optional[Systemd::Interface::Network::Match],
+ 'Link' => Optional[Systemd::Interface::Network::Link],
+ 'SR-IOV' => Optional[Systemd::Interface::Network::Sr_iov],
+ 'Network' => Optional[Systemd::Interface::Network::Network],
+ 'Address' => Optional[Variant[
+ Systemd::Interface::Network::Address,
+ Array[Systemd::Interface::Network::Address],
+ ]],
+ 'Neighbor' => Optional[Variant[
+ Systemd::Interface::Network::Neighbor,
+ Array[Systemd::Interface::Network::Neighbor],
+ ]],
+ 'IPv6AddressLabel' => Optional[Systemd::Interface::Network::Ipv6addresslabel],
+ 'RoutingPolicyRule' => Optional[Variant[
+ Systemd::Interface::Network::Routingpolicyrule,
+ Array[Systemd::Interface::Network::Routingpolicyrule],
+ ]],
+ 'NextHop' => Optional[Variant[
+ Systemd::Interface::Network::Nexthop,
+ Array[Systemd::Interface::Network::Nexthop],
+ ]],
+ 'Route' => Optional[Variant[
+ Systemd::Interface::Network::Route,
+ Array[Systemd::Interface::Network::Route],
+ ]],
+ 'DHCPv4' => Optional[Systemd::Interface::Network::Dhcpv4],
+ 'DHCPv6' => Optional[Systemd::Interface::Network::Dhcpv6],
+ 'DHCPPrefixDelegation' => Optional[Systemd::Interface::Network::Dhcpprefixdelegation],
+ 'IPv6AcceptRA' => Optional[Systemd::Interface::Network::Ipv6acceptra],
+ 'DHCPServer' => Optional[Systemd::Interface::Network::Dhcpserver],
+ 'DHCPServerStaticLease' => Optional[Variant[
+ Systemd::Interface::Network::Dhcpserverstaticlease,
+ Array[Systemd::Interface::Network::Dhcpserverstaticlease],
+ ]],
+ 'IPv6SendRA' => Optional[Systemd::Interface::Network::Ipv6sendra],
+ 'IPv6Prefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6prefix,
+ Array[Systemd::Interface::Network::Ipv6prefix],
+ ]],
+ 'IPv6RoutePrefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6routeprefix,
+ Array[Systemd::Interface::Network::Ipv6routeprefix],
+ ]],
+ 'IPv6PREF64Prefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6pref64prefix,
+ Array[Systemd::Interface::Network::Ipv6pref64prefix],
+ ]],
+ 'Bridge' => Optional[Systemd::Interface::Network::Bridge],
+ 'BridgeFDB' => Optional[Variant[
+ Systemd::Interface::Network::Bridgefdb,
+ Array[Systemd::Interface::Network::Bridgefdb],
+ ]],
+ 'BridgeMDB' => Optional[Variant[
+ Systemd::Interface::Network::Bridgemdb,
+ Array[Systemd::Interface::Network::Bridgemdb],
+ ]],
+ 'LLDP' => Optional[Systemd::Interface::Network::Lldp],
+ 'CAN' => Optional[Systemd::Interface::Network::Can],
+ 'IPoIB' => Optional[Systemd::Interface::Network::Ipoib],
+ 'QDisc' => Optional[Systemd::Interface::Network::Qdisc],
+ 'NetworkEmulator' => Optional[Systemd::Interface::Network::Networkemulator],
+ 'TokenBucketFilter' => Optional[Systemd::Interface::Network::Tokenbucketfilter],
+ 'PIE' => Optional[Systemd::Interface::Network::Pie],
+ 'FlowQueuePIE' => Optional[Systemd::Interface::Network::Flowqueuepie],
+ 'StochasticFairBlue' => Optional[Systemd::Interface::Network::Stochasticfairblue],
+ 'StochasticFairnessQueueing' => Optional[Systemd::Interface::Network::Stochasticfairnessqueueing],
+ 'BFIFO' => Optional[Systemd::Interface::Network::Bfifo],
+ 'PFIFO' => Optional[Systemd::Interface::Network::Pfifo],
+ 'PFIFOHeadDrop' => Optional[Systemd::Interface::Network::Pfifoheaddrop],
+ 'PFIFOFast' => Optional[Systemd::Interface::Network::Pfifofast],
+ 'CAKE' => Optional[Systemd::Interface::Network::Cake],
+ 'ControlledDelay' => Optional[Systemd::Interface::Network::Controlleddelay],
+ 'DeficitRoundRobinScheduler' => Optional[Systemd::Interface::Network::Deficitroundrobinscheduler],
+ 'DeficitRoundRobinSchedulerClass' => Optional[Systemd::Interface::Network::Deficitroundrobinschedulerclass],
+ 'EnhancedTransmissionSelection' => Optional[Systemd::Interface::Network::Enhancedtransmissionselection],
+ 'GenericRandomEarlyDetection' => Optional[Systemd::Interface::Network::Genericrandomearlydetection],
+ 'FairQueueingControlledDelay' => Optional[Systemd::Interface::Network::Fairqueueingcontrolleddelay],
+ 'FairQueueing' => Optional[Systemd::Interface::Network::Fairqueueing],
+ 'TrivialLinkEqualizer' => Optional[Systemd::Interface::Network::Triviallinkequalizer],
+ 'HierarchyTokenBucket' => Optional[Systemd::Interface::Network::Hierarchytokenbucket],
+ 'HierarchyTokenBucketClass' => Optional[Systemd::Interface::Network::Hierarchytokenbucketclass],
+ 'HeavyHitterFilter' => Optional[Systemd::Interface::Network::Heavyhitterfilter],
+ 'QuickFairQueueing' => Optional[Systemd::Interface::Network::Quickfairqueueing],
+ 'QuickFairQueueingClass' => Optional[Systemd::Interface::Network::Quickfairqueueingclass],
+ 'BridgeVLAN' => Optional[Systemd::Interface::Network::Bridgevlan],
+}]
+```
+
+### `Systemd::Interface::Network::Address`
+
+interface network Address section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Address' => String[1],
+ 'Peer' => Optional[String[1]],
+ 'Broadcast' => Optional[String[1]],
+ 'Label' => Optional[String[1,15]],
+ 'PreferredLifetime' => Optional[Enum['forever', 'infinity', '0']],
+ 'Scope' => Optional[Variant[Enum['global', 'link', 'host'],Integer[0,255]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'HomeAddress' => Optional[Enum['yes', 'no']],
+ 'DuplicateAddressDetection' => Optional[Enum['ipv4', 'ipv6', 'both', 'none']],
+ 'ManageTemporaryAddress' => Optional[Enum['yes', 'no']],
+ 'AddPrefixRoute' => Optional[Enum['yes', 'no']],
+ 'AutoJoin' => Optional[Enum['yes', 'no']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Bfifo`
+
+interface network BFIFO section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'LimitBytes' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Bridge`
+
+interface network Bridge section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'UnicastFlood' => Optional[Enum['yes', 'no']],
+ 'MulticastFlood' => Optional[Enum['yes', 'no']],
+ 'MulticastToUnicast' => Optional[Enum['yes', 'no']],
+ 'NeighborSuppression' => Optional[Enum['yes', 'no']],
+ 'Learning' => Optional[Enum['yes', 'no']],
+ 'HairPin' => Optional[Enum['yes', 'no']],
+ 'Isolated' => Optional[Enum['yes', 'no']],
+ 'UseBPDU' => Optional[Enum['yes', 'no']],
+ 'FastLeave' => Optional[Enum['yes', 'no']],
+ 'AllowPortToBeRoot' => Optional[Enum['yes', 'no']],
+ 'ProxyARP' => Optional[Enum['yes', 'no']],
+ 'ProxyARPWiFi' => Optional[Enum['yes', 'no']],
+ 'MulticastRouter' => Optional[Enum['no', 'query', 'permanent', 'temporary']],
+ 'Cost' => Optional[Integer[1, 65535]],
+ 'Priority' => Optional[Integer[0,63]],
+}]
+```
+
+### `Systemd::Interface::Network::Bridgefdb`
+
+interface network BridgeFDB section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MACAddress' => String[1],
+ 'Destination' => Optional[String[1]],
+ 'VLANId' => Optional[String[1]],
+ 'VNI' => Optional[Integer[1, 16777215]],
+ 'AssociatedWith' => Optional[Enum['use', 'self', 'master', 'router']],
+ 'OutgoingInterface' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Bridgemdb`
+
+interface network BridgeMDB section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MulticastGroupAddress' => Optional[String[1]],
+ 'VLANID' => Optional[Integer[0,4094]],
+}]
+```
+
+### `Systemd::Interface::Network::Bridgevlan`
+
+interface network BridgeVLAN section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'VLAN' => Optional[Variant[String[1], Array[String[1]]]],
+ 'EgressUntagged' => Optional[Variant[String[1], Array[String[1]]]],
+ 'PVID' => Optional[Variant[Enum['no','false'],Integer[1]]],
+}]
+```
+
+### `Systemd::Interface::Network::Cake`
+
+interface network CAKE section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Bandwidth' => Optional[String[1]],
+ 'AutoRateIngress' => Optional[Enum['yes','no']],
+ 'OverheadBytes' => Optional[Integer[-64,256]],
+ 'MPUBytes' => Optional[Integer[1,256]],
+ 'CompensationMode' => Optional[Enum['none', 'atm', 'ptm']],
+ 'UseRawPacketSize' => Optional[Enum['yes','no']],
+ 'FlowIsolationMode' => Optional[Enum['none','src-host', 'dst-host', 'hosts', 'flows','dual-src-host', 'dual-dst-host', 'triple']],
+ 'NAT' => Optional[Enum['yes','no']],
+ 'PriorityQueueingPreset' => Optional[Enum['besteffort','precedence', 'diffserv8', 'diffserv4', 'diffserv3']],
+ 'FirewallMark' => Optional[Integer[1,4294967295]],
+ 'Wash' => Optional[Enum['yes','no']],
+ 'SplitGSO' => Optional[Enum['yes','no']],
+ 'RTTSec' => Optional[String[1]],
+ 'AckFilter' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Network::Can`
+
+interface network CAN section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'BitRate' => Optional[String[1]],
+ 'SamplePoint' => Optional[String[1]],
+ 'TimeQuantaNSec' => Optional[String[1]],
+ 'PropagationSegment' => Optional[Integer[0,4294967295]],
+ 'PhaseBufferSegment1' => Optional[Integer[0,4294967295]],
+ 'PhaseBufferSegment2' => Optional[Integer[0,4294967295]],
+ 'SyncJumpWidth' => Optional[Integer[0,4294967295]],
+ 'DataBitRate' => Optional[String[1]],
+ 'DataSamplePoint' => Optional[String[1]],
+ 'DataTimeQuantaNSec' => Optional[String[1]],
+ 'DataPropagationSegment' => Optional[String[1]],
+ 'DataPhaseBufferSegment1' => Optional[String[1]],
+ 'DataPhaseBufferSegment2' => Optional[String[1]],
+ 'DataSyncJumpWidth' => Optional[String[1]],
+ 'FDMode' => Optional[Enum['yes','no']],
+ 'FDNonISO' => Optional[Enum['yes','no']],
+ 'RestartSec' => Optional[String[1]],
+ 'Termination' => Optional[Enum['yes','no']],
+ 'TripleSampling' => Optional[Enum['yes','no']],
+ 'BusErrorReporting' => Optional[Enum['yes','no']],
+ 'ListenOnly' => Optional[Enum['yes','no']],
+ 'Loopback' => Optional[Enum['yes','no']],
+ 'OneShot' => Optional[Enum['yes','no']],
+ 'PresumeAck' => Optional[Enum['yes','no']],
+ 'ClassicDataLengthCode' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Network::Controlleddelay`
+
+interface network ControlledDelay section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'TargetSec' => Optional[String[1]],
+ 'IntervalSec' => Optional[String[1]],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Deficitroundrobinscheduler`
+
+interface network DeficitRoundRobinScheduler section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Deficitroundrobinschedulerclass`
+
+interface network DeficitRoundRobinSchedulerClass section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Dhcpprefixdelegation`
+
+interface network DHCPPrefixDelegation section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'UplinkInterface' => Optional[String[1]],
+ 'SubnetId' => Optional[String[1]],
+ 'Announce' => Optional[Enum['yes','no']],
+ 'Assign' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'ManageTemporaryAddress' => Optional[Enum['yes', 'no']],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Dhcpserver`
+
+interface network DHCPServer section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'ServerAddress' => Optional[String[1]],
+ 'PoolOffset' => Optional[String[1]],
+ 'PoolSize' => Optional[String[1]],
+ 'DefaultLeaseTimeSec' => Optional[String[1]],
+ 'MaxLeaseTimeSec' => Optional[String[1]],
+ 'UplinkInterface' => Optional[String[1]],
+ 'EmitDNS' => Optional[Enum['yes','no']],
+ 'DNS' => Optional[String[1]],
+ 'EmitNTP' => Optional[Enum['yes','no']],
+ 'NTP' => Optional[String[1]],
+ 'EmitSIP' => Optional[Enum['yes','no']],
+ 'SIP' => Optional[String[1]],
+ 'EmitPOP3' => Optional[Enum['yes','no']],
+ 'POP3' => Optional[String[1]],
+ 'EmitSMTP' => Optional[Enum['yes','no']],
+ 'SMTP' => Optional[String[1]],
+ 'EmitLPR' => Optional[Enum['yes','no']],
+ 'LPR' => Optional[String[1]],
+ 'EmitRouter' => Optional[Enum['yes','no']],
+ 'Router' => Optional[String[1]],
+ 'EmitTimezone' => Optional[Enum['yes','no']],
+ 'Timezone' => Optional[String[1]],
+ 'BootServerAddress' => Optional[String[1]],
+ 'BootServerName' => Optional[String[1]],
+ 'BootFilename' => Optional[String[1]],
+ 'IPv6OnlyPreferredSec' => Optional[String[1]],
+ 'SendOption' => Optional[String[1]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'BindToInterface' => Optional[Enum['yes','no']],
+ 'RelayTarget' => Optional[String[1]],
+ 'RelayAgentCircuitId' => Optional[String[1]],
+ 'RelayAgentRemoteId' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'PersistLeases' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Network::Dhcpserverstaticlease`
+
+interface network DHCPServerStaticLease section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MACAddress' => String[1],
+ 'Address' => String[1],
+}]
+```
+
+### `Systemd::Interface::Network::Dhcpv4`
+
+interface network DHCPv4 section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'RequestAddress' => Optional[String[1]],
+ 'SendHostname' => Optional[Enum['yes','no']],
+ 'Hostname' => Optional[String[1]],
+ 'MUDURL' => Optional[String[1]],
+ 'ClientIdentifier' => Optional[String[1]],
+ 'VendorClassIdentifier' => Optional[String[1]],
+ 'UserClass' => Optional[String[1]],
+ 'DUIDType' => Optional[String[1]],
+ 'DUIDRawData' => Optional[String[1]],
+ 'IAID' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'Anonymize' => Optional[Enum['yes','no']],
+ 'RequestOptions' => Optional[String[1]],
+ 'SendOption' => Optional[String[1]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'IPServiceType' => Optional[Enum['none','CS6', 'CS3']],
+ 'SocketPriority' => Optional[Integer[0,6]],
+ 'Label' => Optional[String[1]],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'RoutesToDNS' => Optional[Enum['yes','no']],
+ 'UseNTP' => Optional[Enum['yes','no']],
+ 'RoutesToNTP' => Optional[Enum['yes','no']],
+ 'UseSIP' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UseMTU' => Optional[Enum['yes','no']],
+ 'UseHostname' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'UseRoutes' => Optional[Enum['yes','no']],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'RouteTable' => Optional[Variant[String[1],Integer[0,4294967295]]],
+ 'RouteMTUBytes' => Optional[String[1]],
+ 'QuickAck' => Optional[Enum['yes','no']],
+ 'InitialCongestionWindow' => Optional[String[1]],
+ 'InitialAdvertisedReceiveWindow' => Optional[String[1]],
+ 'UseGateway' => Optional[Enum['yes','no']],
+ 'UseTimezone' => Optional[Enum['yes','no']],
+ 'Use6RD' => Optional[Enum['yes','no']],
+ 'IPv6OnlyMode' => Optional[Enum['yes','no']],
+ 'FallbackLeaseLifetimeSec' => Optional[Enum['forever', 'infinity']],
+ 'RequestBroadcast' => Optional[Enum['yes','no']],
+ 'MaxAttempts' => Optional[Variant[Integer[0],Enum['forever', 'infinity']]],
+ 'ListenPort' => Optional[String[1]],
+ 'ServerPort' => Optional[String[1]],
+ 'DenyList' => Optional[String[1]],
+ 'AllowList' => Optional[String[1]],
+ 'SendRelease' => Optional[Enum['yes','no']],
+ 'SendDecline' => Optional[Enum['yes','no']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Dhcpv6`
+
+interface network DHCPv6 section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MUDURL' => Optional[String[1]],
+ 'IAID' => Optional[String[1]],
+ 'DUIDType' => Optional[String[1]],
+ 'DUIDRawData' => Optional[String[1]],
+ 'RequestOptions' => Optional[String[1]],
+ 'SendOption' => Optional[Integer[1,65536]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'UserClass' => Optional[String[1]],
+ 'VendorClass' => Optional[String[1]],
+ 'PrefixDelegationHint' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'SendHostname' => Optional[Enum['yes','no']],
+ 'Hostname' => Optional[String[1]],
+ 'UseAddress' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UseDelegatedPrefix' => Optional[Enum['yes','no']],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'UseNTP' => Optional[Enum['yes','no']],
+ 'UseHostname' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'NetLabel' => Optional[Enum['yes','no']],
+ 'SendRelease' => Optional[Enum['yes','no']],
+ 'NFTSet' => Optional[String[1]],
+ 'WithoutRA' => Optional[Enum['no', 'solicit', 'information-request']],
+}]
+```
+
+### `Systemd::Interface::Network::Enhancedtransmissionselection`
+
+interface network EnhancedTransmissionSelection section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'Bands' => Optional[Integer[1,16]],
+ 'StrictBands' => Optional[Integer[1,16]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'PriorityMap' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Fairqueueing`
+
+interface network FairQueueing section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'FlowLimit' => Optional[Integer[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'InitialQuantumBytes' => Optional[String[1]],
+ 'MaximumRate' => Optional[String[1]],
+ 'Buckets' => Optional[String[1]],
+ 'OrphanMask' => Optional[Integer[0]],
+ 'Pacing' => Optional[Enum['yes','no']],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Fairqueueingcontrolleddelay`
+
+interface network FairQueueingControlledDelay section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'MemoryLimitBytes' => Optional[String[1]],
+ 'Flows' => Optional[String[1]],
+ 'TargetSec' => Optional[String[1]],
+ 'IntervalSec' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'ECN' => Optional[Enum['yes','no']],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Flowqueuepie`
+
+interface network FlowQueuePIE section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
+```
+
+### `Systemd::Interface::Network::Genericrandomearlydetection`
+
+interface network GenericRandomEarlyDetection section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'VirtualQueues' => Optional[Integer[1,16]],
+ 'DefaultVirtualQueues' => Optional[Integer[1,16]],
+ 'GenericRIO' => Optional[Enum['yes','no']],
+}]
+```
+
+### `Systemd::Interface::Network::Heavyhitterfilter`
+
+interface network HeavyHitterFilter section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]]
+}]
+```
+
+### `Systemd::Interface::Network::Hierarchytokenbucketclass`
+
+interface network HierarchyTokenBucketClass section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'Priority' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+ 'OverheadBytes' => Optional[String[1]],
+ 'Rate' => Optional[String[1]],
+ 'CeilRate' => Optional[String[1]],
+ 'BufferBytes' => Optional[String[1]],
+ 'CeilBufferBytes' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipoib`
+
+interface network IPoIB section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Mode' => Optional[Enum['datagram','connected']],
+ 'IgnoreUserspaceMulticastGroup' => Optional[Enum['yes', 'no']],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6acceptra`
+
+interface network IPv6AcceptRA section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'UseRedirect' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'RouteTable' => Optional[Variant[String[1],Integer[0,4294967295]]],
+ 'RouteMetric' => Optional[String[1]],
+ 'QuickAck' => Optional[Enum['yes','no']],
+ 'UseMTU' => Optional[Enum['yes','no']],
+ 'UseHopLimit' => Optional[Enum['yes','no']],
+ 'UseReachableTime' => Optional[Enum['yes','no']],
+ 'UseRetransmissionTime' => Optional[Enum['yes','no']],
+ 'UseGateway' => Optional[Enum['yes','no']],
+ 'UseRoutePrefix' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UsePREF64' => Optional[Enum['yes','no']],
+ 'UseAutonomousPrefix' => Optional[Enum['yes','no']],
+ 'UseOnLinkPrefix' => Optional[Enum['yes','no']],
+ 'RouterDenyList' => Optional[String[1]],
+ 'RouterAllowList' => Optional[String[1]],
+ 'PrefixDenyList' => Optional[String[1]],
+ 'PrefixAllowList' => Optional[String[1]],
+ 'RouteDenyList' => Optional[String[1]],
+ 'RouteAllowList' => Optional[String[1]],
+ 'DHCPv6Client' => Optional[Enum['yes','no', 'always']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6addresslabel`
+
+interface network IPv6AddressLabel section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Label' => Optional[Integer[0,4294967294]],
+ 'Prefix' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6pref64prefix`
+
+interface network IPv6PREF64Prefix section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Prefix' => Optional[String[1]],
+ 'LifetimeSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6prefix`
+
+interface network IPv6Prefix section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'AddressAutoconfiguration' => Optional[Enum['yes','no']],
+ 'OnLink' => Optional[Enum['yes','no']],
+ 'Prefix' => Optional[String[1]],
+ 'PreferredLifetimeSec' => Optional[String[1]],
+ 'ValidLifetimeSec' => Optional[String[1]],
+ 'Assign' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'RouteMetric' => Optional[Integer[0, 4294967295]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6routeprefix`
+
+interface network IPv6RoutePrefix section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Route' => Optional[String[1]],
+ 'LifetimeSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Ipv6sendra`
+
+interface network IPv6SendRA section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Managed' => Optional[Enum['yes','no']],
+ 'OtherInformation' => Optional[Enum['yes','no']],
+ 'RouterLifetimeSec' => Optional[String[1]],
+ 'ReachableTimeSec' => Optional[String[1]],
+ 'RetransmitSec' => Optional[String[1]],
+ 'RouterPreference' => Optional[Enum['high', 'medium', 'low', 'normal', 'default']],
+ 'HopLimit' => Optional[Integer[0,255]],
+ 'UplinkInterface' => Optional[String[1]],
+ 'EmitDNS' => Optional[Enum['yes','no']],
+ 'DNS' => Optional[String[1]],
+ 'EmitDomains' => Optional[Enum['yes','no']],
+ 'Domains' => Optional[String[1]],
+ 'DNSLifetimeSec' => Optional[String[1]],
+ 'HomeAgent' => Optional[Enum['yes','no']],
+ 'HomeAgentLifetimeSec' => Optional[String[1]],
+ 'HomeAgentPreference' => Optional[Integer[0,65535]],
+}]
+```
+
+### `Systemd::Interface::Network::Link`
+
+interface network Link section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MACAddress' => Optional[String[1]],
+ 'MTUBytes' => Optional[Integer[1280]],
+ 'ARP' => Optional[Enum['yes','no']],
+ 'Multicast' => Optional[Enum['yes','no']],
+ 'AllMulticast' => Optional[Enum['yes','no']],
+ 'Promiscuous' => Optional[Enum['yes','no']],
+ 'Unmanaged' => Optional[Enum['yes','no']],
+ 'Group' => Optional[Integer[0,2147483647]],
+ 'RequiredForOnline' => Optional[String[1]],
+ 'RequiredFamilyForOnline' => Optional[Enum['no', 'ipv4', 'ipv6', 'both', 'any']],
+ 'ActivationPolicy' => Optional[Enum[
+ 'up', 'always-up', 'manual', 'always-down', 'down', 'bound'
+ ]],
+}]
+```
+
+### `Systemd::Interface::Network::Lldp`
+
+interface network LLDP section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MUDURL' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Match`
+
+interface network Match section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'MACAddress' => Optional[String[1]],
+ 'PermanentMACAddress' => Optional[String[1]],
+ 'Path' => Optional[String[1]],
+ 'Driver' => Optional[String[1]],
+ 'Type' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'Name' => Optional[String[1]],
+ 'WLANInterfaceType' => Optional[Enum[
+ 'ad-hoc', 'station', 'ap', 'ap-vlan', 'wds', 'monitor',
+ 'mesh-point', 'p2p-client', 'p2p-go', 'p2p-device', 'ocb', 'nan',
+ '!ad-hoc', '!station', '!ap', '!ap-vlan', '!wds', '!monitor',
+ '!mesh-point', '!p2p-client', '!p2p-go', '!p2p-device', '!ocb', '!nan'
+ ]],
+ 'SSID' => Optional[String[1]],
+ 'BSSID' => Optional[String[1]],
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Neighbor`
+
+interface network Neighbor section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Address' => Optional[String[1]],
+ 'LinkLayerAddress' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Network`
+
+interface network Network section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Description' => Optional[String[1]],
+ 'DHCP' => Optional[Enum['yes', 'no', 'ipv4', 'ipv6']],
+ 'DHCPServer' => Optional[Enum['yes', 'no']],
+ 'LinkLocalAddressing' => Optional[Enum['yes', 'no', 'ipv4', 'ipv6']],
+ 'IPv6LinkLocalAddressGenerationMode' => Optional[Enum[
+ 'eui64', 'none', 'stable-privacy', 'random'
+ ]],
+ 'IPv6StableSecretAddress' => Optional[String[1]],
+ 'IPv4LLStartAddress' => Optional[String[1]],
+ 'IPv4LLRoute' => Optional[Enum['yes', 'no']],
+ 'DefaultRouteOnDevice' => Optional[Enum['yes', 'no']],
+ 'LLMNR' => Optional[Enum['yes', 'no', 'resolve']],
+ 'MulticastDNS' => Optional[Enum['yes', 'no', 'resolve']],
+ 'DNSOverTLS' => Optional[Enum['yes', 'no', 'opportunistic']],
+ 'DNSSEC' => Optional[Enum['yes', 'no', 'allow-downgrade']],
+ 'DNSSECNegativeTrustAnchors' => Optional[String[1]],
+ 'LLDP' => Optional[Enum['yes', 'no', 'routers-only']],
+ 'EmitLLDP' => Optional[Enum['yes', 'no', 'nearest-bridge', 'non-tpmr-bridge', 'customer-bridge']],
+ 'BindCarrier' => Optional[String[1]],
+ 'Address' => Optional[Variant[Array[String[1]], String[1]]],
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'DNS' => Optional[Variant[Array[String[1]], String[1]]],
+ 'UseDomains' => Optional[Enum['yes', 'no', 'route']],
+ 'DNSDefaultRoute' => Optional[Enum['yes', 'no']],
+ 'NTP' => Optional[Enum['yes', 'no', 'route']],
+ 'IPv4Forwarding' => Optional[Enum['yes', 'no']],
+ 'IPv6Forwarding' => Optional[Enum['yes', 'no']],
+ 'IPMasquerade' => Optional[Enum['ipv4', 'ipv6', 'both', 'no']],
+ 'IPv6PrivacyExtensions' => Optional[Enum['yes', 'no', 'prefer-public', 'kernel']],
+ 'IPv6AcceptRA' => Optional[Enum['yes', 'no']],
+ 'IPv6DuplicateAddressDetection' => Optional[Integer],
+ 'IPv6HopLimit' => Optional[Integer[1,255]],
+ 'IPv6RetransmissionTimeSec' => Optional[Integer[0]],
+ 'IPv4ReversePathFilter' => Optional[Enum['no', 'strict', 'loose']],
+ 'IPv4AcceptLocal' => Optional[Enum['yes', 'no']],
+ 'IPv4RouteLocalnet' => Optional[Enum['yes', 'no']],
+ 'IPv4ProxyARP' => Optional[Enum['yes', 'no']],
+ 'IPv4ProxyARPPrivateVLAN' => Optional[Enum['yes', 'no']],
+ 'IPv6ProxyNDP' => Optional[Enum['yes', 'no']],
+ 'IPv6ProxyNDPAddress' => Optional[Variant[String[1], Array[String[1]]]],
+ 'IPv6SendRA' => Optional[Enum['yes', 'no']],
+ 'DHCPPrefixDelegation' => Optional[Enum['yes', 'no']],
+ 'IPv6MTUBytes' => Optional[Integer[1280]],
+ 'KeepMaster' => Optional[Enum['yes', 'no']],
+ 'BatmanAdvanced' => Optional[String[1]],
+ 'Bond' => Optional[String[1]],
+ 'Bridge' => Optional[String[1]],
+ 'VRF' => Optional[String[1]],
+ 'IPoIB' => Optional[Variant[String[1],Array[String[1]]]],
+ 'IPVLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'IPVTAP' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACsec' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACVLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACVTAP' => Optional[Variant[String[1],Array[String[1]]]],
+ 'Tunnel' => Optional[Variant[String[1],Array[String[1]]]],
+ 'VLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'VXLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'Xfrm' => Optional[Variant[String[1],Array[String[1]]]],
+ 'ActiveSlave' => Optional[Enum['yes', 'no']],
+ 'PrimarySlave' => Optional[Enum['yes', 'no']],
+ 'ConfigureWithoutCarrier' => Optional[Enum['yes', 'no']],
+ # 'IgnoreCarrierLoss' => Optional[Variant[Enum['yes', 'no'],Systemd::Unit::Timespan]],
+ 'KeepConfiguration' => Optional[Enum['yes', 'no', 'static', 'dhcp-on-stop', 'dhcp']],
+}]
+```
+
+### `Systemd::Interface::Network::Networkemulator`
+
+interface network NetworkEmulator section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact','ingress'],String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'DelayJitterSec' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'LossRate' => Optional[String[1]],
+ 'DuplicateRate' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Nexthop`
+
+interface network NextHop section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Id' => Optional[Integer[1, 4294967295]],
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'Familiy' => Optional[Enum['ipv4','ipv6']],
+ 'OnLink' => Optional[Enum['yes','no']],
+ 'Blackhole' => Optional[Enum['yes','no']],
+ 'Group' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Pfifo`
+
+interface network PFIFO section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]]
+}]
+```
+
+### `Systemd::Interface::Network::Pfifofast`
+
+interface network PFIFOFast section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Pfifoheaddrop`
+
+interface network PFIFOHeadDrop section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+}]
+```
+
+### `Systemd::Interface::Network::Pie`
+
+interface network PIE section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
+```
+
+### `Systemd::Interface::Network::Qdisc`
+
+interface network QDisc section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Enum['clsact', 'ingress']],
+ 'Handle' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Quickfairqueueingclass`
+
+interface network QuickFairQueueingClass section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'Weight' => Optional[Integer[1,1023]],
+ 'MaxPacketBytes' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Route`
+
+interface network Route section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'GatewayOnLink' => Optional[Enum['yes', 'no']],
+ 'Destination' => Optional[String[1]],
+ 'Source' => Optional[String[1]],
+ 'Metric' => Optional[Integer[0,4294967295]],
+ 'IPv6Preference' => Optional[Enum['low','medium', 'high']],
+ 'Scope' => Optional[Enum['global', 'site', 'link', 'host', 'nowhere']],
+ 'PreferredSource' => Optional[String[1]],
+ 'Table' => Optional[Variant[String[1], Enum['default','main', 'local'], Integer[1,4294967295]]],
+ 'HopLimit' => Optional[Integer[1,255]],
+ 'Protocol' => Optional[Variant[Integer[0,255], Enum['kernel', 'boot', 'static', 'ra', 'dhcp']]],
+ 'Type' => Optional[Enum[
+ 'unicast', 'local', 'broadcast', 'anycast', 'multicast',
+ 'blackhole', 'unreachable', 'prohibit', 'throw', 'nat', 'xresolve'
+ ]],
+ 'InitialCongestionWindow' => Optional[Integer[0,1023]],
+ 'InitialAdvertisedReceiveWindow' => Optional[Integer[0,1023]],
+ 'QuickAck' => Optional[Enum['yes', 'no',]],
+ 'FastOpenNoCookie' => Optional[Enum['yes', 'no',]],
+ 'MTUBytes' => Optional[String[1]],
+ 'TCPAdvertisedMaximumSegmentSize' => Optional[String[1]],
+ 'TCPCongestionControlAlgorithm' => Optional[Enum['bbr', 'dctcp', 'vegas']],
+ 'TCPRetransmissionTimeoutSeca' => Optional[Integer[1]],
+ 'MultiPathRoute' => Optional[Variant[String[1],Array[String[1]]]],
+ 'NextHop' => Optional[Integer[1, 4294967295]],
+}]
+```
+
+### `Systemd::Interface::Network::Routingpolicyrule`
+
+interface network RoutingPolicyRule section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'TypeOfService' => Optional[Integer[0,255]],
+ 'From' => Optional[String[1]],
+ 'To' => Optional[String[1]],
+ 'FirewallMark' => Optional[Variant[String[1],Integer[1, 4294967295]]],
+ 'Table' => Optional[Variant[Enum['default','main','local'],Integer[1,4294967295],String[1]]],
+ 'Priority' => Optional[Integer[0,4294967295]],
+ 'IncomingInterface' => Optional[String[1]],
+ 'OutgoingInterface' => Optional[String[1]],
+ 'L3MasterDevice' => Optional[Enum['yes','no']],
+ 'SourcePort' => Optional[String[1]],
+ 'DestinationPort' => Optional[String[1]],
+ 'IPProtocol' => Optional[String[1]],
+ 'InvertRule' => Optional[Enum['yes','no']],
+ 'Family' => Optional[Enum['ipv4', 'ipv6', 'both']],
+ 'User' => Optional[String[1]],
+ 'SuppressPrefixLength' => Optional[Integer[0,128]],
+ 'SuppressInterfaceGroup' => Optional[Integer[0,2147483647]],
+ 'Type' => Optional[Enum['blackhole','unreachable','prohibit']],
+}]
+```
+
+### `Systemd::Interface::Network::Sr_iov`
+
+interface network SR-IOV section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'VirtualFunction' => Optional[Integer[0,2147483646]],
+ 'VLANId' => Optional[Integer[1,4095]],
+ 'QualityOfService' => Optional[Integer[0,4294967294]],
+ 'VLANProtocol' => Optional[Enum['802.1Q', '802.1ad']],
+ 'MACSpoofCheck' => Optional[Enum['no','yes']],
+ 'QueryReceiveSideScaling' => Optional[Enum['no','yes']],
+ 'Trust' => Optional[Enum['no','yes']],
+ 'LinkState' => Optional[Enum['no','yes','auto']],
+ 'MACAddress' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Stochasticfairblue`
+
+interface network StochasticFairBlue section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
+```
+
+### `Systemd::Interface::Network::Stochasticfairnessqueueing`
+
+interface network StochasticFairnessQueueing section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PerturbPeriodSec' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Tokenbucketfilter`
+
+interface network TokenBucketFilter section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'LatencySec' => Optional[String[1]],
+ 'LimitBytes' => Optional[String[1]],
+ 'BurstBytes' => Optional[String[1]],
+ 'Rate' => Optional[String[1]],
+ 'MPUBytes' => Optional[String[1]],
+ 'PeakRate' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+}]
+```
+
+### `Systemd::Interface::Network::Triviallinkequalizer`
+
+interface network TrivialLinkEqualizer section definition
+see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+
+Alias of
+
+```puppet
+Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'DefaultClass' => Optional[String[1]],
+ 'RateToQuantum' => Optional[Integer[0]]
+}]
+```
+
### `Systemd::JournalRemoteSettings`
matches Systemd journal remote config Struct
diff --git a/manifests/networkd.pp b/manifests/networkd.pp
index c553caa6..c2970c8a 100644
--- a/manifests/networkd.pp
+++ b/manifests/networkd.pp
@@ -5,10 +5,53 @@
# @param ensure The state that the ``networkd`` service should be in
# @param path path where all networkd files are placed in
# @param manage_all_network_files if enabled, all networkd files that aren't managed by puppet will be purged
+# @param link_profiles
+# Hash of network link profiles that can be referenced by it's key on an interface
+# The structure is equal to the 'link' parameter of an interface.
+# @param netdev_profiles
+# Hash of netdev profiles that can be referenced by it's key on an interface
+# The structure is equal to the 'netdev' parameter of an interface.
+# @param network_profiles
+# Hash of network profiles that can be referenced by it's key on an interface
+# The structure is equal to the 'network' parameter of an interface.
+# @param interfaces
+# Hash of interfaces to configure on a node.
+# The link, netdev and network parameters are deep merged with the respective profile
+# (referenced by the key of the interface).
+# With the profiles you can set the default values for a network.
+# Hint: to remove a profile setting for an interface you can either overwrite or
+# set it to '~' for removal.
+# Example (hiera yaml notation):
+# systemd::networkd::network_profiles:
+# mynet:
+# Network:
+# Gateway: '192.168.0.1'
+#
+# systemd::networkd
+# mynet:
+# filename: '50-static'
+# network:
+# Match:
+# Name: 'eno0'
+# Network:
+# Address: '192.168.0.15/24'
+#
+# Gives you a file /etc/systemd/network/50-static.network
+# with content:
+# [Match]
+# Name=enp2s0
+# [Network]
+# Address=192.168.0.15/24
+# Gateway=192.168.0.1
+#
class systemd::networkd (
- Enum['stopped','running'] $ensure = $systemd::networkd_ensure,
- Stdlib::Absolutepath $path = $systemd::network_path,
- Boolean $manage_all_network_files = $systemd::manage_all_network_files,
+ Enum['stopped','running'] $ensure = $systemd::networkd_ensure,
+ Stdlib::Absolutepath $path = $systemd::network_path,
+ Boolean $manage_all_network_files = $systemd::manage_all_network_files,
+ Hash[String[1],Systemd::Interface::Link] $link_profiles = {},
+ Hash[String[1],Systemd::Interface::Netdev] $netdev_profiles = {},
+ Hash[String[1],Systemd::Interface::Network] $network_profiles = {},
+ Hash[String[1],Systemd::Interface] $interfaces = {},
) {
assert_private()
@@ -32,4 +75,35 @@
notify => Service['systemd-networkd'],
}
}
+
+ $interfaces.each | String[1] $interface_name, Systemd::Interface $interface | {
+ $_filename=pick($interface['filename'], $interface_name)
+ if 'link' in $interface.keys() {
+ systemd::network { "${_filename}.link":
+ path => $path,
+ content => epp('systemd/network.epp', {
+ fname => "${_filename}.link",
+ config => deep_merge(pick($link_profiles[$interface_name], {}), $interface['link']),
+ }),
+ }
+ }
+ if 'netdev' in $interface.keys() {
+ systemd::network { "${_filename}.netdev":
+ path => $path,
+ content => epp('systemd/network.epp', {
+ fname => "${_filename}.netdev",
+ config => deep_merge(pick($netdev_profiles[$interface_name], {}), $interface['netdev']),
+ }),
+ }
+ }
+ if 'network' in $interface.keys() {
+ systemd::network { "${_filename}.network":
+ path => $path,
+ content => epp('systemd/network.epp', {
+ fname => "${_filename}.network",
+ config => deep_merge(pick($network_profiles[$interface_name], {}), $interface['network']),
+ }),
+ }
+ }
+ }
}
diff --git a/spec/classes/networkd_spec.rb b/spec/classes/networkd_spec.rb
new file mode 100644
index 00000000..e0187523
--- /dev/null
+++ b/spec/classes/networkd_spec.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'systemd::networkd' do
+ on_supported_os.each do |os, os_facts|
+ context "on #{os}" do
+ let(:facts) { os_facts }
+ let(:pre_condition) do
+ [
+ 'include systemd',
+ # Fake assert_private function from stdlib to not fail within this test
+ 'function assert_private () { }',
+ ]
+ end
+
+ it { is_expected.to compile.with_all_deps }
+ end
+ end
+end
diff --git a/spec/type_aliases/interface/link_spec.rb b/spec/type_aliases/interface/link_spec.rb
new file mode 100644
index 00000000..3585d8b9
--- /dev/null
+++ b/spec/type_aliases/interface/link_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Systemd::Interface::Link' do
+ describe 'valid types' do
+ context 'with valid types' do
+ [
+ {},
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.to allow_value(value) }
+ end
+ end
+ end
+ end
+
+ describe 'invalid types' do
+ context 'with garbage inputs' do
+ [
+ true,
+ false,
+ :keyword,
+ nil,
+ { 'foo' => 'bar' },
+ '42',
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.not_to allow_value(value) }
+ end
+ end
+ end
+ end
+end
diff --git a/spec/type_aliases/interface/netdev_spec.rb b/spec/type_aliases/interface/netdev_spec.rb
new file mode 100644
index 00000000..d6054e67
--- /dev/null
+++ b/spec/type_aliases/interface/netdev_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Systemd::Interface::Netdev' do
+ describe 'valid types' do
+ context 'with valid types' do
+ [
+ {},
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.to allow_value(value) }
+ end
+ end
+ end
+ end
+
+ describe 'invalid types' do
+ context 'with garbage inputs' do
+ [
+ true,
+ false,
+ :keyword,
+ nil,
+ { 'foo' => 'bar' },
+ '42',
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.not_to allow_value(value) }
+ end
+ end
+ end
+ end
+end
diff --git a/spec/type_aliases/interface/network_spec.rb b/spec/type_aliases/interface/network_spec.rb
new file mode 100644
index 00000000..c3cf4cd9
--- /dev/null
+++ b/spec/type_aliases/interface/network_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Systemd::Interface::Network' do
+ describe 'valid types' do
+ context 'with valid types' do
+ [
+ {},
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.to allow_value(value) }
+ end
+ end
+ end
+ end
+
+ describe 'invalid types' do
+ context 'with garbage inputs' do
+ [
+ true,
+ false,
+ :keyword,
+ nil,
+ { 'foo' => 'bar' },
+ '42',
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.not_to allow_value(value) }
+ end
+ end
+ end
+ end
+end
diff --git a/spec/type_aliases/systemd_interface_spec.rb b/spec/type_aliases/systemd_interface_spec.rb
new file mode 100644
index 00000000..11c646f4
--- /dev/null
+++ b/spec/type_aliases/systemd_interface_spec.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe 'Systemd::Interface' do
+ describe 'valid types' do
+ context 'with valid types' do
+ [
+ {},
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.to allow_value(value) }
+ end
+ end
+ end
+ end
+
+ describe 'invalid types' do
+ context 'with garbage inputs' do
+ [
+ true,
+ false,
+ :keyword,
+ nil,
+ { 'foo' => 'bar' },
+ '42',
+ ].each do |value|
+ describe value.inspect do
+ it { is_expected.not_to allow_value(value) }
+ end
+ end
+ end
+ end
+end
diff --git a/templates/network.epp b/templates/network.epp
new file mode 100644
index 00000000..00efb7fb
--- /dev/null
+++ b/templates/network.epp
@@ -0,0 +1,26 @@
+<%- | String[1] $fname = {},
+ Hash $config = {},
+| -%>
+#
+# This file is managed with puppet
+#
+# File name: <%= $fname %>
+#
+<% $config.each |String $head, Variant[Hash,Array] $vals| { -%>
+ <%- if $vals =~ Array { $_loop= $vals } else { $_loop = [ $vals ] } -%>
+ <%- $_loop.each | Hash $vals | { -%>
+
+ <%- %>[<%= $head %>]
+ <%- $vals.each() | String $key, Any $value | { -%>
+ <%- if $value =~ Array[String] { -%>
+ <%- $value.each() | String $val | { -%>
+ <%- %><%= $key %>=<%= $val %>
+ <%- } -%>
+ <%- } else { -%>
+ <%- if $value !~ Undef { -%>
+ <%- %><%= $key %>=<%= $value %>
+ <%- } -%>
+ <%- } -%>
+ <%- } -%>
+ <%- } -%>
+<% } -%>
diff --git a/types/interface.pp b/types/interface.pp
new file mode 100644
index 00000000..d0deb6f1
--- /dev/null
+++ b/types/interface.pp
@@ -0,0 +1,7 @@
+# network interface definition
+type Systemd::Interface = Struct[{
+ filename => Optional[String[1]],
+ network => Optional[Systemd::Interface::Network],
+ netdev => Optional[Systemd::Interface::Netdev],
+ link => Optional[Systemd::Interface::Link],
+}]
diff --git a/types/interface/link.pp b/types/interface/link.pp
new file mode 100644
index 00000000..0cabea14
--- /dev/null
+++ b/types/interface/link.pp
@@ -0,0 +1,6 @@
+# interface definition
+type Systemd::Interface::Link = Struct[{
+ 'Match' => Optional[Systemd::Interface::Link::Match],
+ 'Link' => Optional[Systemd::Interface::Link::Link],
+ 'SR-IOV' => Optional[Systemd::Interface::Link::Sr_iov],
+}]
diff --git a/types/interface/link/link.pp b/types/interface/link/link.pp
new file mode 100644
index 00000000..aa805a86
--- /dev/null
+++ b/types/interface/link/link.pp
@@ -0,0 +1,84 @@
+# interface definition
+type Systemd::Interface::Link::Link = Struct[{
+ 'Description' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'ImportProperty' => Optional[String[1]],
+ 'UnsetProperty' => Optional[String[1]],
+ 'Alias' => Optional[String[1]],
+ 'MACAddressPolicy' => Optional[Enum['persistent', 'random', 'none', '']],
+ 'MACAddress' => Optional[String[1]],
+ 'NamePolicy' => Optional[Enum[
+ 'kernel', 'database', 'onboard', 'slot',
+ 'path', 'mac', 'keep'
+ ]],
+ 'Name' => Optional[String[1]],
+ 'AlternativeNamesPolicy' => Optional[String[1]],
+ 'AlternativeName' => Optional[String[1]],
+ 'TransmitQueues' => Optional[Integer[1,4096]],
+ 'ReceiveQueues' => Optional[Integer[1,4096]],
+ 'TransmitQueueLength' => Optional[Integer[0, 4294967294]],
+ 'MTUBytes' => Optional[Integer[1280]],
+ 'BitsPerSecond' => Optional[String[1]],
+ 'Duplex' => Optional[String[1]],
+ 'AutoNegotiation' => Optional[Enum['yes','no']],
+ 'WakeOnLan' => Optional[Enum[
+ 'phy', 'unicast', 'multicast', 'broadcast',
+ 'arp', 'magic', 'secureon'
+ ]],
+ 'WakeOnLanPassword' => Optional[String[1]],
+ 'Port' => Optional[Enum['tp', 'aui', 'bnc', 'mii', 'fibre']],
+ 'Advertise' => Optional[Variant[
+ Systemd::Interface::Link::Link_advertise,
+ Array[Systemd::Interface::Link::Link_advertise]
+ ]],
+ 'ReceiveChecksumOffload' => Optional[Enum['yes','no']],
+ 'TransmitChecksumOffload' => Optional[Enum['yes','no']],
+ 'TCPSegmentationOffload' => Optional[Enum['yes','no']],
+ 'TCP6SegmentationOffload' => Optional[Enum['yes','no']],
+ 'GenericSegmentationOffload' => Optional[Enum['yes','no']],
+ 'GenericReceiveOffload' => Optional[Enum['yes','no']],
+ 'LargeReceiveOffload' => Optional[Enum['yes','no']],
+ 'ReceivePacketSteeringCPUMask' => Optional[String[1]],
+ 'ReceiveVLANCTAGHardwareAcceleration' => Optional[Enum['yes','no']],
+ 'TransmitVLANCTAGHardwareAcceleration'=> Optional[Enum['yes','no']],
+ 'ReceiveVLANCTAGFilter' => Optional[Enum['yes','no']],
+ 'TransmitVLANSTAGHardwareAcceleration'=> Optional[Enum['yes','no']],
+ 'NTupleFilter' => Optional[Enum['yes','no']],
+ 'RxChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'TxChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'OtherChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'CombinedChannels' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxMiniBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxJumboBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'TxBufferSize' => Optional[Variant[Enum['max'],Integer[1,4294967295]]],
+ 'RxFlowControl' => Optional[Enum['yes','no']],
+ 'TxFlowControl' => Optional[Enum['yes','no']],
+ 'AutoNegotiationFlowControl' => Optional[Enum['yes','no']],
+ 'GenericSegmentOffloadMaxBytes' => Optional[String[1]],
+ 'GenericSegmentOffloadMaxSegments' => Optional[Integer[1, 65535]],
+ 'UseAdaptiveRxCoalesce' => Optional[Enum['yes','no']],
+ 'UseAdaptiveTxCoalesce' => Optional[Enum['yes','no']],
+ 'RxCoalesceSec' => Optional[Integer],
+ 'RxCoalesceIrqSec' => Optional[Integer],
+ 'RxCoalesceLowSec' => Optional[Integer],
+ 'RxCoalesceHighSec' => Optional[Integer],
+ 'TxCoalesceSec' => Optional[Integer],
+ 'TxCoalesceIrqSec' => Optional[Integer],
+ 'TxCoalesceLowSec' => Optional[Integer],
+ 'TxCoalesceHighSec' => Optional[Integer],
+ 'RxMaxCoalescedFrames' => Optional[Integer],
+ 'RxMaxCoalescedIrqFrames' => Optional[Integer],
+ 'RxMaxCoalescedLowFrames' => Optional[Integer],
+ 'RxMaxCoalescedHighFrames' => Optional[Integer],
+ 'TxMaxCoalescedFrames' => Optional[Integer],
+ 'TxMaxCoalescedIrqFrames' => Optional[Integer],
+ 'TxMaxCoalescedLowFrames' => Optional[Integer],
+ 'TxMaxCoalescedHighFrames' => Optional[Integer],
+ 'CoalescePacketRateLow' => Optional[Integer],
+ 'CoalescePacketRateHigh' => Optional[Integer],
+ 'CoalescePacketRateSampleIntervalSec' => Optional[Integer],
+ 'StatisticsBlockCoalesceSec' => Optional[Integer[1]],
+ 'MDI' => Optional[Enum['straight', 'mdi', 'crossover', 'mdi-x', 'mdix', 'auto']],
+ 'SR_IOVVirtualFunctions' => Optional[Integer[0, 2147483647]],
+}]
diff --git a/types/interface/link/link_advertise.pp b/types/interface/link/link_advertise.pp
new file mode 100644
index 00000000..5b35ce5f
--- /dev/null
+++ b/types/interface/link/link_advertise.pp
@@ -0,0 +1,102 @@
+# interface definition
+type Systemd::Interface::Link::Link_advertise = Enum[
+ '10baset-full',
+ '10baset1l-full',
+ '10baset-half',
+ '100basefx-full',
+ '100baset-full',
+ '100baset1-full',
+ '100basefx-half',
+ '100baset-half',
+ '1000basekx-ful',
+ '1000baset-full',
+ '1000baset1-full',
+ '1000basex-full',
+ '1000baset-half',
+ '2500baset-full',
+ '2500basex-full',
+ '5000baset-full',
+ '10000baser-fec',
+ '10000basecr-full',
+ '10000baseer-full',
+ '10000basekr-full',
+ '10000basekx4-full',
+ '10000baselr-full',
+ '10000baselrm-full',
+ '10000basesr-full',
+ '10000baset-full',
+ '20000basekr2-full',
+ '20000basemld2-full',
+ '25000basecr-full',
+ '25000basekr-full',
+ '25000basesr-full',
+ '40000basecr4-full',
+ '40000basekr4-full',
+ '40000baselr4-full',
+ '40000basesr4-full',
+ '50000basecr-full',
+ '50000basecr2-full',
+ '50000basedr-full',
+ '50000basekr-full',
+ '50000basekr2-full',
+ '50000baselr-er-fr-full',
+ '50000basesr-full',
+ '50000basesr2-full',
+ '56000basecr4-full',
+ '56000basekr4-full',
+ '56000baselr4-full',
+ '56000basesr4-full',
+ '100000basecr-full',
+ '100000basecr2-full',
+ '100000basecr4-full',
+ '100000basedr-full',
+ '100000basedr2-full',
+ '100000basekr-full',
+ '100000basekr2-full',
+ '100000basekr4-full',
+ '100000baselr-er-fr-full',
+ '100000baselr2-er2-fr2-full',
+ '100000baselr4-er4-full',
+ '100000basesr-full',
+ '100000basesr2-full',
+ '100000basesr4-full',
+ '200000basecr2-full',
+ '200000basecr4-full',
+ '200000basedr2-full',
+ '200000basedr4-full',
+ '200000basekr2-full',
+ '200000basekr4-full',
+ '200000baselr2-er2-fr2-full',
+ '200000baselr4-er4-fr4-full',
+ '200000basesr2-full',
+ '200000basesr4-full',
+ '400000basecr4-full',
+ '400000basecr8-full',
+ '400000basedr4-full',
+ '400000basedr8-full',
+ '400000basekr4-full',
+ '400000basekr8-full',
+ '400000baselr4-er4-fr4-full',
+ '400000baselr8-er8-fr8-full',
+ '400000basesr4-full',
+ '400000basesr8-full',
+ '800000basecr8-full',
+ '800000basedr8-2-full',
+ '800000basedr8-full',
+ '800000basekr8-full',
+ '800000basesr8-full',
+ '800000basevr8-full',
+ 'asym-pause',
+ 'aui',
+ 'autonegotiation',
+ 'backplane',
+ 'bnc',
+ 'fec-baser',
+ 'fec-llrs',
+ 'fec-none',
+ 'fec-rs',
+ 'fibre',
+ 'mii',
+ 'pause',
+ 'tp'
+]
diff --git a/types/interface/link/match.pp b/types/interface/link/match.pp
new file mode 100644
index 00000000..65f3dd9a
--- /dev/null
+++ b/types/interface/link/match.pp
@@ -0,0 +1,21 @@
+# interface definition
+type Systemd::Interface::Link::Match = Struct[{
+ 'Name' => Optional[String[1]],
+ 'MACAddress' => Optional[String[1]],
+ 'PermanentMACAddress' => Optional[String[1]],
+ 'Path' => Optional[String[1]],
+ 'Driver' => Optional[String[1]],
+ 'Type' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'OriginalName' => Optional[String[1]],
+ 'SSID' => Optional[String[1]],
+ 'BSSID' => Optional[String[1]],
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
diff --git a/types/interface/link/sr_iov.pp b/types/interface/link/sr_iov.pp
new file mode 100644
index 00000000..51296bd1
--- /dev/null
+++ b/types/interface/link/sr_iov.pp
@@ -0,0 +1,12 @@
+# interface definition
+type Systemd::Interface::Link::Sr_iov = Struct[{
+ 'VirtualFunction' => Optional[Integer[0,2147483646]],
+ 'VLANId' => Optional[Integer[1,4095]],
+ 'QualityOfService' => Optional[Integer[1,4294967294]],
+ 'VLANProtocol' => Optional[Enum['802.1Q', '802.1ad']],
+ 'MACSpoofCheck' => Optional[Enum['yes','no']],
+ 'QueryReceiveSideScaling' => Optional[Enum['yes','no']],
+ 'Trust' => Optional[Enum['yes','no']],
+ 'LinkState' => Optional[Enum['yes','no','auto']],
+ 'MACAddress' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev.pp b/types/interface/netdev.pp
new file mode 100644
index 00000000..e9dd3dc9
--- /dev/null
+++ b/types/interface/netdev.pp
@@ -0,0 +1,35 @@
+# interface netdev configs
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev = Struct[{
+ 'Match' => Optional[Systemd::Interface::Netdev::Match],
+ 'NetDev' => Optional[Systemd::Interface::Netdev::Netdev],
+ 'Bridge' => Optional[Systemd::Interface::Netdev::Bridge],
+ 'Vlan' => Optional[Systemd::Interface::Netdev::Vlan],
+ 'MACVLAN' => Optional[Systemd::Interface::Netdev::Macvlan],
+ 'MACVTAP' => Optional[Systemd::Interface::Netdev::Macvlan],
+ 'IPVLAN' => Optional[Systemd::Interface::Netdev::Ipvlan],
+ 'IPVTAP' => Optional[Systemd::Interface::Netdev::Ipvlan],
+ 'VXLAN' => Optional[Systemd::Interface::Netdev::Vxlan],
+ 'GENEVE' => Optional[Systemd::Interface::Netdev::Geneve],
+ 'BareUDP' => Optional[Systemd::Interface::Netdev::Bareudp],
+ 'L2TP' => Optional[Systemd::Interface::Netdev::L2tp],
+ 'L2TPSession' => Optional[Systemd::Interface::Netdev::L2tpsession],
+ 'MACsec' => Optional[Systemd::Interface::Netdev::Macsec],
+ 'MACsecReceiveChannel' => Optional[Systemd::Interface::Netdev::Macsecreceivechannel],
+ 'MACsecTransmitAssociation' => Optional[Systemd::Interface::Netdev::Macsectransmitassociation],
+ 'MACsecReceiveAssociation' => Optional[Systemd::Interface::Netdev::Macsecreceiveassociation],
+ 'Tunnel' => Optional[Systemd::Interface::Netdev::Tunnel],
+ 'FooOverUDP' => Optional[Systemd::Interface::Netdev::Foooverudp],
+ 'Peer' => Optional[Systemd::Interface::Netdev::Peer],
+ 'VXCAN' => Optional[Systemd::Interface::Netdev::Vxcan],
+ 'Tun' => Optional[Systemd::Interface::Netdev::Tun],
+ 'Tap' => Optional[Systemd::Interface::Netdev::Tun],
+ 'WireGuard' => Optional[Systemd::Interface::Netdev::Wireguard],
+ 'WireGuardPeer' => Optional[Systemd::Interface::Netdev::Wireguardpeer],
+ 'Bond' => Optional[Systemd::Interface::Netdev::Bond],
+ 'Xfrm' => Optional[Systemd::Interface::Netdev::Xfrm],
+ 'VRF' => Optional[Systemd::Interface::Netdev::Vrf],
+ 'BatmanAdvanced' => Optional[Systemd::Interface::Netdev::Batmanadvanced],
+ 'IPoIB' => Optional[Systemd::Interface::Netdev::Ipoib],
+ 'WLAN' => Optional[Systemd::Interface::Netdev::Wlan],
+}]
diff --git a/types/interface/netdev/bareudp.pp b/types/interface/netdev/bareudp.pp
new file mode 100644
index 00000000..a76c9fc8
--- /dev/null
+++ b/types/interface/netdev/bareudp.pp
@@ -0,0 +1,6 @@
+# netdev BareUDP section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Bareudp = Struct[{
+ 'DestinationPort' => Integer[1, 65535],
+ 'EtherType' => Enum['ipv4', 'ipv6', 'mpls-uc', 'mpls-mc'],
+}]
diff --git a/types/interface/netdev/batmanadvanced.pp b/types/interface/netdev/batmanadvanced.pp
new file mode 100644
index 00000000..df179a62
--- /dev/null
+++ b/types/interface/netdev/batmanadvanced.pp
@@ -0,0 +1,14 @@
+# netdev BatmanAdvanced section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Batmanadvanced = Struct[{
+ 'GatewayMode' => Optional[Enum['off', 'server', 'client']],
+ 'Aggregation' => Optional[Enum['yes','no']],
+ 'BridgeLoopAvoidance' => Optional[Enum['yes','no']],
+ 'DistributedArpTable' => Optional[Enum['yes','no']],
+ 'Fragmentation' => Optional[Enum['yes','no']],
+ 'HopPenalty' => Optional[Integer[0,255]],
+ 'OriginatorIntervalSec' => Optional[String[1]],
+ 'GatewayBandwidthDown' => Optional[String[1]],
+ 'GatewayBandwidthUp' => Optional[String[1]],
+ 'RoutingAlgorithm' => Optional[Enum['batman-v', 'batman-iv']],
+}]
diff --git a/types/interface/netdev/bond.pp b/types/interface/netdev/bond.pp
new file mode 100644
index 00000000..32b44a17
--- /dev/null
+++ b/types/interface/netdev/bond.pp
@@ -0,0 +1,32 @@
+# netdev Bond section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Bond = Struct[{
+ 'Mode' => Optional[Enum[
+ 'balance-rr', 'active-backup', 'balance-xor',
+ 'broadcast', '802.3ad', 'balance-tlb', 'balance-alb'
+ ]],
+ 'TransmitHashPolicy' => Optional[Enum['layer2', 'layer3+4', 'layer2+3', 'encap2+3', 'encap3+4']],
+ 'LACPTransmitRate' => Optional[Enum['slow','fast']],
+ 'MIIMonitorSec' => Optional[Integer],
+ 'PeerNotifyDelaySec' => Optional[Integer[0,300]],
+ 'UpDelaySec' => Optional[Integer[0]],
+ 'DownDelaySec' => Optional[Integer[0]],
+ 'LearnPacketIntervalSec' => Optional[Integer[1]],
+ 'AdSelect' => Optional[Enum['stable', 'bandwidth', 'count']],
+ 'AdActorSystemPriority' => Optional[Integer[1,65535]],
+ 'AdUserPortKey' => Optional[Integer[1,1023]],
+ 'AdActorSystem' => Optional[String[1]],
+ 'FailOverMACPolicy' => Optional[Enum['none', 'active', 'follow']],
+ 'ARPValidate' => Optional[Enum['none', 'active', 'backup', 'all']],
+ 'ARPIntervalSec' => Optional[String[1]],
+ 'ARPIPTargets' => Optional[String[1]],
+ 'ARPAllTargets' => Optional[Enum['any','all']],
+ 'PrimaryReselectPolicy' => Optional[Enum['alwayas', 'better', 'failure']],
+ 'ResendIGMP' => Optional[Integer[0,255]],
+ 'PacketsPerSlave' => Optional[Integer[0,65535]],
+ 'GratuitousARP' => Optional[Integer[0,255]],
+ 'AllSlavesActive' => Optional[Enum['yes','no']],
+ 'DynamicTransmitLoadBalancing' => Optional[Enum['yes','no']],
+ 'MinLinks' => Optional[Integer],
+ 'ARPMissedMax' => Optional[Integer],
+}]
diff --git a/types/interface/netdev/bridge.pp b/types/interface/netdev/bridge.pp
new file mode 100644
index 00000000..a6cd6412
--- /dev/null
+++ b/types/interface/netdev/bridge.pp
@@ -0,0 +1,17 @@
+# netdev Bridge section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Bridge = Struct[{
+ 'Description' => Optional[String[1]],
+ 'HelloTimeSec' => Optional[Integer[1]],
+ 'MaxAgeSec' => Optional[Integer[1]],
+ 'ForwardDelaySec' => Optional[Integer[1]],
+ 'AgeingTimeSec' => Optional[Integer[1]],
+ 'Priority' => Optional[Integer[0, 65535]],
+ 'GroupForwardMask' => Optional[String[1]],
+ 'DefaultPVID' => Optional[Variant[Enum['none'],String[1, 4094]]],
+ 'MulticastQuerier' => Optional[Enum['yes','no']],
+ 'MulticastSnooping' => Optional[Enum['yes','no']],
+ 'VLANFiltering' => Optional[Enum['yes','no']],
+ 'STP' => Optional[Enum['yes','no']],
+ 'MulticastIGMPVersion' => Optional[Integer[2,3]],
+}]
diff --git a/types/interface/netdev/foooverudp.pp b/types/interface/netdev/foooverudp.pp
new file mode 100644
index 00000000..c9eeddc0
--- /dev/null
+++ b/types/interface/netdev/foooverudp.pp
@@ -0,0 +1,10 @@
+# netdev FooOverUDP section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Foooverudp = Struct[{
+ 'Encapsulation' => Optional[Enum['FooOverUDP','GenericUDPEncapsulation']],
+ 'Port' => Integer[1],
+ 'PeerPort' => Optional[Integer[1]],
+ 'Protocol' => Optional[Variant[Enum['gre','ipip'], Integer[1,255]]],
+ 'Peer' => Optional[String[1]],
+ 'Local' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev/geneve.pp b/types/interface/netdev/geneve.pp
new file mode 100644
index 00000000..c5462e62
--- /dev/null
+++ b/types/interface/netdev/geneve.pp
@@ -0,0 +1,15 @@
+# netdev GENEVE section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Geneve = Struct[{
+ 'Id' => Integer[0,16777215],
+ 'Remote' => Optional[String[1]],
+ 'TOS' => Optional[Integer[1,255]],
+ 'TTL' => Optional[Variant[Enum['inherit'], Integer[0,255]]],
+ 'UDPChecksum' => Optional[Enum['yes', 'no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes', 'no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes', 'no']],
+ 'DestinationPort' => Optional[Integer[1]],
+ 'FlowLabel' => Optional[String[1]],
+ 'IPDoNotFragment' => Optional[Enum['yes', 'no']],
+ 'InheritInnerProtocol' => Optional[Enum['yes', 'no']],
+}]
diff --git a/types/interface/netdev/ipoib.pp b/types/interface/netdev/ipoib.pp
new file mode 100644
index 00000000..bf2e07be
--- /dev/null
+++ b/types/interface/netdev/ipoib.pp
@@ -0,0 +1,7 @@
+# netdev IPoIB section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Ipoib = Struct[{
+ 'PartitionKey' => Optional[Integer[1]],
+ 'Mode' => Optional[Enum['datagram','connected']],
+ 'IgnoreUserspaceMulticastGroup' => Optional[Enum['yes', 'no']],
+}]
diff --git a/types/interface/netdev/ipvlan.pp b/types/interface/netdev/ipvlan.pp
new file mode 100644
index 00000000..a4be8c0b
--- /dev/null
+++ b/types/interface/netdev/ipvlan.pp
@@ -0,0 +1,6 @@
+# netdev IPVLAN and IPVTAP section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Ipvlan = Struct[{
+ 'Mode' => Optional[Enum['L2', 'L3', 'L3S']],
+ 'Flags' => Optional[Enum['bridge', 'private', 'vepa']],
+}]
diff --git a/types/interface/netdev/l2tp.pp b/types/interface/netdev/l2tp.pp
new file mode 100644
index 00000000..d5b4f900
--- /dev/null
+++ b/types/interface/netdev/l2tp.pp
@@ -0,0 +1,14 @@
+# netdev L2TP section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::L2tp = Struct[{
+ 'TunnelId' => Integer[1,4294967295],
+ 'PeerTunnelId' => Integer[1,4294967295],
+ 'Remote' => String[1],
+ 'Local' => Optional[Variant[Enum['auto', 'static', 'dynamic'],String[1]]],
+ 'EncapsulationType' => Optional[Enum['udp','ip']],
+ 'UDPSourcePort' => Optional[Integer[1]],
+ 'UDPDestinationPort' => Optional[Integer[1]],
+ 'UDPChecksum' => Optional[Enum['yes' ,'no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes' ,'no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes' ,'no']],
+}]
diff --git a/types/interface/netdev/l2tpsession.pp b/types/interface/netdev/l2tpsession.pp
new file mode 100644
index 00000000..f03a3079
--- /dev/null
+++ b/types/interface/netdev/l2tpsession.pp
@@ -0,0 +1,8 @@
+# netdev L2TPSession section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::L2tpsession = Struct[{
+ 'Name' => String[1],
+ 'SessionId' => Integer[1,4294967295],
+ 'PeerSessionId' => Integer[1,4294967295],
+ 'Layer2SpecificHeader' => Optional[Enum['none', 'default']],
+}]
diff --git a/types/interface/netdev/macsec.pp b/types/interface/netdev/macsec.pp
new file mode 100644
index 00000000..27111edd
--- /dev/null
+++ b/types/interface/netdev/macsec.pp
@@ -0,0 +1,6 @@
+# netdev MACsec section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Macsec = Struct[{
+ 'Port' => Optional[Integer[1, 65535]],
+ 'Encrypt' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/macsecreceiveassociation.pp b/types/interface/netdev/macsecreceiveassociation.pp
new file mode 100644
index 00000000..e87db7db
--- /dev/null
+++ b/types/interface/netdev/macsecreceiveassociation.pp
@@ -0,0 +1,11 @@
+# netdev MACsecReceiveAssociation section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Macsecreceiveassociation = Struct[{
+ 'Port' => Integer[1, 65535],
+ 'MACAddress' => String[1],
+ 'PacketNumber' => Optional[Variant[Integer[1,4],Integer[294,295],Integer[967,967]]],
+ 'KeyId' => Optional[Integer[0,255]],
+ 'Key' => Optional[String[1]],
+ 'KeyFile' => Optional[String[1]],
+ 'Activate' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/macsecreceivechannel.pp b/types/interface/netdev/macsecreceivechannel.pp
new file mode 100644
index 00000000..b5480fb9
--- /dev/null
+++ b/types/interface/netdev/macsecreceivechannel.pp
@@ -0,0 +1,6 @@
+# netdev MACsecReceiveChannel section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Macsecreceivechannel = Struct[{
+ 'Port' => Integer[1, 65535],
+ 'MACAddress' => String[1],
+}]
diff --git a/types/interface/netdev/macsectransmitassociation.pp b/types/interface/netdev/macsectransmitassociation.pp
new file mode 100644
index 00000000..7628ad28
--- /dev/null
+++ b/types/interface/netdev/macsectransmitassociation.pp
@@ -0,0 +1,10 @@
+# netdev MACsecTransmitAssociation section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Macsectransmitassociation = Struct[{
+ 'PacketNumber' => Optional[Variant[Integer[1,4],Integer[294,295],Integer[967,967]]],
+ 'KeyId' => Optional[Integer[0,255]],
+ 'Key' => Optional[String[1]],
+ 'KeyFile' => Optional[String[1]],
+ 'Activate' => Optional[Enum['yes','no']],
+ 'UseForEncoding' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/macvlan.pp b/types/interface/netdev/macvlan.pp
new file mode 100644
index 00000000..36e451cd
--- /dev/null
+++ b/types/interface/netdev/macvlan.pp
@@ -0,0 +1,8 @@
+# netdev MACVLAN and MACVTAP section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Macvlan = Struct[{
+ 'Mode' => Optional[Enum['private', 'vepa', 'bridge', 'passthru', 'source']],
+ 'SourceMACAddress' => Optional[Variant[String[1],Array[String[1]]]],
+ 'BroadcastMulticastQueueLength' => Optional[Integer[0,4294967294]],
+ 'BroadcastQueueThreshold' => Optional[Variant[Enum['no'],Integer[0,2147483647]]],
+}]
diff --git a/types/interface/netdev/match.pp b/types/interface/netdev/match.pp
new file mode 100644
index 00000000..06cdbdcc
--- /dev/null
+++ b/types/interface/netdev/match.pp
@@ -0,0 +1,11 @@
+# netdev match section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Match = Struct[{
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev/netdev.pp b/types/interface/netdev/netdev.pp
new file mode 100644
index 00000000..6e355257
--- /dev/null
+++ b/types/interface/netdev/netdev.pp
@@ -0,0 +1,9 @@
+# netdev NetDev section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Netdev = Struct[{
+ 'Description' => Optional[String[1]],
+ 'Name' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+ 'MACAddress' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev/peer.pp b/types/interface/netdev/peer.pp
new file mode 100644
index 00000000..563cd913
--- /dev/null
+++ b/types/interface/netdev/peer.pp
@@ -0,0 +1,6 @@
+# netdev Peer section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Peer = Struct[{
+ 'Name' => String[1],
+ 'MACAddress' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev/tun.pp b/types/interface/netdev/tun.pp
new file mode 100644
index 00000000..2809381b
--- /dev/null
+++ b/types/interface/netdev/tun.pp
@@ -0,0 +1,10 @@
+# netdev Tun and Tap section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Tun = Struct[{
+ 'MultiQueue' => Optional[Enum['yes','no']],
+ 'PacketInfo' => Optional[Enum['yes','no']],
+ 'VNetHeader' => Optional[Enum['yes','no']],
+ 'User' => Optional[String[1]],
+ 'Group' => Optional[String[1]],
+ 'KeepCarrier' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/tunnel.pp b/types/interface/netdev/tunnel.pp
new file mode 100644
index 00000000..3c7b23ac
--- /dev/null
+++ b/types/interface/netdev/tunnel.pp
@@ -0,0 +1,32 @@
+# netdev Tunnel section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Tunnel = Struct[{
+ 'External' => Optional[Enum['yes','no']],
+ 'Local' => Optional[Variant[Enum['any', 'ipv4_link_local', 'ipv6_link_local', 'dhcp4', 'dhcp6', 'slaac'], String[1]]],
+ 'Remote' => Optional[Variant[Enum['any'], String[1]]],
+ 'TOS' => Optional[String[1]],
+ 'TTL' => Optional[Integer[1,255]],
+ 'DiscoverPathMTU' => Optional[Enum['yes','no']],
+ 'IgnoreDontFragment' => Optional[Enum['yes','no']],
+ 'IPv6FlowLabel' => Optional[String[1]],
+ 'CopyDSCP' => Optional[Enum['yes','no']],
+ 'EncapsulationLimit' => Optional[Integer[1,255]],
+ 'Key' => Optional[String[1]],
+ 'InputKey' => Optional[String[1]],
+ 'OutputKey' => Optional[String[1]],
+ 'Mode' => Optional[Enum['ip6ip6', 'ipip6', 'any']],
+ 'Independent' => Optional[Enum['yes','no']],
+ 'AssignToLoopback' => Optional[Enum['yes','no']],
+ 'AllowLocalRemote' => Optional[Enum['yes','no']],
+ 'FooOverUDP' => Optional[Enum['yes','no']],
+ 'FOUDestinationPort' => Optional[Integer[1]],
+ 'FOUSourcePort' => Optional[Integer[0]],
+ 'Encapsulation' => Optional[Enum['FooOverUDP','GenericUDPEncapsulation']],
+ 'IPv6RapidDeploymentPrefix' => Optional[String[1]],
+ 'ISATAP' => Optional[Enum['yes','no']],
+ 'SerializeTunneledPackets' => Optional[Enum['yes','no']],
+ 'ERSPANVersion' => Optional[Integer[0,2]],
+ 'ERSPANIndex' => Optional[Integer[0,1048575]],
+ 'ERSPANDirection' => Optional[Enum['ingress','egress']],
+ 'ERSPANHardwareId' => Optional[Integer[0,63]],
+}]
diff --git a/types/interface/netdev/vlan.pp b/types/interface/netdev/vlan.pp
new file mode 100644
index 00000000..9dfee1e1
--- /dev/null
+++ b/types/interface/netdev/vlan.pp
@@ -0,0 +1,12 @@
+# netdev VLAN section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Vlan = Struct[{
+ 'Id' => Optional[Integer[0,4094]],
+ 'Protocol' => Optional[Enum['802.1q','802.1ad']],
+ 'GVRP' => Optional[Enum['yes','no']],
+ 'MVRP' => Optional[Enum['yes','no']],
+ 'LooseBinding' => Optional[Enum['yes','no']],
+ 'ReorderHeader' => Optional[Enum['yes','no']],
+ 'EgressQOSMaps' => Optional[String[1]],
+ 'IngressQOSMaps' => Optional[String[1]],
+}]
diff --git a/types/interface/netdev/vrf.pp b/types/interface/netdev/vrf.pp
new file mode 100644
index 00000000..7f1687e0
--- /dev/null
+++ b/types/interface/netdev/vrf.pp
@@ -0,0 +1,5 @@
+# netdev VRF section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Vrf = Struct[{
+ 'Table' => Integer[0],
+}]
diff --git a/types/interface/netdev/vxcan.pp b/types/interface/netdev/vxcan.pp
new file mode 100644
index 00000000..8655c1e9
--- /dev/null
+++ b/types/interface/netdev/vxcan.pp
@@ -0,0 +1,5 @@
+# netdev VXCAN section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Vxcan = Struct[{
+ 'Peer' => String[1],
+}]
diff --git a/types/interface/netdev/vxlan.pp b/types/interface/netdev/vxlan.pp
new file mode 100644
index 00000000..b265ec76
--- /dev/null
+++ b/types/interface/netdev/vxlan.pp
@@ -0,0 +1,29 @@
+# netdev VXLAN section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Vxlan = Struct[{
+ 'VNI' => Optional[Integer[1, 16777215]],
+ 'Remote' => Optional[String[1]],
+ 'Local' => Optional[Variant[Enum['ipv4_link_local', 'ipv6_link_local', 'dhcp4', 'dhcp6', 'slaac'], String[1]]],
+ 'Group' => Optional[String[1]],
+ 'TOS' => Optional[String[1]],
+ 'TTL' => Optional[Variant[Enum['inherit'], Integer[0,255]]],
+ 'MacLearning' => Optional[Enum['yes','no']],
+ 'FDBAgeingSec' => Optional[String[1]],
+ 'MaximumFDBEntries' => Optional[Integer[1]],
+ 'ReduceARPProxy' => Optional[Enum['yes','no']],
+ 'L2MissNotification' => Optional[Enum['yes','no']],
+ 'L3MissNotification' => Optional[Enum['yes','no']],
+ 'RouteShortCircuit' => Optional[Enum['yes','no']],
+ 'UDPChecksum' => Optional[Enum['yes','no']],
+ 'UDP6ZeroChecksumTx' => Optional[Enum['yes','no']],
+ 'UDP6ZeroChecksumRx' => Optional[Enum['yes','no']],
+ 'RemoteChecksumTx' => Optional[Enum['yes','no']],
+ 'RemoteChecksumRx' => Optional[Enum['yes','no']],
+ 'GroupPolicyExtension' => Optional[Enum['yes','no']],
+ 'GenericProtocolExtension' => Optional[Enum['yes','no']],
+ 'DestinationPort' => Optional[Integer[1]],
+ 'PortRange' => Optional[String[1]],
+ 'FlowLabel' => Optional[Integer[0,1048575]],
+ 'IPDoNotFragment' => Optional[Enum['yes','no']],
+ 'Independent' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/wireguard.pp b/types/interface/netdev/wireguard.pp
new file mode 100644
index 00000000..23351f71
--- /dev/null
+++ b/types/interface/netdev/wireguard.pp
@@ -0,0 +1,10 @@
+# netdev WireGuard section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Wireguard = Struct[{
+ 'PrivateKey' => Optional[String[1]],
+ 'PrivateKeyFile' => Optional[Stdlib::Absolutepath],
+ 'ListenPort' => Optional[Variant[Integer[1,65535], Enum['auto']]],
+ 'FirewallMark' => Optional[Integer[1,4294967295]],
+ 'RouteTable' => Optional[Variant[String[1],Integer[1,4294967295]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+}]
diff --git a/types/interface/netdev/wireguardpeer.pp b/types/interface/netdev/wireguardpeer.pp
new file mode 100644
index 00000000..e058bc2f
--- /dev/null
+++ b/types/interface/netdev/wireguardpeer.pp
@@ -0,0 +1,12 @@
+# netdev WireGuard section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Wireguardpeer = Struct[{
+ 'PublicKey' => Optional[String[1]],
+ 'PresharedKey' => Optional[String[1]],
+ 'PresharedKeyFile' => Optional[Stdlib::Absolutepath],
+ 'AllowedIPs' => Optional[Variant[String, Array[String]]],
+ 'Endpoint' => Optional[String[1]],
+ 'PersistentKeepalive' => Optional[Variant[Integer[0,65535],Enum['off']]],
+ 'RouteTable' => Optional[Variant[Integer[0,4294967295],String[1]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+}]
diff --git a/types/interface/netdev/wlan.pp b/types/interface/netdev/wlan.pp
new file mode 100644
index 00000000..8e20dbe2
--- /dev/null
+++ b/types/interface/netdev/wlan.pp
@@ -0,0 +1,8 @@
+# netdev WLAN section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Wlan = Struct[{
+ 'PhysicalDevice' => Optional[Variant[Integer[0], String[1]]],
+ 'Type' => Enum['ad-hoc', 'station', 'ap', 'ap-vlan', 'wds',
+ 'monitor', 'mesh-point', 'p2p-client', 'p2p-go', 'p2p-device', 'ocb', 'nan'],
+ 'WDS' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/netdev/xfrm.pp b/types/interface/netdev/xfrm.pp
new file mode 100644
index 00000000..68f5ee92
--- /dev/null
+++ b/types/interface/netdev/xfrm.pp
@@ -0,0 +1,6 @@
+# netdev Xfrm section
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.netdev.html
+type Systemd::Interface::Netdev::Xfrm = Struct[{
+ 'InterfaceId' => Optional[Variant[Integer[1],String[1]]],
+ 'Independent' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/network.pp b/types/interface/network.pp
new file mode 100644
index 00000000..7411c927
--- /dev/null
+++ b/types/interface/network.pp
@@ -0,0 +1,89 @@
+# interface definition
+# see https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network = Struct[{
+ 'Match' => Optional[Systemd::Interface::Network::Match],
+ 'Link' => Optional[Systemd::Interface::Network::Link],
+ 'SR-IOV' => Optional[Systemd::Interface::Network::Sr_iov],
+ 'Network' => Optional[Systemd::Interface::Network::Network],
+ 'Address' => Optional[Variant[
+ Systemd::Interface::Network::Address,
+ Array[Systemd::Interface::Network::Address],
+ ]],
+ 'Neighbor' => Optional[Variant[
+ Systemd::Interface::Network::Neighbor,
+ Array[Systemd::Interface::Network::Neighbor],
+ ]],
+ 'IPv6AddressLabel' => Optional[Systemd::Interface::Network::Ipv6addresslabel],
+ 'RoutingPolicyRule' => Optional[Variant[
+ Systemd::Interface::Network::Routingpolicyrule,
+ Array[Systemd::Interface::Network::Routingpolicyrule],
+ ]],
+ 'NextHop' => Optional[Variant[
+ Systemd::Interface::Network::Nexthop,
+ Array[Systemd::Interface::Network::Nexthop],
+ ]],
+ 'Route' => Optional[Variant[
+ Systemd::Interface::Network::Route,
+ Array[Systemd::Interface::Network::Route],
+ ]],
+ 'DHCPv4' => Optional[Systemd::Interface::Network::Dhcpv4],
+ 'DHCPv6' => Optional[Systemd::Interface::Network::Dhcpv6],
+ 'DHCPPrefixDelegation' => Optional[Systemd::Interface::Network::Dhcpprefixdelegation],
+ 'IPv6AcceptRA' => Optional[Systemd::Interface::Network::Ipv6acceptra],
+ 'DHCPServer' => Optional[Systemd::Interface::Network::Dhcpserver],
+ 'DHCPServerStaticLease' => Optional[Variant[
+ Systemd::Interface::Network::Dhcpserverstaticlease,
+ Array[Systemd::Interface::Network::Dhcpserverstaticlease],
+ ]],
+ 'IPv6SendRA' => Optional[Systemd::Interface::Network::Ipv6sendra],
+ 'IPv6Prefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6prefix,
+ Array[Systemd::Interface::Network::Ipv6prefix],
+ ]],
+ 'IPv6RoutePrefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6routeprefix,
+ Array[Systemd::Interface::Network::Ipv6routeprefix],
+ ]],
+ 'IPv6PREF64Prefix' => Optional[Variant[
+ Systemd::Interface::Network::Ipv6pref64prefix,
+ Array[Systemd::Interface::Network::Ipv6pref64prefix],
+ ]],
+ 'Bridge' => Optional[Systemd::Interface::Network::Bridge],
+ 'BridgeFDB' => Optional[Variant[
+ Systemd::Interface::Network::Bridgefdb,
+ Array[Systemd::Interface::Network::Bridgefdb],
+ ]],
+ 'BridgeMDB' => Optional[Variant[
+ Systemd::Interface::Network::Bridgemdb,
+ Array[Systemd::Interface::Network::Bridgemdb],
+ ]],
+ 'LLDP' => Optional[Systemd::Interface::Network::Lldp],
+ 'CAN' => Optional[Systemd::Interface::Network::Can],
+ 'IPoIB' => Optional[Systemd::Interface::Network::Ipoib],
+ 'QDisc' => Optional[Systemd::Interface::Network::Qdisc],
+ 'NetworkEmulator' => Optional[Systemd::Interface::Network::Networkemulator],
+ 'TokenBucketFilter' => Optional[Systemd::Interface::Network::Tokenbucketfilter],
+ 'PIE' => Optional[Systemd::Interface::Network::Pie],
+ 'FlowQueuePIE' => Optional[Systemd::Interface::Network::Flowqueuepie],
+ 'StochasticFairBlue' => Optional[Systemd::Interface::Network::Stochasticfairblue],
+ 'StochasticFairnessQueueing' => Optional[Systemd::Interface::Network::Stochasticfairnessqueueing],
+ 'BFIFO' => Optional[Systemd::Interface::Network::Bfifo],
+ 'PFIFO' => Optional[Systemd::Interface::Network::Pfifo],
+ 'PFIFOHeadDrop' => Optional[Systemd::Interface::Network::Pfifoheaddrop],
+ 'PFIFOFast' => Optional[Systemd::Interface::Network::Pfifofast],
+ 'CAKE' => Optional[Systemd::Interface::Network::Cake],
+ 'ControlledDelay' => Optional[Systemd::Interface::Network::Controlleddelay],
+ 'DeficitRoundRobinScheduler' => Optional[Systemd::Interface::Network::Deficitroundrobinscheduler],
+ 'DeficitRoundRobinSchedulerClass' => Optional[Systemd::Interface::Network::Deficitroundrobinschedulerclass],
+ 'EnhancedTransmissionSelection' => Optional[Systemd::Interface::Network::Enhancedtransmissionselection],
+ 'GenericRandomEarlyDetection' => Optional[Systemd::Interface::Network::Genericrandomearlydetection],
+ 'FairQueueingControlledDelay' => Optional[Systemd::Interface::Network::Fairqueueingcontrolleddelay],
+ 'FairQueueing' => Optional[Systemd::Interface::Network::Fairqueueing],
+ 'TrivialLinkEqualizer' => Optional[Systemd::Interface::Network::Triviallinkequalizer],
+ 'HierarchyTokenBucket' => Optional[Systemd::Interface::Network::Hierarchytokenbucket],
+ 'HierarchyTokenBucketClass' => Optional[Systemd::Interface::Network::Hierarchytokenbucketclass],
+ 'HeavyHitterFilter' => Optional[Systemd::Interface::Network::Heavyhitterfilter],
+ 'QuickFairQueueing' => Optional[Systemd::Interface::Network::Quickfairqueueing],
+ 'QuickFairQueueingClass' => Optional[Systemd::Interface::Network::Quickfairqueueingclass],
+ 'BridgeVLAN' => Optional[Systemd::Interface::Network::Bridgevlan],
+}]
diff --git a/types/interface/network/address.pp b/types/interface/network/address.pp
new file mode 100644
index 00000000..b2fc566d
--- /dev/null
+++ b/types/interface/network/address.pp
@@ -0,0 +1,18 @@
+# interface network Address section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Address = Struct[{
+ 'Address' => String[1],
+ 'Peer' => Optional[String[1]],
+ 'Broadcast' => Optional[String[1]],
+ 'Label' => Optional[String[1,15]],
+ 'PreferredLifetime' => Optional[Enum['forever', 'infinity', '0']],
+ 'Scope' => Optional[Variant[Enum['global', 'link', 'host'],Integer[0,255]]],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'HomeAddress' => Optional[Enum['yes', 'no']],
+ 'DuplicateAddressDetection' => Optional[Enum['ipv4', 'ipv6', 'both', 'none']],
+ 'ManageTemporaryAddress' => Optional[Enum['yes', 'no']],
+ 'AddPrefixRoute' => Optional[Enum['yes', 'no']],
+ 'AutoJoin' => Optional[Enum['yes', 'no']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
diff --git a/types/interface/network/bfifo.pp b/types/interface/network/bfifo.pp
new file mode 100644
index 00000000..cffeb2e8
--- /dev/null
+++ b/types/interface/network/bfifo.pp
@@ -0,0 +1,7 @@
+# interface network BFIFO section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Bfifo = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'LimitBytes' => Optional[String[1]],
+}]
diff --git a/types/interface/network/bridge.pp b/types/interface/network/bridge.pp
new file mode 100644
index 00000000..968dbdd3
--- /dev/null
+++ b/types/interface/network/bridge.pp
@@ -0,0 +1,19 @@
+# interface network Bridge section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Bridge = Struct[{
+ 'UnicastFlood' => Optional[Enum['yes', 'no']],
+ 'MulticastFlood' => Optional[Enum['yes', 'no']],
+ 'MulticastToUnicast' => Optional[Enum['yes', 'no']],
+ 'NeighborSuppression' => Optional[Enum['yes', 'no']],
+ 'Learning' => Optional[Enum['yes', 'no']],
+ 'HairPin' => Optional[Enum['yes', 'no']],
+ 'Isolated' => Optional[Enum['yes', 'no']],
+ 'UseBPDU' => Optional[Enum['yes', 'no']],
+ 'FastLeave' => Optional[Enum['yes', 'no']],
+ 'AllowPortToBeRoot' => Optional[Enum['yes', 'no']],
+ 'ProxyARP' => Optional[Enum['yes', 'no']],
+ 'ProxyARPWiFi' => Optional[Enum['yes', 'no']],
+ 'MulticastRouter' => Optional[Enum['no', 'query', 'permanent', 'temporary']],
+ 'Cost' => Optional[Integer[1, 65535]],
+ 'Priority' => Optional[Integer[0,63]],
+}]
diff --git a/types/interface/network/bridgefdb.pp b/types/interface/network/bridgefdb.pp
new file mode 100644
index 00000000..1cf8f7c2
--- /dev/null
+++ b/types/interface/network/bridgefdb.pp
@@ -0,0 +1,10 @@
+# interface network BridgeFDB section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Bridgefdb = Struct[{
+ 'MACAddress' => String[1],
+ 'Destination' => Optional[String[1]],
+ 'VLANId' => Optional[String[1]],
+ 'VNI' => Optional[Integer[1, 16777215]],
+ 'AssociatedWith' => Optional[Enum['use', 'self', 'master', 'router']],
+ 'OutgoingInterface' => Optional[String[1]],
+}]
diff --git a/types/interface/network/bridgemdb.pp b/types/interface/network/bridgemdb.pp
new file mode 100644
index 00000000..3d25676a
--- /dev/null
+++ b/types/interface/network/bridgemdb.pp
@@ -0,0 +1,6 @@
+# interface network BridgeMDB section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Bridgemdb = Struct[{
+ 'MulticastGroupAddress' => Optional[String[1]],
+ 'VLANID' => Optional[Integer[0,4094]],
+}]
diff --git a/types/interface/network/bridgevlan.pp b/types/interface/network/bridgevlan.pp
new file mode 100644
index 00000000..18a0e008
--- /dev/null
+++ b/types/interface/network/bridgevlan.pp
@@ -0,0 +1,7 @@
+# interface network BridgeVLAN section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Bridgevlan = Struct[{
+ 'VLAN' => Optional[Variant[String[1], Array[String[1]]]],
+ 'EgressUntagged' => Optional[Variant[String[1], Array[String[1]]]],
+ 'PVID' => Optional[Variant[Enum['no','false'],Integer[1]]],
+}]
diff --git a/types/interface/network/cake.pp b/types/interface/network/cake.pp
new file mode 100644
index 00000000..2f1fbe1e
--- /dev/null
+++ b/types/interface/network/cake.pp
@@ -0,0 +1,19 @@
+# interface network CAKE section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Cake = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Bandwidth' => Optional[String[1]],
+ 'AutoRateIngress' => Optional[Enum['yes','no']],
+ 'OverheadBytes' => Optional[Integer[-64,256]],
+ 'MPUBytes' => Optional[Integer[1,256]],
+ 'CompensationMode' => Optional[Enum['none', 'atm', 'ptm']],
+ 'UseRawPacketSize' => Optional[Enum['yes','no']],
+ 'FlowIsolationMode' => Optional[Enum['none','src-host', 'dst-host', 'hosts', 'flows','dual-src-host', 'dual-dst-host', 'triple']],
+ 'NAT' => Optional[Enum['yes','no']],
+ 'PriorityQueueingPreset' => Optional[Enum['besteffort','precedence', 'diffserv8', 'diffserv4', 'diffserv3']],
+ 'FirewallMark' => Optional[Integer[1,4294967295]],
+ 'Wash' => Optional[Enum['yes','no']],
+ 'SplitGSO' => Optional[Enum['yes','no']],
+ 'RTTSec' => Optional[String[1]],
+ 'AckFilter' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/network/can.pp b/types/interface/network/can.pp
new file mode 100644
index 00000000..df370bd3
--- /dev/null
+++ b/types/interface/network/can.pp
@@ -0,0 +1,29 @@
+# interface network CAN section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Can = Struct[{
+ 'BitRate' => Optional[String[1]],
+ 'SamplePoint' => Optional[String[1]],
+ 'TimeQuantaNSec' => Optional[String[1]],
+ 'PropagationSegment' => Optional[Integer[0,4294967295]],
+ 'PhaseBufferSegment1' => Optional[Integer[0,4294967295]],
+ 'PhaseBufferSegment2' => Optional[Integer[0,4294967295]],
+ 'SyncJumpWidth' => Optional[Integer[0,4294967295]],
+ 'DataBitRate' => Optional[String[1]],
+ 'DataSamplePoint' => Optional[String[1]],
+ 'DataTimeQuantaNSec' => Optional[String[1]],
+ 'DataPropagationSegment' => Optional[String[1]],
+ 'DataPhaseBufferSegment1' => Optional[String[1]],
+ 'DataPhaseBufferSegment2' => Optional[String[1]],
+ 'DataSyncJumpWidth' => Optional[String[1]],
+ 'FDMode' => Optional[Enum['yes','no']],
+ 'FDNonISO' => Optional[Enum['yes','no']],
+ 'RestartSec' => Optional[String[1]],
+ 'Termination' => Optional[Enum['yes','no']],
+ 'TripleSampling' => Optional[Enum['yes','no']],
+ 'BusErrorReporting' => Optional[Enum['yes','no']],
+ 'ListenOnly' => Optional[Enum['yes','no']],
+ 'Loopback' => Optional[Enum['yes','no']],
+ 'OneShot' => Optional[Enum['yes','no']],
+ 'PresumeAck' => Optional[Enum['yes','no']],
+ 'ClassicDataLengthCode' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/network/controlleddelay.pp b/types/interface/network/controlleddelay.pp
new file mode 100644
index 00000000..32536731
--- /dev/null
+++ b/types/interface/network/controlleddelay.pp
@@ -0,0 +1,10 @@
+# interface network ControlledDelay section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Controlleddelay= Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'TargetSec' => Optional[String[1]],
+ 'IntervalSec' => Optional[String[1]],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/deficitroundrobinscheduler.pp b/types/interface/network/deficitroundrobinscheduler.pp
new file mode 100644
index 00000000..1de79b60
--- /dev/null
+++ b/types/interface/network/deficitroundrobinscheduler.pp
@@ -0,0 +1,6 @@
+# interface network DeficitRoundRobinScheduler section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Deficitroundrobinscheduler= Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+}]
diff --git a/types/interface/network/deficitroundrobinschedulerclass.pp b/types/interface/network/deficitroundrobinschedulerclass.pp
new file mode 100644
index 00000000..5a5a06c6
--- /dev/null
+++ b/types/interface/network/deficitroundrobinschedulerclass.pp
@@ -0,0 +1,7 @@
+# interface network DeficitRoundRobinSchedulerClass section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Deficitroundrobinschedulerclass = Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+}]
diff --git a/types/interface/network/dhcpprefixdelegation.pp b/types/interface/network/dhcpprefixdelegation.pp
new file mode 100644
index 00000000..5460f455
--- /dev/null
+++ b/types/interface/network/dhcpprefixdelegation.pp
@@ -0,0 +1,13 @@
+# interface network DHCPPrefixDelegation section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Dhcpprefixdelegation = Struct[{
+ 'UplinkInterface' => Optional[String[1]],
+ 'SubnetId' => Optional[String[1]],
+ 'Announce' => Optional[Enum['yes','no']],
+ 'Assign' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'ManageTemporaryAddress' => Optional[Enum['yes', 'no']],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
diff --git a/types/interface/network/dhcpserver.pp b/types/interface/network/dhcpserver.pp
new file mode 100644
index 00000000..20b17415
--- /dev/null
+++ b/types/interface/network/dhcpserver.pp
@@ -0,0 +1,38 @@
+# interface network DHCPServer section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Dhcpserver = Struct[{
+ 'ServerAddress' => Optional[String[1]],
+ 'PoolOffset' => Optional[String[1]],
+ 'PoolSize' => Optional[String[1]],
+ 'DefaultLeaseTimeSec' => Optional[String[1]],
+ 'MaxLeaseTimeSec' => Optional[String[1]],
+ 'UplinkInterface' => Optional[String[1]],
+ 'EmitDNS' => Optional[Enum['yes','no']],
+ 'DNS' => Optional[String[1]],
+ 'EmitNTP' => Optional[Enum['yes','no']],
+ 'NTP' => Optional[String[1]],
+ 'EmitSIP' => Optional[Enum['yes','no']],
+ 'SIP' => Optional[String[1]],
+ 'EmitPOP3' => Optional[Enum['yes','no']],
+ 'POP3' => Optional[String[1]],
+ 'EmitSMTP' => Optional[Enum['yes','no']],
+ 'SMTP' => Optional[String[1]],
+ 'EmitLPR' => Optional[Enum['yes','no']],
+ 'LPR' => Optional[String[1]],
+ 'EmitRouter' => Optional[Enum['yes','no']],
+ 'Router' => Optional[String[1]],
+ 'EmitTimezone' => Optional[Enum['yes','no']],
+ 'Timezone' => Optional[String[1]],
+ 'BootServerAddress' => Optional[String[1]],
+ 'BootServerName' => Optional[String[1]],
+ 'BootFilename' => Optional[String[1]],
+ 'IPv6OnlyPreferredSec' => Optional[String[1]],
+ 'SendOption' => Optional[String[1]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'BindToInterface' => Optional[Enum['yes','no']],
+ 'RelayTarget' => Optional[String[1]],
+ 'RelayAgentCircuitId' => Optional[String[1]],
+ 'RelayAgentRemoteId' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'PersistLeases' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/network/dhcpserverstaticlease.pp b/types/interface/network/dhcpserverstaticlease.pp
new file mode 100644
index 00000000..05bcd2d1
--- /dev/null
+++ b/types/interface/network/dhcpserverstaticlease.pp
@@ -0,0 +1,6 @@
+# interface network DHCPServerStaticLease section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Dhcpserverstaticlease = Struct[{
+ 'MACAddress' => String[1],
+ 'Address' => String[1],
+}]
diff --git a/types/interface/network/dhcpv4.pp b/types/interface/network/dhcpv4.pp
new file mode 100644
index 00000000..05352285
--- /dev/null
+++ b/types/interface/network/dhcpv4.pp
@@ -0,0 +1,53 @@
+# interface network DHCPv4 section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Dhcpv4 = Struct[{
+ 'RequestAddress' => Optional[String[1]],
+ 'SendHostname' => Optional[Enum['yes','no']],
+ 'Hostname' => Optional[String[1]],
+ 'MUDURL' => Optional[String[1]],
+ 'ClientIdentifier' => Optional[String[1]],
+ 'VendorClassIdentifier' => Optional[String[1]],
+ 'UserClass' => Optional[String[1]],
+ 'DUIDType' => Optional[String[1]],
+ 'DUIDRawData' => Optional[String[1]],
+ 'IAID' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'Anonymize' => Optional[Enum['yes','no']],
+ 'RequestOptions' => Optional[String[1]],
+ 'SendOption' => Optional[String[1]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'IPServiceType' => Optional[Enum['none','CS6', 'CS3']],
+ 'SocketPriority' => Optional[Integer[0,6]],
+ 'Label' => Optional[String[1]],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'RoutesToDNS' => Optional[Enum['yes','no']],
+ 'UseNTP' => Optional[Enum['yes','no']],
+ 'RoutesToNTP' => Optional[Enum['yes','no']],
+ 'UseSIP' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UseMTU' => Optional[Enum['yes','no']],
+ 'UseHostname' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'UseRoutes' => Optional[Enum['yes','no']],
+ 'RouteMetric' => Optional[Integer[0,4294967295]],
+ 'RouteTable' => Optional[Variant[String[1],Integer[0,4294967295]]],
+ 'RouteMTUBytes' => Optional[String[1]],
+ 'QuickAck' => Optional[Enum['yes','no']],
+ 'InitialCongestionWindow' => Optional[String[1]],
+ 'InitialAdvertisedReceiveWindow' => Optional[String[1]],
+ 'UseGateway' => Optional[Enum['yes','no']],
+ 'UseTimezone' => Optional[Enum['yes','no']],
+ 'Use6RD' => Optional[Enum['yes','no']],
+ 'IPv6OnlyMode' => Optional[Enum['yes','no']],
+ 'FallbackLeaseLifetimeSec' => Optional[Enum['forever', 'infinity']],
+ 'RequestBroadcast' => Optional[Enum['yes','no']],
+ 'MaxAttempts' => Optional[Variant[Integer[0],Enum['forever', 'infinity']]],
+ 'ListenPort' => Optional[String[1]],
+ 'ServerPort' => Optional[String[1]],
+ 'DenyList' => Optional[String[1]],
+ 'AllowList' => Optional[String[1]],
+ 'SendRelease' => Optional[Enum['yes','no']],
+ 'SendDecline' => Optional[Enum['yes','no']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
diff --git a/types/interface/network/dhcpv6.pp b/types/interface/network/dhcpv6.pp
new file mode 100644
index 00000000..f3bb2b94
--- /dev/null
+++ b/types/interface/network/dhcpv6.pp
@@ -0,0 +1,28 @@
+# interface network DHCPv6 section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Dhcpv6 = Struct[{
+ 'MUDURL' => Optional[String[1]],
+ 'IAID' => Optional[String[1]],
+ 'DUIDType' => Optional[String[1]],
+ 'DUIDRawData' => Optional[String[1]],
+ 'RequestOptions' => Optional[String[1]],
+ 'SendOption' => Optional[Integer[1,65536]],
+ 'SendVendorOption' => Optional[String[1]],
+ 'UserClass' => Optional[String[1]],
+ 'VendorClass' => Optional[String[1]],
+ 'PrefixDelegationHint' => Optional[String[1]],
+ 'RapidCommit' => Optional[Enum['yes','no']],
+ 'SendHostname' => Optional[Enum['yes','no']],
+ 'Hostname' => Optional[String[1]],
+ 'UseAddress' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UseDelegatedPrefix' => Optional[Enum['yes','no']],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'UseNTP' => Optional[Enum['yes','no']],
+ 'UseHostname' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'NetLabel' => Optional[Enum['yes','no']],
+ 'SendRelease' => Optional[Enum['yes','no']],
+ 'NFTSet' => Optional[String[1]],
+ 'WithoutRA' => Optional[Enum['no', 'solicit', 'information-request']],
+}]
diff --git a/types/interface/network/enhancedtransmissionselection.pp b/types/interface/network/enhancedtransmissionselection.pp
new file mode 100644
index 00000000..1c313255
--- /dev/null
+++ b/types/interface/network/enhancedtransmissionselection.pp
@@ -0,0 +1,10 @@
+# interface network EnhancedTransmissionSelection section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Enhancedtransmissionselection = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'Bands' => Optional[Integer[1,16]],
+ 'StrictBands' => Optional[Integer[1,16]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'PriorityMap' => Optional[String[1]],
+}]
diff --git a/types/interface/network/fairqueueing.pp b/types/interface/network/fairqueueing.pp
new file mode 100644
index 00000000..ea708437
--- /dev/null
+++ b/types/interface/network/fairqueueing.pp
@@ -0,0 +1,15 @@
+# interface network FairQueueing section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Fairqueueing = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'FlowLimit' => Optional[Integer[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'InitialQuantumBytes' => Optional[String[1]],
+ 'MaximumRate' => Optional[String[1]],
+ 'Buckets' => Optional[String[1]],
+ 'OrphanMask' => Optional[Integer[0]],
+ 'Pacing' => Optional[Enum['yes','no']],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/fairqueueingcontrolleddelay.pp b/types/interface/network/fairqueueingcontrolleddelay.pp
new file mode 100644
index 00000000..ffdc551b
--- /dev/null
+++ b/types/interface/network/fairqueueingcontrolleddelay.pp
@@ -0,0 +1,14 @@
+# interface network FairQueueingControlledDelay section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Fairqueueingcontrolleddelay = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'MemoryLimitBytes' => Optional[String[1]],
+ 'Flows' => Optional[String[1]],
+ 'TargetSec' => Optional[String[1]],
+ 'IntervalSec' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'ECN' => Optional[Enum['yes','no']],
+ 'CEThresholdSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/flowqueuepie.pp b/types/interface/network/flowqueuepie.pp
new file mode 100644
index 00000000..170432e9
--- /dev/null
+++ b/types/interface/network/flowqueuepie.pp
@@ -0,0 +1,7 @@
+# interface network FlowQueuePIE section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Flowqueuepie = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
diff --git a/types/interface/network/genericrandomearlydetection.pp b/types/interface/network/genericrandomearlydetection.pp
new file mode 100644
index 00000000..357ddcfc
--- /dev/null
+++ b/types/interface/network/genericrandomearlydetection.pp
@@ -0,0 +1,9 @@
+# interface network GenericRandomEarlyDetection section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Genericrandomearlydetection = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'VirtualQueues' => Optional[Integer[1,16]],
+ 'DefaultVirtualQueues' => Optional[Integer[1,16]],
+ 'GenericRIO' => Optional[Enum['yes','no']],
+}]
diff --git a/types/interface/network/heavyhitterfilter.pp b/types/interface/network/heavyhitterfilter.pp
new file mode 100644
index 00000000..fcc9439b
--- /dev/null
+++ b/types/interface/network/heavyhitterfilter.pp
@@ -0,0 +1,7 @@
+# interface network HeavyHitterFilter section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Heavyhitterfilter = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]]
+}]
diff --git a/types/interface/network/hierarchytokenbucketclass.pp b/types/interface/network/hierarchytokenbucketclass.pp
new file mode 100644
index 00000000..e1b999b0
--- /dev/null
+++ b/types/interface/network/hierarchytokenbucketclass.pp
@@ -0,0 +1,14 @@
+# interface network HierarchyTokenBucketClass section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Hierarchytokenbucketclass = Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'Priority' => Optional[String[1]],
+ 'QuantumBytes' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+ 'OverheadBytes' => Optional[String[1]],
+ 'Rate' => Optional[String[1]],
+ 'CeilRate' => Optional[String[1]],
+ 'BufferBytes' => Optional[String[1]],
+ 'CeilBufferBytes' => Optional[String[1]],
+}]
diff --git a/types/interface/network/ipoib.pp b/types/interface/network/ipoib.pp
new file mode 100644
index 00000000..9a51bfdf
--- /dev/null
+++ b/types/interface/network/ipoib.pp
@@ -0,0 +1,6 @@
+# interface network IPoIB section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipoib = Struct[{
+ 'Mode' => Optional[Enum['datagram','connected']],
+ 'IgnoreUserspaceMulticastGroup' => Optional[Enum['yes', 'no']],
+}]
diff --git a/types/interface/network/ipv6acceptra.pp b/types/interface/network/ipv6acceptra.pp
new file mode 100644
index 00000000..5c1ad815
--- /dev/null
+++ b/types/interface/network/ipv6acceptra.pp
@@ -0,0 +1,30 @@
+# interface network IPv6AcceptRA section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6acceptra = Struct[{
+ 'UseRedirect' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'UseDNS' => Optional[Enum['yes','no']],
+ 'UseDomains' => Optional[Enum['yes','no']],
+ 'RouteTable' => Optional[Variant[String[1],Integer[0,4294967295]]],
+ 'RouteMetric' => Optional[String[1]],
+ 'QuickAck' => Optional[Enum['yes','no']],
+ 'UseMTU' => Optional[Enum['yes','no']],
+ 'UseHopLimit' => Optional[Enum['yes','no']],
+ 'UseReachableTime' => Optional[Enum['yes','no']],
+ 'UseRetransmissionTime' => Optional[Enum['yes','no']],
+ 'UseGateway' => Optional[Enum['yes','no']],
+ 'UseRoutePrefix' => Optional[Enum['yes','no']],
+ 'UseCaptivePortal' => Optional[Enum['yes','no']],
+ 'UsePREF64' => Optional[Enum['yes','no']],
+ 'UseAutonomousPrefix' => Optional[Enum['yes','no']],
+ 'UseOnLinkPrefix' => Optional[Enum['yes','no']],
+ 'RouterDenyList' => Optional[String[1]],
+ 'RouterAllowList' => Optional[String[1]],
+ 'PrefixDenyList' => Optional[String[1]],
+ 'PrefixAllowList' => Optional[String[1]],
+ 'RouteDenyList' => Optional[String[1]],
+ 'RouteAllowList' => Optional[String[1]],
+ 'DHCPv6Client' => Optional[Enum['yes','no', 'always']],
+ 'NetLabel' => Optional[String[1]],
+ 'NFTSet' => Optional[String[1]],
+}]
diff --git a/types/interface/network/ipv6addresslabel.pp b/types/interface/network/ipv6addresslabel.pp
new file mode 100644
index 00000000..934d35df
--- /dev/null
+++ b/types/interface/network/ipv6addresslabel.pp
@@ -0,0 +1,6 @@
+# interface network IPv6AddressLabel section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6addresslabel = Struct[{
+ 'Label' => Optional[Integer[0,4294967294]],
+ 'Prefix' => Optional[String[1]],
+}]
diff --git a/types/interface/network/ipv6pref64prefix.pp b/types/interface/network/ipv6pref64prefix.pp
new file mode 100644
index 00000000..fc4e17f7
--- /dev/null
+++ b/types/interface/network/ipv6pref64prefix.pp
@@ -0,0 +1,6 @@
+# interface network IPv6PREF64Prefix section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6pref64prefix = Struct[{
+ 'Prefix' => Optional[String[1]],
+ 'LifetimeSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/ipv6prefix.pp b/types/interface/network/ipv6prefix.pp
new file mode 100644
index 00000000..eb2ef2fa
--- /dev/null
+++ b/types/interface/network/ipv6prefix.pp
@@ -0,0 +1,12 @@
+# interface network IPv6Prefix section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6prefix = Struct[{
+ 'AddressAutoconfiguration' => Optional[Enum['yes','no']],
+ 'OnLink' => Optional[Enum['yes','no']],
+ 'Prefix' => Optional[String[1]],
+ 'PreferredLifetimeSec' => Optional[String[1]],
+ 'ValidLifetimeSec' => Optional[String[1]],
+ 'Assign' => Optional[Enum['yes','no']],
+ 'Token' => Optional[String[1]],
+ 'RouteMetric' => Optional[Integer[0, 4294967295]],
+}]
diff --git a/types/interface/network/ipv6routeprefix.pp b/types/interface/network/ipv6routeprefix.pp
new file mode 100644
index 00000000..195b2a06
--- /dev/null
+++ b/types/interface/network/ipv6routeprefix.pp
@@ -0,0 +1,6 @@
+# interface network IPv6RoutePrefix section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6routeprefix = Struct[{
+ 'Route' => Optional[String[1]],
+ 'LifetimeSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/ipv6sendra.pp b/types/interface/network/ipv6sendra.pp
new file mode 100644
index 00000000..0ea6ee6b
--- /dev/null
+++ b/types/interface/network/ipv6sendra.pp
@@ -0,0 +1,20 @@
+# interface network IPv6SendRA section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Ipv6sendra = Struct[{
+ 'Managed' => Optional[Enum['yes','no']],
+ 'OtherInformation' => Optional[Enum['yes','no']],
+ 'RouterLifetimeSec' => Optional[String[1]],
+ 'ReachableTimeSec' => Optional[String[1]],
+ 'RetransmitSec' => Optional[String[1]],
+ 'RouterPreference' => Optional[Enum['high', 'medium', 'low', 'normal', 'default']],
+ 'HopLimit' => Optional[Integer[0,255]],
+ 'UplinkInterface' => Optional[String[1]],
+ 'EmitDNS' => Optional[Enum['yes','no']],
+ 'DNS' => Optional[String[1]],
+ 'EmitDomains' => Optional[Enum['yes','no']],
+ 'Domains' => Optional[String[1]],
+ 'DNSLifetimeSec' => Optional[String[1]],
+ 'HomeAgent' => Optional[Enum['yes','no']],
+ 'HomeAgentLifetimeSec' => Optional[String[1]],
+ 'HomeAgentPreference' => Optional[Integer[0,65535]],
+}]
diff --git a/types/interface/network/link.pp b/types/interface/network/link.pp
new file mode 100644
index 00000000..017957e6
--- /dev/null
+++ b/types/interface/network/link.pp
@@ -0,0 +1,17 @@
+# interface network Link section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Link = Struct[{
+ 'MACAddress' => Optional[String[1]],
+ 'MTUBytes' => Optional[Integer[1280]],
+ 'ARP' => Optional[Enum['yes','no']],
+ 'Multicast' => Optional[Enum['yes','no']],
+ 'AllMulticast' => Optional[Enum['yes','no']],
+ 'Promiscuous' => Optional[Enum['yes','no']],
+ 'Unmanaged' => Optional[Enum['yes','no']],
+ 'Group' => Optional[Integer[0,2147483647]],
+ 'RequiredForOnline' => Optional[String[1]],
+ 'RequiredFamilyForOnline' => Optional[Enum['no', 'ipv4', 'ipv6', 'both', 'any']],
+ 'ActivationPolicy' => Optional[Enum[
+ 'up', 'always-up', 'manual', 'always-down', 'down', 'bound'
+ ]],
+}]
diff --git a/types/interface/network/lldp.pp b/types/interface/network/lldp.pp
new file mode 100644
index 00000000..0e890de9
--- /dev/null
+++ b/types/interface/network/lldp.pp
@@ -0,0 +1,5 @@
+# interface network LLDP section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Lldp = Struct[{
+ 'MUDURL' => Optional[String[1]],
+}]
diff --git a/types/interface/network/match.pp b/types/interface/network/match.pp
new file mode 100644
index 00000000..c5488713
--- /dev/null
+++ b/types/interface/network/match.pp
@@ -0,0 +1,27 @@
+# interface network Match section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Match = Struct[{
+ 'MACAddress' => Optional[String[1]],
+ 'PermanentMACAddress' => Optional[String[1]],
+ 'Path' => Optional[String[1]],
+ 'Driver' => Optional[String[1]],
+ 'Type' => Optional[String[1]],
+ 'Kind' => Optional[String[1]],
+ 'Property' => Optional[String[1]],
+ 'Name' => Optional[String[1]],
+ 'WLANInterfaceType' => Optional[Enum[
+ 'ad-hoc', 'station', 'ap', 'ap-vlan', 'wds', 'monitor',
+ 'mesh-point', 'p2p-client', 'p2p-go', 'p2p-device', 'ocb', 'nan',
+ '!ad-hoc', '!station', '!ap', '!ap-vlan', '!wds', '!monitor',
+ '!mesh-point', '!p2p-client', '!p2p-go', '!p2p-device', '!ocb', '!nan'
+ ]],
+ 'SSID' => Optional[String[1]],
+ 'BSSID' => Optional[String[1]],
+ 'Host' => Optional[String[1]],
+ 'Virtualization' => Optional[String[1]],
+ 'KernelCommandLine' => Optional[String[1]],
+ 'KernelVersion' => Optional[String[1]],
+ 'Credential' => Optional[String[1]],
+ 'Architecture' => Optional[String[1]],
+ 'Firmware' => Optional[String[1]],
+}]
diff --git a/types/interface/network/neighbor.pp b/types/interface/network/neighbor.pp
new file mode 100644
index 00000000..5588e871
--- /dev/null
+++ b/types/interface/network/neighbor.pp
@@ -0,0 +1,6 @@
+# interface network Neighbor section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Neighbor = Struct[{
+ 'Address' => Optional[String[1]],
+ 'LinkLayerAddress' => Optional[String[1]],
+}]
diff --git a/types/interface/network/network.pp b/types/interface/network/network.pp
new file mode 100644
index 00000000..0b8c63c0
--- /dev/null
+++ b/types/interface/network/network.pp
@@ -0,0 +1,67 @@
+# interface network Network section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Network = Struct[{
+ 'Description' => Optional[String[1]],
+ 'DHCP' => Optional[Enum['yes', 'no', 'ipv4', 'ipv6']],
+ 'DHCPServer' => Optional[Enum['yes', 'no']],
+ 'LinkLocalAddressing' => Optional[Enum['yes', 'no', 'ipv4', 'ipv6']],
+ 'IPv6LinkLocalAddressGenerationMode' => Optional[Enum[
+ 'eui64', 'none', 'stable-privacy', 'random'
+ ]],
+ 'IPv6StableSecretAddress' => Optional[String[1]],
+ 'IPv4LLStartAddress' => Optional[String[1]],
+ 'IPv4LLRoute' => Optional[Enum['yes', 'no']],
+ 'DefaultRouteOnDevice' => Optional[Enum['yes', 'no']],
+ 'LLMNR' => Optional[Enum['yes', 'no', 'resolve']],
+ 'MulticastDNS' => Optional[Enum['yes', 'no', 'resolve']],
+ 'DNSOverTLS' => Optional[Enum['yes', 'no', 'opportunistic']],
+ 'DNSSEC' => Optional[Enum['yes', 'no', 'allow-downgrade']],
+ 'DNSSECNegativeTrustAnchors' => Optional[String[1]],
+ 'LLDP' => Optional[Enum['yes', 'no', 'routers-only']],
+ 'EmitLLDP' => Optional[Enum['yes', 'no', 'nearest-bridge', 'non-tpmr-bridge', 'customer-bridge']],
+ 'BindCarrier' => Optional[String[1]],
+ 'Address' => Optional[Variant[Array[String[1]], String[1]]],
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'DNS' => Optional[Variant[Array[String[1]], String[1]]],
+ 'UseDomains' => Optional[Enum['yes', 'no', 'route']],
+ 'DNSDefaultRoute' => Optional[Enum['yes', 'no']],
+ 'NTP' => Optional[Enum['yes', 'no', 'route']],
+ 'IPv4Forwarding' => Optional[Enum['yes', 'no']],
+ 'IPv6Forwarding' => Optional[Enum['yes', 'no']],
+ 'IPMasquerade' => Optional[Enum['ipv4', 'ipv6', 'both', 'no']],
+ 'IPv6PrivacyExtensions' => Optional[Enum['yes', 'no', 'prefer-public', 'kernel']],
+ 'IPv6AcceptRA' => Optional[Enum['yes', 'no']],
+ 'IPv6DuplicateAddressDetection' => Optional[Integer],
+ 'IPv6HopLimit' => Optional[Integer[1,255]],
+ 'IPv6RetransmissionTimeSec' => Optional[Integer[0]],
+ 'IPv4ReversePathFilter' => Optional[Enum['no', 'strict', 'loose']],
+ 'IPv4AcceptLocal' => Optional[Enum['yes', 'no']],
+ 'IPv4RouteLocalnet' => Optional[Enum['yes', 'no']],
+ 'IPv4ProxyARP' => Optional[Enum['yes', 'no']],
+ 'IPv4ProxyARPPrivateVLAN' => Optional[Enum['yes', 'no']],
+ 'IPv6ProxyNDP' => Optional[Enum['yes', 'no']],
+ 'IPv6ProxyNDPAddress' => Optional[Variant[String[1], Array[String[1]]]],
+ 'IPv6SendRA' => Optional[Enum['yes', 'no']],
+ 'DHCPPrefixDelegation' => Optional[Enum['yes', 'no']],
+ 'IPv6MTUBytes' => Optional[Integer[1280]],
+ 'KeepMaster' => Optional[Enum['yes', 'no']],
+ 'BatmanAdvanced' => Optional[String[1]],
+ 'Bond' => Optional[String[1]],
+ 'Bridge' => Optional[String[1]],
+ 'VRF' => Optional[String[1]],
+ 'IPoIB' => Optional[Variant[String[1],Array[String[1]]]],
+ 'IPVLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'IPVTAP' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACsec' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACVLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'MACVTAP' => Optional[Variant[String[1],Array[String[1]]]],
+ 'Tunnel' => Optional[Variant[String[1],Array[String[1]]]],
+ 'VLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'VXLAN' => Optional[Variant[String[1],Array[String[1]]]],
+ 'Xfrm' => Optional[Variant[String[1],Array[String[1]]]],
+ 'ActiveSlave' => Optional[Enum['yes', 'no']],
+ 'PrimarySlave' => Optional[Enum['yes', 'no']],
+ 'ConfigureWithoutCarrier' => Optional[Enum['yes', 'no']],
+ # 'IgnoreCarrierLoss' => Optional[Variant[Enum['yes', 'no'],Systemd::Unit::Timespan]],
+ 'KeepConfiguration' => Optional[Enum['yes', 'no', 'static', 'dhcp-on-stop', 'dhcp']],
+}]
diff --git a/types/interface/network/networkemulator.pp b/types/interface/network/networkemulator.pp
new file mode 100644
index 00000000..3812703e
--- /dev/null
+++ b/types/interface/network/networkemulator.pp
@@ -0,0 +1,10 @@
+# interface network NetworkEmulator section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Networkemulator = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact','ingress'],String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'DelayJitterSec' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+ 'LossRate' => Optional[String[1]],
+ 'DuplicateRate' => Optional[String[1]],
+}]
diff --git a/types/interface/network/nexthop.pp b/types/interface/network/nexthop.pp
new file mode 100644
index 00000000..6d092703
--- /dev/null
+++ b/types/interface/network/nexthop.pp
@@ -0,0 +1,10 @@
+# interface network NextHop section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Nexthop = Struct[{
+ 'Id' => Optional[Integer[1, 4294967295]],
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'Familiy' => Optional[Enum['ipv4','ipv6']],
+ 'OnLink' => Optional[Enum['yes','no']],
+ 'Blackhole' => Optional[Enum['yes','no']],
+ 'Group' => Optional[String[1]],
+}]
diff --git a/types/interface/network/pfifo.pp b/types/interface/network/pfifo.pp
new file mode 100644
index 00000000..e171f75c
--- /dev/null
+++ b/types/interface/network/pfifo.pp
@@ -0,0 +1,7 @@
+# interface network PFIFO section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Pfifo = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]]
+}]
diff --git a/types/interface/network/pfifofast.pp b/types/interface/network/pfifofast.pp
new file mode 100644
index 00000000..77bc677f
--- /dev/null
+++ b/types/interface/network/pfifofast.pp
@@ -0,0 +1,6 @@
+# interface network PFIFOFast section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Pfifofast = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+}]
diff --git a/types/interface/network/pfifoheaddrop.pp b/types/interface/network/pfifoheaddrop.pp
new file mode 100644
index 00000000..a020a13a
--- /dev/null
+++ b/types/interface/network/pfifoheaddrop.pp
@@ -0,0 +1,7 @@
+# interface network PFIFOHeadDrop section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Pfifoheaddrop = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[0,4294967294]],
+}]
diff --git a/types/interface/network/pie.pp b/types/interface/network/pie.pp
new file mode 100644
index 00000000..c31cfc52
--- /dev/null
+++ b/types/interface/network/pie.pp
@@ -0,0 +1,7 @@
+# interface network PIE section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Pie = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
diff --git a/types/interface/network/qdisc.pp b/types/interface/network/qdisc.pp
new file mode 100644
index 00000000..5574698a
--- /dev/null
+++ b/types/interface/network/qdisc.pp
@@ -0,0 +1,6 @@
+# interface network QDisc section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Qdisc = Struct[{
+ 'Parent' => Optional[Enum['clsact', 'ingress']],
+ 'Handle' => Optional[String[1]],
+}]
diff --git a/types/interface/network/quickfairqueueingclass.pp b/types/interface/network/quickfairqueueingclass.pp
new file mode 100644
index 00000000..0c2e95df
--- /dev/null
+++ b/types/interface/network/quickfairqueueingclass.pp
@@ -0,0 +1,8 @@
+# interface network QuickFairQueueingClass section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Quickfairqueueingclass= Struct[{
+ 'Parent' => Optional[Variant[Enum['root'], String[1]]],
+ 'ClassId' => Optional[String[1]],
+ 'Weight' => Optional[Integer[1,1023]],
+ 'MaxPacketBytes' => Optional[String[1]],
+}]
diff --git a/types/interface/network/route.pp b/types/interface/network/route.pp
new file mode 100644
index 00000000..f02485c6
--- /dev/null
+++ b/types/interface/network/route.pp
@@ -0,0 +1,29 @@
+# interface network Route section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Route = Struct[{
+ 'Gateway' => Optional[Variant[Array[String[1]], String[1]]],
+ 'GatewayOnLink' => Optional[Enum['yes', 'no']],
+ 'Destination' => Optional[String[1]],
+ 'Source' => Optional[String[1]],
+ 'Metric' => Optional[Integer[0,4294967295]],
+ 'IPv6Preference' => Optional[Enum['low','medium', 'high']],
+ 'Scope' => Optional[Enum['global', 'site', 'link', 'host', 'nowhere']],
+ 'PreferredSource' => Optional[String[1]],
+ 'Table' => Optional[Variant[String[1], Enum['default','main', 'local'], Integer[1,4294967295]]],
+ 'HopLimit' => Optional[Integer[1,255]],
+ 'Protocol' => Optional[Variant[Integer[0,255], Enum['kernel', 'boot', 'static', 'ra', 'dhcp']]],
+ 'Type' => Optional[Enum[
+ 'unicast', 'local', 'broadcast', 'anycast', 'multicast',
+ 'blackhole', 'unreachable', 'prohibit', 'throw', 'nat', 'xresolve'
+ ]],
+ 'InitialCongestionWindow' => Optional[Integer[0,1023]],
+ 'InitialAdvertisedReceiveWindow' => Optional[Integer[0,1023]],
+ 'QuickAck' => Optional[Enum['yes', 'no',]],
+ 'FastOpenNoCookie' => Optional[Enum['yes', 'no',]],
+ 'MTUBytes' => Optional[String[1]],
+ 'TCPAdvertisedMaximumSegmentSize' => Optional[String[1]],
+ 'TCPCongestionControlAlgorithm' => Optional[Enum['bbr', 'dctcp', 'vegas']],
+ 'TCPRetransmissionTimeoutSeca' => Optional[Integer[1]],
+ 'MultiPathRoute' => Optional[Variant[String[1],Array[String[1]]]],
+ 'NextHop' => Optional[Integer[1, 4294967295]],
+}]
diff --git a/types/interface/network/routingpolicyrule.pp b/types/interface/network/routingpolicyrule.pp
new file mode 100644
index 00000000..d2a605cb
--- /dev/null
+++ b/types/interface/network/routingpolicyrule.pp
@@ -0,0 +1,22 @@
+# interface network RoutingPolicyRule section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Routingpolicyrule = Struct[{
+ 'TypeOfService' => Optional[Integer[0,255]],
+ 'From' => Optional[String[1]],
+ 'To' => Optional[String[1]],
+ 'FirewallMark' => Optional[Variant[String[1],Integer[1, 4294967295]]],
+ 'Table' => Optional[Variant[Enum['default','main','local'],Integer[1,4294967295],String[1]]],
+ 'Priority' => Optional[Integer[0,4294967295]],
+ 'IncomingInterface' => Optional[String[1]],
+ 'OutgoingInterface' => Optional[String[1]],
+ 'L3MasterDevice' => Optional[Enum['yes','no']],
+ 'SourcePort' => Optional[String[1]],
+ 'DestinationPort' => Optional[String[1]],
+ 'IPProtocol' => Optional[String[1]],
+ 'InvertRule' => Optional[Enum['yes','no']],
+ 'Family' => Optional[Enum['ipv4', 'ipv6', 'both']],
+ 'User' => Optional[String[1]],
+ 'SuppressPrefixLength' => Optional[Integer[0,128]],
+ 'SuppressInterfaceGroup' => Optional[Integer[0,2147483647]],
+ 'Type' => Optional[Enum['blackhole','unreachable','prohibit']],
+}]
diff --git a/types/interface/network/sr_iov.pp b/types/interface/network/sr_iov.pp
new file mode 100644
index 00000000..3f61cae9
--- /dev/null
+++ b/types/interface/network/sr_iov.pp
@@ -0,0 +1,13 @@
+# interface network SR-IOV section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Sr_iov = Struct[{
+ 'VirtualFunction' => Optional[Integer[0,2147483646]],
+ 'VLANId' => Optional[Integer[1,4095]],
+ 'QualityOfService' => Optional[Integer[0,4294967294]],
+ 'VLANProtocol' => Optional[Enum['802.1Q', '802.1ad']],
+ 'MACSpoofCheck' => Optional[Enum['no','yes']],
+ 'QueryReceiveSideScaling' => Optional[Enum['no','yes']],
+ 'Trust' => Optional[Enum['no','yes']],
+ 'LinkState' => Optional[Enum['no','yes','auto']],
+ 'MACAddress' => Optional[String[1]],
+}]
diff --git a/types/interface/network/stochasticfairblue.pp b/types/interface/network/stochasticfairblue.pp
new file mode 100644
index 00000000..e3ba9fad
--- /dev/null
+++ b/types/interface/network/stochasticfairblue.pp
@@ -0,0 +1,7 @@
+# interface network StochasticFairBlue section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Stochasticfairblue= Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PacketLimit' => Optional[Integer[1,4294967294]],
+}]
diff --git a/types/interface/network/stochasticfairnessqueueing.pp b/types/interface/network/stochasticfairnessqueueing.pp
new file mode 100644
index 00000000..7c12985a
--- /dev/null
+++ b/types/interface/network/stochasticfairnessqueueing.pp
@@ -0,0 +1,7 @@
+# interface network StochasticFairnessQueueing section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Stochasticfairnessqueueing = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'PerturbPeriodSec' => Optional[String[1]],
+}]
diff --git a/types/interface/network/tokenbucketfilter.pp b/types/interface/network/tokenbucketfilter.pp
new file mode 100644
index 00000000..21674e67
--- /dev/null
+++ b/types/interface/network/tokenbucketfilter.pp
@@ -0,0 +1,13 @@
+# interface network TokenBucketFilter section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Tokenbucketfilter = Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'LatencySec' => Optional[String[1]],
+ 'LimitBytes' => Optional[String[1]],
+ 'BurstBytes' => Optional[String[1]],
+ 'Rate' => Optional[String[1]],
+ 'MPUBytes' => Optional[String[1]],
+ 'PeakRate' => Optional[String[1]],
+ 'MTUBytes' => Optional[String[1]],
+}]
diff --git a/types/interface/network/triviallinkequalizer.pp b/types/interface/network/triviallinkequalizer.pp
new file mode 100644
index 00000000..e6638b7d
--- /dev/null
+++ b/types/interface/network/triviallinkequalizer.pp
@@ -0,0 +1,8 @@
+# interface network TrivialLinkEqualizer section definition
+# see: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html
+type Systemd::Interface::Network::Triviallinkequalizer= Struct[{
+ 'Parent' => Optional[Variant[Enum['root', 'clsact', 'ingress'], String[1]]],
+ 'Handle' => Optional[String[1]],
+ 'DefaultClass' => Optional[String[1]],
+ 'RateToQuantum' => Optional[Integer[0]]
+}]