1219b2ee8SDavid du Colombier #ifndef __netinet_in__ 2219b2ee8SDavid du Colombier #define __netinet_in__ 3219b2ee8SDavid du Colombier 4219b2ee8SDavid du Colombier #ifdef __cplusplus 5219b2ee8SDavid du Colombier extern "C" { 6219b2ee8SDavid du Colombier #endif 7219b2ee8SDavid du Colombier 8219b2ee8SDavid du Colombier /* 9219b2ee8SDavid du Colombier * Copyright (c) 1982, 1986, 1990 Regents of the University of California. 10219b2ee8SDavid du Colombier * All rights reserved. 11219b2ee8SDavid du Colombier * 12219b2ee8SDavid du Colombier * Redistribution is only permitted until one year after the first shipment 13219b2ee8SDavid du Colombier * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and 14219b2ee8SDavid du Colombier * binary forms are permitted provided that: (1) source distributions retain 15219b2ee8SDavid du Colombier * this entire copyright notice and comment, and (2) distributions including 16219b2ee8SDavid du Colombier * binaries display the following acknowledgement: This product includes 17219b2ee8SDavid du Colombier * software developed by the University of California, Berkeley and its 18219b2ee8SDavid du Colombier * contributors'' in the documentation or other materials provided with the 19219b2ee8SDavid du Colombier * distribution and in all advertising materials mentioning features or use 20219b2ee8SDavid du Colombier * of this software. Neither the name of the University nor the names of 21219b2ee8SDavid du Colombier * its contributors may be used to endorse or promote products derived from 22219b2ee8SDavid du Colombier * this software without specific prior written permission. 23219b2ee8SDavid du Colombier * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 24219b2ee8SDavid du Colombier * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 25219b2ee8SDavid du Colombier * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 26219b2ee8SDavid du Colombier * 27219b2ee8SDavid du Colombier * @(#)in.h 7.10 (Berkeley) 6/28/90 plus MULTICAST 1.1 28219b2ee8SDavid du Colombier */ 29219b2ee8SDavid du Colombier 30219b2ee8SDavid du Colombier /* 31219b2ee8SDavid du Colombier * Constants and structures defined by the internet system, 32219b2ee8SDavid du Colombier * Per RFC 790, September 1981. 33219b2ee8SDavid du Colombier */ 34219b2ee8SDavid du Colombier 35219b2ee8SDavid du Colombier /* 36219b2ee8SDavid du Colombier * Protocols 37219b2ee8SDavid du Colombier */ 38219b2ee8SDavid du Colombier #define IPPROTO_IP 0 /* dummy for IP */ 39219b2ee8SDavid du Colombier #define IPPROTO_ICMP 1 /* control message protocol */ 40219b2ee8SDavid du Colombier #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */ 41219b2ee8SDavid du Colombier #define IPPROTO_TCP 6 /* tcp */ 42219b2ee8SDavid du Colombier #define IPPROTO_EGP 8 /* exterior gateway protocol */ 43219b2ee8SDavid du Colombier #define IPPROTO_PUP 12 /* pup */ 44219b2ee8SDavid du Colombier #define IPPROTO_UDP 17 /* user datagram protocol */ 45219b2ee8SDavid du Colombier #define IPPROTO_IDP 22 /* xns idp */ 46219b2ee8SDavid du Colombier #define IPPROTO_TP 29 /* tp-4 w/ class negotiation */ 47219b2ee8SDavid du Colombier #define IPPROTO_EON 80 /* ISO cnlp */ 48219b2ee8SDavid du Colombier 49219b2ee8SDavid du Colombier #define IPPROTO_RAW 255 /* raw IP packet */ 50219b2ee8SDavid du Colombier #define IPPROTO_MAX 256 51219b2ee8SDavid du Colombier 52219b2ee8SDavid du Colombier 53219b2ee8SDavid du Colombier /* 54219b2ee8SDavid du Colombier * Local port number conventions: 55219b2ee8SDavid du Colombier * Ports < IPPORT_RESERVED are reserved for 56219b2ee8SDavid du Colombier * privileged processes (e.g. root). 57219b2ee8SDavid du Colombier * Ports > IPPORT_USERRESERVED are reserved 58219b2ee8SDavid du Colombier * for servers, not necessarily privileged. 59219b2ee8SDavid du Colombier */ 60219b2ee8SDavid du Colombier #define IPPORT_RESERVED 1024 61219b2ee8SDavid du Colombier #define IPPORT_USERRESERVED 5000 62219b2ee8SDavid du Colombier 63219b2ee8SDavid du Colombier /* 64219b2ee8SDavid du Colombier * Internet address (a structure for historical reasons) 65219b2ee8SDavid du Colombier */ 66219b2ee8SDavid du Colombier struct in_addr { 67219b2ee8SDavid du Colombier unsigned long s_addr; 68219b2ee8SDavid du Colombier }; 69219b2ee8SDavid du Colombier 70219b2ee8SDavid du Colombier /* 71219b2ee8SDavid du Colombier * Definitions of bits in internet address integers. 72219b2ee8SDavid du Colombier * On subnets, the decomposition of addresses to host and net parts 73219b2ee8SDavid du Colombier * is done according to subnet mask, not the masks here. 74219b2ee8SDavid du Colombier */ 75219b2ee8SDavid du Colombier #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) 76219b2ee8SDavid du Colombier #define IN_CLASSA_NET 0xff000000 77219b2ee8SDavid du Colombier #define IN_CLASSA_NSHIFT 24 78219b2ee8SDavid du Colombier #define IN_CLASSA_HOST 0x00ffffff 79219b2ee8SDavid du Colombier #define IN_CLASSA_MAX 128 80219b2ee8SDavid du Colombier 81219b2ee8SDavid du Colombier #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000) 82219b2ee8SDavid du Colombier #define IN_CLASSB_NET 0xffff0000 83219b2ee8SDavid du Colombier #define IN_CLASSB_NSHIFT 16 84219b2ee8SDavid du Colombier #define IN_CLASSB_HOST 0x0000ffff 85219b2ee8SDavid du Colombier #define IN_CLASSB_MAX 65536 86219b2ee8SDavid du Colombier 87219b2ee8SDavid du Colombier #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000) 88219b2ee8SDavid du Colombier #define IN_CLASSC_NET 0xffffff00 89219b2ee8SDavid du Colombier #define IN_CLASSC_NSHIFT 8 90219b2ee8SDavid du Colombier #define IN_CLASSC_HOST 0x000000ff 91219b2ee8SDavid du Colombier 92219b2ee8SDavid du Colombier #define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000) 93219b2ee8SDavid du Colombier #define IN_MULTICAST(i) IN_CLASSD(i) 94219b2ee8SDavid du Colombier 95219b2ee8SDavid du Colombier #define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000) 96219b2ee8SDavid du Colombier #define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000) 97219b2ee8SDavid du Colombier 98219b2ee8SDavid du Colombier #define INADDR_ANY (unsigned long)0x00000000 99219b2ee8SDavid du Colombier #define INADDR_BROADCAST (unsigned long)0xffffffff /* must be masked */ 100*41dd6b47SDavid du Colombier #define INADDR_NONE (unsigned long)0xffffffff /* -1 return */ 101219b2ee8SDavid du Colombier 102219b2ee8SDavid du Colombier #define IN_LOOPBACKNET 127 /* official! */ 103219b2ee8SDavid du Colombier 104219b2ee8SDavid du Colombier /* 105219b2ee8SDavid du Colombier * Socket address, internet style. 106219b2ee8SDavid du Colombier */ 107219b2ee8SDavid du Colombier struct sockaddr_in { 108219b2ee8SDavid du Colombier short sin_family; 109219b2ee8SDavid du Colombier unsigned short sin_port; 110219b2ee8SDavid du Colombier struct in_addr sin_addr; 111219b2ee8SDavid du Colombier char sin_zero[8]; 112219b2ee8SDavid du Colombier }; 113219b2ee8SDavid du Colombier 114219b2ee8SDavid du Colombier /* 115219b2ee8SDavid du Colombier * Structure used to describe IP options. 116219b2ee8SDavid du Colombier * Used to store options internally, to pass them to a process, 117219b2ee8SDavid du Colombier * or to restore options retrieved earlier. 118219b2ee8SDavid du Colombier * The ip_dst is used for the first-hop gateway when using a source route 119219b2ee8SDavid du Colombier * (this gets put into the header proper). 120219b2ee8SDavid du Colombier */ 121219b2ee8SDavid du Colombier struct ip_opts { 122219b2ee8SDavid du Colombier struct in_addr ip_dst; /* first hop, 0 w/o src rt */ 123219b2ee8SDavid du Colombier char ip_opts[40]; /* actually variable in size */ 124219b2ee8SDavid du Colombier }; 125219b2ee8SDavid du Colombier 126219b2ee8SDavid du Colombier /* 127219b2ee8SDavid du Colombier * Options for use with [gs]etsockopt at the IP level. 128219b2ee8SDavid du Colombier * First word of comment is data type; bool is stored in int. 129219b2ee8SDavid du Colombier */ 130219b2ee8SDavid du Colombier #define IP_OPTIONS 1 /* buf/ip_opts; set/get IP per-packet options */ 131219b2ee8SDavid du Colombier #define IP_HDRINCL 7 /* int; header is included with data (raw) */ 132219b2ee8SDavid du Colombier #define IP_TOS 8 /* int; IP type of service and precedence */ 133219b2ee8SDavid du Colombier #define IP_TTL 9 /* int; IP time to live */ 134219b2ee8SDavid du Colombier 135219b2ee8SDavid du Colombier extern unsigned long ntohl(unsigned long x); 136219b2ee8SDavid du Colombier extern unsigned short ntohs(unsigned short x); 137219b2ee8SDavid du Colombier extern unsigned long htonl(unsigned long x); 138219b2ee8SDavid du Colombier extern unsigned short htons(unsigned short x); 139219b2ee8SDavid du Colombier extern unsigned long inet_addr(char*); 140219b2ee8SDavid du Colombier extern char* inet_ntoa(struct in_addr); 141219b2ee8SDavid du Colombier extern unsigned long nptohl(void*); 142219b2ee8SDavid du Colombier 143219b2ee8SDavid du Colombier #ifdef __cplusplus 144219b2ee8SDavid du Colombier } 145219b2ee8SDavid du Colombier #endif 146219b2ee8SDavid du Colombier 147219b2ee8SDavid du Colombier #endif /* __netinet_in__ */ 148