Network port(s) running in half duplex-bluecoat-sgos

sgos
bluecoat
error
health-checks
Network port(s) running in half duplex-bluecoat-sgos
0

#1

Network port(s) running in half duplex-bluecoat-sgos

Vendor: bluecoat

OS: sgos

Description:
Indeni will alert one or more network ports is running in half duplex.

Remediation Steps:
Many times ports are in half duplex due to an autonegotation error or a misconfiguration.

How does this work?
This script logs into the Bluecoat Proxy through SSH and retrieves the output of the “show interface all” command. The output includes the duplex of the network interfaces.

Why is this important?
Capture the interface duplex in human readable format such as full or half. In modern network environments it is very uncommon to see half-duplex interfaces, and that should be an indication for a potential problem.

Without Indeni how would you find this?
It is possible to poll this data through SNMP. If a duplex mismatch is detected on a port syslog messages will be generated.

bluecoat-show-interface-all

#! META
name: bluecoat-show-interface-all
description: Fetch interface information
type: monitoring
monitoring_interval: 15 minute
requires:
    vendor: "bluecoat"
    os.name: "sgos"

#! COMMENTS

network-interface-ipv4-address:
    skip-documentation: true

network-interface-ipv4-subnet:
    skip-documentation: true

network-interface-type:
    skip-documentation: true

network-interface-duplex:
    why: |
       Capture the interface duplex in human readable format such as full or half. In modern network environments it is very uncommon to see half-duplex interfaces, and that should be an indication for a potential problem.
    how: |
       This script logs into the Bluecoat Proxy through SSH and retrieves the output of the "show interface all" command. The output includes the duplex of the network interfaces.
    without-indeni: |
       It is possible to poll this data through SNMP. If a duplex mismatch is detected on a port syslog messages will be generated.
    can-with-snmp: true
    can-with-syslog: true

network-interface-admin-state:
    why: |
        An administrator might set a network interface to be disabled for troubleshooting, but should he he forget about doing this network trunks might be running at reduced capacity.
    how: |
        This script logs into the Bluecoat Proxy through SSH and retrieves the output of the "show interface all" command. The output includes the admin state of the network interfaces.
    without-indeni: |
        An administrator could login to the device through SSH and manually issue the command "show interface all".
    can-with-snmp: true
    can-with-syslog: false

#! REMOTE::SSH
show interface all

#! PARSER::AWK

BEGIN {

    netMaskToCIDR["0.0.0.0"] = 0
    netMaskToCIDR["128.0.0.0"] = 1
    netMaskToCIDR["192.0.0.0"] = 2
    netMaskToCIDR["224.0.0.0"] = 3
    netMaskToCIDR["240.0.0.0"] = 4
    netMaskToCIDR["248.0.0.0"] = 5
    netMaskToCIDR["252.0.0.0"] = 6
    netMaskToCIDR["254.0.0.0"] = 7
    netMaskToCIDR["255.0.0.0"] = 8
    netMaskToCIDR["255.128.0.0"] = 9
    netMaskToCIDR["255.192.0.0"] = 10
    netMaskToCIDR["255.224.0.0"] = 11
    netMaskToCIDR["255.240.0.0"] = 12
    netMaskToCIDR["255.248.0.0"] = 13
    netMaskToCIDR["255.252.0.0"] = 14
    netMaskToCIDR["255.254.0.0"] = 15
    netMaskToCIDR["255.255.0.0"] = 16
    netMaskToCIDR["255.255.128.0"] = 17
    netMaskToCIDR["255.255.192.0"] = 18
    netMaskToCIDR["255.255.224.0"] = 19
    netMaskToCIDR["255.255.240.0"] = 20
    netMaskToCIDR["255.255.248.0"] = 21
    netMaskToCIDR["255.255.252.0"] = 22
    netMaskToCIDR["255.255.254.0"] = 23
    netMaskToCIDR["255.255.255.0"] = 24
    netMaskToCIDR["255.255.255.128"] = 25
    netMaskToCIDR["255.255.255.192"] = 26
    netMaskToCIDR["255.255.255.224"] = 27
    netMaskToCIDR["255.255.255.240"] = 28
    netMaskToCIDR["255.255.255.248"] = 29
    netMaskToCIDR["255.255.255.252"] = 30
    netMaskToCIDR["255.255.255.254"] = 31
    netMaskToCIDR["255.255.255.255"] = 32
}

#  Ethernet interface 0:0
/interface\ [0-9]+:[0-9]+$/ {
    tags["name"] = $NF
}

#    Status:               enabled
/^\s+Status:/ {
    enabled = ($NF == "enabled")
    writeDoubleMetricWithLiveConfig("network-interface-admin-state", tags, "gauge", "900", enabled, "Network Interfaces - Enabled/Disabed", "state", "name")
    next
}

