]> git.meshlink.io Git - meshlink/commitdiff
Merge branch 'master' into saverio
authorSaverio Proto <zioproto@gmail.com>
Sun, 13 Apr 2014 10:41:45 +0000 (12:41 +0200)
committerSaverio Proto <zioproto@gmail.com>
Sun, 13 Apr 2014 10:41:45 +0000 (12:41 +0200)
Conflicts:
src/libmeshlink.c

1  2 
src/libmeshlink.c
src/libmeshlink.h
src/route.c

diff --combined src/libmeshlink.c
index aa1f935033b391f0a8ba4576f11c2635a30203b5,761b3a4137b76202986deaf039d9b2ce07830575..db0362b1e89680ae62ea54abdd44517fa0544a8c
@@@ -1,6 -1,6 +1,6 @@@
  /*
      libmeshlink.h -- Tincd Library
-     Copyright (C) 2014 Guus Sliepen <guus@tinc-vpn.org> Saverio Proto <zioproto@gmail.com>
+     Copyright (C) 2014 Guus Sliepen <guus@meshlink.io> Saverio Proto <zioproto@gmail.com>
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
@@@ -18,7 -18,6 +18,6 @@@
  */
  
  #include "libmeshlink.h"
- #include LZO1X_H
  #ifdef HAVE_SYS_MMAN_H
  #include <sys/mman.h>
  #endif
@@@ -264,63 -263,6 +263,6 @@@ bool ecdsa_keygen(bool ask) 
        return true;
  }
  
