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