Public/LLDP.ps1

#
# Copyright 2018, Alexis La Goutte <alexis dot lagoutte at gmail dot com>
# Copyright 2018, Cedric Moreau <moreaucedric0 at gmail dot com>
#
# SPDX-License-Identifier: Apache-2.0
#

function Get-ArubaSWLLDPRemote {

    <#
        .SYNOPSIS
        Get LLDP information about remote devices connected to the switch you are log on.

        .DESCRIPTION
        Get lldp informations about the remote devices.

        .EXAMPLE
        Get-ArubaSWLLDPRemote

        Get all the informations about the remote devices connected to the ports of the switch you are log on.

        .EXAMPLE
        Get-ArubaSWLLDPRemote -port_id 5

        Get LLDP neighbor informations on port 5
    #>


    Param(
        [Parameter (Mandatory = $false, Position = 1)]
        [string]$port_id,
        [Parameter (Mandatory = $False)]
        [ValidateNotNullOrEmpty()]
        [PSObject]$connection = $DefaultArubaSWConnection
    )
    Begin {
    }

    Process {

        $uri = "lldp/remote-device"

        if ($port_id) {
            $uri += "/$port_id"
        }

        $response = Invoke-ArubaSWWebRequest -method "GET" -uri $uri -connection $connection

        $run = ($response.content | ConvertFrom-Json)

        if ($port_id) {
            $run
        }
        else {
            $run.lldp_remote_device_element
        }
    }

    End {
    }
}

function Get-ArubaSWLLDPGlobalStatus {

    <#
        .SYNOPSIS
        Get information about LLDP global status.

        .DESCRIPTION
        Get lldp informations.

        .EXAMPLE
        Get-ArubaSWLLDPGlobalStatus
        Get all the informations about the global status of LLDP.
    #>


    Param(
        [Parameter (Mandatory = $False)]
        [ValidateNotNullOrEmpty()]
        [PSObject]$connection = $DefaultArubaSWConnection
    )

    Begin {
    }

    Process {

        $uri = "lldp"

        $response = Invoke-ArubaSWWebRequest -method "GET" -uri $uri -connection $connection

        $run = $response | ConvertFrom-Json

        $run
    }

    End {
    }
}

function Set-ArubaSWLLDPGlobalStatus {

    <#
        .SYNOPSIS
        Set global configuration about LLDP

        .DESCRIPTION
        Set lldp global parameters

        .EXAMPLE
        Set-ArubaSWLLDPGlobalStatus -transmit 400
        Set the transmit interval to 400.

        .EXAMPLE
        Set-ArubaSWLLDPGlobalStatus -enable:$false -holdtime 10 -faststart 1
        Set LLDP disable and configure holdtime to 10 and faststart to 1
    #>


    [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')]
    Param(
        [Parameter (Mandatory = $false)]
        [switch]$enable,
        [Parameter (Mandatory = $false)]
        [ValidateRange (8, 32768)]
        [int]$transmit,
        [Parameter (Mandatory = $false)]
        [ValidateRange (2, 10)]
        [int]$holdtime,
        [Parameter (Mandatory = $false)]
        [ValidateRange (1, 10)]
        [int]$faststart,
        [Parameter (Mandatory = $False)]
        [ValidateNotNullOrEmpty()]
        [PSObject]$connection = $DefaultArubaSWConnection
    )

    Begin {
    }

    Process {

        $uri = "lldp"

        $conf = New-Object -TypeName PSObject

        if ( $PsBoundParameters.ContainsKey('enable') ) {
            if ( $enable ) {
                $enable_status = "LLAS_ENABLED"
            }
            else {
                $enable_status = "LLAS_DISABLED"
            }

            $conf | Add-Member -name "admin_status" -membertype NoteProperty -Value $enable_status
        }

        if ( $PsBoundParameters.ContainsKey('transmit') ) {
            $conf | Add-Member -name "transmit_interval" -membertype NoteProperty -Value $transmit
        }

        if ( $PsBoundParameters.ContainsKey('holdtime') ) {
            $conf | Add-Member -name "hold_time_multiplier" -membertype NoteProperty -Value $holdtime
        }

        if ( $PsBoundParameters.ContainsKey('faststart') ) {
            $conf | Add-Member -name "fast_start_count" -membertype NoteProperty -Value $faststart
        }

        $response = Invoke-ArubaSWWebRequest -method "PUT" -body $conf -uri $uri -connection $connection

        if ($PSCmdlet.ShouldProcess($connection.server, 'Configure LLDP Global Status')) {
            $run = $response | ConvertFrom-Json

            $run
        }
    }

    End {
    }
}

function Get-ArubaSWLLDPNeighborStats {

    <#
        .SYNOPSIS
        Get information about LLDP neighbor stats

        .DESCRIPTION
        Get lldp neighbor stats informations

        .EXAMPLE
        Get-ArubaSWLLDPNeighborStats
        Get all the informations about the neighbor stats
    #>


    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
    Param(
        [Parameter (Mandatory = $False)]
        [ValidateNotNullOrEmpty()]
        [PSObject]$connection = $DefaultArubaSWConnection
    )

    Begin {
    }

    Process {

        $uri = "lldp/stats/device"

        $response = Invoke-ArubaSWWebRequest -method "GET" -uri $uri -connection $connection

        $run = $response | ConvertFrom-Json

        $run
    }

    End {
    }
}

function Get-ArubaSWLLDPPortStats {

    <#
        .SYNOPSIS
        Get information about LLDP port stats

        .DESCRIPTION
        Get lldp port stats informations

        .EXAMPLE
        Get-ArubaSWLLDPPortStats
        Gat all the LLDP stats informations about all the ports.

        .EXAMPLE
        Get-ArubaSWLLDPPortStats -port 5
        Get all the LLDP stats informations about the port 5
    #>


    [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSReviewUnusedParameter', 'port', Justification = 'False positive see PSSA #1472')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")]
    Param(
        [Parameter (Mandatory = $false, ParameterSetName = "port")]
        [string]$port,
        [Parameter (Mandatory = $False)]
        [ValidateNotNullOrEmpty()]
        [PSObject]$connection = $DefaultArubaSWConnection
    )

    Begin {
    }

    Process {

        $uri = "lldp/stats/ports"

        $response = Invoke-ArubaSWWebRequest -method "GET" -uri $uri -connection $connection

        $run = ($response | ConvertFrom-Json).lldp_port_stats_element

        switch ( $PSCmdlet.ParameterSetName ) {
            "port" { $run | Where-Object { $_.port_name -match $port } }
            default { $run }
        }
    }

    End {
    }
}