class Aio::Module::Cmd::Cisco::ShowInterfaces

Constants

Reg_Ethernet
Reg_Loopback
Reg_SubIface

Public Class Methods

new() click to toggle source
Calls superclass method Aio::Module::Cmd::new
# File lib/modules/cmd/cisco/show_interfaces.rb, line 8
def initialize
        super({
                :cmd_full            => "show interfaces",
                :cmd_short   => "sh int",
                :author                      => "Elin",
                :description =>      "This is Cisco Command# show interfaces",
                :ranking             => Ranking_1,
                :platform            => "all",
                :benchmark   => {
                        :input_queue_drops  => ["<=", 10],
                        :total_output_drops => ["<=", 10],
                        :output_queue_drops => ["<=", 10],
                        :runts                                                      => ["<=", 10],
                        :giants                                                     => ["<=", 10],
                        :throttles                                  => ["<=", 10],
                        :input_errors                               => ["<=", 10],
                        :crc                => ["<=", 1000],
                        :frame              => ["<=", 10],
                        :overrun            => ["<=", 10],
                        :ignored            => ["<=", 10],
                        :output_errors      => ["<=", 10],
                        :collisions                                 => ["<=", 10],
                        :iface_resets       => ["<=", 10],
                        }
        })
end

Public Instance Methods

iface_stat(context, iface) click to toggle source

接口的计数

# File lib/modules/cmd/cisco/show_interfaces.rb, line 121
def iface_stat(context, iface)
        #只有当:state 为UP的才会进行下面的操作
        if iface[:state] =~ /up/
                context.readline_match_block(/Input queue: \d+\/\d+\/(?<input_queue_drops>\d+)\/\d+ \(size\/max\/drops\/flushes\); Total output drops: (?<total_output_drops>\d+)/) do |block|
                        block.warning_ordinary(iface, :input_queue_drops, self)
                        block.warning_ordinary(iface, :total_output_drops, self)
                end
                context.readline_match_block(/Output queue: \d+\/\d+\/(?<output_queue_drops>\d+) \(size\/max total\/drops\)/) do |block|
                        block.warning_ordinary(iface, :output_queue_drops, self)
                end
                context.readline_match_block(/(?<runts>\d+) runts, (?<giants>\d+) giants, (?<throttles>\d+) throttles/) do |block|
                        block.warning_ordinary(iface, :runts, self)
                        block.warning_ordinary(iface, :giants, self)
                        block.warning_ordinary(iface, :throttles, self)
                end
                context.readline_match_block(/(?<input_errors>\d+) input errors, (?<crc>\d+) CRC, (?<frame>\d+) frame, (?<overrun>\d+) overrun, (?<ignored>\d+) ignored/) do |block|
                        block.warning_serious(iface, :input_errors, self)
                        block.warning_serious(iface, :crc, self)
                        block.warning_ordinary(iface, :frame, self)
                        block.warning_ordinary(iface, :overrun, self)
                        block.warning_ordinary(iface, :ignored, self)
                end
                context.readline_match_block(/(?<output_errors>\d+) output errors, (?<collisions>\d+) collisions, (?<iface_resets>\d+) interface resets/) do |block|
                        block.warning_serious(iface, :output_errors, self)
                        block.warning_ordinary(iface, :collisions, self)
                        block.warning_ordinary(iface, :iface_resets, self)
                end
        end
end
parse() click to toggle source
# File lib/modules/cmd/cisco/show_interfaces.rb, line 39
def parse
        cont = self.context.dup
        useful[:interface] = {}
        cont.readline_range_loop(/, line protocol/, /, line protocol/,
                                 {:before => true}) do |cont_layer|
                case device_template
                when Template_3      # 当是ASA的时候
                        parse_asa(cont_layer)
                else
                        switch_iface(cont_layer)
                end
        end
end
parse_asa(context) click to toggle source
# File lib/modules/cmd/cisco/show_interfaces.rb, line 64
def parse_asa(context)
        iface = {}
        iface_id = nil

        context.readline_match_block(/Interface (?<iface_id>.*) "(?<side>.*)", is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
                iface_id = block[:iface_id].strip
                useful[:interface][iface_id] = iface
                block.update(iface, :iface_id)
                block.update(iface, :side)
                block.update(iface, :state)
                block.update(iface, :proto_state)
        end

        return if iface.empty?
        context.readline_match_block(/MAC address (?<mac>[^,]*)/) do |block|
                block.update(iface, :mac)
        end
        context.readline_match_block(/IP address (?<addr>.*), subnet mask (?<mask>.*)/) do |block|
                block.update(iface, :addr)
                block.update(iface, :mask, Aio::Base::Toolkit::IPAddr.mask_dotted_to_i(block[:mask]).to_s)
        end
        iface_stat(context, iface)
end
parse_eth(context) click to toggle source
# File lib/modules/cmd/cisco/show_interfaces.rb, line 88
def parse_eth(context)
        iface = {}
        iface_id = nil

        context.readline_match_block(/(?<iface_id>.*) is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
                iface_id = block[:iface_id].strip
                useful[:interface][iface_id] = iface
                block.update(iface, :iface_id)
                block.update(iface, :state)
                block.update(iface, :proto_state)
        end
                
        context.readline_match_block(/Hardware .* address is (?<mac>[^\s]*) /) do |block|
                block.update(iface, :mac)
        end
        context.readline_match_block(/Description: (?<description>.*)/) do |block|
                block.update(iface, :description)
        end
        context.readline_match_block(/Internet address is (?<addr>[^\/]+)\/(?<mask>\d+)/) do |block|
                block.update(iface, :addr)
                block.update(iface, :mask)
        end
        context.readline_match_block(/Encapsulation (?<encapsulation>[^\s]*)/) do |block|
                block.update(iface, :encapsulation)
        end
        context.readline_match_block(/(?<duplex>.*[Dd]uplex), (?<speed>.*), /) do |block|
                block.update(iface, :duplex)
                block.update(iface, :speed)
        end
        iface_stat(context, iface)
end
parse_subiface(context) click to toggle source
# File lib/modules/cmd/cisco/show_interfaces.rb, line 151
def parse_subiface(context)
        iface = {}
        iface_id = nil
        context.readline_match_block(/(?<iface_id>.*) is (?<state>.*), line protocol is (?<proto_state>.*)/) do |block|
                iface_id = block[:iface_id]
                useful[:interface][iface_id] = iface
                update(iface, :iface_id)
                update(iface, :state)
                update(iface, :proto_state)
        end
        context.readline_match_block(/Hardware .* address is (?<mac>.*) /)  do |block|
                update(iface, :mac)
        end
        context.readline_match_block(/Description: (?<description>.*)/) do |block|
                update(iface, :description)
        end
        context.readline_match_block(/Internet address is (?<addr>.*)/) do |block|
                update(iface, :addr)
        end
        context.readline_match_block(/Encapsulation (?<encapsulation>.*) Virtual LAN, Vlan ID (?<vlan_id>.*)/) do |block|
                update(iface, :encapsulation)
                update(iface, :vlan_id)
        end
end
switch_iface(context) click to toggle source
# File lib/modules/cmd/cisco/show_interfaces.rb, line 53
def switch_iface(context)
        case context[0]
        when Reg_Ethernet
                parse_eth(context)
        when Reg_Loopback
                parse_eth(context)
        when Reg_SubIface
                parse_subiface(context)
        end
end