xref: /original-bsd/sys/netinet/in.h (revision 57f376f9)
1 /*
2  * Copyright (c) 1982, 1986 Regents of the University of California.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted
6  * provided that this notice is preserved and that due credit is given
7  * to the University of California at Berkeley. The name of the University
8  * may not be used to endorse or promote products derived from this
9  * software without specific prior written permission. This software
10  * is provided ``as is'' without express or implied warranty.
11  *
12  *	@(#)in.h	7.4 (Berkeley) 12/07/87
13  */
14 
15 /*
16  * Constants and structures defined by the internet system,
17  * Per RFC 790, September 1981.
18  */
19 
20 /*
21  * Protocols
22  */
23 #define	IPPROTO_IP		0		/* dummy for IP */
24 #define	IPPROTO_ICMP		1		/* control message protocol */
25 #define	IPPROTO_GGP		2		/* gateway^2 (deprecated) */
26 #define	IPPROTO_TCP		6		/* tcp */
27 #define	IPPROTO_EGP		8		/* exterior gateway protocol */
28 #define	IPPROTO_PUP		12		/* pup */
29 #define	IPPROTO_UDP		17		/* user datagram protocol */
30 #define	IPPROTO_IDP		22		/* xns idp */
31 
32 #define	IPPROTO_RAW		255		/* raw IP packet */
33 #define	IPPROTO_MAX		256
34 
35 
36 /*
37  * Ports < IPPORT_RESERVED are reserved for
38  * privileged processes (e.g. root).
39  * Ports > IPPORT_USERRESERVED are reserved
40  * for servers, not necessarily privileged.
41  */
42 #define	IPPORT_RESERVED		1024
43 #define	IPPORT_USERRESERVED	5000
44 
45 /*
46  * Link numbers
47  */
48 #define	IMPLINK_IP		155
49 #define	IMPLINK_LOWEXPER	156
50 #define	IMPLINK_HIGHEXPER	158
51 
52 /*
53  * Internet address (a structure for historical reasons)
54  */
55 struct in_addr {
56 	u_long s_addr;
57 };
58 
59 /*
60  * Definitions of bits in internet address integers.
61  * On subnets, the decomposition of addresses to host and net parts
62  * is done according to subnet mask, not the masks here.
63  */
64 #define	IN_CLASSA(i)		(((long)(i) & 0x80000000) == 0)
65 #define	IN_CLASSA_NET		0xff000000
66 #define	IN_CLASSA_NSHIFT	24
67 #define	IN_CLASSA_HOST		0x00ffffff
68 #define	IN_CLASSA_MAX		128
69 
70 #define	IN_CLASSB(i)		(((long)(i) & 0xc0000000) == 0x80000000)
71 #define	IN_CLASSB_NET		0xffff0000
72 #define	IN_CLASSB_NSHIFT	16
73 #define	IN_CLASSB_HOST		0x0000ffff
74 #define	IN_CLASSB_MAX		65536
75 
76 #define	IN_CLASSC(i)		(((long)(i) & 0xe0000000) == 0xc0000000)
77 #define	IN_CLASSC_NET		0xffffff00
78 #define	IN_CLASSC_NSHIFT	8
79 #define	IN_CLASSC_HOST		0x000000ff
80 
81 #define	IN_CLASSD(i)		(((long)(i) & 0xf0000000) == 0xe0000000)
82 #define	IN_MULTICAST(i)		IN_CLASSD(i)
83 
84 #define	IN_EXPERIMENTAL(i)	(((long)(i) & 0xe0000000) == 0xe0000000)
85 #define	IN_BADCLASS(i)		(((long)(i) & 0xf0000000) == 0xf0000000)
86 
87 #define	INADDR_ANY		(u_long)0x00000000
88 #define	INADDR_BROADCAST	(u_long)0xffffffff	/* must be masked */
89 #ifndef KERNEL
90 #define	INADDR_NONE		0xffffffff		/* -1 return */
91 #endif
92 
93 #define	IN_LOOPBACKNET		127			/* official! */
94 
95 /*
96  * Socket address, internet style.
97  */
98 struct sockaddr_in {
99 	short	sin_family;
100 	u_short	sin_port;
101 	struct	in_addr sin_addr;
102 	char	sin_zero[8];
103 };
104 
105 /*
106  * Options for use with [gs]etsockopt at the IP level.
107  */
108 #define	IP_OPTIONS	1		/* set/get IP per-packet options */
109 
110 #ifdef KERNEL
111 extern	struct domain inetdomain;
112 extern	struct protosw inetsw[];
113 struct	in_addr in_makeaddr();
114 u_long	in_netof(), in_lnaof();
115 #endif
116