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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 29 - (hide annotations)
Mon Oct 8 16:20:32 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 5156 byte(s)
0.4.1
1 dpavlin 4 #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 dpavlin 20 * $Id: net.h,v 1.13 2005/11/24 12:32:11 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     /*****************************************************************************/
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 dpavlin 20 #define MAX_TCP_CONNECTIONS 100
102     #define MAX_UDP_CONNECTIONS 100
103 dpavlin 4
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 dpavlin 10
133     /* Distributed network: */
134     int local_port;
135     int local_port_socket;
136     struct remote_net *remote_nets;
137 dpavlin 4 };
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 dpavlin 10 char *ipv4addr, int netipv4len, char **remote, int n_remote,
150     int local_port);
151 dpavlin 4
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 dpavlin 10 struct remote_net {
169     struct remote_net *next;
170 dpavlin 4
171 dpavlin 10 char *name;
172     struct in_addr ipv4_addr;
173     int portnr;
174     };
175    
176 dpavlin 4 #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