bin/pvl.hosts-lldp
author Tero Marttila <terom@paivola.fi>
Mon, 17 Mar 2014 17:31:45 +0200
changeset 384 caa3dbbdbe83
parent 382 ba47a64f61f9
child 386 9e1abcf47d27
permissions -rw-r--r--
split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
380
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
"""
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
    Requirements:
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
        pysnmp
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
        pysnmp-mibs
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
        memoized-property
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
    Setup:
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
        ./opt/bin/build-pysnmp-mib -o usr/mibs/LLDP-MIB.py etc/mibs/LLDP-MIB
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
    Run:
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
        PYSNMP_MIB_DIRS=usr/mibs/ ./opt/bin/python ...
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
"""
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
import pvl.args
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
import pvl.hosts
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    18
from pvl.invoke import merge
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    19
from pvl.snmp import snmp, lldp
380
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    21
import logging; log = logging.getLogger('pvl.hosts-lldp')
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    22
import optparse
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    23
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    24
def hosts_lldp (options, hosts) :
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    25
    """
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    26
        Discover LLDP-supporting hosts.
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    27
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    28
        Yields Host, LLDPAgent
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    29
    """
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    30
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    31
    for host in hosts :
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    32
        host_snmp = host.extensions.get('snmp')
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    33
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    34
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    35
        if not host_snmp :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    36
            log.debug("%s: skip non-snmp host", host)
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    37
            continue
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    38
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    39
        elif host.down :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    40
            log.debug("%s: skip down host", host)
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    41
            continue
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    42
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    43
        else :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    44
            log.debug("%s: %s", host, host_snmp)
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    45
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    46
        agent = lldp.LLDPAgent.apply(options, host.fqdn(), community=host_snmp.get('community'))
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    47
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    48
        try :
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    49
            local = agent.local
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    50
        except snmp.SNMPError as ex :
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    51
            log.warning("%s: %s", host, ex)
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    52
            continue
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    53
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    54
        log.info("%s: %s", host, local)
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    55
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    56
        if local['sys_name'] != host.host :
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    57
            log.warning("%s: SNMP sys_name mismatch: %s", host, local['sys_name'])
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    58
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    59
        yield host, agent
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    60
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    61
def apply_hosts_lldp (options, hosts) :
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    62
    """
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    63
        Query host LLDP info.
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    64
    """
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    65
    
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    66
    _hosts_lldp = list(hosts_lldp(options, hosts))
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    67
    hosts_by_chassis = { }
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    68
    
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    69
    # first pass to discover hosts
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    70
    for host, agent in _hosts_lldp :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    71
        chassis = agent.local['chassis']
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    72
        log.info("%s: %s", host, chassis)
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    73
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    74
        hosts_by_chassis[chassis] = host
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    75
    
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    76
    # second pass to discver links
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    77
    for host, agent in _hosts_lldp :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    78
        for port, remote in agent.remotes() :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    79
            port = agent.port(port)
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    80
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    81
            remote_chassis = remote['chassis']
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    82
            remote_host = hosts_by_chassis.get(remote_chassis)
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    83
            
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    84
            log.info("%s: %s: %s (%s)", host, port, remote, remote_host)
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    85
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    86
            yield host, merge(agent.local, port), remote, remote_host
380
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
def main (argv) :
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    """
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
        SNMP polling.
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    """
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    parser = optparse.OptionParser(main.__doc__)
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
    parser.add_option_group(pvl.args.parser(parser))
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
    95
    parser.add_option_group(pvl.hosts.optparser(parser))
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
    96
    parser.add_option_group(pvl.snmp.snmp.options(parser))
380
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
    options, args = parser.parse_args(argv[1:])
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
    pvl.args.apply(options)
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
    # input
382
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
   103
    hosts = pvl.hosts.apply(options, args)
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
   104
    
ba47a64f61f9 pvl.hosts-lldp: refactor lldp collection schema
Tero Marttila <terom@paivola.fi>
parents: 380
diff changeset
   105
    # apply
384
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
   106
    for host, local, remote, remote_host in apply_hosts_lldp(options, hosts) :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
   107
        if remote_host :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
   108
            print "{host:30} {local[port]:25} <-> {remote[port]:25} {remote_host:30}".format(host=host, local=local, remote=remote, remote_host=remote_host)
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
   109
        else :
caa3dbbdbe83 split upt pvl.hosts-lldp into pvl.snmp.snmp and pvl.snmp.lldp, match remote hosts, better formatting
Tero Marttila <terom@paivola.fi>
parents: 382
diff changeset
   110
            print "{host:30} {local[port]:25} <-- {remote[port]:25} # {remote[chassis]} ({remote[sys_name]})".format(host=host, local=local, remote=remote)
380
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   111
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   112
if __name__ == '__main__':
78f192fe9e2c pvl.hosts-lldp: snmp-based lldp discovery of connected switches
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   113
    pvl.args.main(main)