/[gxemul]/upstream/0.3.6/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.3.6/src/include/net.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15 - (show annotations)
Mon Oct 8 16:18:56 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 5154 byte(s)
0.3.6
1 #ifndef NET_H
2 #define NET_H
3
4 /*
5 * Copyright (C) 2004-2005 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.12 2005/06/17 21:00:04 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 /*****************************************************************************/
46
47 /* NOTE: udp_connection and tcp_connection are actually for
48 internal use only. */
49 struct udp_connection {
50 int in_use;
51 int64_t last_used_timestamp;
52
53 /* Inside: */
54 unsigned char ethernet_address[6];
55 unsigned char inside_ip_address[4];
56 int inside_udp_port;
57
58 /* TODO: Fragment support for outgoing packets! */
59 int fake_ns;
60
61 /* Outside: */
62 int udp_id;
63 int socket;
64 unsigned char outside_ip_address[4];
65 int outside_udp_port;
66 };
67
68 struct tcp_connection {
69 int in_use;
70 int64_t last_used_timestamp;
71
72 /* Inside: */
73 unsigned char ethernet_address[6];
74 unsigned char inside_ip_address[4];
75 int inside_tcp_port;
76 uint32_t inside_timestamp;
77
78 /* TODO: tx and rx buffers? */
79 unsigned char *incoming_buf;
80 int incoming_buf_rounds;
81 int incoming_buf_len;
82 uint32_t incoming_buf_seqnr;
83
84 uint32_t inside_seqnr;
85 uint32_t inside_acknr;
86 uint32_t outside_seqnr;
87 uint32_t outside_acknr;
88
89 /* Outside: */
90 int state;
91 int tcp_id;
92 int socket;
93 unsigned char outside_ip_address[4];
94 int outside_tcp_port;
95 uint32_t outside_timestamp;
96 };
97
98 /*****************************************************************************/
99
100
101 #define MAX_TCP_CONNECTIONS 60
102 #define MAX_UDP_CONNECTIONS 60
103
104 struct net {
105 /* The emul struct which this net belong to: */
106 struct emul *emul;
107
108 /* The network's addresses: */
109 struct in_addr netmask_ipv4;
110 int netmask_ipv4_len;
111
112 /* NICs connected to this network: */
113 int n_nics;
114 void **nic_extra; /* one void * per NIC */
115
116 /* The "special machine": */
117 unsigned char gateway_ipv4_addr[4];
118 unsigned char gateway_ethernet_addr[6];
119
120 /* Read from /etc/resolv.conf: */
121 char *domain_name;
122 int nameserver_known;
123 struct in_addr nameserver_ipv4;
124
125 int64_t timestamp;
126
127 struct ethernet_packet_link *first_ethernet_packet;
128 struct ethernet_packet_link *last_ethernet_packet;
129
130 struct udp_connection udp_connections[MAX_UDP_CONNECTIONS];
131 struct tcp_connection tcp_connections[MAX_TCP_CONNECTIONS];
132
133 /* Distributed network: */
134 int local_port;
135 int local_port_socket;
136 struct remote_net *remote_nets;
137 };
138
139 /* net.c: */
140 void net_generate_unique_mac(struct machine *, unsigned char *macbuf);
141 int net_ethernet_rx_avail(struct net *net, void *extra);
142 int net_ethernet_rx(struct net *net, void *extra,
143 unsigned char **packetp, int *lenp);
144 void net_ethernet_tx(struct net *net, void *extra,
145 unsigned char *packet, int len);
146 void net_dumpinfo(struct net *net);
147 void net_add_nic(struct net *net, void *extra, unsigned char *macaddr);
148 struct net *net_init(struct emul *emul, int init_flags,
149 char *ipv4addr, int netipv4len, char **remote, int n_remote,
150 int local_port);
151
152 /* Flag used to signify that this net should have a gateway: */
153 #define NET_INIT_FLAG_GATEWAY 1
154
155
156 /*
157 * This is for internal use in src/net.c:
158 */
159 struct ethernet_packet_link {
160 struct ethernet_packet_link *prev;
161 struct ethernet_packet_link *next;
162
163 void *extra;
164 unsigned char *data;
165 int len;
166 };
167
168 struct remote_net {
169 struct remote_net *next;
170
171 char *name;
172 struct in_addr ipv4_addr;
173 int portnr;
174 };
175
176 #define TCP_OUTSIDE_TRYINGTOCONNECT 1
177 #define TCP_OUTSIDE_CONNECTED 2
178 #define TCP_OUTSIDE_DISCONNECTED 3
179 #define TCP_OUTSIDE_DISCONNECTED2 4
180
181 #define TCP_INCOMING_BUF_LEN 2000
182
183 #endif /* NET_H */

  ViewVC Help
Powered by ViewVC 1.1.26