glpi-project / glpi

GLPI is a Free Asset and IT Management Software package, Data center management, ITIL Service Desk, licenses tracking and software auditing.
https://glpi-project.org
GNU General Public License v3.0
3.99k stars 1.25k forks source link

Aggregated switch ports are not imported correctly #17205

Open blackbasket opened 1 month ago

blackbasket commented 1 month ago

Code of Conduct

Is there an existing issue for this?

Version

10.0.14

Bug description

Hi...

I try to inventory HP switches using Network Inventory with GLPI agent 1.8. After the help of @g-bougard I was able to import the inventoried ports... But the aggregated ports are imported as "NetworkPortEthernet" an not as "aggregated ports"... therefore I cannot assign the physical ports to the aggregated one...

reference: https://github.com/glpi-project/glpi-agent/issues/683

xml sample:

          <AGGREGATE>
            <PORT>13</PORT>
            <PORT>14</PORT>
          </AGGREGATE>
          <IFDESCR>Trk2</IFDESCR>
          <IFINERRORS>11491</IFINERRORS>
          <IFINOCTETS>3470389977</IFINOCTETS>
          <IFINTERNALSTATUS>1</IFINTERNALSTATUS>
          <IFLASTCHANGE>231 days, 13:32:14.60</IFLASTCHANGE>
          <IFMTU>1500</IFMTU>
          <IFNAME>Trk2</IFNAME>
          <IFNUMBER>50</IFNUMBER>
          <IFOUTERRORS>0</IFOUTERRORS>
          <IFOUTOCTETS>2228991958</IFOUTOCTETS>
          <IFSPEED>20000000</IFSPEED>
          <IFSTATUS>1</IFSTATUS>
          <IFTYPE>161</IFTYPE>
          <MAC>b4:39:d6:8b:5c:00</MAC>
          <VLANS>
            <VLAN>
              <NAME>Server</NAME>
              <NUMBER>150</NUMBER>
              <TAGGED>0</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>Lebensnah</NAME>
              <NUMBER>160</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>DMZ</NAME>
              <NUMBER>333</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
            <VLAN>
              <NAME>Videoueberwa</NAME>
              <NUMBER>777</NUMBER>
              <TAGGED>1</TAGGED>
            </VLAN>
          </VLANS>
        </PORT>

network port types: image

switch network ports: image

If I can provide any more helpful information, please let me know...

Regards, Marcel

Relevant log output

No response

Page URL

No response

Steps To reproduce

No response

Your GLPI setup information

Information about system installation & configuration
GLPI 10.0.14 ( => /var/www/glpi)
Installation mode: TARBALL
Current language:en_US

Server
 
Operating system: Linux glpi01 6.1.0-21-amd64 #​1 SMP PREEMPT_DYNAMIC Debian 6.1.90-1 (2024-05-03) x86_64
PHP 8.2.18 apache2handler (Core, FFI, PDO, Phar, Reflection, SPL, SimpleXML, Zend OPcache, apache2handler, bz2, calendar, ctype,
    curl, date, dom, exif, fileinfo, filter, ftp, gd, gettext, hash, iconv, intl, json, ldap, libxml, mbstring, mysqli, mysqlnd,
    openssl, pcre, pdo_mysql, posix, random, readline, session, shmop, soap, sockets, sodium, standard, sysvmsg, sysvsem, sysvshm,
    tokenizer, xml, xmlreader, xmlwriter, xsl, zip, zlib)
Setup: max_execution_time="500" memory_limit="512M" post_max_size="8M" safe_mode="" session.save_handler="files"
    upload_max_filesize="16M" disable_functions="" 
Software: Apache/2.4.59 (Debian) (Apache/2.4.59 (Debian) Server at glpi01 Port 80
)
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0
Server Software: Debian 12
    Server Version: 10.11.6-MariaDB-0+deb12u1
    Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Parameters: glpi@localhost/glpidb
    Host info: Localhost via UNIX socket

