-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cc738b5
commit 43c501c
Showing
10 changed files
with
1,209 additions
and
7 deletions.
There are no files selected for viewing
Binary file not shown.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
// From Network Programming for Microsoft Windows, Second Edition by | ||
// Anthony Jones and James Ohlund. | ||
// Copyright 2002. Reproduced by permission of Microsoft Press. | ||
// All rights reserved. | ||
// | ||
// | ||
// Sample: Protocol header definitions used by ping (raw sockets) | ||
// | ||
// Files: | ||
// iphdr.h - this file | ||
// | ||
// Description: | ||
// This file contains various protocol header definitions used by | ||
// the raw socket ping sample. | ||
// | ||
// Compile: | ||
// See ping.cpp | ||
// | ||
// Usage: | ||
// See ping.cpp | ||
// | ||
|
||
// Align on a 1-byte boundary | ||
#include <pshpack1.h> | ||
|
||
// IPv4 header | ||
typedef struct ip_hdr | ||
{ | ||
unsigned char ip_verlen; // 4-bit IPv4 version | ||
// 4-bit header length (in 32-bit words) | ||
unsigned char ip_tos; // IP type of service | ||
unsigned short ip_totallength; // Total length | ||
unsigned short ip_id; // Unique identifier | ||
unsigned short ip_offset; // Fragment offset field | ||
unsigned char ip_ttl; // Time to live | ||
unsigned char ip_protocol; // Protocol(TCP,UDP etc) | ||
unsigned short ip_checksum; // IP checksum | ||
unsigned int ip_srcaddr; // Source address | ||
unsigned int ip_destaddr; // Source address | ||
} IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR; | ||
|
||
// IPv4 option header | ||
typedef struct ipv4_option_hdr | ||
{ | ||
unsigned char opt_code; // option type | ||
unsigned char opt_len; // length of the option header | ||
unsigned char opt_ptr; // offset into options | ||
unsigned long opt_addr[9]; // list of IPv4 addresses | ||
} IPV4_OPTION_HDR, *PIPV4_OPTION_HDR, FAR *LPIPV4_OPTION_HDR; | ||
|
||
// ICMP header | ||
typedef struct icmp_hdr | ||
{ | ||
unsigned char icmp_type; | ||
unsigned char icmp_code; | ||
unsigned short icmp_checksum; | ||
unsigned short icmp_id; | ||
unsigned short icmp_sequence; | ||
} ICMP_HDR, *PICMP_HDR, FAR *LPICMP_HDR; | ||
|
||
// IPv6 protocol header | ||
typedef struct ipv6_hdr | ||
{ | ||
unsigned long ipv6_vertcflow; // 4-bit IPv6 version | ||
// 8-bit traffic class | ||
// 20-bit flow label | ||
unsigned short ipv6_payloadlen; // payload length | ||
unsigned char ipv6_nexthdr; // next header protocol value | ||
unsigned char ipv6_hoplimit; // TTL | ||
struct in6_addr ipv6_srcaddr; // Source address | ||
struct in6_addr ipv6_destaddr; // Destination address | ||
} IPV6_HDR, *PIPV6_HDR, FAR * LPIPV6_HDR; | ||
|
||
// IPv6 fragment header | ||
typedef struct ipv6_fragment_hdr | ||
{ | ||
unsigned char ipv6_frag_nexthdr; | ||
unsigned char ipv6_frag_reserved; | ||
unsigned short ipv6_frag_offset; | ||
unsigned long ipv6_frag_id; | ||
} IPV6_FRAGMENT_HDR, *PIPV6_FRAGMENT_HDR, FAR * LPIPV6_FRAGMENT_HDR; | ||
|
||
// ICMPv6 header | ||
typedef struct icmpv6_hdr { | ||
unsigned char icmp6_type; | ||
unsigned char icmp6_code; | ||
unsigned short icmp6_checksum; | ||
} ICMPV6_HDR; | ||
|
||
// ICMPv6 echo request body | ||
typedef struct icmpv6_echo_request | ||
{ | ||
unsigned short icmp6_echo_id; | ||
unsigned short icmp6_echo_sequence; | ||
} ICMPV6_ECHO_REQUEST; | ||
|
||
// Define the UDP header | ||
typedef struct udp_hdr | ||
{ | ||
unsigned short src_portno; // Source port no. | ||
unsigned short dst_portno; // Dest. port no. | ||
unsigned short udp_length; // Udp packet length | ||
unsigned short udp_checksum; // Udp checksum (optional) | ||
} UDP_HDR, *PUDP_HDR; | ||
|
||
// IPv4 option for record route | ||
#define IP_RECORD_ROUTE 0x7 | ||
|
||
// ICMP6 protocol value (used in the socket call and IPv6 header) | ||
#define IPPROTO_ICMP6 58 | ||
|
||
// ICMP types and codes | ||
#define ICMPV4_ECHO_REQUEST_TYPE 8 | ||
#define ICMPV4_ECHO_REQUEST_CODE 0 | ||
#define ICMPV4_ECHO_REPLY_TYPE 0 | ||
#define ICMPV4_ECHO_REPLY_CODE 0 | ||
#define ICMPV4_MINIMUM_HEADER 8 | ||
|
||
// ICPM6 types and codes | ||
#define ICMPV6_ECHO_REQUEST_TYPE 128 | ||
#define ICMPV6_ECHO_REQUEST_CODE 0 | ||
#define ICMPV6_ECHO_REPLY_TYPE 129 | ||
#define ICMPV6_ECHO_REPLY_CODE 0 | ||
|
||
// Restore byte alignment back to default | ||
#include <poppack.h> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Oops, something went wrong.