~ubuntu-branches/ubuntu/vivid/basilisk2/vivid

« back to all changes in this revision

Viewing changes to src/Windows/router/router_types.h

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard
  • Date: 2008-03-06 19:33:01 UTC
  • mfrom: (2.1.4 gutsy)
  • Revision ID: james.westby@ubuntu.com-20080306193301-cc2ofn705nfsq3y0
Tags: 0.9.20070407-4
* Update copyright-check cdbs snippet to parse licensecheck using perl:
  + No longer randomly drops newlines
  + More compact hint file (and ordered more like wiki-proposed new copyright
    syntax).
  + No longer ignore files without copyright.
* Update copyright_hints.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  router_types.h - ip router
 
3
 *
 
4
 *  Basilisk II (C) 1997-2001 Christian Bauer
 
5
 *
 
6
 *  Windows platform specific code copyright (C) Lauri Pesonen
 
7
 *
 
8
 *  This program is free software; you can redistribute it and/or modify
 
9
 *  it under the terms of the GNU General Public License as published by
 
10
 *  the Free Software Foundation; either version 2 of the License, or
 
11
 *  (at your option) any later version.
 
12
 *
 
13
 *  This program is distributed in the hope that it will be useful,
 
14
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
 *  GNU General Public License for more details.
 
17
 *
 
18
 *  You should have received a copy of the GNU General Public License
 
19
 *  along with this program; if not, write to the Free Software
 
20
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
21
 */
 
22
 
 
23
#ifndef _ROUTER_TYPES_H_
 
24
#define _ROUTER_TYPES_H_
 
25
 
 
26
#pragma pack(1)
 
27
 
 
28
 
 
29
// --------------------------- MAC ---------------------------
 
30
typedef struct {
 
31
        uint8 dest[6];
 
32
        uint8 src[6];
 
33
        uint16 type;
 
34
} ATTRIBUTE_PACKED mac_t;
 
35
 
 
36
enum {
 
37
        mac_type_llc_ipx_limit  = 0x05DC, // <= mac_type_llc_ipx_limit -->> 802.3 MAC frame
 
38
        mac_type_ip4                                            = 0x0800,
 
39
        mac_type_arp                                            = 0x0806,
 
40
        mac_type_rarp                                           = 0x8035,
 
41
        mac_type_ip6                                            = 0x86DD,
 
42
        mac_type_loopback                               = 0x9000
 
43
};
 
44
 
 
45
// --------------------------- ARP ---------------------------
 
46
typedef struct {
 
47
        mac_t mac;
 
48
        uint16 htype;
 
49
        uint16 ptype;
 
50
        uint8 halen;
 
51
        uint8 palen;
 
52
        uint16 opcode;
 
53
        uint8 srch[6];  // size for ethernet
 
54
        uint8 srcp[4];  // size for ip
 
55
        uint8 dsth[6];  // size for ethernet
 
56
        uint8 dstp[4];  // size for ip
 
57
} ATTRIBUTE_PACKED arp_t;
 
58
 
 
59
enum {
 
60
        arp_request = 1,
 
61
        arp_reply = 2
 
62
};
 
63
enum {
 
64
        arp_hwtype_enet = 1
 
65
};
 
66
 
 
67
// --------------------------- IP4 ---------------------------
 
68
typedef struct {
 
69
        mac_t mac;
 
70
        uint8 header_len:4;
 
71
        uint8 version:4;
 
72
        uint8 tos;
 
73
        uint16 total_len;
 
74
        uint16 ident;
 
75
        uint16 flags_n_frag_offset; // foffset 0..11, flags 12..15
 
76
        uint8 ttl;
 
77
        uint8 proto;
 
78
        uint16 checksum;
 
79
        uint32 src;
 
80
        uint32 dest;
 
81
        // ip options, size = 4 * header_len - 20
 
82
} ATTRIBUTE_PACKED ip_t;
 
83
 
 
84
// Protocol STD numbers
 
85
enum {
 
86
        ip_proto_icmp           = IPPROTO_ICMP,
 
87
        ip_proto_tcp            = IPPROTO_TCP,
 
88
        ip_proto_udp            = IPPROTO_UDP
 
89
};
 
90
 
 
91
// --------------------------- ICMP ---------------------------
 
