- Added subnet handling code
- Other small changes to header files
This commit is contained in:
parent
676b1c0ea1
commit
2228b16159
4 changed files with 159 additions and 26 deletions
|
@ -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__
|
||||
|
|
43
src/net.h
43
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;
|
||||
|
||||
|
|
86
src/subnet.c
Normal file
86
src/subnet.c
Normal 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
48
src/subnet.h
Normal 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__ */
|
Loading…
Reference in a new issue