williamr@2: /* IN.H williamr@2: * williamr@4: * Portions Copyright (c) 1997-2006 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@2: */ williamr@2: williamr@2: /** @file williamr@4: @PublishedAll williamr@2: */ williamr@2: williamr@2: /* williamr@2: * Copyright (c) 1982, 1986 Regents of the University of California. williamr@2: * All rights reserved. williamr@2: * williamr@2: * Redistribution and use in source and binary forms are permitted williamr@2: * provided that this notice is preserved and that due credit is given williamr@2: * to the University of California at Berkeley. The name of the University williamr@2: * may not be used to endorse or promote products derived from this williamr@2: * software without specific prior written permission. This software williamr@2: * is provided ``as is'' without express or implied warranty. williamr@2: */ williamr@2: williamr@2: /* williamr@2: * Constants and structures defined by the internet system, williamr@2: * Per RFC 790, September 1981. williamr@2: */ williamr@2: williamr@2: #ifndef _NETINET_IN_H williamr@2: #define _NETINET_IN_H williamr@2: williamr@2: #ifdef __cplusplus williamr@2: extern "C" { williamr@2: #endif williamr@2: #include <_ansi.h> williamr@2: williamr@2: /** williamr@2: Protocols williamr@2: */ williamr@2: #define IPPROTO_IP 0x100 /* dummy for IP */ williamr@2: #define IPPROTO_ICMP 1 /* control message protocol */ williamr@2: #define IPPROTO_IGMP 2 /* group control protocol */ williamr@2: #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */ williamr@2: #define IPPROTO_ENCAP 4 /* IP in IP encapsulation */ williamr@2: #define IPPROTO_TCP 6 /* tcp */ williamr@2: #define IPPROTO_EGP 8 /* exterior gateway protocol */ williamr@2: #define IPPROTO_PUP 12 /* pup */ williamr@2: #define IPPROTO_UDP 17 /* user datagram protocol */ williamr@2: #define IPPROTO_IDP 22 /* xns idp */ williamr@2: #define IPPROTO_HELLO 63 /* "hello" routing protocol */ williamr@2: #define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */ williamr@2: #define IPPROTO_EON 80 /* ISO clnp */ williamr@2: #define IPPROTO_RAW 255 /* raw IP packet */ williamr@2: #define IPPROTO_MAX 0x101 williamr@2: williamr@2: /** williamr@2: Port/socket numbers: network standard functions williamr@2: */ williamr@2: #define IPPORT_ECHO 7 williamr@2: #define IPPORT_DISCARD 9 williamr@2: #define IPPORT_SYSTAT 11 williamr@2: #define IPPORT_DAYTIME 13 williamr@2: #define IPPORT_NETSTAT 15 williamr@2: #define IPPORT_FTP 21 williamr@2: #define IPPORT_TELNET 23 williamr@2: #define IPPORT_SMTP 25 williamr@2: #define IPPORT_TIMESERVER 37 williamr@2: #define IPPORT_NAMESERVER 42 williamr@2: #define IPPORT_WHOIS 43 williamr@2: #define IPPORT_MTP 57 williamr@2: williamr@2: /** williamr@2: Port/socket numbers: host specific functions williamr@2: */ williamr@2: #define IPPORT_TFTP 69 williamr@2: #define IPPORT_RJE 77 williamr@2: #define IPPORT_FINGER 79 williamr@2: #define IPPORT_TTYLINK 87 williamr@2: #define IPPORT_SUPDUP 95 williamr@2: williamr@2: /** williamr@2: UNIX TCP sockets williamr@2: */ williamr@2: #define IPPORT_EXECSERVER 512 williamr@2: #define IPPORT_LOGINSERVER 513 williamr@2: #define IPPORT_CMDSERVER 514 williamr@2: #define IPPORT_EFSSERVER 520 williamr@2: williamr@2: /** williamr@2: UNIX UDP sockets williamr@2: */ williamr@2: #define IPPORT_BIFFUDP 512 williamr@2: #define IPPORT_WHOSERVER 513 williamr@2: #define IPPORT_ROUTESERVER 520 /* 520+1 also used */ williamr@2: williamr@2: /** williamr@2: Ports < IPPORT_RESERVED are reserved for williamr@2: privileged processes (e.g. root). williamr@2: Ports > IPPORT_USERRESERVED are reserved williamr@2: for servers, not necessarily privileged. williamr@2: */ williamr@2: #define IPPORT_RESERVED 1024 williamr@2: #define IPPORT_USERRESERVED 5000 williamr@2: williamr@2: /** williamr@2: Link numbers williamr@2: */ williamr@2: #define IMPLINK_IP 155 williamr@2: #define IMPLINK_LOWEXPER 156 williamr@2: #define IMPLINK_HIGHEXPER 158 williamr@2: williamr@2: /** williamr@2: Internet address williamr@2: This definition contains obsolete fields for compatibility williamr@2: with SunOS 3.x and 4.2bsd. The presence of subnets renders williamr@2: divisions into fixed fields misleading at best. New code williamr@2: should use only the s_addr field. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: struct in_addr { williamr@2: union { williamr@2: struct { u_char s_b1, s_b2, s_b3, s_b4; } S_un_b; williamr@2: struct { u_short s_w1, s_w2; } S_un_w; williamr@2: u_long S_addr; williamr@2: } S_un; williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_addr S_un.S_addr /* should be used for all code */ williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_host S_un.S_un_b.s_b2 /* OBSOLETE: host on imp */ williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_net S_un.S_un_b.s_b1 /* OBSOLETE: network */ williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_imp S_un.S_un_w.s_w2 /* OBSOLETE: imp */ williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_impno S_un.S_un_b.s_b4 /* OBSOLETE: imp # */ williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: #define s_lh S_un.S_un_b.s_b3 /* OBSOLETE: logical host */ williamr@2: }; williamr@2: williamr@2: /** williamr@2: Definitions of bits in internet address integers. williamr@2: On subnets, the decomposition of addresses to host and net parts williamr@2: is done according to subnet mask, not the masks here. williamr@2: */ williamr@2: #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) williamr@2: #define IN_CLASSA_NET 0xff000000 williamr@2: #define IN_CLASSA_NSHIFT 24 williamr@2: #define IN_CLASSA_HOST 0x00ffffff williamr@2: #define IN_CLASSA_MAX 128 williamr@2: williamr@2: #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000) williamr@2: #define IN_CLASSB_NET 0xffff0000 williamr@2: #define IN_CLASSB_NSHIFT 16 williamr@2: #define IN_CLASSB_HOST 0x0000ffff williamr@2: #define IN_CLASSB_MAX 65536 williamr@2: williamr@2: #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000) williamr@2: #define IN_CLASSC_NET 0xffffff00 williamr@2: #define IN_CLASSC_NSHIFT 8 williamr@2: #define IN_CLASSC_HOST 0x000000ff williamr@2: #define IN_CLASSC_MAX 16777216L williamr@2: williamr@2: #define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000) williamr@2: #define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */ williamr@2: #define IN_CLASSD_NSHIFT 28 /* net and host fields, but */ williamr@2: #define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */ williamr@2: #define IN_MULTICAST(i) IN_CLASSD(i) williamr@2: williamr@2: #define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000) williamr@2: #define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000) williamr@2: williamr@2: #define INADDR_ANY (u_long)0x00000000 williamr@2: #define INADDR_LOOPBACK (u_long)0x7F000001 williamr@2: #define INADDR_BROADCAST (u_long)0xffffffff /* must be masked */ williamr@2: williamr@2: #define INADDR_UNSPEC_GROUP (u_long)0xe0000000 /* 224.0.0.0 */ williamr@2: #define INADDR_ALLHOSTS_GROUP (u_long)0xe0000001 /* 224.0.0.1 */ williamr@2: #define INADDR_MAX_LOCAL_GROUP (u_long)0xe00000ff /* 224.0.0.255 */ williamr@2: williamr@2: #define INADDR_NONE INADDR_BROADCAST /* traditional, but misleading */ williamr@2: williamr@2: #define IN_LOOPBACKNET 127 /* official! */ williamr@2: williamr@2: /** williamr@2: Define a macro to stuff the loopback address into an Internet address williamr@2: 0x0100007F is htonl(INADDR_LOOPBACK) without the overhead of a function call. williamr@2: */ williamr@2: #define IN_SET_LOOPBACK_ADDR(a) \ williamr@2: { (a)->sin_addr.s_addr = 0x0100007F; (a)->sin_family = AF_INET; } williamr@2: williamr@2: /** williamr@2: Socket address, internet style. williamr@2: */ williamr@2: struct sockaddr_in { williamr@2: u_short sin_family; williamr@2: u_short sin_port; williamr@2: struct in_addr sin_addr; williamr@2: char sin_zero[20]; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Options for use with [gs]etsockopt at the IP level. williamr@2: * NB. The negative option values below are not supported and must not williamr@2: * be used in calls to the [gs]etsockopt() API as they will be ignored williamr@2: * or cause an error. williamr@2: */ williamr@2: #define SOL_IP 0x100 /* options for IP level */ williamr@2: williamr@2: #define IP_OPTIONS 0x306 /* set/get IP per-packet options */ williamr@2: #define IP_HDRINCL 0x308 /* int; header is included with data (raw) */ williamr@2: #define IP_TOS 0x309 /* int; IP type of service and precedence */ williamr@2: #define IP_TTL 0x310 /* int; IP time to live */ williamr@2: #define IP_RECVOPTS -1 /* bool; receive all IP options w/datagram */ williamr@2: #define IP_RECVRETOPTS -2 /* bool; receive IP options for response */ williamr@2: #define IP_RECVDSTADDR -3 /* bool; receive IP dst addr w/datagram */ williamr@2: #define IP_RETOPTS -4 /* ip_opts; set/get IP per-packet options */ williamr@2: #define IP_MULTICAST_IF -5 /* set/get IP multicast interface */ williamr@2: #define IP_MULTICAST_TTL -6 /* set/get IP multicast timetolive */ williamr@2: #define IP_MULTICAST_LOOP -7 /* set/get IP multicast loopback */ williamr@2: #define IP_ADD_MEMBERSHIP -8 /* add an IP group membership */ williamr@2: #define IP_DROP_MEMBERSHIP -9 /* drop an IP group membership */ williamr@2: williamr@2: #define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */ williamr@2: #define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */ williamr@2: williamr@2: /** williamr@2: Options for use with [gs]etsockopt at the TCP level. williamr@2: */ williamr@2: #define SOL_TCP 0x106 /* options for TCP level */ williamr@2: williamr@2: #define TCP_SENDWINDOW 0x301 /* int: send window size in bytes */ williamr@2: #define TCP_RECVWINDOW 0x302 /* int: recv window size in bytes */ williamr@2: #define TCP_NODELAY 0x304 /* disable Nagle's algorithm */ williamr@2: #define TCP_KEEPALIVE 0x305 /* keep connections alive */ williamr@2: williamr@2: /** williamr@2: Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: struct ip_mreq { williamr@2: struct in_addr imr_multiaddr; /* IP multicast address of group */ williamr@2: struct in_addr imr_interface; /* local IP address of interface */ williamr@2: }; williamr@2: williamr@2: /* williamr@2: EPOC32 is little-endian williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: IMPORT_C unsigned short htons(unsigned short hs); williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: IMPORT_C unsigned long htonl(unsigned long hl); williamr@2: williamr@2: williamr@2: #define ntohl htonl williamr@2: #define ntohs htons williamr@2: williamr@2: #ifdef __cplusplus williamr@2: } williamr@2: #endif williamr@2: williamr@2: #endif /* _NETINET_IN_H */