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