X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/c511e1f925da3e735fb494d522ae3ae0f17ab9ce..e04c2d50fd96f3f31bc96851c55c6efecc10469c:/server/tripe.h diff --git a/server/tripe.h b/server/tripe.h index a9a785dc..3db1cb96 100644 --- a/server/tripe.h +++ b/server/tripe.h @@ -7,7 +7,7 @@ * (c) 2001 Straylight/Edgeware */ -/*----- Licensing notice --------------------------------------------------* +/*----- Licensing notice --------------------------------------------------* * * This file is part of Trivial IP Encryption (TrIPE). * @@ -15,12 +15,12 @@ * 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. - * + * * TrIPE 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 TrIPE; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -82,6 +83,7 @@ #include #include #include +#include #include @@ -192,9 +194,9 @@ typedef struct keyset { unsigned long sz_exp; /* Data limit for the keyset */ T( unsigned seq; ) /* Sequence number for tracing */ unsigned f; /* Various useful flags */ - gcipher *cin, *cout; /* Keyset ciphers for encryption */ + gcipher *cin, *cout; /* Keyset ciphers for encryption */ size_t tagsz; /* Length to truncate MAC tags */ - gmac *min, *mout; /* Keyset MACs for integrity */ + gmac *min, *mout; /* Keyset MACs for integrity */ uint32 oseq; /* Outbound sequence number */ seqwin iseq; /* Inbound sequence number */ } keyset; @@ -267,8 +269,10 @@ struct peer; typedef struct tunnel_ops { const char *name; /* Name of this tunnel driver */ void (*init)(void); /* Initializes the system */ - tunnel *(*create)(struct peer */*p*/); /* Initializes a new tunnel */ - const char *(*ifname)(tunnel */*t*/); /* Returns tunnel's interface name */ + tunnel *(*create)(struct peer */*p*/, char **/*ifn*/); + /* Initializes a new tunnel */ + void (*setifname)(tunnel */*t*/, const char */*ifn*/); + /* Notifies ifname change */ void (*inject)(tunnel */*t*/, buf */*b*/); /* Sends packet through if */ void (*destroy)(tunnel */*t*/); /* Destroys a tunnel */ } tunnel_ops; @@ -391,7 +395,36 @@ typedef struct admin_pingop { admin_bgop bg; /* Background operation header */ ping ping; /* Ping pending response */ struct timeval pingtime; /* Time last ping was sent */ -} admin_pingop; +} admin_pingop; + +typedef struct admin_service { + sym_base _b; /* Hash table base structure */ + char *version; /* The provided version */ + struct admin *prov; /* Which client provides me */ + struct admin_service *next, *prev; /* Client's list of services */ +} admin_service; + +typedef struct admin_svcop { + admin_bgop bg; /* Background operation header */ + struct admin *prov; /* Client servicing this job */ + unsigned short index; /* This job's index */ + struct admin_svcop *next, *prev; /* Links for provider's jobs */ +} admin_svcop; + +typedef struct admin_jobentry { + unsigned short seq; /* Zero if unused */ + union { + admin_svcop *op; /* Operation, if slot in use, ... */ + uint32 next; /* ... or index of next free slot */ + } u; +} admin_jobentry; + +typedef struct admin_jobtable { + uint32 n, sz; /* Used slots and table size */ + admin_svcop *active; /* List of active jobs */ + uint32 free; /* Index of first free slot */ + admin_jobentry *v; /* And the big array of entries */ +} admin_jobtable; typedef struct admin { struct admin *next, *prev; /* Links to next and previous */ @@ -403,6 +436,8 @@ typedef struct admin { oqueue out; /* Output buffer list */ oqueue delay; /* Delayed output buffer list */ admin_bgop *bg; /* Backgrounded operations */ + admin_service *svcs; /* Which services I provide */ + admin_jobtable j; /* Table of outstanding jobs */ selbuf b; /* Line buffer for commands */ sel_file w; /* Selector for write buffering */ } admin;