summaryrefslogtreecommitdiff
path: root/sys/include/sunrpc.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
commitc558a99e0be506a9abdf677f0ca4490644e05fc1 (patch)
tree17aef678ad05a32ef96ce8385703cb3fe089a5c7 /sys/include/sunrpc.h
parente5888a1ffdae813d7575f5fb02275c6bb07e5199 (diff)
Import sources from 2011-03-30 iso image - sys/include
Diffstat (limited to 'sys/include/sunrpc.h')
-rwxr-xr-xsys/include/sunrpc.h396
1 files changed, 396 insertions, 0 deletions
diff --git a/sys/include/sunrpc.h b/sys/include/sunrpc.h
new file mode 100755
index 000000000..6d8b08852
--- /dev/null
+++ b/sys/include/sunrpc.h
@@ -0,0 +1,396 @@
+/*
+ * Sun RPC; see RFC 1057
+ */
+
+#pragma lib "libsunrpc.a"
+#pragma src "/sys/src/libsunrpc"
+
+typedef uchar u1int;
+
+typedef struct SunAuthInfo SunAuthInfo;
+typedef struct SunAuthUnix SunAuthUnix;
+typedef struct SunRpc SunRpc;
+typedef struct SunCall SunCall;
+
+enum
+{
+ /* Authinfo.flavor */
+ SunAuthNone = 0,
+ SunAuthSys,
+ SunAuthShort,
+ SunAuthDes,
+};
+
+typedef enum {
+ SunAcceptError = 0x10000,
+ SunRejectError = 0x20000,
+ SunAuthError = 0x40000,
+
+ /* Reply.status */
+ SunSuccess = 0,
+
+ SunProgUnavail = SunAcceptError | 1,
+ SunProgMismatch,
+ SunProcUnavail,
+ SunGarbageArgs,
+ SunSystemErr,
+
+ SunRpcMismatch = SunRejectError | 0,
+
+ SunAuthBadCred = SunAuthError | 1,
+ SunAuthRejectedCred,
+ SunAuthBadVerf,
+ SunAuthRejectedVerf,
+ SunAuthTooWeak,
+ SunAuthInvalidResp,
+ SunAuthFailed,
+} SunStatus;
+
+struct SunAuthInfo
+{
+ uint flavor;
+ uchar *data;
+ uint ndata;
+};
+
+struct SunAuthUnix
+{
+ u32int stamp;
+ char *sysname;
+ u32int uid;
+ u32int gid;
+ u32int g[16];
+ u32int ng;
+};
+
+struct SunRpc
+{
+ u32int xid;
+ uint iscall;
+
+ /*
+ * only sent on wire in call
+ * caller fills in for the reply unpackers.
+ */
+ u32int proc;
+
+ /* call */
+ // uint proc;
+ u32int prog, vers;
+ SunAuthInfo cred;
+ SunAuthInfo verf;
+ uchar *data;
+ uint ndata;
+
+ /* reply */
+ u32int status;
+ // SunAuthInfo verf;
+ u32int low, high;
+ // uchar *data;
+ // uint ndata;
+};
+
+typedef enum
+{
+ SunCallTypeTNull,
+ SunCallTypeRNull,
+} SunCallType;
+
+struct SunCall
+{
+ SunRpc rpc;
+ SunCallType type;
+};
+
+void sunErrstr(SunStatus);
+
+void sunRpcPrint(Fmt*, SunRpc*);
+uint sunRpcSize(SunRpc*);
+SunStatus sunRpcPack(uchar*, uchar*, uchar**, SunRpc*);
+SunStatus sunRpcUnpack(uchar*, uchar*, uchar**, SunRpc*);
+
+void sunAuthInfoPrint(Fmt*, SunAuthInfo*);
+uint sunAuthInfoSize(SunAuthInfo*);
+int sunAuthInfoPack(uchar*, uchar*, uchar**, SunAuthInfo*);
+int sunAuthInfoUnpack(uchar*, uchar*, uchar**, SunAuthInfo*);
+
+void sunAuthUnixPrint(Fmt*, SunAuthUnix*);
+uint sunAuthUnixSize(SunAuthUnix*);
+int sunAuthUnixPack(uchar*, uchar*, uchar**, SunAuthUnix*);
+int sunAuthUnixUnpack(uchar*, uchar*, uchar**, SunAuthUnix*);
+
+int sunEnumPack(uchar*, uchar*, uchar**, int*);
+int sunEnumUnpack(uchar*, uchar*, uchar**, int*);
+int sunUint1Pack(uchar*, uchar*, uchar**, u1int*);
+int sunUint1Unpack(uchar*, uchar*, uchar**, u1int*);
+
+int sunStringPack(uchar*, uchar*, uchar**, char**, u32int);
+int sunStringUnpack(uchar*, uchar*, uchar**, char**, u32int);
+uint sunStringSize(char*);
+
+int sunUint32Pack(uchar*, uchar*, uchar**, u32int*);
+int sunUint32Unpack(uchar*, uchar*, uchar**, u32int*);
+int sunUint64Pack(uchar*, uchar*, uchar**, u64int*);
+int sunUint64Unpack(uchar*, uchar*, uchar**, u64int*);
+
+int sunVarOpaquePack(uchar*, uchar*, uchar**, uchar**, u32int*, u32int);
+int sunVarOpaqueUnpack(uchar*, uchar*, uchar**, uchar**, u32int*, u32int);
+uint sunVarOpaqueSize(u32int);
+
+int sunFixedOpaquePack(uchar*, uchar*, uchar**, uchar*, u32int);
+int sunFixedOpaqueUnpack(uchar*, uchar*, uchar**, uchar*, u32int);
+uint sunFixedOpaqueSize(u32int);
+
+/*
+ * Sun RPC Program
+ */
+typedef struct SunProc SunProc;
+typedef struct SunProg SunProg;
+struct SunProg
+{
+ uint prog;
+ uint vers;
+ SunProc *proc;
+ int nproc;
+};
+
+struct SunProc
+{
+ int (*pack)(uchar*, uchar*, uchar**, SunCall*);
+ int (*unpack)(uchar*, uchar*, uchar**, SunCall*);
+ uint (*size)(SunCall*);
+ void (*fmt)(Fmt*, SunCall*);
+ uint sizeoftype;
+};
+
+SunStatus sunCallPack(SunProg*, uchar*, uchar*, uchar**, SunCall*);
+SunStatus sunCallUnpack(SunProg*, uchar*, uchar*, uchar**, SunCall*);
+SunStatus sunCallUnpackAlloc(SunProg*, SunCallType, uchar*, uchar*, uchar**, SunCall**);
+uint sunCallSize(SunProg*, SunCall*);
+void sunCallSetup(SunCall*, SunProg*, uint);
+
+/*
+ * Formatting
+ */
+#pragma varargck type "B" SunRpc*
+#pragma varargck type "C" SunCall*
+
+int sunRpcFmt(Fmt*);
+int sunCallFmt(Fmt*);
+void sunFmtInstall(SunProg*);
+
+
+/*
+ * Sun RPC Server
+ */
+typedef struct SunMsg SunMsg;
+typedef struct SunSrv SunSrv;
+
+enum
+{
+ SunStackSize = 8192,
+};
+
+struct SunMsg
+{
+ uchar *data;
+ int count;
+ SunSrv *srv;
+ SunRpc rpc;
+ SunProg *pg;
+ SunCall *call;
+ Channel *creply; /* chan(SunMsg*) */
+};
+
+struct SunSrv
+{
+ int chatty;
+ int cacheReplies;
+ int alwaysReject;
+ SunProg **map;
+ Channel *crequest;
+
+/* implementation use only */
+ Channel **cdispatch;
+ SunProg **prog;
+ int nprog;
+ void *cache;
+ Channel *creply;
+ Channel *cthread;
+};
+
+SunSrv *sunSrv(void);
+
+void sunSrvProg(SunSrv *srv, SunProg *prog, Channel *c);
+int sunSrvAnnounce(SunSrv *srv, char *address);
+int sunSrvUdp(SunSrv *srv, char *address);
+int sunSrvNet(SunSrv *srv, char *address);
+int sunSrvFd(SunSrv *srv, int fd);
+void sunSrvThreadCreate(SunSrv *srv, void (*fn)(void*), void*);
+void sunSrvClose(SunSrv*);
+
+int sunMsgReply(SunMsg*, SunCall*);
+int sunMsgDrop(SunMsg*);
+int sunMsgReplyError(SunMsg*, SunStatus);
+
+/*
+ * Sun RPC Client
+ */
+typedef struct SunClient SunClient;
+
+struct SunClient
+{
+ int fd;
+ int chatty;
+ int needcount;
+ ulong maxwait;
+ ulong xidgen;
+ int nsend;
+ int nresend;
+ struct {
+ ulong min;
+ ulong max;
+ ulong avg;
+ } rtt;
+ Channel *dying;
+ Channel *rpcchan;
+ Channel *timerchan;
+ Channel *flushchan;
+ Channel *readchan;
+ SunProg **prog;
+ int nprog;
+ int timertid;
+ int nettid;
+};
+
+SunClient *sunDial(char*);
+
+int sunClientRpc(SunClient*, ulong, SunCall*, SunCall*, uchar**);
+void sunClientClose(SunClient*);
+void sunClientFlushRpc(SunClient*, ulong);
+void sunClientProg(SunClient*, SunProg*);
+
+
+/*
+ * Provided by callers.
+ * Should remove dependence on this, but hard.
+ */
+void *emalloc(ulong);
+void *erealloc(void*, ulong);
+
+
+/*
+ * Sun RPC port mapper; see RFC 1057 Appendix A
+ */
+
+typedef struct PortMap PortMap;
+typedef struct PortTNull PortTNull;
+typedef struct PortRNull PortRNull;
+typedef struct PortTSet PortTSet;
+typedef struct PortRSet PortRSet;
+typedef struct PortTUnset PortTUnset;
+typedef struct PortRUnset PortRUnset;
+typedef struct PortTGetport PortTGetport;
+typedef struct PortRGetport PortRGetport;
+typedef struct PortTDump PortTDump;
+typedef struct PortRDump PortRDump;
+typedef struct PortTCallit PortTCallit;
+typedef struct PortRCallit PortRCallit;
+
+typedef enum
+{
+ PortCallTNull,
+ PortCallRNull,
+ PortCallTSet,
+ PortCallRSet,
+ PortCallTUnset,
+ PortCallRUnset,
+ PortCallTGetport,
+ PortCallRGetport,
+ PortCallTDump,
+ PortCallRDump,
+ PortCallTCallit,
+ PortCallRCallit,
+} PortCallType;
+
+enum
+{
+ PortProgram = 100000,
+ PortVersion = 2,
+
+ PortProtoTcp = 6, /* protocol number for TCP/IP */
+ PortProtoUdp = 17 /* protocol number for UDP/IP */
+};
+
+struct PortMap {
+ u32int prog;
+ u32int vers;
+ u32int prot;
+ u32int port;
+};
+
+struct PortTNull {
+ SunCall call;
+};
+
+struct PortRNull {
+ SunCall call;
+};
+
+struct PortTSet {
+ SunCall call;
+ PortMap map;
+};
+
+struct PortRSet {
+ SunCall call;
+ u1int b;
+};
+
+struct PortTUnset {
+ SunCall call;
+ PortMap map;
+};
+
+struct PortRUnset {
+ SunCall call;
+ u1int b;
+};
+
+struct PortTGetport {
+ SunCall call;
+ PortMap map;
+};
+
+struct PortRGetport {
+ SunCall call;
+ u32int port;
+};
+
+struct PortTDump {
+ SunCall call;
+};
+
+struct PortRDump {
+ SunCall call;
+ PortMap *map;
+ int nmap;
+};
+
+struct PortTCallit {
+ SunCall call;
+ u32int prog;
+ u32int vers;
+ u32int proc;
+ uchar *data;
+ u32int count;
+};
+
+struct PortRCallit {
+ SunCall call;
+ u32int port;
+ uchar *data;
+ u32int count;
+};
+
+extern SunProg portProg;