/[gxemul]/upstream/0.4.4/src/include/net.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /upstream/0.4.4/src/include/net.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (show annotations)
Mon Oct 8 16:21:26 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 6720 byte(s)
0.4.4
1 #ifndef NET_H
2 #define NET_H
3
4 /*
5 * Copyright (C) 2004-2007 Anders Gavare. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 *
31 * $Id: net.h,v 1.17 2006/12/30 13:31:01 debug Exp $
32 *
33 * Emulated network support. (See net.c for more info.)
34 */
35
36 #include <netinet/in.h>
37 #include <arpa/inet.h>
38 #include <netdb.h>
39
40 struct emul;
41 struct ethernet_packet_link;
42 struct remote_net;
43
44
45 /* Default emulated "simple" IPv4 network, if nothing else is specified: */
46 #define NET_DEFAULT_IPV4_MASK "10.0.0.0"
47 #define NET_DEFAULT_IPV4_LEN 8
48
49
50 /*****************************************************************************/
51
52 /*
53 * NOTE: These are already defined in <net/ethernet.h> on e.g. FreeBSD,
54 * but they are missing in some systems (at least in Linux).
55 */
56 #define ETHERTYPE_SPRITE 0x0500
57 #define ETHERTYPE_IP 0x0800
58 #define ETHERTYPE_ARP 0x0806
59 #define ETHERTYPE_REVARP 0x8035
60 #define ETHERTYPE_IPV6 0x86DD
61
62 /*****************************************************************************/
63
64 /* NOTE: udp_connection and tcp_connection are actually for
65 internal use only. */
66 struct udp_connection {
67 int in_use;
68 int64_t last_used_timestamp;
69
70 /* Inside: */
71 unsigned char ethernet_address[6];
72 unsigned char inside_ip_address[4];
73 int inside_udp_port;
74
75 /* TODO: Fragment support for outgoing packets! */
76 int fake_ns;
77
78 /* Outside: */
79 int udp_id;
80 int socket;
81 unsigned char outside_ip_address[4];
82 int outside_udp_port;
83 };
84
85 struct tcp_connection {
86 int in_use;
87 int64_t last_used_timestamp;
88
89 /* Inside: */
90 unsigned char ethernet_address[6];
91 unsigned char inside_ip_address[4];
92 int inside_tcp_port;
93 uint32_t inside_timestamp;
94
95 /* TODO: tx and rx buffers? */
96 unsigned char *incoming_buf;
97 int incoming_buf_rounds;
98 int incoming_buf_len;
99 uint32_t incoming_buf_seqnr;
100
101 uint32_t inside_seqnr;
102 uint32_t inside_acknr;
103 uint32_t outside_seqnr;
104 uint32_t outside_acknr;
105
106 /* Outside: */
107 int state;
108 int tcp_id;
109 int socket;
110 unsigned char outside_ip_address[4];
111 int outside_tcp_port;
112 uint32_t outside_timestamp;
113 };
114
115 /*****************************************************************************/
116
117
118 #define MAX_TCP_CONNECTIONS 100
119 #define MAX_UDP_CONNECTIONS 100
120
121 struct net {
122 /* The emul struct which this net belong to: */
123 struct emul *emul;
124
125 /* The network's addresses: */
126 struct in_addr netmask_ipv4;
127 int netmask_ipv4_len;
128
129 /* NICs connected to this network: */
130 int n_nics;
131 void **nic_extra; /* one void * per NIC */
132
133 /* The "special machine": */
134 unsigned char gateway_ipv4_addr[4];
135 unsigned char gateway_ethernet_addr[6];
136
137 /* Read from /etc/resolv.conf: */
138 char *domain_name;
139 int nameserver_known;
140 struct in_addr nameserver_ipv4;
141
142 int64_t timestamp;
143
144 struct ethernet_packet_link *first_ethernet_packet;
145 struct ethernet_packet_link *last_ethernet_packet;
146
147 struct udp_connection udp_connections[MAX_UDP_CONNECTIONS];
148 struct tcp_connection tcp_connections[MAX_TCP_CONNECTIONS];
149
150 /* Distributed network: */
151 int local_port;
152 int local_port_socket;
153 struct remote_net *remote_nets;
154 };
155
156 /* net_misc.c: */
157 void net_debugaddr(void *addr, int type);
158 void net_generate_unique_mac(struct machine *, unsigned char *macbuf);
159 void send_udp(struct in_addr *addrp, int portnr, unsigned char *packet,
160 size_t len);
161
162 /* net_ip.c: */
163 void net_ip_checksum(unsigned char *ip_header, int chksumoffset, int len);
164 void net_ip_tcp_checksum(unsigned char *tcp_header, int chksumoffset,
165 int tcp_len, unsigned char *srcaddr, unsigned char *dstaddr,
166 int udpflag);
167 void net_ip_tcp_connectionreply(struct net *net, void *extra,
168 int con_id, int connecting, unsigned char *data, int datalen, int rst);
169 void net_ip_broadcast(struct net *net, void *extra,
170 unsigned char *packet, int len);
171 void net_ip(struct net *net, void *extra, unsigned char *packet, int len);
172 void net_udp_rx_avail(struct net *net, void *extra);
173 void net_tcp_rx_avail(struct net *net, void *extra);
174
175 /* net.c: */
176 struct ethernet_packet_link *net_allocate_ethernet_packet_link(
177 struct net *net, void *extra, size_t len);
178 int net_ethernet_rx_avail(struct net *net, void *extra);
179 int net_ethernet_rx(struct net *net, void *extra,
180 unsigned char **packetp, int *lenp);
181 void net_ethernet_tx(struct net *net, void *extra,
182 unsigned char *packet, int len);
183 void net_dumpinfo(struct net *net);
184 void net_add_nic(struct net *net, void *extra, unsigned char *macaddr);
185 struct net *net_init(struct emul *emul, int init_flags,
186 const char *ipv4addr, int netipv4len, char **remote, int n_remote,
187 int local_port, const char *settings_prefix);
188
189 /* Flag used to signify that this net should have a gateway: */
190 #define NET_INIT_FLAG_GATEWAY 1
191
192
193 /*
194 * This is for internal use in src/net.c:
195 */
196 struct ethernet_packet_link {
197 struct ethernet_packet_link *prev;
198 struct ethernet_packet_link *next;
199
200 void *extra;
201 unsigned char *data;
202 int len;
203 };
204
205 struct remote_net {
206 struct remote_net *next;
207
208 char *name;
209 struct in_addr ipv4_addr;
210 int portnr;
211 };
212
213 #define TCP_OUTSIDE_TRYINGTOCONNECT 1
214 #define TCP_OUTSIDE_CONNECTED 2
215 #define TCP_OUTSIDE_DISCONNECTED 3
216 #define TCP_OUTSIDE_DISCONNECTED2 4
217
218 #define TCP_INCOMING_BUF_LEN 2000
219
220 #define NET_ADDR_IPV4 1
221 #define NET_ADDR_IPV6 2
222 #define NET_ADDR_ETHERNET 3
223
224 #endif /* NET_H */

  ViewVC Help
Powered by ViewVC 1.1.26