MODULE IPDEF IDENT "IPDEF-1-X"; /*++ /* /* Facility: Internet Protocol /* /* /* Abstract: /* /* Author: Ruslan R. Laishev /* /* Creation Date: 06-OCT-2009 /* /* Modification History: /* /*-- /* /* ASSIGNED INTERNET PROTOCOL NUMBERS /* CONSTANT icmp EQUALS 1 PREFIX ip$ TAG proto, tcp EQUALS 6 PREFIX ip$ TAG proto, udp EQUALS 17 PREFIX ip$ TAG proto; /* /* ASSIGNED PORT NUMBERS /* CONSTANT telnet EQUALS 23 PREFIX ip$ TAG port, http EQUALS 80 PREFIX ip$ TAG port, https EQUALS 443 PREFIX ip$ TAG port, pop3 EQUALS 110 PREFIX ip$ TAG port, pop3s EQUALS 495 PREFIX ip$ TAG port; CONSTANT broad EQUALS %xFFFFFFFF PREFIX ip4$ TAG addr; AGGREGATE addr UNION PREFIX ip4$ TAG ip4 NOALIGN; addr BYTE UNSIGNED DIMENSION 4; addr STRUCTURE LONGWORD UNSIGNED; hi WORD UNSIGNED; lo WORD UNSIGNED; END addr; END addr; /* /* TCP connection states ( Normal states for server) /* CONSTANT ( closed, listen, syn_rcvd, syn_sent, established, close_wait, last_ack ) EQUALS 1 INCREMENT 1 PREFIX arp$; /* /* TCP header structure /* AGGREGATE seg STRUCTURE PREFIX tcp$ TAG tcp NOALIGN; spn WORD UNSIGNED; dpn WORD UNSIGNED; seq LONGWORD UNSIGNED; ack LONGWORD UNSIGNED; hlen STRUCTURE BYTE UNSIGNED; fill BITFIELD LENGTH 4 MASK; hlen BITFIELD LENGTH 4 MASK; END hlen; ctl STRUCTURE BYTE UNSIGNED; fin BITFIELD LENGTH 1 MASK; syn BITFIELD LENGTH 1 MASK; rst BITFIELD LENGTH 1 MASK; psh BITFIELD LENGTH 1 MASK; ack BITFIELD LENGTH 1 MASK; urg BITFIELD LENGTH 1 MASK; fill BITFIELD LENGTH 2 FILL; END ctl; winsz WORD UNSIGNED; csum WORD UNSIGNED; urgp WORD UNSIGNED; CONSTANT sz EQUALS .; _u1 UNION FILL; opts LONGWORD UNSIGNED DIMENSION 1; data BYTE UNSIGNED DIMENSION 1; END _u1; END seg; AGGREGATE dgram STRUCTURE PREFIX udp$ TAG udp NOALIGN; spn WORD UNSIGNED; dpn WORD UNSIGNED; len WORD UNSIGNED; csum WORD UNSIGNED; data BYTE UNSIGNED DIMENSION 1; END dgram; AGGREGATE dgram STRUCTURE PREFIX ip$ TAG ip NOALIGN; _s STRUCTURE BYTE UNSIGNED FILL; hlen BITFIELD LENGTH 4 MASK; ver BITFIELD LENGTH 4 MASK; CONSTANT ip4 EQUALS 4 PREFIX ip$ TAG ver, ip6 EQUALS 6 PREFIX ip$ TAG ver; END _s; CONSTANT nodelay EQUALS %B1000 PREFIX ip$ TAG tos, thrpt EQUALS %B0100 PREFIX ip$ TAG tos, rel EQUALS %B0010 PREFIX ip$ TAG tos, nocost EQUALS %B0001 PREFIX ip$ TAG tos, norm EQUALS %B0001 PREFIX ip$ TAG tos; tos STRUCTURE BYTE UNSIGNED; precedence BITFIELD LENGTH 3 MASK; tos BITFIELD LENGTH 4 MASK; mbz BITFIELD LENGTH 1 FILL; END tos; len WORD UNSIGNED; id WORD UNSIGNED; flags STRUCTURE WORD UNSIGNED; mf BITFIELD LENGTH 1 MASK; /* Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments. df BITFIELD LENGTH 1 MASK; /* Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment. mbz BITFIELD LENGTH 1 FILL; /* Bit 0: reserved, must be zero off BITFIELD LENGTH 13; END flags; ttl BYTE UNSIGNED; proto BYTE UNSIGNED; csum WORD UNSIGNED; src ip4_addr; dst ip4_addr; CONSTANT sz EQUALS .; _u1 UNION FILL; opts LONGWORD UNSIGNED DIMENSION 1; data BYTE UNSIGNED DIMENSION 1; seg tcp_seg; dgram udp_dgram; END _u1; END dgram; /* /* Ethernet's Media Access Control /* AGGREGATE mac UNION PREFIX eth$ TAG eth NOALIGN; mac STRUCTURE BYTE UNSIGNED DIMENSION 6; grp BITFIELD LENGTH 1 MASK; univ BITFIELD LENGTH 1 MASK; vendor BITFIELD LENGTH 22 MASK; inum BITFIELD LENGTH 24 MASK; END mac; CONSTANT macsz EQUALS .; END mac; /* /* ASSIGNED INTERNET PROTOCOL NUMBERS /* CONSTANT ip EQUALS %x0800 PREFIX pty$, arp EQUALS %x0806 PREFIX pty$, rarp EQUALS %x0835 PREFIX pty$; /* /* Classical Ethernet II frame format /* AGGREGATE eth2 STRUCTURE PREFIX eth2$ TAG hdr NOALIGN; da eth_mac; /* Destination Address sa eth_mac; /* Source Address pty WORD UNSIGNED; /* Ethernet Protocol Type CONSTANT hdrsz EQUALS .; data BYTE UNSIGNED DIMENSION 1; /* User's data (can include 2byte length field) crc LONGWORD UNSIGNED; /* Cyclic Redundancy Check END eth2; /* /* IP ARP Datagram /* CONSTANT ( request, reply ) EQUALS 1 INCREMENT 1 PREFIX arp$; AGGREGATE pdu STRUCTURE PREFIX arp$ TAG arp; hrd WORD UNSIGNED; /* Hardware address space (e.g., Ethernet, /* Packet Radio Net.) proto WORD UNSIGNED; /* Protocol address space. For Ethernet /* hardware, this is from the set of type /* fields ether_typ$. hln BYTE UNSIGNED; /* byte length of each hardware address pln BYTE UNSIGNED; /* byte length of each protocol address op WORD UNSIGNED; /* opcode (ares_op$REQUEST | ares_op$REPLY) sha eth_mac; spa ip4_addr; tha eth_mac; tpa ip4_addr; END pdu; END_MODULE IPDEF;