#define L4_PKT_TYPE_TCP 0x1
#define L4_PKT_TYPE_UDP 0x2
#define L4_PKT_TYPE_SCTP 0x4
#define L4_PKT_TYPE_AH 0x8
#define L4_PKT_TYPE_ESP 0x10
#define L4_PKT_TYPE_ICMP 0x20
#define L4_PKT_TYPE_IGMP 0x40
#define L4_PKT_TYPE_GRE 0x80
#define L4_PKT_TYPE_EGRE 0x100
#define L4_PKT_TYPE_PIM 0x200
#define L4_PKT_TYPE_RSVP 0x400
#define L3_PKT_TYPE_FRAG 0x8
#define L3_PKT_TYPE_OPT 0x4
#define L3_PKT_TYPE_IPV6 0x2
#define L3_PKT_TYPE_IPV4 0x1
#define L2_PKT_TYPE_LLCSNAP 0x10
#define L2_PKT_TYPE_TAGGED 0x8
// Need some defines for ARP, etc
#define L2_PKT_TYPE_RARP 0x4
#define L2_PKT_TYPE_ARP 0x2
// defines from old pktgen - only for compatibility
// Class Type Definitions
#define PKTGEN_CL_IP_OPT 8
#define PKTGEN_CL_IP_FRAG 9
#define PKTGEN_CL_IP_ROUTE 10
#define PKTGEN_CL_IP_SEC_AH 11
#define PKTGEN_CL_IP_SEC_ESP 12
#define PKTGEN_CL_UDP_FRAG 14
#define PKTGEN_CL_UDP_OPT 15
#define PKTGEN_CL_TCP_FRAG 17
#define PKTGEN_CL_TCP_OPT 18
#define PKTGEN_CL_SCTP 19
#define PKTGEN_CL_SCTP_OPT 20
#define PKTGEN_CL_SCTP_FRAG 21
// (Values must be a DETLA apart from their IPv4 class)
#define PKTGEN_CL_ARP_IP_V6 PKTGEN_DELTA + 0
#define PKTGEN_CL_RARP_IP_V6 PKTGEN_DELTA + 1
#define PKTGEN_CL_RSVP_IP_V6 PKTGEN_DELTA + 2
#define PKTGEN_CL_IGMP_IP_V6 PKTGEN_DELTA + 3
#define PKTGEN_CL_ICMP_IP_V6 PKTGEN_DELTA + 4
#define PKTGEN_CL_PIM_IP_V6 PKTGEN_DELTA + 5
#define PKTGEN_CL_GRE_IP_V6 PKTGEN_DELTA + 6
#define PKTGEN_CL_IP_V6 PKTGEN_DELTA + 7
#define PKTGEN_CL_IP_V6_OPT PKTGEN_DELTA + 8
#define PKTGEN_CL_IP_V6_FRAG PKTGEN_DELTA + 9
#define PKTGEN_CL_IP_V6_ROUTE PKTGEN_DELTA + 10
#define PKTGEN_CL_IP_V6_SEC_AH PKTGEN_DELTA + 11
#define PKTGEN_CL_IP_V6_SEC_ESP PKTGEN_DELTA + 12
#define PKTGEN_CL_UDP_IP_V6 PKTGEN_DELTA + 13
#define PKTGEN_CL_UDP_FRAG_IP_V6 PKTGEN_DELTA + 14
#define PKTGEN_CL_UDP_OPT_IP_V6 PKTGEN_DELTA + 15
#define PKTGEN_CL_TCP_IP_V6 PKTGEN_DELTA + 16
#define PKTGEN_CL_TCP_FRAG_IP_V6 PKTGEN_DELTA + 17
#define PKTGEN_CL_TCP_OPT_IP_V6 PKTGEN_DELTA + 18
#define PKTGEN_CL_IP_TUN_V4_V4 PKTGEN_DELTA + 19
#define PKTGEN_CL_IP_TUN_V4_V6 PKTGEN_DELTA + 20
#define PKTGEN_CL_IP_TUN_V6_V4 PKTGEN_DELTA + 21
#define PKTGEN_CL_IP_TUN_V6_V6 PKTGEN_DELTA + 22
#define PKTGEN_CL_SCTP_IP_V6 PKTGEN_DELTA + 23
#define PKTGEN_CL_IP_V6_LAST_VALUE PKTGEN_CL_IP_TUN_V6_V6
#define PKTGEN_CL_RUNT 200
#define PG_CHKSUM_ERR 0x1
#define PG_CHKSUM_USER_MODE 0x2
#define PG_TYPE_LEN_ERR 0x8
#define PG_L4_PROTO_USER_MODE 0x10
#define PG_TYPE_LEN_USER_MODE 0x20
struct ether_packet_desc
{
uint16_t hw_type
; /* format of hardware addr, 0x01 for
uint16_t proto_type
; /* format of protocol addr, 0x0800 for
uint8_t hw_len
; /* length of hardware addr, 0x06 for
uint8_t proto_len
; /* length of protocol addr, 0x04 for
uint16_t op_code
; /* ARP opcode, 0x01 - ARP req,
0x02 - ARP reply, 0x03 - RARP req,
uint8_t src_ha
[6]; /* sender hardware address */
uint8_t src_ip
[4]; /* sender IP address */
uint8_t tgt_ha
[6]; /* target hardware address */
uint8_t tgt_ip
[4]; /* target IP address */
struct ipv6_packet_desc
{
struct ipsec_ah_packet_desc
{
} ipsec_ah_packet_desc_t
;
struct sctp_packet_desc
{
u_int16_t src_port
; /* source port */
u_int16_t dst_port
; /* destination port */
u_int32_t vtag
; /* verification tag */
u_int32_t checksum
; /* checksum */
struct icmp_packet_desc
{
#define ICMP_TYPE_ECHO_REQ 1
#define ICMP_TYPE_ECHO_REPLY 2
struct igmp_packet_desc
{
u_int32_t grp_ip
; /* IGMP host IP */
struct rsvp_packet_desc
{
/* Enhanced GRE (GRE version 1) */
struct egre_packet_desc
{
uint32_t error_data
; // used for user input based upon the error code
uint8_t l4_flag
; /* Packet Type */
uint16_t l2_len
; /* Ethernet packet len */
uint8_t l2_pkt_type
; /* Packet Type */
uint16_t l2_hdr
; /*l2 hdr length*/
uint16_t l3_len
; /* L3 packet len */
uint8_t l3_pkt_type
; /* Packet Type */
uint16_t l3_hdr
; /*l3 hdr length*/
uint16_t l4_len
; /* L4 packet len */
uint16_t l4_pkt_type
; /* Packet Type */
uint16_t l4_hdr
; /*l4 hdr length*/
uint8_t *buffer
; /* Allocated Ethernet Buffer */
struct tcp_packet_desc tcp
;
struct udp_packet_desc udp
;
struct icmp_packet_desc icmp
;
struct igmp_packet_desc igmp
;
struct pim_packet_desc pim
;
struct gre_packet_desc gre
;
struct rsvp_packet_desc rsvp
;
struct egre_packet_desc egre
;
struct ip_packet_desc ip
;
struct sctp_packet_desc sctp
;
struct arp_packet_desc arp
;
struct ipv6_packet_desc ipv6
;
struct ipsec_ah_packet_desc ipsec_ah
;
struct ether_packet_desc ether
;
struct payload_desc payload
;