Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 : /* 3 : * INET An implementation of the TCP/IP protocol suite for the LINUX 4 : * operating system. INET is implemented using the BSD Socket 5 : * interface as the means of communication with the user level. 6 : * 7 : * Definitions of the Internet Protocol. 8 : * 9 : * Version: @(#)in.h 1.0.1 04/21/93 10 : * 11 : * Authors: Original taken from the GNU Project <netinet/in.h> file. 12 : * Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> 13 : */ 14 : #ifndef _LINUX_IN_H 15 : #define _LINUX_IN_H 16 : 17 : 18 : #include <linux/errno.h> 19 : #include <uapi/linux/in.h> 20 : 21 0 : static inline int proto_ports_offset(int proto) 22 : { 23 0 : switch (proto) { 24 : case IPPROTO_TCP: 25 : case IPPROTO_UDP: 26 : case IPPROTO_DCCP: 27 : case IPPROTO_ESP: /* SPI */ 28 : case IPPROTO_SCTP: 29 : case IPPROTO_UDPLITE: 30 : return 0; 31 0 : case IPPROTO_AH: /* SPI */ 32 0 : return 4; 33 0 : default: 34 0 : return -EINVAL; 35 : } 36 : } 37 : 38 135 : static inline bool ipv4_is_loopback(__be32 addr) 39 : { 40 113 : return (addr & htonl(0xff000000)) == htonl(0x7f000000); 41 : } 42 : 43 250 : static inline bool ipv4_is_multicast(__be32 addr) 44 : { 45 250 : return (addr & htonl(0xf0000000)) == htonl(0xe0000000); 46 : } 47 : 48 0 : static inline bool ipv4_is_local_multicast(__be32 addr) 49 : { 50 0 : return (addr & htonl(0xffffff00)) == htonl(0xe0000000); 51 : } 52 : 53 197 : static inline bool ipv4_is_lbcast(__be32 addr) 54 : { 55 : /* limited broadcast */ 56 173 : return addr == htonl(INADDR_BROADCAST); 57 : } 58 : 59 : static inline bool ipv4_is_all_snoopers(__be32 addr) 60 : { 61 : return addr == htonl(INADDR_ALLSNOOPERS_GROUP); 62 : } 63 : 64 176 : static inline bool ipv4_is_zeronet(__be32 addr) 65 : { 66 154 : return (addr == 0); 67 : } 68 : 69 : /* Special-Use IPv4 Addresses (RFC3330) */ 70 : 71 : static inline bool ipv4_is_private_10(__be32 addr) 72 : { 73 : return (addr & htonl(0xff000000)) == htonl(0x0a000000); 74 : } 75 : 76 : static inline bool ipv4_is_private_172(__be32 addr) 77 : { 78 : return (addr & htonl(0xfff00000)) == htonl(0xac100000); 79 : } 80 : 81 : static inline bool ipv4_is_private_192(__be32 addr) 82 : { 83 : return (addr & htonl(0xffff0000)) == htonl(0xc0a80000); 84 : } 85 : 86 : static inline bool ipv4_is_linklocal_169(__be32 addr) 87 : { 88 : return (addr & htonl(0xffff0000)) == htonl(0xa9fe0000); 89 : } 90 : 91 : static inline bool ipv4_is_anycast_6to4(__be32 addr) 92 : { 93 : return (addr & htonl(0xffffff00)) == htonl(0xc0586300); 94 : } 95 : 96 : static inline bool ipv4_is_test_192(__be32 addr) 97 : { 98 : return (addr & htonl(0xffffff00)) == htonl(0xc0000200); 99 : } 100 : 101 : static inline bool ipv4_is_test_198(__be32 addr) 102 : { 103 : return (addr & htonl(0xfffe0000)) == htonl(0xc6120000); 104 : } 105 : #endif /* _LINUX_IN_H */