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 | static inline int proto_ports_offset(int proto) |
22 | { |
23 | 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 | case IPPROTO_AH: /* SPI */ |
32 | return 4; |
33 | default: |
34 | return -EINVAL; |
35 | } |
36 | } |
37 | |
38 | static inline bool ipv4_is_loopback(__be32 addr) |
39 | { |
40 | return (addr & htonl(0xff000000)) == htonl(0x7f000000); |
41 | } |
42 | |
43 | static inline bool ipv4_is_multicast(__be32 addr) |
44 | { |
45 | return (addr & htonl(0xf0000000)) == htonl(0xe0000000); |
46 | } |
47 | |
48 | static inline bool ipv4_is_local_multicast(__be32 addr) |
49 | { |
50 | return (addr & htonl(0xffffff00)) == htonl(0xe0000000); |
51 | } |
52 | |
53 | static inline bool ipv4_is_lbcast(__be32 addr) |
54 | { |
55 | /* limited broadcast */ |
56 | 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 | static inline bool ipv4_is_zeronet(__be32 addr) |
65 | { |
66 | 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 */ |
106 |