92
typedef struct {
 
93
        ip_t ip;
 
94
        uint8 type;
 
95
        uint8 code;
 
96
        uint16 checksum;
 
97
        // data
 
98
} ATTRIBUTE_PACKED icmp_t;
 
99
 
 
100
enum {
 
101
        icmp_Echo_reply = 0,
 
102
        icmp_Destination_unreachable    = 3,
 
103
        icmp_Source_quench      = 4,
 
104
        icmp_Redirect   = 5,
 
105
        icmp_Echo       = 8,
 
106
        icmp_Router_advertisement       = 9,
 
107
        icmp_Router_solicitation        = 10,
 
108
        icmp_Time_exceeded      = 11,
 
109
        icmp_Parameter_problem  = 12,
 
110
        icmp_Time_Stamp_request = 13,
 
111
        icmp_Time_Stamp_reply   = 14,
 
112
        icmp_Information_request_obsolete       = 15,
 
113
        icmp_Information_reply_obsolete = 16,
 
114
        icmp_Address_mask_request       = 17,
 
115
        icmp_Address_mask_reply = 18,
 
116
        icmp_Traceroute = 30,
 
117
        icmp_Datagram_conversion_error  = 31,
 
118
        icmp_Mobile_host_redirect       = 32,
 
119
        icmp_IPv6_Where_Are_You = 33,
 
120
        icmp_IPv6_I_Am_Here     = 34,
 
121
        icmp_Mobile_registration_request        = 35,
 
122
        icmp_Mobile_registration_reply  = 36,
 
123
        icmp_Domain_name_request        = 37,
 
124
        icmp_Domain_name_reply  = 38,
 
125
        icmp_SKIP       = 39,
 
126
        icmp_Photuris   = 40
 
127
};
 
128
 
 
129
// --------------------------- TCP ---------------------------
 
130
typedef struct {
 
131
        ip_t ip;
 
132
        uint16 src_port;
 
133
        uint16 dest_port;
 
134
        uint32 seq;
 
135
        uint32 ack;
 
136
        uint8 header_len;       // note: some reserved bits
 
137
        uint8 flags;                    // note: some reserved bits
 
138
        uint16 window;
 
139
        uint16 checksum;
 
140
        uint16 urgent_ptr;
 
141
        // options + padding: size = dataoffset*4-20
 
142
        // data
 
143
} ATTRIBUTE_PACKED tcp_t;
 
144
 
 
145
enum {
 
146
        tcp_flags_URG = 0x20,   // The urgent pointer field is significant in this segment.
 
147
        tcp_flags_ACK = 0x10,   // The acknowledgment field is significant in this segment.
 
148
        tcp_flags_PSH = 0x08,   // Push function.
 
149
        tcp_flags_RST = 0x04,   // Resets the connection.
 
150
        tcp_flags_SYN = 0x02,   // Synchronizes the sequence numbers.
 
151
        tcp_flags_FIN = 0x01    // No more data from sender.
 
152
};
 
153
 
 
154
enum {
 
155
        tcp_state_closed,
 
156
        tcp_state_listen,
 
157
        tcp_state_syn_sent,
 
158
        tcp_state_syn_rcvd,
 
159
        tcp_state_established,
 
160
        tcp_state_close_wait,
 
161
        tcp_state_last_ack,
 
162
        tcp_state_finwait_1,
 
163
        tcp_state_finwait_2,
 
164
        tcp_state_closing,
 
165
        tcp_state_time_wait
 
166
};
 
167
 
 
168
// --------------------------- UDP ---------------------------
 
169
typedef struct {
 
170
        ip_t ip;
 
171
        uint16 src_port;
 
172
        uint16 dest_port;
 
173
        uint16 msg_len;
 
174
        uint16 checksum;
 
175
        // data
 
176
} ATTRIBUTE_PACKED udp_t;
 
177
 
 
178
typedef struct {
 
179
        uint16 src_lo, src_hi;
 
180
        uint16 dest_lo, dest_hi;
 
181
        uint16 proto;
 
182
        uint16 msg_len;
 
183
} ATTRIBUTE_PACKED pseudo_ip_t;
 
184
 
 
185
#pragma pack()
 
186
 
 
187
#endif // _ROUTER_TYPES_H_