ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/connection.h
(Generate patch)

Comparing gvpe/src/connection.h (file contents):
Revision 1.29 by pcg, Sun Dec 2 00:09:35 2007 UTC vs.
Revision 1.34 by pcg, Sat Jul 18 05:59:16 2009 UTC

1/* 1/*
2 connection.h -- header for connection.C 2 connection.h -- header for connection.C
3 Copyright (C) 2003-2005 Marc Lehmann <gvpe@schmorp.de> 3 Copyright (C) 2003-2008 Marc Lehmann <gvpe@schmorp.de>
4 4
5 This file is part of GVPE. 5 This file is part of GVPE.
6 6
7 GVPE is free software; you can redistribute it and/or modify 7 GVPE is free software; you can redistribute it and/or modify it
8 it under the terms of the GNU General Public License as published by 8 under the terms of the GNU General Public License as published by the
9 the Free Software Foundation; either version 2 of the License, or 9 Free Software Foundation; either version 3 of the License, or (at your
10 (at your option) any later version. 10 option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful, but
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 GNU General Public License for more details. 15 Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License along
18 along with gvpe; if not, write to the Free Software 18 with this program; if not, see <http://www.gnu.org/licenses/>.
19 Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19
20 Additional permission under GNU GPL version 3 section 7
21
22 If you modify this Program, or any covered work, by linking or
23 combining it with the OpenSSL project's OpenSSL library (or a modified
24 version of that library), containing parts covered by the terms of the
25 OpenSSL or SSLeay licenses, the licensors of this Program grant you
26 additional permission to convey the resulting work. Corresponding
27 Source for a non-source form of such a combination shall include the
28 source code for the parts of OpenSSL used as well as that of the
29 covered work.
20*/ 30*/
21 31
22#ifndef GVPE_CONNECTION_H__ 32#ifndef GVPE_CONNECTION_H__
23#define GVPE_CONNECTION_H__ 33#define GVPE_CONNECTION_H__
24 34
71 PT_PING, PT_PONG, // wasting namespace space? ;) 81 PT_PING, PT_PONG, // wasting namespace space? ;)
72 PT_AUTH_REQ, // authentification request 82 PT_AUTH_REQ, // authentification request
73 PT_AUTH_RES, // authentification response 83 PT_AUTH_RES, // authentification response
74 PT_CONNECT_REQ, // want other node to contact me 84 PT_CONNECT_REQ, // want other node to contact me
75 PT_CONNECT_INFO, // request connection to some node 85 PT_CONNECT_INFO, // request connection to some node
76 PT_DATA_BRIDGED, // uncompressed packet with foreign mac pot. larger than path mtu 86 PT_DATA_BRIDGED, // uncompressed packet with foreign mac pot. larger than path mtu (NYI)
77 PT_MAX 87 PT_MAX
78 }; 88 };
79 89
80 u8 type; 90 u8 type;
81 u8 srcdst, src1, dst1; 91 u8 srcdst, src1, dst1;
101//////////////////////////////////////////////////////////////////////////////////////// 111////////////////////////////////////////////////////////////////////////////////////////
102 112
103// a very simple fifo pkt-queue 113// a very simple fifo pkt-queue
104class pkt_queue 114class pkt_queue
105{ 115{
106 net_packet *queue[QUEUEDEPTH];
107 int i, j; 116 int i, j;
117 int max_queue;
118 double max_ttl;
119
120 struct pkt {
121 ev_tstamp tstamp;
122 net_packet *pkt;
123 } *queue;
124
125 void expire_cb (ev::timer &w, int revents); ev::timer expire;
108 126
109public: 127public:
110 128
111 void put (net_packet *p); 129 void put (net_packet *p);
112 net_packet *get (); 130 net_packet *get ();
113 131
114 pkt_queue (); 132 bool empty ()
133 {
134 return i == j;
135 }
136
137 pkt_queue (double max_ttl, int max_queue);
115 ~pkt_queue (); 138 ~pkt_queue ();
116}; 139};
117 140
118enum 141enum
119{ 142{
129 152
130 sockinfo si; // the current(!) destination ip to send packets to 153 sockinfo si; // the current(!) destination ip to send packets to
131 int retry_cnt; 154 int retry_cnt;
132 155
133 tstamp last_activity; // time of last packet received 156 tstamp last_activity; // time of last packet received
157 tstamp last_establish_attempt;
158 //tstamp last_si_change; // time we last changed the socket address
134 159
135 u32 oseqno; 160 u32 oseqno;
136 sliding_window iseqno; 161 sliding_window iseqno;
137 162
138 u8 protocol; 163 u8 protocol;
139 u8 features; 164 u8 features;
165 bool is_direct; // current connection (si) is direct?
140 166
141 pkt_queue data_queue, vpn_queue; 167 pkt_queue data_queue, vpn_queue;
142 168
143 crypto_ctx *octx, *ictx; 169 crypto_ctx *octx, *ictx;
144 170
168 void send_connect_info (int rid, const sockinfo &rsi, u8 rprotocols); 194 void send_connect_info (int rid, const sockinfo &rsi, u8 rprotocols);
169 void send_reset (const sockinfo &dsi); 195 void send_reset (const sockinfo &dsi);
170 void send_ping (const sockinfo &dsi, u8 pong = 0); 196 void send_ping (const sockinfo &dsi, u8 pong = 0);
171 void send_data_packet (tap_packet *pkt); 197 void send_data_packet (tap_packet *pkt);
172 198
199 void post_inject_queue ();
173 void inject_data_packet (tap_packet *pkt, bool broadcast = false); 200 void inject_data_packet (tap_packet *pkt);
174 void inject_vpn_packet (vpn_packet *pkt, int tos = 0); // for forwarding 201 void inject_vpn_packet (vpn_packet *pkt, int tos = 0); // for forwarding
175 202
176 void recv_vpn_packet (vpn_packet *pkt, const sockinfo &rsi); 203 void recv_vpn_packet (vpn_packet *pkt, const sockinfo &rsi);
177 void send_vpn_packet (vpn_packet *pkt, const sockinfo &si, int tos = 0); 204 void send_vpn_packet (vpn_packet *pkt, const sockinfo &si, int tos = 0);
178 205
179 void script_init_env (const char *ext); 206 void script_init_env (const char *ext);
180 void script_init_connect_env (); 207 void script_init_connect_env ();
181 const char *script_node_up (); 208 const char *script_node_up ();
209 const char *script_node_change ();
182 const char *script_node_down (); 210 const char *script_node_down ();
183 211
184 void dump_status (); 212 void dump_status ();
185 213
186 connection (struct vpn *vpn, conf_node *conf); 214 connection (struct vpn *vpn, conf_node *conf);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines