Rev 20 | Rev 22 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 20 | Rev 21 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | <?php |
1 | <?php |
2 | 2 | ||
3 | /* |
3 | /* |
4 | * MAC (EUI-48 and EUI-64) utils for PHP |
4 | * MAC (EUI-48 and EUI-64) utils for PHP |
5 | * Copyright 2017 - 2023 Daniel Marschall, ViaThinkSoft |
5 | * Copyright 2017 - 2023 Daniel Marschall, ViaThinkSoft |
6 | * Version 2023-05-03 |
6 | * Version 2023-05-04 |
7 | * |
7 | * |
8 | * Licensed under the Apache License, Version 2.0 (the "License"); |
8 | * Licensed under the Apache License, Version 2.0 (the "License"); |
9 | * you may not use this file except in compliance with the License. |
9 | * you may not use this file except in compliance with the License. |
10 | * You may obtain a copy of the License at |
10 | * You may obtain a copy of the License at |
11 | * |
11 | * |
Line 373... | Line 373... | ||
373 | * @param string $mac IPv6-Link-Local address, MAC, EUI, ELI, AAI, or SAI |
373 | * @param string $mac IPv6-Link-Local address, MAC, EUI, ELI, AAI, or SAI |
374 | * @return void |
374 | * @return void |
375 | * @throws Exception |
375 | * @throws Exception |
376 | */ |
376 | */ |
377 | function decode_mac(string $mac) { |
377 | function decode_mac(string $mac) { |
- | 378 | ||
- | 379 | // TODO: Should we decode Multicast MAC to its IP (see https://ipcisco.com/lesson/multicast-mac-addresses/)? |
|
- | 380 | // TODO: Is an ELI with M=1 a Multicast-ELI, or isn't it an ELI anymore? Same question for SAI and AAI |
|
- | 381 | ||
378 | echo sprintf("%-32s %s\n", "Input:", $mac); |
382 | echo sprintf("%-32s %s\n", "Input:", $mac); |
379 | 383 | ||
380 | // Format MAC for machine readability |
384 | // Format MAC for machine readability |
381 | $mac = mac_canonize($mac, ''); |
385 | $mac = mac_canonize($mac, ''); |
382 | 386 | ||
Line 840... | Line 844... | ||
840 | if (mac_between($mac, 'AB:00:00:05:00:00', 'AB:00:03:FF:FF:FF')) $app = 'Reserved DEC'; |
844 | if (mac_between($mac, 'AB:00:00:05:00:00', 'AB:00:03:FF:FF:FF')) $app = 'Reserved DEC'; |
841 | if (mac_equals($mac, 'AB:00:03:00:00:00')) $app = 'DEC Local Area Transport (LAT) - old, EtherType is 0x6004'; |
845 | if (mac_equals($mac, 'AB:00:03:00:00:00')) $app = 'DEC Local Area Transport (LAT) - old, EtherType is 0x6004'; |
842 | if (mac_between($mac, 'AB:00:04:00:00:00', 'AB:00:04:00:FF:FF')) $app = 'Reserved DEC customer private use'; |
846 | if (mac_between($mac, 'AB:00:04:00:00:00', 'AB:00:04:00:FF:FF')) $app = 'Reserved DEC customer private use'; |
843 | if (mac_between($mac, 'AB:00:04:01:00:00', 'AB:00:04:01:FF:FF')) $app = 'DEC Local Area VAX Cluster groups System Communication Architecture (SCA), EtherType is 0x6007'; |
847 | if (mac_between($mac, 'AB:00:04:01:00:00', 'AB:00:04:01:FF:FF')) $app = 'DEC Local Area VAX Cluster groups System Communication Architecture (SCA), EtherType is 0x6007'; |
844 | 848 | ||
- | 849 | // https://standards.ieee.org/products-programs/regauth/grpmac/public/ |
|
- | 850 | // TODO: Check for duplicates between these and the ones at the top |
|
- | 851 | // IEEE Std 802.1D and IEEE Std 802.1Q Reserved Addresses |
|
- | 852 | if (mac_equals($mac, '01-80-C2-00-00-00')) $app = 'IEEE Std 802.1Q / Bridge Group address, Nearest Customer Bridge group address'; |
|
- | 853 | if (mac_equals($mac, '01-80-C2-00-00-01')) $app = 'IEEE Std 802.1Q / IEEE MAC-specific Control Protocols group address'; |
|
- | 854 | if (mac_equals($mac, '01-80-C2-00-00-02')) $app = 'IEEE Std 802.1Q / IEEE 802.3 Slow_Protocols_Multicast address'; |
|
- | 855 | if (mac_equals($mac, '01-80-C2-00-00-03')) $app = 'IEEE Std 802.1Q / Nearest non-TPMR Bridge group address, IEEE Std 802.1X PAE address'; |
|
- | 856 | if (mac_equals($mac, '01-80-C2-00-00-04')) $app = 'IEEE Std 802.1Q / IEEE MAC-specific Control Protocols group address'; |
|
- | 857 | if (mac_equals($mac, '01-80-C2-00-00-05')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 858 | if (mac_equals($mac, '01-80-C2-00-00-06')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 859 | if (mac_equals($mac, '01-80-C2-00-00-07')) $app = 'IEEE Std 802.1Q / MEF Forum ELMI protocol group address'; |
|
- | 860 | if (mac_equals($mac, '01-80-C2-00-00-08')) $app = 'IEEE Std 802.1Q / Provider Bridge group address'; |
|
- | 861 | if (mac_equals($mac, '01-80-C2-00-00-09')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 862 | if (mac_equals($mac, '01-80-C2-00-00-0A')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 863 | if (mac_equals($mac, '01-80-C2-00-00-0B')) $app = 'IEEE Std 802.1Q / EDE-SS PEP Address'; |
|
- | 864 | if (mac_equals($mac, '01-80-C2-00-00-0C')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 865 | if (mac_equals($mac, '01-80-C2-00-00-0D')) $app = 'IEEE Std 802.1Q / Provider Bridge MVRP address'; |
|
- | 866 | if (mac_equals($mac, '01-80-C2-00-00-0E')) $app = 'IEEE Std 802.1Q / Individual LAN Scope group address, Nearest Bridge group address'; |
|
- | 867 | if (mac_equals($mac, '01-80-C2-00-00-0F')) $app = 'IEEE Std 802.1Q / Reserved for future standardization'; |
|
- | 868 | // Standard Group MAC Addresses |
|
- | 869 | if (mac_equals($mac, '01-80-C2-00-00-10')) $app = 'All LANs Bridge Management Group Address (deprecated)'; |
|
- | 870 | if (mac_equals($mac, '01-80-C2-00-00-11')) $app = 'Load Server Generic Address'; |
|
- | 871 | if (mac_equals($mac, '01-80-C2-00-00-12')) $app = 'Loadable Device Generic Address'; |
|
- | 872 | if (mac_equals($mac, '01-80-C2-00-00-13')) $app = 'Transmission of IEEE 1905.1 control packets'; |
|
- | 873 | if (mac_equals($mac, '01-80-C2-00-00-14')) $app = 'All Level 1 Intermediate Systems Address'; |
|
- | 874 | if (mac_equals($mac, '01-80-C2-00-00-15')) $app = 'All Level 2 Intermediate Systems Address'; |
|
- | 875 | if (mac_equals($mac, '01-80-C2-00-00-16')) $app = 'All CONS End Systems Address'; |
|
- | 876 | if (mac_equals($mac, '01-80-C2-00-00-17')) $app = 'All CONS SNARES Address'; |
|
- | 877 | if (mac_equals($mac, '01-80-C2-00-00-18')) $app = 'Generic Address for All Manager Stations'; |
|
- | 878 | if (mac_equals($mac, '01-80-C2-00-00-19')) $app = 'Groupcast with retries (GCR) MAC Group Address'; |
|
- | 879 | if (mac_equals($mac, '01-80-C2-00-00-1A')) $app = 'Generic Address for All Agent Stations'; |
|
- | 880 | if (mac_equals($mac, '01-80-C2-00-00-1B')) $app = 'All Multicast Capable End Systems Address'; |
|
- | 881 | if (mac_equals($mac, '01-80-C2-00-00-1C')) $app = 'All Multicast Announcements Address'; |
|
- | 882 | if (mac_equals($mac, '01-80-C2-00-00-1D')) $app = 'All Multicast Capable Intermediate Systems Address'; |
|
- | 883 | if (mac_equals($mac, '01-80-C2-00-00-1E')) $app = 'All DTR Concentrators MAC Group Address'; |
|
- | 884 | if (mac_equals($mac, '01-80-C2-00-00-1F')) $app = 'EDE-CC PEP Address'; |
|
- | 885 | if (mac_between($mac, '01-80-C2-00-00-20','01-80-C2-00-00-2F')) $app = 'Reserved for use by Multiple Registration Protocol (MRP) applications'; |
|
- | 886 | if (mac_between($mac, '01-80-C2-00-00-30','01-80-C2-00-00-3F')) $app = 'Destination group MAC addresses for CCM and Linktrace messages'; |
|
- | 887 | if (mac_between($mac, '01-80-C2-00-00-40','01-80-C2-00-00-4F')) $app = 'Group MAC addresses used by the TRILL protocols'; |
|
- | 888 | if (mac_between($mac, '01-80-C2-00-00-50','01-80-C2-00-00-FF')) $app = 'unassigned'; |
|
- | 889 | if (mac_equals($mac, '01-80-C2-00-01-00')) $app = 'Ring Management Directed Beacon Multicast Address'; |
|
- | 890 | if (mac_between($mac, '01-80-C2-00-01-01','01-80-C2-00-01-0F')) $app = 'Assigned to ISO/IEC JTC1/SC25 for future use'; |
|
- | 891 | if (mac_equals($mac, '01-80-C2-00-01-10')) $app = 'Status Report Frame Status Report Protocol Multicast Address'; |
|
- | 892 | if (mac_between($mac, '01-80-C2-00-01-11','01-80-C2-00-01-1F')) $app = 'Assigned to ISO/IEC JTC1/SC25 for future use'; |
|
- | 893 | if (mac_equals($mac, '01-80-C2-00-01-20')) $app = 'ISO/IEC 9314-2 All FDDI Concentrator MACs'; |
|
- | 894 | if (mac_between($mac, '01-80-C2-00-01-21','01-80-C2-00-01-2F')) $app = 'Assigned to ISO/IEC JTC1/SC25 for future use'; |
|
- | 895 | if (mac_equals($mac, '01-80-C2-00-01-30')) $app = 'ISO/IEC 9314-6 Synchronous Bandwidth Allocation Address'; |
|
- | 896 | if (mac_between($mac, '01-80-C2-00-01-31','01-80-C2-00-01-FF')) $app = 'Assigned to ISO/IEC JTC1/SC25 for future use'; |
|
- | 897 | if (mac_between($mac, '01-80-C2-00-02-00','01-80-C2-00-02-FF')) $app = 'Assigned to ETSI for future use'; |
|
- | 898 | if (mac_between($mac, '01-80-C2-00-03-00', '01-80-C2-FF-FF-FF')) $app = 'unassigned'; |
|
- | 899 | if (mac_equals($mac, '09-00-2B-00-00-04')) $app = 'ISO 9542 All End System Network Entities Address'; |
|
- | 900 | if (mac_equals($mac, '09-00-2B-00-00-05')) $app = 'ISO 9542 All Intermediate System Network Entities Address'; |
|
- | 901 | // Group MAC Addresses Used in ISO 9542 ES-IS Protocol |
|
- | 902 | if (mac_equals($mac, '09-00-2B-00-00-04')) $app = 'ISO 9542 All End System Network Entities Address'; |
|
- | 903 | if (mac_equals($mac, '09-00-2B-00-00-05')) $app = 'ISO 9542 All Intermediate System Network Entities Address'; |
|
- | 904 | // Locally Administered Group MAC Addresses Used by IEEE Std 802.5 (IEEE Std 802.5 Functional Addresses) |
|
- | 905 | if (mac_equals($mac, '03-00-00-00-00-08')) $app = 'Configuration Report Server (CRS) MAC Group Address'; |
|
- | 906 | if (mac_equals($mac, '03-00-00-00-00-10')) $app = 'Ring Error Monitor (REM) MAC Group Address'; |
|
- | 907 | if (mac_equals($mac, '03-00-00-00-00-40')) $app = 'Ring Parameter Server (RPS) MAC Group Address'; |
|
- | 908 | if (mac_equals($mac, '03-00-00-00-01-00')) $app = 'All Intermediate System Network Entities Address'; |
|
- | 909 | if (mac_equals($mac, '03-00-00-00-02-00')) $app = 'All End System Network Entities Address, and Lobe Media Test (LMT) MAC Group Address'; |
|
- | 910 | if (mac_equals($mac, '03-00-00-00-04-00')) $app = 'Generic Address for all Manager Stations'; |
|
- | 911 | if (mac_equals($mac, '03-00-00-00-08-00')) $app = 'All CONs SNARES Address'; |
|
- | 912 | if (mac_equals($mac, '03-00-00-00-10-00')) $app = 'All CONs End System Address'; |
|
- | 913 | if (mac_equals($mac, '03-00-00-00-20-00')) $app = 'Loadable Device Generic Address'; |
|
- | 914 | if (mac_equals($mac, '03-00-00-00-40-00')) $app = 'Load Server Generic Address'; |
|
- | 915 | if (mac_equals($mac, '03-00-00-40-00-00')) $app = 'Generic Address for all Agent Stations'; |
|
- | 916 | ||
845 | if ($app) { |
917 | if ($app) { |
846 | echo sprintf("%-32s %s\n", "Special use:", $app); |
918 | echo sprintf("%-32s %s\n", "Special use:", $app); |
847 | } |
919 | } |
848 | 920 | ||
849 | } |
921 | } |