openhip-reference/src/include/win32/ip.h

171 lines
4.7 KiB
C

/*
* Host Identity Protocol
* Copyright (C) 2005 the Boeing Company
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* ip.h
*
* Authors: Jeff Ahrenholz <jeffrey.m.ahrenholz@boeing.com>
*
* Definitions for TCP/IP headers that are missing from Windows.
*
*/
#ifndef _HIP_IP_H_
#define _HIP_IP_H_
#include <ws2tcpip.h> /* this is required for the struct in6_addr's in
struct ip6_hdr */
#define IPVERSION 4
struct ip {
__u8 ip_hl:4, ip_v:4; /* MSVC requires these are char */
/*__u32 ip_hl:4; This will not work with MSVC.
__u32 ip_v:4;*/
__u8 ip_tos;
__u16 ip_len;
__u16 ip_id;
__u16 ip_off;
__u8 ip_ttl;
__u8 ip_p;
__u16 ip_sum;
union { /* allows use of struct ip or iphdr*/
struct in_addr ip_src;
__u32 saddr;
};
union {
struct in_addr ip_dst;
__u32 daddr;
};
};
/* allows use of struct ip or iphdr*/
#define iphdr ip
#define ihl ip_hl
struct udphdr {
/* __u16 uh_sport;
__u16 uh_dport; */
__u16 source;
__u16 dest;
__u16 uh_ulen;
__u16 check;
};
struct tcphdr {
/* __u16 th_sport;
__u16 th_dport; */
__u16 source;
__u16 dest;
__u32 th_seq;
__u32 th_ack;
__u8 th_x2:4, th_off:4;
__u8 th_flags;
__u16 th_win;
__u16 check;
__u16 th_urp;
};
/* from netinet/ip6.h */
struct ip6_hdr
{
union
{
struct ip6_hdrctl
{
__u32 ip6_un1_flow; /* 4 bits version, 8 bits TC,
20 bits flow-ID */
__u16 ip6_un1_plen; /* payload length */
__u8 ip6_un1_nxt; /* next header */
__u8 ip6_un1_hlim; /* hop limit */
} ip6_un1;
__u8 ip6_un2_vfc; /* 4 bits version, top 4 bits tclass */
} ip6_ctlun;
struct in6_addr ip6_src; /* source address */
struct in6_addr ip6_dst; /* destination address */
};
#define ip6_vfc ip6_ctlun.ip6_un2_vfc
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow
#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen
#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim
#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim
/* from netinet/icmp6.h */
struct icmp6_hdr
{
__u8 icmp6_type; /* type field */
__u8 icmp6_code; /* code field */
__u16 icmp6_cksum; /* checksum field */
union
{
__u32 icmp6_un_data32[1]; /* type-specific field */
__u16 icmp6_un_data16[2]; /* type-specific field */
__u8 icmp6_un_data8[4]; /* type-specific field */
} icmp6_dataun;
};
#define icmp6_data32 icmp6_dataun.icmp6_un_data32
#define icmp6_data16 icmp6_dataun.icmp6_un_data16
#define icmp6_data8 icmp6_dataun.icmp6_un_data8
#define icmp6_pptr icmp6_data32[0] /* parameter prob */
#define icmp6_mtu icmp6_data32[0] /* packet too big */
#define icmp6_id icmp6_data16[0] /* echo request/reply */
#define icmp6_seq icmp6_data16[1] /* echo request/reply */
#define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */
#define ICMP6_DST_UNREACH 1
#define ICMP6_PACKET_TOO_BIG 2
#define ICMP6_TIME_EXCEEDED 3
#define ICMP6_PARAM_PROB 4
#define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */
#define ICMP6_ECHO_REQUEST 128
#define ICMP6_ECHO_REPLY 129
#define ICMP6_MEMBERSHIP_QUERY 130
#define ICMP6_MEMBERSHIP_REPORT 131
#define ICMP6_MEMBERSHIP_REDUCTION 132
#define ND_ROUTER_SOLICIT 133
#define ND_ROUTER_ADVERT 134
#define ND_NEIGHBOR_SOLICIT 135
#define ND_NEIGHBOR_ADVERT 136
#define ND_REDIRECT 137
#if BYTE_ORDER == BIG_ENDIAN
#define ND_NA_FLAG_ROUTER 0x80000000
#define ND_NA_FLAG_SOLICITED 0x40000000
#define ND_NA_FLAG_OVERRIDE 0x20000000
#else /* BYTE_ORDER == LITTLE_ENDIAN */
#define ND_NA_FLAG_ROUTER 0x00000080
#define ND_NA_FLAG_SOLICITED 0x00000040
#define ND_NA_FLAG_OVERRIDE 0x00000020
#endif
struct nd_opt_hdr /* Neighbor discovery option header */
{
uint8_t nd_opt_type;
uint8_t nd_opt_len; /* in units of 8 octets */
/* followed by option specific data */
};
#define ND_OPT_SOURCE_LINKADDR 1
#define ND_OPT_TARGET_LINKADDR 2
#define ND_OPT_PREFIX_INFORMATION 3
#define ND_OPT_REDIRECTED_HEADER 4
#define ND_OPT_MTU 5
#define ND_OPT_RTR_ADV_INTERVAL 7
#define ND_OPT_HOME_AGENT_INFO 8
#endif /* _HIP_IP_H_ */