ipv6: Optimize ipv6_addr_is_ll_all_{nodes,routers}().
Subsystems (3)
PATCH 4/5 ipv6: Optimize ipv6_addr_is_ll_all_{nodes,routers}().
Signed-off-by YOSHIFUJI Hideaki <[email protected]>
--- include/net/addrconf.h | 10 ++++++++++ 1 file changed, 10 insertions(+)
include/net/addrconf.h +10 -0
@@ -288,16 +288,26 @@ static inline bool ipv6_addr_is_multicast(const struct in6_addr *addr)static inline bool ipv6_addr_is_ll_all_nodes (const struct in6_addr *addr) { +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ) &&BITS_PER_LONG ==64 +__u64 *p = (__u64 *)addr; +return ((p[0 ] ^cpu_to_be64 (0xff02000000000000UL )) | (p[1 ] ^cpu_to_be64 (1 ))) ==0UL ; +#else return ((addr->s6_addr32[0 ] ^htonl (0xff020000 )) | addr->s6_addr32[1 ] | addr->s6_addr32[2 ] | (addr->s6_addr32[3 ] ^htonl (0x00000001 ))) ==0 ; +#endif }static inline bool ipv6_addr_is_ll_all_routers (const struct in6_addr *addr) { +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS ) &&BITS_PER_LONG ==64 +__u64 *p = (__u64 *)addr; +return ((p[0 ] ^cpu_to_be64 (0xff02000000000000UL )) | (p[1 ] ^cpu_to_be64 (2 ))) ==0UL ; +#else return ((addr->s6_addr32[0 ] ^htonl (0xff020000 )) | addr->s6_addr32[1 ] | addr->s6_addr32[2 ] | (addr->s6_addr32[3 ] ^htonl (0x00000002 ))) ==0 ; +#endif }static inline bool ipv6_addr_is_isatap (const struct in6_addr *addr)
Signature · 1 line
1.7.9.5