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