PHP version (8.2.18) is supported.
Sessions configuration is OK.
Allocated memory is sufficient.
mysqli extension is installed.
Following extensions are installed: dom, fileinfo, filter, libxml, json, simplexml, xmlreader, xmlwriter.
curl extension is installed.
gd extension is installed.
intl extension is installed.
zlib extension is installed.
The constant SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.
Database engine version (10.11.6) is supported.
No files from previous GLPI version detected.
The log file has been created successfully.
Write access to /var/www/glpi/files/_cache has been validated.
Write access to /var/www/glpi/files/_cron has been validated.
Write access to /var/www/glpi/files has been validated.
Write access to /var/www/glpi/files/_dumps has been validated.
Write access to /var/www/glpi/files/_graphs has been validated.
Write access to /var/www/glpi/files/_lock has been validated.
Write access to /var/www/glpi/files/_pictures has been validated.
Write access to /var/www/glpi/files/_plugins has been validated.
Write access to /var/www/glpi/files/_rss has been validated.
Write access to /var/www/glpi/files/_sessions has been validated.
Write access to /var/www/glpi/files/_tmp has been validated.
Write access to /var/www/glpi/files/_uploads has been validated.

Web server root directory configuration seems safe.
Sessions configuration is secured.
OS and PHP are relying on 64 bits integers.
exif extension is installed.
ldap extension is installed.
openssl extension is installed.
Following extensions are installed: bz2, Phar, zip.
Zend OPcache extension is installed.
Following extensions are installed: ctype, iconv, mbstring, sodium.
Write access to /var/www/glpi/marketplace has been validated.
Timezones seems loaded in database.

GLPI constants
 
GLPI_ROOT: "/var/www/glpi"
GLPI_CONFIG_DIR: "/var/www/glpi/config"
GLPI_VAR_DIR: "/var/www/glpi/files"
GLPI_MARKETPLACE_DIR: "/var/www/glpi/marketplace"
GLPI_USE_CSRF_CHECK: "1"
GLPI_CSRF_EXPIRES: "7200"
GLPI_CSRF_MAX_TOKENS: "100"
GLPI_USE_IDOR_CHECK: "1"
GLPI_IDOR_EXPIRES: "7200"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["/^(https?|feed):\\/\\/[^@:]+(\\/.*)?$/"]
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "glpi@teclib.com"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
GLPI_USER_AGENT_EXTRA_COMMENTS: ""
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_DEMO_MODE: "0"
GLPI_CENTRAL_WARNINGS: "1"
GLPI_TEXT_MAXSIZE: "4000"
GLPI_DOC_DIR: "/var/www/glpi/files"
GLPI_CACHE_DIR: "/var/www/glpi/files/_cache"
GLPI_CRON_DIR: "/var/www/glpi/files/_cron"
GLPI_DUMP_DIR: "/var/www/glpi/files/_dumps"
GLPI_GRAPH_DIR: "/var/www/glpi/files/_graphs"
GLPI_LOCAL_I18N_DIR: "/var/www/glpi/files/_locales"
GLPI_LOCK_DIR: "/var/www/glpi/files/_lock"
GLPI_LOG_DIR: "/var/www/glpi/files/_log"
GLPI_PICTURE_DIR: "/var/www/glpi/files/_pictures"
GLPI_PLUGIN_DOC_DIR: "/var/www/glpi/files/_plugins"
GLPI_RSS_DIR: "/var/www/glpi/files/_rss"
GLPI_SESSION_DIR: "/var/www/glpi/files/_sessions"
GLPI_TMP_DIR: "/var/www/glpi/files/_tmp"
GLPI_UPLOAD_DIR: "/var/www/glpi/files/_uploads"
GLPI_INVENTORY_DIR: "/var/www/glpi/files/_inventories"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
GLPI_I18N_DIR: "/var/www/glpi/locales"
GLPI_VERSION: "10.0.14"
GLPI_SCHEMA_VERSION: "10.0.14@8f13530f7cf0fb07add30ae20013f0374956795b"
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MIN_PHP: "7.4.0"
GLPI_MAX_PHP: "8.4.0"
GLPI_YEAR: "2024"

Libraries
 