- /*
-   Generate a public/private RSA keypair, and ask for a file to store
-   them in.
- */
- bool rsa_keygen(int bits, bool ask) {
-       rsa_t *key;
-       FILE *f;
-       char *pubname, *privname;
-       fprintf(stderr, "Generating %d bits keys:\n", bits);
-       if(!(key = rsa_generate(bits, 0x10001))) {
-               fprintf(stderr, "Error during key generation!\n");
-               return false;
-       } else
-               fprintf(stderr, "Done.\n");
-       xasprintf(&privname, "%s" SLASH "rsa_key.priv", confbase);
-       f = ask_and_open(privname, "private RSA key", "a", ask, 0600);
-       free(privname);
-       if(!f)
-               return false;
-       if(!rsa_write_pem_private_key(key, f)) {
-               fprintf(stderr, "Error writing private key!\n");
-               fclose(f);
-               rsa_free(key);
-               return false;
-       }
-       fclose(f);
-       if(name)
-               xasprintf(&pubname, "%s" SLASH "hosts" SLASH "%s", confbase, name);
-       else
-               xasprintf(&pubname, "%s" SLASH "rsa_key.pub", confbase);
-       f = ask_and_open(pubname, "public RSA key", "a", ask, 0666);
-       free(pubname);
-       if(!f)
-               return false;
-       if(!rsa_write_pem_public_key(key, f)) {
-               fprintf(stderr, "Error writing public key!\n");
-               fclose(f);
-               rsa_free(key);
-               return false;
-       }
-       fclose(f);
-       rsa_free(key);
-       return true;
- }
  static bool try_bind(int port) {
        struct addrinfo *ai = NULL;
        struct addrinfo hint = {
@@@ -412,7 -354,7 +354,7 @@@ bool tinc_setup(const char* confbaseapi
        fprintf(f, "Name = %s\n", name);
        fclose(f);
  
-       if(!rsa_keygen(2048, false) || !ecdsa_keygen(false))
+       if(!ecdsa_keygen(false))
                return false;
  
        check_port(name);
@@@ -451,13 -393,6 +393,6 @@@ bool tinc_main_thread(void * in) 
        if(!read_server_config())
                return false;
  
- #ifdef HAVE_LZO
-       if(lzo_init() != LZO_E_OK) {
-               logger(DEBUG_ALWAYS, LOG_ERR, "Error initializing LZO compressor!");
-               return false;
-       }
- #endif
        //char *priority = NULL; //shoud be not needed in libmeshlink
  
  #ifdef HAVE_MLOCKALL
@@@ -524,7 -459,6 +459,6 @@@ end
        crypto_exit();
  
        exit_configuration(&config_tree);
-       free(cmdline_conf);
  
        return status;
  
  
  bool tinc_stop();
  
 -bool route_meshlink(node_t *source,vpn_packet_t *packet) {
 -
 -      printf("data %s\n",packet->data);
 -      printf("data 16%s\n",packet->data+16);
 -      printf("data 32%s\n",packet->data+32);
 -      node_t* owner = NULL;
 -
 -      tincpackethdr* hdr = (tincpackethdr*)packet->data;
 -      owner = lookup_node(hdr->destination);
 -
 -      if (owner == NULL) {
 -      //Lookup failed
 -      printf("NULL\n");
 -      return false;
 -      }
 -      printf("lookupnode %s\n",owner->name);
 -
 -      if(!owner->status.reachable) {
 -      //Do some here
 -      return false;
 -      }
 -
 -      //TODO: I skipped here a lot of checks !
 -
 -      send_packet(owner,packet);
 -
 -}
  // can be called from any thread
  bool tinc_send_packet(node_t *receiver, const char* buf, unsigned int len) {
  
        vpn_packet_t packet;
        tincpackethdr* hdr = malloc(sizeof(tincpackethdr));
 -
 -      if (sizeof(hdr) + len > MAXSIZE) {
 +      if (sizeof(tincpackethdr) + len > MAXSIZE) {
  
        //log something
        return false;
        }
  
 +      memset(hdr->legacymtu,1,sizeof(hdr->legacymtu));
        memcpy(hdr->destination,receiver->name,sizeof(hdr->destination));
        memcpy(hdr->source,myself->name,sizeof(hdr->source));
  
        packet.priority = 0;
 -      packet.len = len + 32;
 +      packet.len = sizeof(tincpackethdr) + len;
  
 -      memcpy(packet.data,hdr,32);
 -      memcpy(packet.data+32,buf,len);
 +      memcpy(packet.data,hdr,sizeof(tincpackethdr));
 +      memcpy(packet.data+sizeof(tincpackethdr),buf,len);
  
          myself->in_packets++;
          myself->in_bytes += packet.len;
 -        route_meshlink(myself, &packet);
 +        route(myself, &packet);
  
  return true;
  }
diff --combined src/libmeshlink.h
index f2fbd5c4b64966ade273f8aa848b7fce0b3bbdff,7cbd6374e303fd76b44721ced426ccb17a593a8e..af1c1bab07c4ebe9bba6cf643638d34c8ce4857a
@@@ -1,6 -1,6 +1,6 @@@
  /*
      libmeshlink.h -- Tincd Library
-     Copyright (C) 2014 Guus Sliepen <guus@tinc-vpn.org> Saverio Proto <zioproto@gmail.com>
+     Copyright (C) 2014 Guus Sliepen <guus@meshlink.io> Saverio Proto <zioproto@gmail.com>
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
@@@ -41,7 -41,6 +41,7 @@@ bool tinc_start(const char* path)
  bool tinc_stop();
  
  typedef struct tincpackethdr {
 +  u_int8_t legacymtu[14];
    u_int8_t destination[16];
    u_int8_t source[16];
  } __attribute__ ((__packed__)) tincpackethdr;
diff --combined src/route.c
index 52e7a69d4785058d942ae8da0789158182f8392b,28fdfa894112c284a8aba3b087d7144c849d27aa..f09a1041f1f8aca3561a49001fc74680180462af
@@@ -1,7 -1,6 +1,6 @@@
  /*
      route.c -- routing
-     Copyright (C) 2000-2005 Ivo Timmermans,
-                   2000-2013 Guus Sliepen <guus@tinc-vpn.org>
+     Copyright (C) 2014 Guus Sliepen <guus@meshlink.io>
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
@@@ -24,7 -23,6 +23,7 @@@
  #include "net.h"
  #include "route.h"
  #include "utils.h"
 +#include "libmeshlink.h"
  
  rmode_t routing_mode = RMODE_ROUTER;
  fmode_t forwarding_mode = FMODE_INTERNAL;
@@@ -33,7 -31,6 +32,6 @@@ bool decrement_ttl = false
  bool directonly = false;
  bool priorityinheritance = false;
  int macexpire = 600;
- bool overwrite_mac = false;
  mac_t mymac = {{0xFE, 0xFD, 0, 0, 0, 0}};
  bool pcap = false;
  
@@@ -61,32 -58,6 +59,32 @@@ static bool checklength(node_t *source
                return true;
  }
  
 -void route(node_t *source, vpn_packet_t *packet) {
 -      // TODO: route on name or key
 +void route(node_t *source,vpn_packet_t *packet) {
 +    // TODO: route on name or key
 +
 +    node_t* owner = NULL;
 +    tincpackethdr* hdr = (tincpackethdr*)packet->data;
 +    owner = lookup_node(hdr->destination);
 +    if (owner == NULL) {
 +    //Lookup failed
 +    logger(DEBUG_TRAFFIC, LOG_WARNING, "Cant lookup the owner of a packet in the route() function. This should never happen \n");
 +    return;
 +    }
 +
 +    if (owner == myself ) {
 +    //TODO: implement sending received data from meshlink library to the application
 +    logger(DEBUG_TRAFFIC, LOG_WARNING, "I received a packet for me with payload: %s \n", packet->data + 46);
 +    return;
 +    }
 +
 +    if(!owner->status.reachable) {
 +    //TODO: check what to do here, not just print a warning
 +    logger(DEBUG_TRAFFIC, LOG_WARNING, "The owner of a packet in the route() function is unreachable. Dropping packet. \n");
 +    return;
 +    }
 +
 +    //TODO: I skipped here a lot of checks !
 +
 +    send_packet(owner,packet);
 +    return;
  }