1*219b2ee8SDavid du Colombier #ifndef __netinet_in__ 2*219b2ee8SDavid du Colombier #define __netinet_in__ 3*219b2ee8SDavid du Colombier 4*219b2ee8SDavid du Colombier #ifdef __cplusplus 5*219b2ee8SDavid du Colombier extern "C" { 6*219b2ee8SDavid du Colombier #endif 7*219b2ee8SDavid du Colombier 8*219b2ee8SDavid du Colombier /* 9*219b2ee8SDavid du Colombier * Copyright (c) 1982, 1986, 1990 Regents of the University of California. 10*219b2ee8SDavid du Colombier * All rights reserved. 11*219b2ee8SDavid du Colombier * 12*219b2ee8SDavid du Colombier * Redistribution is only permitted until one year after the first shipment 13*219b2ee8SDavid du Colombier * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and 14*219b2ee8SDavid du Colombier * binary forms are permitted provided that: (1) source distributions retain 15*219b2ee8SDavid du Colombier * this entire copyright notice and comment, and (2) distributions including 16*219b2ee8SDavid du Colombier * binaries display the following acknowledgement: This product includes 17*219b2ee8SDavid du Colombier * software developed by the University of California, Berkeley and its 18*219b2ee8SDavid du Colombier * contributors'' in the documentation or other materials provided with the 19*219b2ee8SDavid du Colombier * distribution and in all advertising materials mentioning features or use 20*219b2ee8SDavid du Colombier * of this software. Neither the name of the University nor the names of 21*219b2ee8SDavid du Colombier * its contributors may be used to endorse or promote products derived from 22*219b2ee8SDavid du Colombier * this software without specific prior written permission. 23*219b2ee8SDavid du Colombier * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 24*219b2ee8SDavid du Colombier * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 25*219b2ee8SDavid du Colombier * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 26*219b2ee8SDavid du Colombier * 27*219b2ee8SDavid du Colombier * @(#)in.h 7.10 (Berkeley) 6/28/90 plus MULTICAST 1.1 28*219b2ee8SDavid du Colombier */ 29*219b2ee8SDavid du Colombier 30*219b2ee8SDavid du Colombier /* 31*219b2ee8SDavid du Colombier * Constants and structures defined by the internet system, 32*219b2ee8SDavid du Colombier * Per RFC 790, September 1981. 33*219b2ee8SDavid du Colombier */ 34*219b2ee8SDavid du Colombier 35*219b2ee8SDavid du Colombier /* 36*219b2ee8SDavid du Colombier * Protocols 37*219b2ee8SDavid du Colombier */ 38*219b2ee8SDavid du Colombier #define IPPROTO_IP 0 /* dummy for IP */ 39*219b2ee8SDavid du Colombier #define IPPROTO_ICMP 1 /* control message protocol */ 40*219b2ee8SDavid du Colombier #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */ 41*219b2ee8SDavid du Colombier #define IPPROTO_TCP 6 /* tcp */ 42*219b2ee8SDavid du Colombier #define IPPROTO_EGP 8 /* exterior gateway protocol */ 43*219b2ee8SDavid du Colombier #define IPPROTO_PUP 12 /* pup */ 44*219b2ee8SDavid du Colombier #define IPPROTO_UDP 17 /* user datagram protocol */ 45*219b2ee8SDavid du Colombier #define IPPROTO_IDP 22 /* xns idp */ 46*219b2ee8SDavid du Colombier #define IPPROTO_TP 29 /* tp-4 w/ class negotiation */ 47*219b2ee8SDavid du Colombier #define IPPROTO_EON 80 /* ISO cnlp */ 48*219b2ee8SDavid du Colombier 49*219b2ee8SDavid du Colombier #define IPPROTO_RAW 255 /* raw IP packet */ 50*219b2ee8SDavid du Colombier #define IPPROTO_MAX 256 51*219b2ee8SDavid du Colombier 52*219b2ee8SDavid du Colombier 53*219b2ee8SDavid du Colombier /* 54*219b2ee8SDavid du Colombier * Local port number conventions: 55*219b2ee8SDavid du Colombier * Ports < IPPORT_RESERVED are reserved for 56*219b2ee8SDavid du Colombier * privileged processes (e.g. root). 57*219b2ee8SDavid du Colombier * Ports > IPPORT_USERRESERVED are reserved 58*219b2ee8SDavid du Colombier * for servers, not necessarily privileged. 59*219b2ee8SDavid du Colombier */ 60*219b2ee8SDavid du Colombier #define IPPORT_RESERVED 1024 61*219b2ee8SDavid du Colombier #define IPPORT_USERRESERVED 5000 62*219b2ee8SDavid du Colombier 63*219b2ee8SDavid du Colombier /* 64*219b2ee8SDavid du Colombier * Internet address (a structure for historical reasons) 65*219b2ee8SDavid du Colombier */ 66*219b2ee8SDavid du Colombier struct in_addr { 67*219b2ee8SDavid du Colombier unsigned long s_addr; 68*219b2ee8SDavid du Colombier }; 69*219b2ee8SDavid du Colombier 70*219b2ee8SDavid du Colombier /* 71*219b2ee8SDavid du Colombier * Definitions of bits in internet address integers. 72*219b2ee8SDavid du Colombier * On subnets, the decomposition of addresses to host and net parts 73*219b2ee8SDavid du Colombier * is done according to subnet mask, not the masks here. 74*219b2ee8SDavid du Colombier */ 75*219b2ee8SDavid du Colombier #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) 76*219b2ee8SDavid du Colombier #define IN_CLASSA_NET 0xff000000 77*219b2ee8SDavid du Colombier #define IN_CLASSA_NSHIFT 24 78*219b2ee8SDavid du Colombier #define IN_CLASSA_HOST 0x00ffffff 79*219b2ee8SDavid du Colombier #define IN_CLASSA_MAX 128 80*219b2ee8SDavid du Colombier 81*219b2ee8SDavid du Colombier #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000) 82*219b2ee8SDavid du Colombier #define IN_CLASSB_NET 0xffff0000 83*219b2ee8SDavid du Colombier #define IN_CLASSB_NSHIFT 16 84*219b2ee8SDavid du Colombier #define IN_CLASSB_HOST 0x0000ffff 85*219b2ee8SDavid du Colombier #define IN_CLASSB_MAX 65536 86*219b2ee8SDavid du Colombier 87*219b2ee8SDavid du Colombier #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000) 88*219b2ee8SDavid du Colombier #define IN_CLASSC_NET 0xffffff00 89*219b2ee8SDavid du Colombier #define IN_CLASSC_NSHIFT 8 90*219b2ee8SDavid du Colombier #define IN_CLASSC_HOST 0x000000ff 91*219b2ee8SDavid du Colombier 92*219b2ee8SDavid du Colombier #define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000) 93*219b2ee8SDavid du Colombier #define IN_MULTICAST(i) IN_CLASSD(i) 94*219b2ee8SDavid du Colombier 95*219b2ee8SDavid du Colombier #define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000) 96*219b2ee8SDavid du Colombier #define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000) 97*219b2ee8SDavid du Colombier 98*219b2ee8SDavid du Colombier #define INADDR_ANY (unsigned long)0x00000000 99*219b2ee8SDavid du Colombier #define INADDR_BROADCAST (unsigned long)0xffffffff /* must be masked */ 100*219b2ee8SDavid du Colombier 101*219b2ee8SDavid du Colombier #define IN_LOOPBACKNET 127 /* official! */ 102*219b2ee8SDavid du Colombier 103*219b2ee8SDavid du Colombier /* 104*219b2ee8SDavid du Colombier * Socket address, internet style. 105*219b2ee8SDavid du Colombier */ 106*219b2ee8SDavid du Colombier struct sockaddr_in { 107*219b2ee8SDavid du Colombier short sin_family; 108*219b2ee8SDavid du Colombier unsigned short sin_port; 109*219b2ee8SDavid du Colombier struct in_addr sin_addr; 110*219b2ee8SDavid du Colombier char sin_zero[8]; 111*219b2ee8SDavid du Colombier }; 112*219b2ee8SDavid du Colombier 113*219b2ee8SDavid du Colombier /* 114*219b2ee8SDavid du Colombier * Structure used to describe IP options. 115*219b2ee8SDavid du Colombier * Used to store options internally, to pass them to a process, 116*219b2ee8SDavid du Colombier * or to restore options retrieved earlier. 117*219b2ee8SDavid du Colombier * The ip_dst is used for the first-hop gateway when using a source route 118*219b2ee8SDavid du Colombier * (this gets put into the header proper). 119*219b2ee8SDavid du Colombier */ 120*219b2ee8SDavid du Colombier struct ip_opts { 121*219b2ee8SDavid du Colombier struct in_addr ip_dst; /* first hop, 0 w/o src rt */ 122*219b2ee8SDavid du Colombier char ip_opts[40]; /* actually variable in size */ 123*219b2ee8SDavid du Colombier }; 124*219b2ee8SDavid du Colombier 125*219b2ee8SDavid du Colombier /* 126*219b2ee8SDavid du Colombier * Options for use with [gs]etsockopt at the IP level. 127*219b2ee8SDavid du Colombier * First word of comment is data type; bool is stored in int. 128*219b2ee8SDavid du Colombier */ 129*219b2ee8SDavid du Colombier #define IP_OPTIONS 1 /* buf/ip_opts; set/get IP per-packet options */ 130*219b2ee8SDavid du Colombier #define IP_HDRINCL 7 /* int; header is included with data (raw) */ 131*219b2ee8SDavid du Colombier #define IP_TOS 8 /* int; IP type of service and precedence */ 132*219b2ee8SDavid du Colombier #define IP_TTL 9 /* int; IP time to live */ 133*219b2ee8SDavid du Colombier 134*219b2ee8SDavid du Colombier extern unsigned long ntohl(unsigned long x); 135*219b2ee8SDavid du Colombier extern unsigned short ntohs(unsigned short x); 136*219b2ee8SDavid du Colombier extern unsigned long htonl(unsigned long x); 137*219b2ee8SDavid du Colombier extern unsigned short htons(unsigned short x); 138*219b2ee8SDavid du Colombier extern unsigned long inet_addr(char*); 139*219b2ee8SDavid du Colombier extern char* inet_ntoa(struct in_addr); 140*219b2ee8SDavid du Colombier extern unsigned long nptohl(void*); 141*219b2ee8SDavid du Colombier 142*219b2ee8SDavid du Colombier #ifdef __cplusplus 143*219b2ee8SDavid du Colombier } 144*219b2ee8SDavid du Colombier #endif 145*219b2ee8SDavid du Colombier 146*219b2ee8SDavid du Colombier #endif /* __netinet_in__ */ 147