📄 ip.h
字号:
#define IP_PROTO_SM 122 /* SM */#define IP_PROTO_PTP 123 /* Performance Transparency */#define IP_PROTO_ISIS 124 /* ISIS over IPv4 */#define IP_PROTO_FIRE 125 /* FIRE */#define IP_PROTO_CRTP 126 /* Combat Radio Transport */#define IP_PROTO_CRUDP 127 /* Combat Radio UDP */#define IP_PROTO_SSCOPMCE 128 /* SSCOPMCE */#define IP_PROTO_IPLT 129 /* IPLT */#define IP_PROTO_SPS 130 /* Secure Packet Shield */#define IP_PROTO_PIPE 131 /* Private IP Encap in IP */#define IP_PROTO_SCTP 132 /* Stream Ctrl Transmission */#define IP_PROTO_FC 133 /* Fibre Channel */#define IP_PROTO_RSVPIGN 134 /* RSVP-E2E-IGNORE */#define IP_PROTO_RAW 255 /* Raw IP packets */#define IP_PROTO_RESERVED IP_PROTO_RAW /* Reserved */#define IP_PROTO_MAX 255/* * Option types (opt_type) - http://www.iana.org/assignments/ip-parameters */#define IP_OPT_CONTROL 0x00 /* control */#define IP_OPT_DEBMEAS 0x40 /* debugging & measurement */#define IP_OPT_COPY 0x80 /* copy into all fragments */#define IP_OPT_RESERVED1 0x20#define IP_OPT_RESERVED2 0x60#define IP_OPT_EOL 0 /* end of option list */#define IP_OPT_NOP 1 /* no operation */#define IP_OPT_SEC (2|IP_OPT_COPY) /* DoD basic security */#define IP_OPT_LSRR (3|IP_OPT_COPY) /* loose source route */#define IP_OPT_TS (4|IP_OPT_DEBMEAS) /* timestamp */#define IP_OPT_ESEC (5|IP_OPT_COPY) /* DoD extended security */#define IP_OPT_CIPSO (6|IP_OPT_COPY) /* commercial security */#define IP_OPT_RR 7 /* record route */#define IP_OPT_SATID (8|IP_OPT_COPY) /* stream ID (obsolete) */#define IP_OPT_SSRR (9|IP_OPT_COPY) /* strict source route */#define IP_OPT_ZSU 10 /* experimental measurement */#define IP_OPT_MTUP 11 /* MTU probe */#define IP_OPT_MTUR 12 /* MTU reply */#define IP_OPT_FINN (13|IP_OPT_COPY|IP_OPT_DEBMEAS) /* exp flow control */#define IP_OPT_VISA (14|IP_OPT_COPY) /* exp access control */#define IP_OPT_ENCODE 15 /* ??? */#define IP_OPT_IMITD (16|IP_OPT_COPY) /* IMI traffic descriptor */#define IP_OPT_EIP (17|IP_OPT_COPY) /* extended IP, RFC 1385 */#define IP_OPT_TR (18|IP_OPT_DEBMEAS) /* traceroute */#define IP_OPT_ADDEXT (19|IP_OPT_COPY) /* IPv7 ext addr, RFC 1475 */#define IP_OPT_RTRALT (20|IP_OPT_COPY) /* router alert, RFC 2113 */#define IP_OPT_SDB (21|IP_OPT_COPY) /* directed bcast, RFC 1770 */#define IP_OPT_NSAPA (22|IP_OPT_COPY) /* NSAP addresses */#define IP_OPT_DPS (23|IP_OPT_COPY) /* dynamic packet state */#define IP_OPT_UMP (24|IP_OPT_COPY) /* upstream multicast */#define IP_OPT_MAX 25#define IP_OPT_COPIED(o) ((o) & 0x80)#define IP_OPT_CLASS(o) ((o) & 0x60)#define IP_OPT_NUMBER(o) ((o) & 0x1f)#define IP_OPT_TYPEONLY(o) ((o) == IP_OPT_EOL || (o) == IP_OPT_NOP)/* * Security option data - RFC 791, 3.1 */struct ip_opt_data_sec { uint16_t s; /* security */ uint16_t c; /* compartments */ uint16_t h; /* handling restrictions */ uint8_t tcc[3]; /* transmission control code */} __attribute__((__packed__));#define IP_OPT_SEC_UNCLASS 0x0000 /* unclassified */#define IP_OPT_SEC_CONFID 0xf135 /* confidential */#define IP_OPT_SEC_EFTO 0x789a /* EFTO */#define IP_OPT_SEC_MMMM 0xbc4d /* MMMM */#define IP_OPT_SEC_PROG 0x5e26 /* PROG */#define IP_OPT_SEC_RESTR 0xaf13 /* restricted */#define IP_OPT_SEC_SECRET 0xd788 /* secret */#define IP_OPT_SEC_TOPSECRET 0x6bc5 /* top secret *//* * {Loose Source, Record, Strict Source} Route option data - RFC 791, 3.1 */struct ip_opt_data_rr { uint8_t ptr; /* from start of option, >= 4 */ uint32_t iplist __flexarr; /* list of IP addresses */} __attribute__((__packed__));/* * Timestamp option data - RFC 791, 3.1 */struct ip_opt_data_ts { uint8_t ptr; /* from start of option, >= 5 */#if DNET_BYTESEX == DNET_BIG_ENDIAN uint8_t oflw:4, /* number of IPs skipped */ flg:4; /* address[ / timestamp] flag */#elif DNET_BYTESEX == DNET_LIL_ENDIAN uint8_t flg:4, oflw:4;#endif uint32_t ipts __flexarr; /* IP address [/ timestamp] pairs */} __attribute__((__packed__));#define IP_OPT_TS_TSONLY 0 /* timestamps only */#define IP_OPT_TS_TSADDR 1 /* IP address / timestamp pairs */#define IP_OPT_TS_PRESPEC 3 /* IP address / zero timestamp pairs *//* * Traceroute option data - RFC 1393, 2.2 */struct ip_opt_data_tr { uint16_t id; /* ID number */ uint16_t ohc; /* outbound hop count */ uint16_t rhc; /* return hop count */ uint32_t origip; /* originator IP address */} __attribute__((__packed__));/* * IP option (following IP header) */struct ip_opt { uint8_t opt_type; /* option type */ uint8_t opt_len; /* option length >= IP_OPT_LEN */ union ip_opt_data { struct ip_opt_data_sec sec; /* IP_OPT_SEC */ struct ip_opt_data_rr rr; /* IP_OPT_{L,S}RR */ struct ip_opt_data_ts ts; /* IP_OPT_TS */ uint16_t satid; /* IP_OPT_SATID */ uint16_t mtu; /* IP_OPT_MTU{P,R} */ struct ip_opt_data_tr tr; /* IP_OPT_TR */ uint32_t addext[2]; /* IP_OPT_ADDEXT */ uint16_t rtralt; /* IP_OPT_RTRALT */ uint32_t sdb[9]; /* IP_OPT_SDB */ uint8_t data8[IP_OPT_LEN_MAX - IP_OPT_LEN]; } opt_data;} __attribute__((__packed__));#ifndef __GNUC__# pragma pack()#endif/* * Classful addressing */#define IP_CLASSA(i) (((uint32_t)(i) & htonl(0x80000000)) == \ htonl(0x00000000))#define IP_CLASSA_NET (htonl(0xff000000))#define IP_CLASSA_NSHIFT 24#define IP_CLASSA_HOST (htonl(0x00ffffff))#define IP_CLASSA_MAX 128#define IP_CLASSB(i) (((uint32_t)(i) & htonl(0xc0000000)) == \ htonl(0x80000000))#define IP_CLASSB_NET (htonl(0xffff0000))#define IP_CLASSB_NSHIFT 16#define IP_CLASSB_HOST (htonl(0x0000ffff))#define IP_CLASSB_MAX 65536#define IP_CLASSC(i) (((uint32_t)(i) & htonl(0xe0000000)) == \ htonl(0xc0000000))#define IP_CLASSC_NET (htonl(0xffffff00))#define IP_CLASSC_NSHIFT 8#define IP_CLASSC_HOST (htonl(0x000000ff))#define IP_CLASSD(i) (((uint32_t)(i) & htonl(0xf0000000)) == \ htonl(0xe0000000))/* These ones aren't really net and host fields, but routing needn't know. */#define IP_CLASSD_NET (htonl(0xf0000000))#define IP_CLASSD_NSHIFT 28#define IP_CLASSD_HOST (htonl(0x0fffffff))#define IP_MULTICAST(i) IP_CLASSD(i)#define IP_EXPERIMENTAL(i) (((uint32_t)(i) & htonl(0xf0000000)) == \ htonl(0xf0000000))#define IP_BADCLASS(i) (((uint32_t)(i) & htonl(0xf0000000)) == \ htonl(0xf0000000))#define IP_LOCAL_GROUP(i) (((uint32_t)(i) & htonl(0xffffff00)) == \ htonl(0xe0000000))/* * Reserved addresses */#define IP_ADDR_ANY (htonl(0x00000000)) /* 0.0.0.0 */#define IP_ADDR_BROADCAST (htonl(0xffffffff)) /* 255.255.255.255 */#define IP_ADDR_LOOPBACK (htonl(0x7f000001)) /* 127.0.0.1 */#define IP_ADDR_MCAST_ALL (htonl(0xe0000001)) /* 224.0.0.1 */#define IP_ADDR_MCAST_LOCAL (htonl(0xe00000ff)) /* 224.0.0.255 */#define ip_pack_hdr(hdr, tos, len, id, off, ttl, p, src, dst) do { \ struct ip_hdr *ip_pack_p = (struct ip_hdr *)(hdr); \ ip_pack_p->ip_v = 4; ip_pack_p->ip_hl = 5; \ ip_pack_p->ip_tos = tos; ip_pack_p->ip_len = htons(len); \ ip_pack_p->ip_id = htons(id); ip_pack_p->ip_off = htons(off); \ ip_pack_p->ip_ttl = ttl; ip_pack_p->ip_p = p; \ ip_pack_p->ip_src = src; ip_pack_p->ip_dst = dst; \} while (0)typedef struct ip_handle ip_t;__BEGIN_DECLSip_t *ip_open(void);ssize_t ip_send(ip_t *i, const void *buf, size_t len);ip_t *ip_close(ip_t *i);char *ip_ntop(const ip_addr_t *ip, char *dst, size_t len);int ip_pton(const char *src, ip_addr_t *dst);char *ip_ntoa(const ip_addr_t *ip);#define ip_aton ip_ptonssize_t ip_add_option(void *buf, size_t len, int proto, const void *optbuf, size_t optlen);void ip_checksum(void *buf, size_t len);int ip_cksum_add(const void *buf, size_t len, int cksum);#define ip_cksum_carry(x) \ (x = (x >> 16) + (x & 0xffff), (~(x + (x >> 16)) & 0xffff))__END_DECLS#endif /* DNET_IP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -