2002-07-09 16:24:59 +04:00
|
|
|
/* netinet/ip.h
|
|
|
|
* definitions for ipv4 protocol
|
|
|
|
*/
|
|
|
|
|
2002-07-12 13:36:23 +04:00
|
|
|
#ifndef _NETINET_IP_H
|
|
|
|
#define _NETINET_IP_H
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2002-07-12 13:36:23 +04:00
|
|
|
#include <netinet/in.h>
|
2006-07-03 07:27:04 +04:00
|
|
|
#include <stdint.h>
|
2002-07-09 16:24:59 +04:00
|
|
|
|
|
|
|
/* Based on RFC 791 */
|
|
|
|
|
|
|
|
#define IPVERSION 4
|
|
|
|
|
|
|
|
struct ip {
|
2003-08-02 10:03:20 +04:00
|
|
|
#if BYTE_ORDER == BIG_ENDIAN
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ip_v:4;
|
|
|
|
uint8_t ip_hl:4;
|
2003-08-02 10:03:20 +04:00
|
|
|
#elif BYTE_ORDER == LITTLE_ENDIAN
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ip_hl:4;
|
|
|
|
uint8_t ip_v:4;
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
2006-07-03 07:27:04 +04:00
|
|
|
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;
|
2002-07-09 16:24:59 +04:00
|
|
|
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 {
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ipt_code;/* IPOPT_TS */
|
|
|
|
uint8_t ipt_len;/* size of structure (variable) */
|
|
|
|
uint8_t ipt_ptr;/* index of current entry */
|
2003-08-02 10:03:20 +04:00
|
|
|
#if BYTE_ORDER == BIG_ENDIAN
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ipt_oflw:4,
|
|
|
|
ipt_flg:4;
|
2003-08-02 10:03:20 +04:00
|
|
|
#elif BYTE_ORDER == LITTLE_ENDIAN
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ipt_flg:4,
|
|
|
|
ipt_oflw:4;
|
2002-07-09 16:24:59 +04:00
|
|
|
#endif
|
|
|
|
union ipt_timestamp {
|
2006-08-08 16:33:33 +04:00
|
|
|
uint32_t ipt_time[1];
|
2002-07-09 16:24:59 +04:00
|
|
|
struct ipt_ta {
|
|
|
|
struct in_addr ipt_addr;
|
2006-08-08 16:33:33 +04:00
|
|
|
uint32_t ipt_time;
|
2002-07-09 16:24:59 +04:00
|
|
|
} 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 */
|
2006-07-03 07:27:04 +04:00
|
|
|
uint8_t ippseudo_pad;/* pad, must be zero */
|
|
|
|
uint8_t ippseudo_p;/* protocol */
|
|
|
|
uint16_t ippseudo_len;/* protocol length */
|
2002-07-09 16:24:59 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Fragment flags */
|
|
|
|
#define IP_DF 0x4000 /* don't fragment */
|
|
|
|
#define IP_MF 0x2000 /* more fragments */
|
|
|
|
#define IP_OFFMASK 0x1fff
|
|
|
|
|
|
|
|
#endif /* NETINET_IP_H */
|