Public/New-BfdControl.ps1

function New-BfdControl {
    <#
    .SYNOPSIS
        Builds a BFD control packet (RFC 5880) as byte[]; intervals are in microseconds.
    .EXAMPLE
        New-BfdControl -State Up -MyDiscriminator 1 -YourDiscriminator 2 -AuthType MeticulousKeyedSha1 -AuthKey secret -Sequence 7
    #>

    [CmdletBinding()]
    param(
        [ValidateSet('AdminDown', 'Down', 'Init', 'Up')][string]$State = 'Down',
        [ValidateRange(0, 31)][int]$Diagnostic = 0,
        [ValidateRange(0, 255)][int]$DetectMult = 3,
        [long]$MyDiscriminator = 1,
        [long]$YourDiscriminator = 0,
        [long]$DesiredMinTxInterval = 1000000,
        [long]$RequiredMinRxInterval = 1000000,
        [long]$RequiredMinEchoRxInterval = 0,
        [switch]$Poll,
        [switch]$Final,
        [switch]$ControlPlaneIndependent,
        [switch]$Demand,
        [switch]$Multipoint,
        [ValidateSet('None', 'Simple', 'KeyedMd5', 'MeticulousKeyedMd5', 'KeyedSha1', 'MeticulousKeyedSha1')][string]$AuthType = 'None',
        [string]$AuthKey = '',
        [ValidateRange(0, 255)][int]$KeyId = 1,
        [long]$Sequence = 0
    )
    New-BfdPacketBytes -State $script:BfdStateNumbers[$State] -Diagnostic $Diagnostic -DetectMult $DetectMult -MyDiscriminator $MyDiscriminator -YourDiscriminator $YourDiscriminator `
        -DesiredMinTx $DesiredMinTxInterval -RequiredMinRx $RequiredMinRxInterval -RequiredMinEchoRx $RequiredMinEchoRxInterval `
        -Poll ([bool]$Poll) -Final ([bool]$Final) -ControlPlaneIndependent ([bool]$ControlPlaneIndependent) -Demand ([bool]$Demand) -Multipoint ([bool]$Multipoint) `
        -AuthType $AuthType -AuthKey $AuthKey -KeyId $KeyId -Sequence $Sequence
}