#include <rpc/xdr.h>
#include <rpc/auth.h>
+struct rpc_fragment {
+ struct rpc_fragment *next;
+ uint64_t size;
+ char *data;
+};
+
struct rpc_context {
int fd;
int is_connected;
int is_udp;
struct sockaddr *udp_dest;
int is_broadcast;
+
+ /* track the address we connect to so we can auto-reconnect on session failure */
+ struct sockaddr_storage s;
+ int auto_reconnect;
+
+ /* fragment reassembly */
+ struct rpc_fragment *fragments;
};
struct rpc_pdu {
struct rpc_context *rpc_init_udp_context(void);
struct sockaddr *rpc_get_recv_sockaddr(struct rpc_context *rpc);
+void rpc_set_autoreconnect(struct rpc_context *rpc);
+void rpc_unset_autoreconnect(struct rpc_context *rpc);
+
+int rpc_add_fragment(struct rpc_context *rpc, char *data, uint64_t size);
+void rpc_free_all_fragments(struct rpc_context *rpc);
+
+const struct nfs_fh3 *nfs_get_rootfh(struct nfs_context *nfs);