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"
15 in6_addr get_addr(const char *str) {
17 if (inet_pton(AF_INET6, str, &ret) != 1) {
18 fprintf(stderr, "Could not parse %s\n", str);
24 int main(int argc, char **argv)
26 in6_addr myaddr = get_addr(argv[1]);
27 in6_addr remoteaddr = get_addr(argv[2]);
28 GREProtocol gre(myaddr, remoteaddr);
29 TUNProtocol tun("tungre");
31 Reorderer tun_reorderer(&tun);
32 RSDecoder tun_decoder(&tun_reorderer);
37 FD_SET(gre.fd(), &fds);
38 FD_SET(tun.fd(), &fds);
39 int ret = select(1024, &fds, NULL, NULL, NULL);
45 if (FD_ISSET(gre.fd(), &fds)) {
46 gre.read_packet(&tun_decoder);
48 if (FD_ISSET(tun.fd(), &fds)) {
49 tun.read_packet(&gre);