- Added subnet handling code

- Other small changes to header files
This commit is contained in:
Guus Sliepen 2000-10-01 03:21:49 +00:00
parent 676b1c0ea1
commit 2228b16159
4 changed files with 159 additions and 26 deletions

View file

@ -1,7 +1,7 @@
/* /*
protocol.h -- header for protocol.c meta.h -- header for meta.c
Copyright (C) 1999,2000 Ivo Timmermans <itimmermans@bigfoot.com>, Copyright (C) 2000 Guus Sliepen <guus@sliepen.warande.net>,
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 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 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 along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 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__ #ifndef __TINC_META_H__

View file

@ -16,7 +16,7 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 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__ #ifndef __TINC_NET_H__
@ -58,14 +58,6 @@ typedef short length_t;
struct conn_list_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 { typedef struct vpn_packet_t {
length_t len; /* the actual number of bytes in the `data' field */ length_t len; /* the actual number of bytes in the `data' field */
unsigned char data[MAXSIZE]; unsigned char data[MAXSIZE];
@ -123,33 +115,40 @@ typedef struct enc_key_t {
typedef struct conn_list_t { typedef struct conn_list_t {
char *name; /* name of this connection */ 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 */ 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 */ short unsigned int port; /* his portnumber */
int protocol_version; /* used protocol */
int options; /* options turned on for this connection */
int flags; /* his flags */ int flags; /* his flags */
int socket; /* our udp vpn socket */ int socket; /* our udp vpn socket */
int meta_socket; /* our tcp meta socket */ int meta_socket; /* our tcp meta socket */
int protocol_version; /* used protocol */
status_bits_t status; /* status info */ 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 *sq; /* pending outgoing packets */
packet_queue_t *rq; /* pending incoming packets (they have no packet_queue_t *rq; /* pending incoming packets (they have no
valid key to be decrypted with) */ valid key to be decrypted with) */
enc_key_t *public_key; /* the other party's public key */ enc_key_t *public_key; /* the other party's public key */
enc_key_t *datakey; /* encrypt data packets with this 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 buflen; /* bytes read into buffer */
int reqlen; /* length of first request in 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 */ int allow_request; /* defined if there's only one request possible */
char *chal_answer; /* answer to the given challenge */
enc_key_t *rsakey; time_t last_ping_time; /* last time we saw some activity from the other end */
struct conn_list_t *nexthop; /* nearest meta-hop in this direction */ 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 */ struct conn_list_t *next; /* after all, it's a list of connections */
} conn_list_t; } conn_list_t;

86
src/subnet.c Normal file
View file

@ -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 */

48
src/subnet.h Normal file
View file

@ -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__ */