haiku/headers/posix/netinet/ip.h

126 lines
3.5 KiB
C
Raw Normal View History

/* 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 */