Statistics
| Branch: | Revision:

iof-bird / bird-2.0.1 / proto / rpki / transport.h @ 6b3f1a54

History | View | Annotate | Download (2.65 KB)

1
/*
2
 *        BIRD -- The Resource Public Key Infrastructure (RPKI) to Router Protocol
3
 *
4
 *        (c) 2015 CZ.NIC
5
 *        (c) 2015 Pavel Tvrdik <pawel.tvrdik@gmail.com>
6
 *
7
 *        This file was a part of RTRlib: http://rpki.realmv6.org/
8
 *
9
 *        Can be freely distributed and used under the terms of the GNU GPL.
10
 */
11

    
12
/*
13
 * The RPKI transport sockets implement the communication channel
14
 * (e.g., SSH, TCP, TCP-AO) between an RPKI server and client.
15
 *
16
 * Before using the transport socket, a tr_socket must be
17
 * initialized based on a protocol-dependent init function (e.g.,
18
 * rpki_tr_tcp_init()).
19
 *
20
 * The rpki_tr_* functions call the corresponding function pointers, which are
21
 * passed in the rpki_tr_sock structure, and forward the remaining arguments.
22
 */
23

    
24
#ifndef _BIRD_RPKI_TRANSPORT_H_
25
#define _BIRD_RPKI_TRANSPORT_H_
26

    
27
#include <time.h>
28

    
29
/* The return values for rpki_tr_ functions */
30
enum rpki_tr_rtvals {
31
  RPKI_TR_SUCCESS                 = 0,        /* Operation was successful */
32
  RPKI_TR_ERROR                 = -1,        /* Error occurred */
33
  RPKI_TR_WOULDBLOCK                 = -2,        /* No data is available on the socket */
34
  RPKI_TR_INTR                         = -3,        /* Call was interrupted from a signal */
35
  RPKI_TR_CLOSED                 = -4        /* Connection closed */
36
};
37

    
38
/* A transport socket structure */
39
struct rpki_tr_sock {
40
  sock *sk;                                /* Standard BIRD socket */
41
  struct rpki_cache *cache;                /* Cache server */
42
  int (*open_fp)(struct rpki_tr_sock *);          /* Function that establishes the socket connection */
43
  const char *(*ident_fp)(struct rpki_tr_sock *); /* Function that returns an identifier for the socket endpoint */
44
  const char *ident;                        /* Internal. Use ident_fp() hook instead of this pointer */
45
};
46

    
47
int rpki_tr_open(struct rpki_tr_sock *tr);
48
void rpki_tr_close(struct rpki_tr_sock *tr);
49
const char *rpki_tr_ident(struct rpki_tr_sock *tr);
50

    
51
/* Types of supported transports */
52
enum rpki_tr_type {
53
  RPKI_TR_TCP,                                /* Unprotected transport over TCP */
54
  RPKI_TR_SSH,                                /* Protected transport by SSHv2 connection */
55
};
56

    
57
/* Common configure structure for transports */
58
struct rpki_tr_config {
59
  enum rpki_tr_type type;                /* RPKI_TR_TCP or RPKI_TR_SSH */
60
  const void *spec;                        /* Specific transport configuration, i.e. rpki_tr_tcp_config or rpki_tr_ssh_config */
61
};
62

    
63
struct rpki_tr_tcp_config {
64
  /* No internal configuration data */
65
};
66

    
67
struct rpki_tr_ssh_config {
68
  const char *bird_private_key;                /* Filepath to the BIRD server private key */
69
  const char *cache_public_key;                /* Filepath to the public key of cache server, can be file known_hosts */
70
  const char *user;                        /* Username for SSH connection */
71
};
72

    
73
/* ssh_transport.c */
74
void rpki_tr_ssh_init(struct rpki_tr_sock *tr);
75

    
76
/* tcp_transport.c */
77
void rpki_tr_tcp_init(struct rpki_tr_sock *tr);
78

    
79
#endif /* _BIRD_RPKI_TRANSPORT_H_ */