Index: /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.h
===================================================================
--- /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.h	(revision 8828)
+++ /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.h	(working copy)
@@ -302,4 +302,8 @@
 int switch_map_rebuild(const char* vname);
 int switch_map_create(const switch_conf_t switch_conf, const char* vname);
 int switch_map_display();
+
+void mac_to_eui64(const unsigned char *mac, unsigned char *eui64);
+int get_mac_address(const char *iface, unsigned char *mac);
+int is_slaac_ipv6_address(const char *iface, const char *ip_addr);
 #endif
Index: /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.c
===================================================================
--- /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.c	(revision 8828)
+++ /branches/rel_avx_2_7_2/src/library/avxnet/avxnet.c	(working copy)
@@ -129,6 +129,9 @@
                     else {
                         finished = 1;
                     }
+                } 
+                else if (is_slaac_ipv6_address(dev, ip)) {
+                    continue;
                 }
                 else {
                     finished = 1;
@@ -1585,3 +1588,53 @@
     return ret;
 }
 
+void mac_to_eui64(const unsigned char *mac, unsigned char *eui64) {
+    eui64[0] = mac[0] ^ 0x02; // Invert the 7th bit
+    eui64[1] = mac[1];
+    eui64[2] = mac[2];
+    eui64[3] = 0xFF;
+    eui64[4] = 0xFE;
+    eui64[5] = mac[3];
+    eui64[6] = mac[4];
+    eui64[7] = mac[5];
+}
+
+int get_mac_address(const char *iface, unsigned char *mac) {
+    struct ifreq ifr;
+
+    int fd = socket(AF_INET, SOCK_DGRAM, 0);
+    if (fd == -1) {
+        return -1;
+    }
+
+    strncpy(ifr.ifr_name, iface, IFNAMSIZ);
+    if (ioctl(fd, SIOCGIFHWADDR, &ifr) == -1) {
+        close(fd);
+        return -1;
+    }
+
+    close(fd);
+    memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
+    return 0;
+}
+
+int is_slaac_ipv6_address(const char *iface, const char *ip_addr) {
+    struct in6_addr addr;
+    unsigned char eui64[8];
+    unsigned char mac[6];
+
+    if (inet_pton(AF_INET6, ip_addr, &addr) != 1) {
+        // Invalid IPv6 address
+        return 0;
+    }
+
+    if (get_mac_address(iface, mac) == -1) {
+        // Unable to get MAC address
+        return 0;
+    }
+
+    mac_to_eui64(mac, eui64);
+
+    // Compare the interface identifier part of the IPv6 address with the EUI-64
+    return memcmp(&addr.s6_addr[8], eui64, 8) == 0;
+}
