compat: Added support for ib_core from kernel 4.8 on RHEL7.2
[~tnikolova/compat/.git] / include / net / addrconf.h
1 #ifndef LINUX_ADDRCONF_H
2 #define LINUX_ADDRCONF_H
3
4 #include "../../compat/config.h"
5
6 #include_next <net/addrconf.h>
7
8 #ifndef HAVE_ADDRCONF_IFID_EUI48
9 static inline int addrconf_ifid_eui48(u8 *eui, struct net_device *dev)
10 {
11         if (dev->addr_len != ETH_ALEN)
12                 return -1;
13         memcpy(eui, dev->dev_addr, 3);
14         memcpy(eui + 5, dev->dev_addr + 3, 3);
15
16         /*
17          * The zSeries OSA network cards can be shared among various
18          * OS instances, but the OSA cards have only one MAC address.
19          * This leads to duplicate address conflicts in conjunction
20          * with IPv6 if more than one instance uses the same card.
21          *
22          * The driver for these cards can deliver a unique 16-bit
23          * identifier for each instance sharing the same card.  It is
24          * placed instead of 0xFFFE in the interface identifier.  The
25          * "u" bit of the interface identifier is not inverted in this
26          * case.  Hence the resulting interface identifier has local
27          * scope according to RFC2373.
28          */
29         if (dev->dev_id) {
30                 eui[3] = (dev->dev_id >> 8) & 0xFF;
31                 eui[4] = dev->dev_id & 0xFF;
32         } else {
33                 eui[3] = 0xFF;
34                 eui[4] = 0xFE;
35                 eui[0] ^= 2;
36         }
37         return 0;
38 }
39 #endif
40
41 #endif /* LINUX_ADDRCONF_H */