haiku/headers/posix/netinet/ip.h
Axel Dörfler 5adca30a18 Merge of branches/team/network/new_stack - not yet complete as SVN does only support
replacing files when merging when you don't have deleted them manually (for some reason,
it only works as part of the merge operation, and we didn't copy the whole tree to
have "a fresh start" - next time we know better, at least if SVN still suffers from
that same limitation).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18456 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-08-08 12:33:33 +00:00

126 lines
3.5 KiB
C

/* netinet/ip.h
* definitions for ipv4 protocol
*/
#ifndef _NETINET_IP_H
#define _NETINET_IP_H
#include <netinet/in.h>
#include <stdint.h>
/* Based on RFC 791 */
#define IPVERSION 4
struct ip {
#if BYTE_ORDER == BIG_ENDIAN
uint8_t ip_v:4;
uint8_t ip_hl:4;
#elif BYTE_ORDER == LITTLE_ENDIAN
uint8_t ip_hl:4;
uint8_t ip_v:4;
#endif
uint8_t ip_tos;
uint16_t ip_len;
uint16_t ip_id;
int16_t ip_off;
uint8_t ip_ttl;
uint8_t ip_p;
uint16_t ip_sum;
struct in_addr ip_src;
struct in_addr ip_dst;
} _PACKED;
#define IP_MAXPACKET 65535/* Maximum packet size */
/* IP Type of Service */
#define IPTOS_RELIABILITY 0x04
#define IPTOS_THROUGHPUT 0x08
#define IPTOS_LOWDELAY 0x10
/*
* Definitions for options.
*/
#define IPOPT_COPIED(o)((o)&0x80)
#define IPOPT_CLASS(o)((o)&0x60)
#define IPOPT_NUMBER(o)((o)&0x1f)
#define IPOPT_CONTROL 0x00
#define IPOPT_RESERVED1 0x20
#define IPOPT_DEBMEAS 0x40
#define IPOPT_RESERVED2 0x60
#define IPOPT_EOL 0/* end of option list */
#define IPOPT_NOP 1/* no operation */
#define IPOPT_RR 7/* record packet route */
#define IPOPT_TS 68/* timestamp */
#define IPOPT_SECURITY 130/* provide s,c,h,tcc */
#define IPOPT_LSRR 131/* loose source route */
#define IPOPT_SATID 136/* satnet id */
#define IPOPT_SSRR 137/* strict source route */
/*
* Offsets to fields in options other than EOL and NOP.
*/
#define IPOPT_OPTVAL 0/* option ID */
#define IPOPT_OLEN 1/* option length */
#define IPOPT_OFFSET 2/* offset within option */
#define IPOPT_MINOFF 4/* min value of above */
struct ip_timestamp {
uint8_t ipt_code;/* IPOPT_TS */
uint8_t ipt_len;/* size of structure (variable) */
uint8_t ipt_ptr;/* index of current entry */
#if BYTE_ORDER == BIG_ENDIAN
uint8_t ipt_oflw:4,
ipt_flg:4;
#elif BYTE_ORDER == LITTLE_ENDIAN
uint8_t ipt_flg:4,
ipt_oflw:4;
#endif
union ipt_timestamp {
uint32_t ipt_time[1];
struct ipt_ta {
struct in_addr ipt_addr;
uint32_t ipt_time;
} ipt_ta;
} ipt_timestamp;
};
/* flag bits for ipt_flg */
#define IPOPT_TS_TSONLY 0/* timestamps only */
#define IPOPT_TS_TSANDADDR 1/* timestamps and addresses */
#define IPOPT_TS_PRESPEC 3/* specified modules only */
/* bits for security (not byte swapped) */
#define IPOPT_SECUR_UNCLASS 0x0000
#define IPOPT_SECUR_CONFID 0xf135
#define IPOPT_SECUR_EFTO 0x789a
#define IPOPT_SECUR_MMMM 0xbc4d
#define IPOPT_SECUR_RESTR 0xaf13
#define IPOPT_SECUR_SECRET 0xd788
#define IPOPT_SECUR_TOPSECRET 0x6bc5
#define MAXTTL 255/* maximum time to live (seconds) */
#define IPDEFTTL 64/* default ttl, from RFC 1340 */
#define IPFRAGTTL 60/* time to live for frags, slowhz */
#define IPTTLDEC 1/* subtracted when forwarding */
#define IP_MSS 576/* default maximum segment size */
struct ippseudo {
struct in_addr ippseudo_src; /* source internet address */
struct in_addr ippseudo_dst; /* destination internet address */
uint8_t ippseudo_pad;/* pad, must be zero */
uint8_t ippseudo_p;/* protocol */
uint16_t ippseudo_len;/* protocol length */
};
/* Fragment flags */
#define IP_DF 0x4000 /* don't fragment */
#define IP_MF 0x2000 /* more fragments */
#define IP_OFFMASK 0x1fff
#endif /* NETINET_IP_H */