#    Internet address:     192.168.192.10 netmask 255.255.255.0
/^\s+Internet address:\s+[0-9]+\./{

    writeComplexMetricStringWithLiveConfig("network-interface-ipv4-address", tags, $3, "Network Interfaces - IPv4 Address")

    if ($NF in netMaskToCIDR){
        writeComplexMetricString("network-interface-ipv4-subnet", tags, netMaskToCIDR[$NF])
    } else {
        badMask = "Bad Netmask: " $NF
        writeComplexMetricString("network-interface-ipv4-subnet", tags, badMask)
    }

    next
}

#    MTU size:             1500
/^\s+MTU size:/ {
    writeComplexMetricString("network-interface-mtu", tags, $NF)
    next
}

#    Link status:          autosensed to full duplex, virtual network
/^\s+Link status:/ {

    if ($0 ~ / full duplex,/) {
        writeComplexMetricString("network-interface-duplex", tags, "full")
    } else if ($0 ~ /half duplex/) {
        writeComplexMetricString("network-interface-duplex", tags, "half")
    }

    if( $0 ~ /virtual network$/ ){
        writeComplexMetricString("network-interface-type", tags, "virtual")
    }

    next

}

cross_vendor_network_port_duplex_half

package com.indeni.server.rules.library.templatebased.crossvendor

import com.indeni.ruleengine.expressions.conditions.{Equals => RuleEquals, Not => RuleNot, Or => RuleOr}
import com.indeni.ruleengine.expressions.data.SnapshotExpression
import com.indeni.server.rules.RuleContext
import com.indeni.server.rules.library._

/**
  *
  */
case class cross_vendor_network_port_duplex_half(context: RuleContext) extends SingleSnapshotValueCheckTemplateRule(context,
  ruleName = "cross_vendor_network_port_duplex_half",
  ruleFriendlyName = "All Devices: Network port(s) running in half duplex",
  ruleDescription = "Indeni will alert one or more network ports is running in half duplex.",
  metricName = "network-interface-duplex",
  applicableMetricTag = "name",
  alertItemsHeader = "Ports Affected",
  alertDescription = "One or more ports are set to half duplex. This is usually an error. Review the list of ports below.",
  baseRemediationText = "Many times ports are in half duplex due to an autonegotation error or a misconfiguration.",
  complexCondition = RuleEquals(RuleHelper.createComplexStringConstantExpression("half"), SnapshotExpression("network-interface-duplex").asSingle().mostRecent().value().noneable))(
  ConditionalRemediationSteps.VENDOR_CP -> "Review sk83760: https://supportcenter.checkpoint.com/supportcenter/portal?eventSubmit_doGoviewsolutiondetails=&solutionid=sk83760",
  ConditionalRemediationSteps.VENDOR_PANOS -> "https://live.paloaltonetworks.com/t5/Management-Articles/How-to-Display-Port-Information-Connected-Media-Interface/ta-p/61715",
  ConditionalRemediationSteps.OS_NXOS ->
    """|
      |1. Use the "show interface" NX-OS command to display speed and duplex settings of an interface.
      |2. Use the "show interface status" and "show interface capabilities" NX-OS commands to gather more information about ports.
      |3. You can disable link negotiation using the "no negotiate auto" command. Use the "negotiate auto" command to enable auto negotiation on 1-Gigabit ports when the connected peer does not support auto negotiation. By default, auto-negotiation is enabled on 1-Gigabit ports and disabled on 10-Gigabit ports.
      |4. Cisco does not recommend to enable auto negotiation on 10-Gigabit ports. Enabling auto-negotiation on 10-Gigabit ports brings the link down. By default, link negotiation is disabled on 10-Gigabit ports.
      |NOTE: A shut and no shut to the interface may be required after the aforementioned configuration change.""".stripMargin,
  ConditionalRemediationSteps.VENDOR_FORTINET ->
    """|
      |1. Monitor hardware network operations and speed by using the "diag hardware deviceinfo nic <interface>" FortiOS command.
      |2. Run the command "diag hardware deviceinfo nic <interface>" command to display a list of hardware related names and values. Review the next link for more details: http://help.fortinet.com/fos50hlp/54/Content/FortiOS/fortigate-toubleshooting-54/troubleshooting_tools.htm
      |3. Run the hidden FortiOS command "fnsysctl cat /proc/net/dev" to get a summary of the interface statistics.
      |4. Check for a mismatch in the speed and duplex interface settings on both sides of a cable, or for a damaged cable. Try to manually configure both sides to the same mode when you can. Review the next link "Symptoms of Ethernet speed/duplex mismatches" for more info: http://kb.fortinet.com/kb/documentLink.do?externalID=10653""".stripMargin,
  ConditionalRemediationSteps.VENDOR_BLUECOAT ->
  """
      |1. Login via ssh to the ProxySG, run the command "show interface <interface>" and review the current link status.
      |2. Check for a mismatch in the speed and duplex interface settings on both sides of a cable, or for a damaged cable.
      |3. Try to manually configure both sides to the same mode when you can #(config interface adapter_number:interface_number) full-duplex.
  """.stripMargin
)