htmlawed/htmlawed version 1.2.14 in (/var/www/glpi/vendor/htmlawed/htmlawed)
phpmailer/phpmailer version 6.8.0 in (/var/www/glpi/vendor/phpmailer/phpmailer/src)
simplepie/simplepie version 1.5.8 in (/var/www/glpi/vendor/simplepie/simplepie/library)
tecnickcom/tcpdf version 6.4.4 in (/var/www/glpi/marketplace/pdf/vendor/tecnickcom/tcpdf)
michelf/php-markdown in (/var/www/glpi/vendor/michelf/php-markdown/Michelf)
true/punycode in (/var/www/glpi/vendor/true/punycode/src)
iamcal/lib_autolink in (/var/www/glpi/vendor/iamcal/lib_autolink)
sabre/dav in (/var/www/glpi/vendor/sabre/dav/lib/DAV)
sabre/http in (/var/www/glpi/vendor/sabre/http/lib)
sabre/uri in (/var/www/glpi/vendor/sabre/uri/lib)
sabre/vobject in (/var/www/glpi/vendor/sabre/vobject/lib)
laminas/laminas-i18n in (/var/www/glpi/vendor/laminas/laminas-i18n/src)
laminas/laminas-servicemanager in (/var/www/glpi/vendor/laminas/laminas-servicemanager/src)
monolog/monolog in (/var/www/glpi/vendor/monolog/monolog/src/Monolog)
sebastian/diff in (/var/www/glpi/vendor/sebastian/diff/src)
donatj/phpuseragentparser in (/var/www/glpi/vendor/donatj/phpuseragentparser/src/UserAgent)
elvanto/litemoji in (/var/www/glpi/vendor/elvanto/litemoji/src)
symfony/console in (/var/www/glpi/vendor/symfony/console)
scssphp/scssphp in (/var/www/glpi/vendor/scssphp/scssphp/src)
laminas/laminas-mail in (/var/www/glpi/vendor/laminas/laminas-mail/src/Protocol)
laminas/laminas-mime in (/var/www/glpi/vendor/laminas/laminas-mime/src)
rlanvin/php-rrule in (/var/www/glpi/vendor/rlanvin/php-rrule/src)
ramsey/uuid in (/var/www/glpi/vendor/ramsey/uuid/src)
psr/log in (/var/www/glpi/vendor/psr/log/Psr/Log)
psr/simple-cache in (/var/www/glpi/vendor/psr/simple-cache/src)
psr/cache in (/var/www/glpi/vendor/psr/cache/src)
league/csv in (/var/www/glpi/vendor/league/csv/src)
mexitek/phpcolors in (/var/www/glpi/vendor/mexitek/phpcolors/src/Mexitek/PHPColors)
guzzlehttp/guzzle in (/var/www/glpi/vendor/guzzlehttp/guzzle/src)
guzzlehttp/psr7 in (/var/www/glpi/vendor/guzzlehttp/psr7/src)
glpi-project/inventory_format in (/var/www/glpi/vendor/glpi-project/inventory_format/lib/php)
wapmorgan/unified-archive in (/var/www/glpi/vendor/wapmorgan/unified-archive/src)
paragonie/sodium_compat in (/var/www/glpi/vendor/paragonie/sodium_compat/src)
symfony/cache in (/var/www/glpi/vendor/symfony/cache)
html2text/html2text in (/var/www/glpi/vendor/html2text/html2text/src)
symfony/css-selector in (/var/www/glpi/vendor/symfony/css-selector)
symfony/dom-crawler in (/var/www/glpi/vendor/symfony/dom-crawler)
twig/twig in (/var/www/glpi/vendor/twig/twig/src)
twig/string-extra in (/var/www/glpi/vendor/twig/string-extra)
symfony/polyfill-ctype not found
symfony/polyfill-iconv not found
symfony/polyfill-mbstring not found
symfony/polyfill-php80 not found
symfony/polyfill-php81 not found
symfony/polyfill-php82 in (/var/www/glpi/vendor/symfony/polyfill-php82)
league/oauth2-client in (/var/www/glpi/vendor/league/oauth2-client/src/Provider)
league/oauth2-google in (/var/www/glpi/vendor/league/oauth2-google/src/Provider)
thenetworg/oauth2-azure in (/var/www/glpi/vendor/thenetworg/oauth2-azure/src/Provider)

SQL replicas
 
Not active

Notifications
 
Way of sending emails: PHP

