/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 35 - (hide annotations)
Mon Oct 8 16:21:26 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 6720 byte(s)
0.4.4
1 dpavlin 4 #ifndef NET_H
2     #define NET_H
3    
4     /*
5 dpavlin 34 * Copyright (C) 2004-2007 Anders Gavare. All rights reserved.
6 dpavlin 4 *
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 dpavlin 34 * $Id: net.h,v 1.17 2006/12/30 13:31:01 debug Exp $
32 dpavlin 4 *
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 dpavlin 10 struct remote_net;
43 dpavlin 4
44    
45 dpavlin 32 /* 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 dpavlin 4 /*****************************************************************************/
51    
52 dpavlin 32 /*
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 dpavlin 4 /* 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 dpavlin 20 #define MAX_TCP_CONNECTIONS 100
119     #define MAX_UDP_CONNECTIONS 100
120 dpavlin 4
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 dpavlin 10
150     /* Distributed network: */
151     int local_port;
152     int local_port_socket;
153     struct remote_net *remote_nets;
154 dpavlin 4 };
155    
156 dpavlin 32 /* 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 dpavlin 4 /* net.c: */
176 dpavlin 32 struct ethernet_packet_link *net_allocate_ethernet_packet_link(
177     struct net *net, void *extra, size_t len);
178 dpavlin 4 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 dpavlin 32 const char *ipv4addr, int netipv4len, char **remote, int n_remote,
187     int local_port, const char *settings_prefix);
188 dpavlin 4
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 dpavlin 10 struct remote_net {
206     struct remote_net *next;
207 dpavlin 4
208 dpavlin 10 char *name;
209     struct in_addr ipv4_addr;
210     int portnr;
211     };
212    
213 dpavlin 4 #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 dpavlin 32 #define NET_ADDR_IPV4 1
221     #define NET_ADDR_IPV6 2
222     #define NET_ADDR_ETHERNET 3
223    
224 dpavlin 4 #endif /* NET_H */

  ViewVC Help
Powered by ViewVC 1.1.26