2 #include <netinet/in.h>
5 #include <sys/select.h>
6 #include <sys/socket.h>
8 #include "greprotocol.h"
10 #include "tunprotocol.h"
11 #include "rsdecoder.h"
16 in6_addr get_addr(const char *str) {
18 if (inet_pton(AF_INET6, str, &ret) != 1) {
19 fprintf(stderr, "Could not parse %s\n", str);
25 int main(int argc, char **argv)
27 in6_addr myaddr = get_addr(argv[1]);
28 in6_addr remoteaddr = get_addr(argv[2]);
29 GREProtocol gre(myaddr, remoteaddr);
30 Pacer gre_pacer(&gre, 40000, 6);
31 TUNProtocol tun("tungre");
33 Pacer tun_pacer(&tun, 40000, 6);
34 Reorderer tun_reorderer(&tun_pacer);
35 RSDecoder tun_decoder(&tun_reorderer);
40 FD_SET(gre.fd(), &fds);
41 FD_SET(tun.fd(), &fds);
42 int ret = select(1024, &fds, NULL, NULL, NULL);
48 if (FD_ISSET(gre.fd(), &fds)) {
49 gre.read_packet(&tun_decoder);
51 if (FD_ISSET(tun.fd(), &fds)) {
52 tun.read_packet(&gre_pacer);