Plugins list
 
    archisw              Name: Apps structures                Version: 3.0.18     State: Enabled                                 
        Install Method: Marketplace
    barcode              Name: Barcode                        Version: 2.7.1      State: Installed / not activated               
        Install Method: Marketplace
    archibp              Name: Business Processes             Version: 2.0.8      State: Installed / not activated               
        Install Method: Marketplace
    cmdb                 Name: CMDB                           Version: 3.0.3      State: Installed / not activated               
        Install Method: Marketplace
    connections          Name: Connections                    Version: 10.0.0     State: Enabled                                 
        Install Method: Marketplace
    archidata            Name: Data structures                Version: 1.0.14     State: Enabled                                 
        Install Method: Marketplace
    databaseinventory    Name: Database Inventory             Version: 1.0.0      State: Installed / not activated               
        Install Method: Marketplace
    dataflows            Name: Dataflows                      Version: 3.0.9      State: Installed / not activated               
        Install Method: Marketplace
    manageentities       Name: Entities portal                Version: 4.0.3      State: Not installed                           
        Install Method: Marketplace
    glpiinventory        Name: GLPI Inventory                 Version: 1.3.5      State: Enabled                                 
        Install Method: Marketplace
    geninventorynumber   Name: Inventarnummern generieren     Version: 2.8.4      State: To update                               
        Install Method: Marketplace
    addressing           Name: IP Adressierung                Version: 3.0.2      State: Enabled                                 
        Install Method: Marketplace
    uninstall            Name: Item's Lifecycle (uninstall)   Version: 2.9.1      State: Enabled                                 
        Install Method: Marketplace
    accounts             Name: Konten                         Version: 3.0.4      State: Enabled                                 
        Install Method: Marketplace
    pdf                  Name: PDF-Ausgabe                    Version: 3.0.0      State: Enabled                                 
        Install Method: Marketplace
    badges               Name: Plaketten                      Version: 3.0.0      State: Enabled                                 
        Install Method: Marketplace
    statecheck           Name: Statecheck Rules               Version: 2.4.3      State: Enabled                                 
        Install Method: Marketplace
    treeview             Name: Treeview                       Version: 1.10.2     State: Enabled                                 
        Install Method: Marketplace
    typology             Name: Typologien                     Version: 3.0.0      State: Installed / not activated               
        Install Method: Marketplace
    webhook              Name: Webhooks                       Version: 1.0.18     State: Enabled                                 
        Install Method: Marketplace

Anything else?

No response

blackbasket commented 1 month ago

If I update the instantation_type in DB it looks good. Unfortunately only until the next inventory...

In some way it is recognized as aggregated port. In the DB the "source ports" are connected correctly. They are just not shown in WebUI because of the wrong overwritten instantation type...

stonebuzz commented 4 weeks ago

HI @blackbasket

improvements have been made to the management of instantiation types in the main branch.

https://github.com/glpi-project/glpi/pull/16563

I don't know if this will solve your problem, but can you test with this version (on a test environment)?

https://nightly.glpi-project.org/glpi/ (choose main version)

cedric-anne commented 4 weeks ago

@stonebuzz The PR your are mentioning seems to be already present in GLPI 10.0.13.

stonebuzz commented 4 weeks ago

yes, you're right (sorry) can you provide us with the inventory file for local testing?

blackbasket commented 4 weeks ago

Hi @stonebuzz

I only have access through iOS app for now... you may find the xml here: https://github.com/glpi-project/glpi-agent/issues/683#issuecomment-2136700618

stonebuzz commented 4 weeks ago

After authorizing port import with iftype = 161 (1)

Have you defined the instantiation type? (2)

image

If I set it to NetworkPortAggregate

Import works correctly

image

blackbasket commented 4 weeks ago

That's what I did... as said previously, I can find the ports in the DB as aggregated ports including the hardware ports... if I change the "Ethernet" port to aggregate in the DB, all is right until next inventory... it gets overwritten then...

image image

stonebuzz commented 4 weeks ago

jsut go here

image

then search network port type with decimal = 161

image

update it to set instantiation type to NetworkPortAggregate (be sure import is set to Yes)

image

Then run an inventory and network port will by updated

blackbasket commented 4 weeks ago

But that is what I have done already... sorry, the screenshots came some minutes later...

stonebuzz commented 4 weeks ago

changes made in the database may have altered the data

NetworkPortaggregate INSTANTIATION type will fill another table

Can you delete / purge the equipment and then run inventory again?

blackbasket commented 4 weeks ago

Can you delete / purge the equipment and then run inventory again?

I will try...

but the ports were not added before I activated the port type in discussion... and I set Aggregation Port the same time...

GuidoWilden commented 4 weeks ago

We see the following in GLPI 10.0.15 (there is an LACP configured Linux machine connected on port-channel47 and an LACP configured Windows machine connected on port-channel46). The connections are split over two identical switches.

But we also appear to be missing a column or am I missing something?

Switch 1

Screenshot 2024-06-07 at 17 41 03

Switch 2

