/* * BIRD -- The Resource Public Key Infrastructure (RPKI) to Router Protocol * * (c) 2015 CZ.NIC * (c) 2015 Pavel Tvrdik * * This file was a part of RTRlib: http://rpki.realmv6.org/ * * Can be freely distributed and used under the terms of the GNU GPL. */ /* * The RPKI transport sockets implement the communication channel * (e.g., SSH, TCP, TCP-AO) between an RPKI server and client. * * Before using the transport socket, a tr_socket must be * initialized based on a protocol-dependent init function (e.g., * rpki_tr_tcp_init()). * * The rpki_tr_* functions call the corresponding function pointers, which are * passed in the rpki_tr_sock structure, and forward the remaining arguments. */ #ifndef _BIRD_RPKI_TRANSPORT_H_ #define _BIRD_RPKI_TRANSPORT_H_ #include /* The return values for rpki_tr_ functions */ enum rpki_tr_rtvals { RPKI_TR_SUCCESS = 0, /* Operation was successful */ RPKI_TR_ERROR = -1, /* Error occurred */ RPKI_TR_WOULDBLOCK = -2, /* No data is available on the socket */ RPKI_TR_INTR = -3, /* Call was interrupted from a signal */ RPKI_TR_CLOSED = -4 /* Connection closed */ }; /* A transport socket structure */ struct rpki_tr_sock { sock *sk; /* Standard BIRD socket */ struct rpki_cache *cache; /* Cache server */ int (*open_fp)(struct rpki_tr_sock *); /* Function that establishes the socket connection */ const char *(*ident_fp)(struct rpki_tr_sock *); /* Function that returns an identifier for the socket endpoint */ const char *ident; /* Internal. Use ident_fp() hook instead of this pointer */ }; int rpki_tr_open(struct rpki_tr_sock *tr); void rpki_tr_close(struct rpki_tr_sock *tr); const char *rpki_tr_ident(struct rpki_tr_sock *tr); /* Types of supported transports */ enum rpki_tr_type { RPKI_TR_TCP, /* Unprotected transport over TCP */ RPKI_TR_SSH, /* Protected transport by SSHv2 connection */ }; /* Common configure structure for transports */ struct rpki_tr_config { enum rpki_tr_type type; /* RPKI_TR_TCP or RPKI_TR_SSH */ const void *spec; /* Specific transport configuration, i.e. rpki_tr_tcp_config or rpki_tr_ssh_config */ }; struct rpki_tr_tcp_config { /* No internal configuration data */ }; struct rpki_tr_ssh_config { const char *bird_private_key; /* Filepath to the BIRD server private key */ const char *cache_public_key; /* Filepath to the public key of cache server, can be file known_hosts */ const char *user; /* Username for SSH connection */ }; /* ssh_transport.c */ void rpki_tr_ssh_init(struct rpki_tr_sock *tr); /* tcp_transport.c */ void rpki_tr_tcp_init(struct rpki_tr_sock *tr); #endif /* _BIRD_RPKI_TRANSPORT_H_ */