# include "rx_event.h"
# include "rx_packet.h"
# include "rx_misc.h"
+# include "rx_null.h"
#ifndef AFS_NT40_ENV
# include <netinet/in.h>
#endif
int rx_ReadvProc();
int rx_ReadProc32();
void rx_FlushWrite();
+void rxi_DeleteCachedConnections();
+void rxi_DestroyConnection();
+void rxi_CleanupConnection();
+int rxi_Listen();
int rxi_WriteProc();
int rxi_WritevProc();
int rxi_WritevAlloc();
int rxi_ReadvProc();
int rxi_FillReadVec();
void rxi_FlushWrite();
+int rxi_getAllAddrMaskMtu();
+int rx_getAllAddr();
+void rxi_FreePacket();
+void rxi_FreePacketNoLock();
+int rxi_AllocDataBuf();
+void rxi_RestoreDataBufs();
+void rxi_Sleep();
+void rxi_InitializeThreadSupport();
+int rxi_Recvmsg();
+int rxi_Sendmsg();
+int rxi_IsConnInteresting();
+afs_int32 rx_SlowReadPacket();
+afs_int32 rx_SlowWritePacket();
+afs_int32 rx_SlowGetInt32();
+void rxi_StopListener();
+void rxi_InitPeerParams();
+void rxi_FreeAllPackets();
+void rxi_SendPacketList();
+void rxi_SendPacket();
+void rxi_MorePackets();
+void rxi_MorePacketsNoLock();
+void rxi_PacketsUnWait();
+void rx_CheckPackets();
+void rxi_Wakeup();
void rx_PrintStats();
void rx_PrintPeerStats();
void rx_SetArrivalProc();
void rx_Finalize();
void rx_GetIFInfo();
+void shutdown_rxevent();
+int clock_UnInit();
+void rxi_Delay(int);
#ifndef KERNEL
typedef void (*rx_destructor_t)(void *);
int rx_KeyCreate(rx_destructor_t);
void *rx_GetSpecific(struct rx_connection *conn, int key);
void rx_SetSpecific(struct rx_connection *conn, int key, void *ptr);
+osi_socket rxi_GetUDPSocket(u_short port);
#endif /* KERNEL */
int ntoh_syserr_conv(int error);
#define rx_SetConnAbortThreshold(A) (rxi_connAbortThreshhold = (A))
#define rx_SetConnAbortDelay(A) (rxi_connAbortDelay = (A))
+#define rx_GetCallAbortCode(call) ((call)->abortCode)
+#define rx_SetCallAbortCode(call, code) ((call)->abortCode = (code))
+
#define cpspace(call) ((call)->curlen)
#define cppos(call) ((call)->curpos)
int refCount;
};
-#define RXS_OP(obj,op,args) ((obj->ops->op_ ## op) ? (*(obj)->ops->op_ ## op)args : 0)
+#define RXS_OP(obj,op,args) ((obj && (obj->ops->op_ ## op)) ? (*(obj)->ops->op_ ## op)args : 0)
#define RXS_Close(obj) RXS_OP(obj,Close,(obj))
#define RXS_NewConnection(obj,conn) RXS_OP(obj,NewConnection,(obj,conn))
afs_hyper_t bytesSent; /* Number of bytes sent to this peer */
afs_hyper_t bytesReceived; /* Number of bytes received from this peer */
struct rx_queue rpcStats; /* rpc statistic list */
+ int lastReachTime; /* Last time we verified reachability */
};
/* A connection is an authenticated communication path, allowing
/* peer process could be restarted on us. Includes RX Header. */
struct rxevent *challengeEvent; /* Scheduled when the server is challenging a */
struct rxevent *delayedAbortEvent; /* Scheduled to throttle looping client */
+ struct rxevent *checkReachEvent; /* Scheduled when checking reachability */
int abortCount; /* count of abort messages sent */
/* client-- to retransmit the challenge */
struct rx_service *service; /* used by servers only */
u_short secondsUntilDead; /* Maximum silence from peer before RX_CALL_DEAD */
u_short hardDeadTime; /* hard max for call execution */
u_char ackRate; /* how many packets between ack requests */
+ u_char makeCallWaiters; /* how many rx_NewCalls are waiting */
int nSpecific; /* number entries in specific data */
void **specific; /* pointer to connection specific data */
};
#define RX_CONN_KNOW_WINDOW 8 /* window size negotiation works */
#define RX_CONN_RESET 16 /* connection is reset, remove */
#define RX_CONN_BUSY 32 /* connection is busy; don't delete */
+#define RX_CONN_ATTACHWAIT 64 /* attach waiting for peer->lastReach */
/* Type of connection, client or server */
#define RX_CLIENT_CONNECTION 0
#define RX_ACK_TYPE_ACK 1 /* I have this packet, although I may discard it later */
/* The packet size transmitted for an acknowledge is adjusted to reflect the actual size of the acks array. This macro defines the size */
-#define rx_AckDataSize(nAcks) (sizeof(struct rx_ackPacket) - RX_MAXACKS + (nAcks))
+#define rx_AckDataSize(nAcks) (3 + nAcks + offsetof(struct rx_ackPacket, acks[0]))
#define RX_CHALLENGE_TIMEOUT 2 /* Number of seconds before another authentication request packet is generated */
+#define RX_CHALLENGE_MAXTRIES 50 /* Max # of times we resend challenge */
+#define RX_CHECKREACH_TIMEOUT 2 /* Number of seconds before another ping is generated */
+#define RX_CHECKREACH_TTL 60 /* Re-check reachability this often */
/* RX error codes. RX uses error codes from -1 to -64. Rxgen may use other error codes < -64; user programs are expected to return positive error codes */