Screenshot 2024-06-07 at 18 11 06
blackbasket commented 4 weeks ago

@stonebuzz

Deleting the device did not help... IDs of the Ports are new, but Port types remain wrong... image

@GuidoWilden

The column network port types is missing... you may add it using the tools icon next to network ports on the top of the list...

GuidoWilden commented 4 weeks ago

Thank you @blackbasket, could add that column successfully.

@stonebuzz @cedric-anne let us know if there is anything else we can provide.

blackbasket commented 3 weeks ago

hi @stonebuzz @cedric-anne

just to make it more clear... if I look into the database, the port is defined as instantation_type = NetworkPortEthernet but in the aggregates-table it is defnied as aggregate with the corresponding ports...

MariaDB [glpidb]> select * from glpi_networkports where id=1699;
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
| id   | items_id | itemtype         | entities_id | is_recursive | logical_number | name | instantiation_type  | mac               | comment | is_deleted | is_dynamic | date_mod            | date_creation       | ifmtu | ifspeed    | ifinternalstatus |
ifconnectionstatus | iflastchange          | ifinbytes  | ifinerrors | ifoutbytes | ifouterrors | ifstatus | ifdescr | ifalias | portduplex | trunk | lastup |
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
| 1699 |       46 | NetworkEquipment |           5 |            0 |             53 | Trk5 | NetworkPortEthernet | b4:39:d6:8b:5c:00 | NULL    |          0 |          1 | 2024-06-10 02:52:03 | 2024-06-06 16:58:22 |  1500 | 2000000000 | 1                |
                 0 | 266 days, 04:57:23.62 | 2274672300 |          2 | 2695243352 |           0 | 1        | Trk5    | NULL    | NULL       |     0 | NULL   |
+------+----------+------------------+-------------+--------------+----------------+------+---------------------+-------------------+---------+------------+------------+---------------------+---------------------+-------+------------+------------------+--------------------+-----------------------+------------+------------+------------+-------------+----------+---------+---------+------------+-------+--------+
1 row in set (0.000 sec)

MariaDB [glpidb]> select * from glpi_networkportaggregates;
+----+-----------------+----------------------+---------------------+---------------------+
| id | networkports_id | networkports_id_list | date_mod            | date_creation       |
+----+-----------------+----------------------+---------------------+---------------------+
| 13 |            1664 | [1651,1652]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 14 |            1665 | [1649,1650]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 15 |            1666 | [1653,1654]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
| 16 |            1699 | [1646,1645]          | 2024-06-06 16:58:22 | 2024-06-06 16:58:22 |
+----+-----------------+----------------------+---------------------+---------------------+
4 rows in set (0.000 sec)

only trunk 4 is missing completly... because of this (I think) the ports 7 and 8 are not even marked as part of an aggregated port... grafik

GuidoWilden commented 3 weeks ago

@stonebuzz @cedric-anne any news on this subject? Is there anything else we can provide to help narrow this down?

blackbasket commented 2 weeks ago

I did the import using the xml file now. This worked also for me. So, it must have to do with the import function...

GuidoWilden commented 2 weeks ago

Wait, so you generated the xml on command line and then imported via Inventory > Import from file?

blackbasket commented 2 weeks ago

exactly... but I realize that something is wrong anyway... now all Ports are connected to the same "virtual hub"... that was right before... of course not all devices are connected to all trunks ;)

grafik

blackbasket commented 2 weeks ago

well, everything it might be the result of the update to 10.0.15 thsi morning... if I run the tasks now, everything is correct... ports are shown as aggregates and "hubs" are correct as well... maybe @cedric-anne had a point and it just was not merged in 10.0.13 and 10.0.14...

remains the question, how to handle the hubs... maybe not a question for the ticket, but I just ask... for every port with mininum two connected item (i.e. MAC addresses or devices with management and ethernet port) a "hub" is created in unmanaged devices... furthermore a "hub link" without any information but the connected trunk itself is created as network port... how should I understand this and work with it? maybe I am just stupid, but I do not understand...

GuidoWilden commented 2 weeks ago

I have very much the same issue. Everything that is not a standard network port gets thrown into a bit of a mess in the interface. Saying that, I would not know how to do this either but it seems to me that there need to be more varied definitions of possible network configurations (LACP etc.) that are then also being displayed as such in the GUI. I know this should be a feature request rather than an issue but I have never figured out how to set this in GitHub.