4 * The secure anycast tunneling protocol (satp) defines a protocol used
5 * for communication between any combination of unicast and anycast
6 * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel
7 * mode and allows tunneling of every ETHER TYPE protocol (e.g.
8 * ethernet, ip, arp ...). satp directly includes cryptography and
9 * message authentication based on the methodes used by SRTP. It is
10 * intended to deliver a generic, scaleable and secure solution for
11 * tunneling and relaying of packets of any protocol.
14 * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl,
15 * Christian Pointner <satp@wirdorange.org>
17 * This file is part of Anytun.
19 * Anytun is free software: you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 3 as
21 * published by the Free Software Foundation.
23 * Anytun is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
28 * You should have received a copy of the GNU General Public License
29 * along with anytun. If not, see <http://www.gnu.org/licenses/>.
32 #include "datatypes.h"
36 #include "keyDerivation.h"
37 #include "seqWindow.h"
38 #include "connectionList.h"
39 #include "routingTable.h"
40 #include "networkAddress.h"
41 #include "syncCommand.h"
47 #include <boost/archive/text_oarchive.hpp>
48 #include <boost/archive/text_iarchive.hpp>
53 ConnectionList
&cl(gConnectionList
);
56 ConnectionMap::iterator it
= cl
.getBeginUnlocked();
57 mux_t mux
= it
->first
;
58 ConnectionParam
&conn( it
->second
);
59 std::cout
<< "Client " << mux
<< ": " ;
60 if( conn
.remote_end_
==PacketSourceEndpoint())
62 std::cout
<< "not registered";
64 std::cout
<< conn
.remote_end_
;
66 std::cout
<< std::endl
;
67 //std::cout << "Connection: Keyderivation-Type: " << conn.kd_.printType() << std::endl;
70 network_address_type_t types
[] = {ipv4
,ipv6
,ethernet
};
71 for (int types_idx
=0; types_idx
<3; types_idx
++)
73 network_address_type_t type
= types
[types_idx
];
74 if( !gRoutingTable
.empty(type
) )
76 RoutingMap::iterator it
= gRoutingTable
.getBeginUnlocked(type
);
77 NetworkPrefix
pref( it
->first
);
78 std::cout
<< "Route: " << pref
.toString() << "/" << (int)pref
.getNetworkPrefixLength() << " -> ";
79 mux_t mux
= it
->second
;
80 std::cout
<< mux
<< std::endl
;
81 gRoutingTable
.clear(type
);
87 void readExactly(size_t toread
, std::iostream
& result
)
90 while (toread
> hasread
&& std::cin
.good())
99 void readAndProcessOne()
101 size_t message_lenght
;
102 std::stringstream message_lenght_stream
;
103 readExactly(5,message_lenght_stream
);
104 message_lenght_stream
>> message_lenght
;
105 std::stringstream void_stream
;
106 readExactly(1,void_stream
); //skip space
107 std::stringstream sync_command_stream
;
108 readExactly(message_lenght
, sync_command_stream
);
109 //std::cout << message_lenght << std::endl;
110 //std::cout << sync_command_stream.str()<< std::endl;
111 boost::archive::text_iarchive
ia(sync_command_stream
);
112 SyncCommand
scom(gConnectionList
);
116 int main(int argc
, char* argv
[])
120 while( std::cin
.good() )