- Added subnet handling code
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 1 Oct 2000 03:21:49 +0000 (03:21 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 1 Oct 2000 03:21:49 +0000 (03:21 +0000)
- Other small changes to header files

src/meta.h
src/net.h
src/subnet.c [new file with mode: 0644]
src/subnet.h [new file with mode: 0644]

index 263131b..cd9c298 100644 (file)
@@ -1,7 +1,7 @@
 /*
-    protocol.h -- header for protocol.c
-    Copyright (C) 1999,2000 Ivo Timmermans <itimmermans@bigfoot.com>,
-                       2000 Guus Sliepen <guus@sliepen.warande.net>
+    meta.h -- header for meta.c
+    Copyright (C) 2000 Guus Sliepen <guus@sliepen.warande.net>,
+                  2000 Ivo Timmermans <itimmermans@bigfoot.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
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: meta.h,v 1.1.2.1 2000/09/26 14:06:04 guus Exp $
+    $Id: meta.h,v 1.1.2.2 2000/10/01 03:21:49 guus Exp $
 */
 
 #ifndef __TINC_META_H__
index 829255b..3be9acf 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -16,7 +16,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net.h,v 1.9.4.12 2000/09/15 12:58:40 zarq Exp $
+    $Id: net.h,v 1.9.4.13 2000/10/01 03:21:49 guus Exp $
 */
 
 #ifndef __TINC_NET_H__
@@ -58,14 +58,6 @@ typedef short length_t;
 
 struct conn_list_t;
 
-typedef struct subnet_t {
-  ip_t netaddr;
-  ip_t netmask;
-  struct conn_list_t *owner;
-  struct subnet_t *next;
-  struct subnet_t *prev;
-} subnet_t;  
-
 typedef struct vpn_packet_t {
   length_t len;                /* the actual number of bytes in the `data' field */
   unsigned char data[MAXSIZE];
@@ -123,33 +115,40 @@ typedef struct enc_key_t {
 
 typedef struct conn_list_t {
   char *name;                      /* name of this connection */
-  ip_t vpn_ip;                     /* his vpn ip */
-  ip_t vpn_mask;                   /* his vpn network address */
   ip_t real_ip;                    /* his real (internet) ip */
-  char *hostname;             /* the hostname of its real ip */
+  char *hostname;                  /* the hostname of its real ip */
   short unsigned int port;         /* his portnumber */
+  int protocol_version;            /* used protocol */
+  int options;                     /* options turned on for this connection */
+
   int flags;                       /* his flags */
   int socket;                      /* our udp vpn socket */
   int meta_socket;                 /* our tcp meta socket */
-  int protocol_version;            /* used protocol */
   status_bits_t status;            /* status info */
-  int options;           /* options turned on for this connection */
-  passphrase_t *pp;                /* encoded passphrase */
   packet_queue_t *sq;              /* pending outgoing packets */
   packet_queue_t *rq;              /* pending incoming packets (they have no
                                      valid key to be decrypted with) */
   enc_key_t *public_key;           /* the other party's public key */
   enc_key_t *datakey;              /* encrypt data packets with this key */
-  char *buffer;       /* metadata input buffer */
+  enc_key_t *rsakey;
+
+  char *buffer;                    /* metadata input buffer */
   int buflen;                      /* bytes read into buffer */
   int reqlen;                      /* length of first request in buffer */
-  int tcppacket;                  /* length of incoming TCP tunnelled packet */
-  time_t last_ping_time;           /* last time we saw some activity from the other end */  
-  int want_ping;                   /* 0 if there's no need to check for activity */
   int allow_request;               /* defined if there's only one request possible */
-  char *chal_answer;               /* answer to the given challenge */
-  enc_key_t *rsakey;
-  struct conn_list_t *nexthop;     /* nearest meta-hop in this direction */
+
+  time_t last_ping_time;           /* last time we saw some activity from the other end */  
+  int want_ping;                   /* 0 if there's no need to check for activity. Shouldn't this go into status? (GS) */
+
+  char *mychallenge;               /* challenge we received from him */
+  char *hischallenge;              /* challenge we sent to him */
+
+  struct conn_list_t *nexthop;     /* nearest meta-hop in this direction, will be changed to myuplink (GS) */
+  struct conn_list_t *hisuplink;   /* his nearest meta-hop in our direction */
+  struct conn_list_t *myuplink;    /* our nearest meta-hop in his direction */
+
+  struct subnet_t *subnets;        /* Pointer to a list of subnets belonging to this connection */
+
   struct conn_list_t *next;        /* after all, it's a list of connections */
 } conn_list_t;
 
diff --git a/src/subnet.c b/src/subnet.c
new file mode 100644 (file)
index 0000000..9c225f2
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+    subnet.c -- handle subnet lookups and lists
+    Copyright (C) 2000 Guus Sliepen <guus@sliepen.warande.net>,
+                  2000 Ivo Timmermans <itimmermans@bigfoot.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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: subnet.c,v 1.1.2.1 2000/10/01 03:21:49 guus Exp $
+*/
+
+#include "config.h"
+#include "subnet.h"
+#include "net.h"
+
+/* Allocating and freeing space for subnets */
+
+subnet_t *new_subnet(void)
+{
+cp
+cp
+}
+
+void free_subnet(subnet_t *subnet)
+{
+cp
+cp
+}
+
+/* Linked list management */
+
+int subnet_add(conn_list_t *cl, subnet_t *subnet)
+{
+cp
+  subnet->next = cl->subnets->next;
+  subnet->prev = NULL;
+  subnet->next->prev = subnet
+  cl->subnets = subnet;
+cp
+  return 0;
+}
+
+int subnet_del(conn_list_t *cl, subnet_t *subnet)
+{
+cp
+  if(subnet->prev)
+    {
+      subnet->prev->next = subnet->next;
+    }
+  else
+    {
+      subnet->owner->subnets = subnet->next;
+    }
+  
+  subnet->next->prev = subnet->prev;
+  free_subnet(subnet);
+cp
+  return 0;
+}
+
+/* Ascii representation of subnets */
+
+subnet_t *str2net(char *subnetstr)
+{
+cp
+cp
+}
+
+char *net2str(subnet_t *subnet)
+{
+cp
+cp
+}
+
+/* Subnet lookup routines */
diff --git a/src/subnet.h b/src/subnet.h
new file mode 100644 (file)
index 0000000..ceb6710
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+    subnet.h -- header for subnet.c
+    Copyright (C) 2000 Guus Sliepen <guus@sliepen.warande.net>,
+                  2000 Ivo Timmermans <itimmermans@bigfoot.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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+    $Id: subnet.h,v 1.1.2.1 2000/10/01 03:21:49 guus Exp $
+*/
+
+#ifndef __TINC_SUBNET_H__
+#define __TINC_SUBNET_H__
+
+enum{
+  SUBNET_MAC = 0,
+  SUBNET_IPv4,
+  SUBNET_IPv6,
+};
+
+typedef struct subnet_t {
+  struct conn_list_t *owner;           /* the owner of this subnet */
+  struct conn_list_t *uplink;          /* the uplink which we should send packets to for this subnet */
+
+  struct subnet_t *prev;               /* previous subnet_t for this owner */
+  struct subnet_t *next;               /* next subnet_t for this owner */
+
+  int type;                            /* subnet type (IPv4? IPv6? MAC? something even weirder?) */
+
+  /* Okay this is IPv4 specific because we are lazy and don't want to implement
+     other types just now. Type should always be SUBNET_IPv4 for now. */
+
+  ip_t netaddr;
+  ip_t netmask;
+} subnet_t;  
+
+#endif /* __TINC_SUBNET_H__ */