83 lines
2.8 KiB
C
83 lines
2.8 KiB
C
#pragma once
|
|
|
|
#include <arpa/inet.h>
|
|
|
|
|
|
/*
|
|
* This is the interface of the ibverbs socket abstraction.
|
|
*/
|
|
|
|
|
|
struct IBVSocket;
|
|
typedef struct IBVSocket IBVSocket;
|
|
|
|
struct IBVCommConfig;
|
|
typedef struct IBVCommConfig IBVCommConfig;
|
|
|
|
|
|
enum IBVSocket_AcceptRes
|
|
{ACCEPTRES_ERR=0, ACCEPTRES_IGNORE=1, ACCEPTRES_SUCCESS=2};
|
|
typedef enum IBVSocket_AcceptRes IBVSocket_AcceptRes;
|
|
|
|
|
|
// construction/destruction
|
|
extern void IBVSocket_init(IBVSocket* _this);
|
|
extern IBVSocket* IBVSocket_construct();
|
|
extern void IBVSocket_uninit(IBVSocket* _this);
|
|
extern void IBVSocket_destruct(IBVSocket* _this);
|
|
|
|
// static
|
|
extern bool IBVSocket_rdmaDevicesExist(void);
|
|
extern void IBVSocket_fork_init_once(void);
|
|
|
|
// methods
|
|
extern bool IBVSocket_connectByName(IBVSocket* _this, const char* hostname, unsigned short port,
|
|
IBVCommConfig* commCfg);
|
|
extern bool IBVSocket_connectByIP(IBVSocket* _this, struct in_addr ipaddress, unsigned short port,
|
|
IBVCommConfig* commCfg);
|
|
extern bool IBVSocket_bind(IBVSocket* _this, unsigned short port);
|
|
extern bool IBVSocket_bindToAddr(IBVSocket* _this, in_addr_t ipAddr, unsigned short port);
|
|
extern bool IBVSocket_listen(IBVSocket* _this);
|
|
extern IBVSocket_AcceptRes IBVSocket_accept(IBVSocket* _this, IBVSocket** outAcceptedSock,
|
|
struct sockaddr* peerAddr, socklen_t* peerAddrLen);
|
|
extern bool IBVSocket_shutdown(IBVSocket* _this);
|
|
|
|
#ifdef BEEGFS_NVFS
|
|
extern ssize_t IBVSocket_write(IBVSocket* _this, const char* buf, size_t bufLen, unsigned lkey,
|
|
const uint64_t rbuf, unsigned rkey);
|
|
extern ssize_t IBVSocket_read(IBVSocket* _this, const char* buf, size_t bufLen, unsigned lkey,
|
|
const uint64_t rbuf, unsigned rkey);
|
|
#endif /* BEEGFS_NVFS */
|
|
|
|
extern ssize_t IBVSocket_recv(IBVSocket* _this, char* buf, size_t bufLen, int flags);
|
|
extern ssize_t IBVSocket_recvT(IBVSocket* _this, char* buf, size_t bufLen, int flags,
|
|
int timeoutMS);
|
|
extern ssize_t IBVSocket_send(IBVSocket* _this, const char* buf, size_t bufLen, int flags);
|
|
|
|
extern int IBVSocket_checkConnection(IBVSocket* _this);
|
|
extern ssize_t IBVSocket_nonblockingRecvCheck(IBVSocket* _this);
|
|
extern bool IBVSocket_checkDelayedEvents(IBVSocket* _this);
|
|
|
|
|
|
// getters & setters
|
|
extern bool IBVSocket_getSockValid(IBVSocket* _this);
|
|
extern int IBVSocket_getRecvCompletionFD(IBVSocket* _this);
|
|
extern int IBVSocket_getConnManagerFD(IBVSocket* _this);
|
|
extern void IBVSocket_setTypeOfService(IBVSocket* _this, uint8_t typeOfService);
|
|
extern void IBVSocket_setTimeouts(IBVSocket* _this, int connectMS, int flowSendMS,
|
|
int pollMS);
|
|
|
|
// testing methods
|
|
extern void IBVSocket_setConnectionRejectionRate(IBVSocket* _this, unsigned rate);
|
|
extern bool IBVSocket_connectionRejection(IBVSocket* _this);
|
|
|
|
|
|
struct IBVCommConfig
|
|
{
|
|
unsigned bufNum; // number of available buffers
|
|
unsigned bufSize; // size of each buffer
|
|
uint8_t serviceLevel;
|
|
};
|
|
|
|
|