Import sources from 2011-03-30 iso image - sys/include
This commit is contained in:
parent
e5888a1ffd
commit
c558a99e0b
105 changed files with 11410 additions and 0 deletions
396
sys/include/sunrpc.h
Executable file
396
sys/include/sunrpc.h
Executable file
|
@ -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;
|
Loading…
Add table
Add a link
Reference in a new issue