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