Przeglądaj źródła

Added IPv6 interface IDs to the 'Format MAC address' operation

n1474335 7 lat temu
rodzic
commit
8cef6db482
2 zmienionych plików z 21 dodań i 1 usunięć
  1. 5 0
      src/core/config/OperationConfig.js
  2. 16 1
      src/core/operations/MAC.js

+ 5 - 0
src/core/config/OperationConfig.js

@@ -1825,6 +1825,11 @@ const OperationConfig = {
                 name: "Cisco style",
                 type: "boolean",
                 value: MAC.CISCO_STYLE
+            },
+            {
+                name: "IPv6 interface ID",
+                type: "boolean",
+                value: MAC.IPV6_INTERFACE_ID
             }
         ]
     },

+ 16 - 1
src/core/operations/MAC.js

@@ -34,6 +34,11 @@ const MAC = {
      * @default
      */
     CISCO_STYLE: false,
+    /**
+     * @constant
+     * @default
+     */
+    IPV6_INTERFACE_ID: false,
 
     /**
      * Format MAC addresses operation.
@@ -50,6 +55,7 @@ const MAC = {
             dashDelim = args[2],
             colonDelim = args[3],
             ciscoStyle = args[4],
+            ipv6IntID = args[5],
             outputList = [],
             macs = input.toLowerCase().split(/[,\s\r\n]+/);
 
@@ -57,23 +63,32 @@ const MAC = {
             let cleanMac = mac.replace(/[:.-]+/g, ""),
                 macHyphen = cleanMac.replace(/(.{2}(?=.))/g, "$1-"),
                 macColon = cleanMac.replace(/(.{2}(?=.))/g, "$1:"),
-                macCisco = cleanMac.replace(/(.{4}(?=.))/g, "$1.");
+                macCisco = cleanMac.replace(/(.{4}(?=.))/g, "$1."),
+                macIPv6 = cleanMac.slice(0, 6) + "fffe" + cleanMac.slice(6);
+
+            macIPv6 = macIPv6.replace(/(.{4}(?=.))/g, "$1:");
+            let bite = parseInt(macIPv6.slice(0, 2), 16) ^ 2;
+            bite = bite.toString(16).padStart(2, "0");
+            macIPv6 = bite + macIPv6.slice(2);
 
             if (outputCase === "Lower only") {
                 if (noDelim) outputList.push(cleanMac);
                 if (dashDelim) outputList.push(macHyphen);
                 if (colonDelim) outputList.push(macColon);
                 if (ciscoStyle) outputList.push(macCisco);
+                if (ipv6IntID) outputList.push(macIPv6);
             } else if (outputCase === "Upper only") {
                 if (noDelim) outputList.push(cleanMac.toUpperCase());
                 if (dashDelim) outputList.push(macHyphen.toUpperCase());
                 if (colonDelim) outputList.push(macColon.toUpperCase());
                 if (ciscoStyle) outputList.push(macCisco.toUpperCase());
+                if (ipv6IntID) outputList.push(macIPv6.toUpperCase());
             } else {
                 if (noDelim) outputList.push(cleanMac, cleanMac.toUpperCase());
                 if (dashDelim) outputList.push(macHyphen, macHyphen.toUpperCase());
                 if (colonDelim) outputList.push(macColon, macColon.toUpperCase());
                 if (ciscoStyle) outputList.push(macCisco, macCisco.toUpperCase());
+                if (ipv6IntID) outputList.push(macIPv6, macIPv6.toUpperCase());
             }
 
             outputList.push(