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