129 lines
3.8 KiB
C
129 lines
3.8 KiB
C
#ifndef _IPHDR_H_
|
|
#define _IPHDR_H_
|
|
|
|
#include <pshpack1.h>
|
|
|
|
//
|
|
// IPv4 Header (without any IP options)
|
|
//
|
|
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;
|
|
|
|
//
|
|
// IPv6 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 Fragmentation Header
|
|
//
|
|
typedef struct ipv6_fragment_hdr
|
|
{
|
|
unsigned char ipv6_frag_nexthdr; // Next protocol header
|
|
unsigned char ipv6_frag_reserved; // Reserved: zero
|
|
unsigned short ipv6_frag_offset; // Offset of fragment
|
|
unsigned long ipv6_frag_id; // Unique fragment ID
|
|
} IPV6_FRAGMENT_HDR, *PIPV6_FRAGMENT_HDR, FAR * LPIPV6_FRAGMENT_HDR;
|
|
|
|
//
|
|
// Define the UDP header
|
|
//
|
|
typedef struct udp_hdr
|
|
{
|
|
unsigned short src_portno; // Source port no.
|
|
unsigned short dest_portno; // Dest. port no.
|
|
unsigned short udp_length; // Udp packet length
|
|
unsigned short udp_checksum; // Udp checksum
|
|
} UDP_HDR, *PUDP_HDR;
|
|
|
|
//
|
|
// Define the TCP header
|
|
//
|
|
typedef struct tcp_hdr
|
|
{
|
|
unsigned short src_portno; // Source port no.
|
|
unsigned short dest_portno; // Dest. port no.
|
|
unsigned long seq_num; // Sequence number
|
|
unsigned long ack_num; // Acknowledgement number;
|
|
unsigned short lenflags; // Header length and flags
|
|
unsigned short window_size; // Window size
|
|
unsigned short tcp_checksum; // Checksum
|
|
unsigned short tcp_urgentptr; // Urgent data?
|
|
} TCP_HDR, *PTCP_HDR;
|
|
|
|
//
|
|
// Stucture to extract port numbers that overlays the UDP and TCP header
|
|
//
|
|
typedef struct port_hdr
|
|
{
|
|
unsigned short src_portno;
|
|
unsigned short dest_portno;
|
|
} PORT_HDR, *PPORT_HDR;
|
|
|
|
//
|
|
// IGMP header
|
|
//
|
|
typedef struct igmp_hdr
|
|
{
|
|
unsigned char version_type;
|
|
unsigned char max_resp_time;
|
|
unsigned short checksum;
|
|
unsigned long group_addr;
|
|
} IGMP_HDR, *PIGMP_HDR;
|
|
|
|
typedef struct igmp_hdr_query_v3
|
|
{
|
|
unsigned char type;
|
|
unsigned char max_resp_time;
|
|
unsigned short checksum;
|
|
unsigned long group_addr;
|
|
unsigned char resv_suppr_robust;
|
|
unsigned char qqi;
|
|
unsigned short num_sources;
|
|
unsigned long sources[1];
|
|
} IGMP_HDR_QUERY_V3, *PIGMP_HDR_QUERY_V3;
|
|
|
|
typedef struct igmp_group_record_v3
|
|
{
|
|
unsigned char type;
|
|
unsigned char aux_data_len;
|
|
unsigned short num_sources;
|
|
unsigned long group_addr;
|
|
unsigned long source_addr[1];
|
|
} IGMP_GROUP_RECORD_V3, *PIGMP_GROUP_RECORD_V3;
|
|
|
|
typedef struct igmp_hdr_report_v3
|
|
{
|
|
unsigned char type;
|
|
unsigned char reserved1;
|
|
unsigned short checksum;
|
|
unsigned short reserved2;
|
|
unsigned short num_records;
|
|
} IGMP_HDR_REPORT_V3, *PIGMP_HDR_REPORT_V3;
|
|
|
|
#include <poppack.h>
|
|
|
|
#endif
|