]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: Introduce method to generate EUI-64 addresses
authorSusant Sahani <ssahani@vmware.com>
Thu, 27 Feb 2020 11:40:57 +0000 (12:40 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 29 Feb 2020 15:16:51 +0000 (00:16 +0900)
src/network/networkd-address.c
src/network/networkd-address.h

index 6244f75201d7ea754034aa3d4aa827eb287671c7..1567bd7ee9112b7db9d5c4e4f73514cc3d80da93 100644 (file)
 #define ADDRESSES_PER_LINK_MAX 2048U
 #define STATIC_ADDRESSES_PER_NETWORK_MAX 1024U
 
+int generate_ipv6_eui_64_address(Link *link, struct in6_addr *ret) {
+        assert(link);
+        assert(ret);
+
+        /* see RFC4291 section 2.5.1 */
+        ret->s6_addr[8]  = link->mac.ether_addr_octet[0];
+        ret->s6_addr[8] ^= 1 << 1;
+        ret->s6_addr[9]  = link->mac.ether_addr_octet[1];
+        ret->s6_addr[10] = link->mac.ether_addr_octet[2];
+        ret->s6_addr[11] = 0xff;
+        ret->s6_addr[12] = 0xfe;
+        ret->s6_addr[13] = link->mac.ether_addr_octet[3];
+        ret->s6_addr[14] = link->mac.ether_addr_octet[4];
+        ret->s6_addr[15] = link->mac.ether_addr_octet[5];
+
+        return 0;
+}
+
 int address_new(Address **ret) {
         _cleanup_(address_freep) Address *address = NULL;
 
index ad2412c75aac673365f2bcdeea012bc142ed374b..bd0485e0abee59f54e197a33d050398b13116f8c 100644 (file)
@@ -66,6 +66,8 @@ bool address_is_ready(const Address *a);
 int address_section_verify(Address *a);
 int configure_ipv4_duplicate_address_detection(Link *link, Address *address);
 
+int generate_ipv6_eui_64_address(Link *link, struct in6_addr *ret);
+
 DEFINE_NETWORK_SECTION_FUNCTIONS(Address, address_free);
 
 extern const struct hash_ops address_hash_ops;