From 2228b16159a7aff64e6559ee1635716154e67fe6 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 1 Oct 2000 03:21:49 +0000 Subject: [PATCH] - Added subnet handling code - Other small changes to header files --- src/meta.h | 8 ++--- src/net.h | 43 +++++++++++++------------- src/subnet.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/subnet.h | 48 +++++++++++++++++++++++++++++ 4 files changed, 159 insertions(+), 26 deletions(-) create mode 100644 src/subnet.c create mode 100644 src/subnet.h diff --git a/src/meta.h b/src/meta.h index 263131b..cd9c298 100644 --- a/src/meta.h +++ b/src/meta.h @@ -1,7 +1,7 @@ /* - protocol.h -- header for protocol.c - Copyright (C) 1999,2000 Ivo Timmermans , - 2000 Guus Sliepen + meta.h -- header for meta.c + Copyright (C) 2000 Guus Sliepen , + 2000 Ivo Timmermans 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__ diff --git a/src/net.h b/src/net.h index 829255b..3be9acf 100644 --- 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 index 0000000..9c225f2 --- /dev/null +++ b/src/subnet.c @@ -0,0 +1,86 @@ +/* + subnet.c -- handle subnet lookups and lists + Copyright (C) 2000 Guus Sliepen , + 2000 Ivo Timmermans + + 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 index 0000000..ceb6710 --- /dev/null +++ b/src/subnet.h @@ -0,0 +1,48 @@ +/* + subnet.h -- header for subnet.c + Copyright (C) 2000 Guus Sliepen , + 2000 Ivo Timmermans + + 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__ */ -- 2.25.1