View
39
Download
0
Category
Preview:
DESCRIPTION
Module 10 – Protocol Compiling & Lower-level RPC Programming. Objectives. rpcgen 에 대해 이해한다 . rpcgen 을 이용하여 간단한 프로그램을 작성한다 . RPCL 언어에 대해 이해하고 사용 방법을 기술한다 . low-level RPC 인터페이스에 대해 이해한다 . 간단한 low-level 응용 프로그램을 작성한다 . RPC Library Interface 에 대해 이해 한다. RPCGEN 을 이용한 응용 개발. - PowerPoint PPT Presentation
Citation preview
Module 10 – Protocol Compiling & Lower-level RPC Programming
Objectives
• rpcgen 에 대해 이해한다 .• rpcgen 을 이용하여 간단한 프로그램을 작성한다 .• RPCL 언어에 대해 이해하고 사용 방법을 기술한다 .• low-level RPC 인터페이스에 대해 이해한다 .• 간단한 low-level 응용 프로그램을 작성한다 . • RPC Library Interface 에 대해 이해 한다 .
RPCGEN 을 이용한 응용 개발user developed
clientclientexecutableexecutable
serverserverexecutableexecutable
rpcgen
RPC Specification
shared filters& header file
client stub server stub
clientfunctions
RPC and datarepresentation
libraries
serverfunctions
compileandlink
compileandlink
Example - rpcgen
• sqrt.x
program SQRT_PROG {version SQRT_VERS {
int getsqrt(int) = 1;} = 1;
} = 0x20000088;
• rpcgen 에 의해 생성되는 파일– sqrt.h– sqrt_clnt.c– sqrt_svc.c– sqrt_xdr.c
Protocol Definition Language (RPCL)• XDR definition language 의 확장된 형태• 프로토콜을 정의할 때 사용• C syntax 와 유사• 확장자로 .x 를 사용• RPCGEN 으로 컴파일 (C source & header file) • RPCL 의 구성 요소
– Definitions (6 types)– Declarations (4 types)– Special cases (4 types)
RPCL's definitionsRPCL C definition
structure-definition
strcture point { int x; int y;}
struct point {int x;int y;
};typedef struct point point;bool_t xdr_point();
enum-definition
enum color {RED = 0,
GREEN = 1, BLUE = 2};
enum color { RED = 0, GREEN = 1, BLUE = 2}; typedef enum color color;bool_t xdr_color();
union-definition
union result switch (int error) { case 0: opaque data[MAX_SIZE]; default: void;};
struct result { int error;union { char data[MAX_SIZE]; } result_u;};
typedef struct result result;bool_t xdr_result
RPCL's definitions(cont')
RPCL C definition
const-definition const MAX_SIZE 8192 #define MAX_SIZE 8192
Program-address
program T_PROGRAM { version T_VERSION
{void
T_PROCEDURE(void) = 1; }=1;
} = 0x2000000
#define T_PROGRAM (u_long)0x2000000)#define T_VERSION ((u_lon
g)1)#deinfe T_PROCEDURE ((u_
long)1)extern void *t_procedure_1(
);
typedef-definition typedef point poly[4]; typedef point poly[4];
RPCL's declarations
RPCL C definition
integer Int c; Int c;Fixed-arraydefinition
Int arr[8]; Int arr[8];
variable-array-definition
int x<MAX_SIZE>;int x<>;
struct {u_int x_len;int *x_val;}x;
pointer-definition
struct poly { point *p; point *pNext;};
struct poly {point *p;point *pNext;
};typedef struct poly poly;bool_t xdr_poly();
boolean bool_t busyFalg; bool_t busyFalg;string string buffer<32>; Char *buffer;
opaque opaque fixData[512]; opaque varData<1024>;
char fixData[512];struct {
u_int varData_len;char *varData_val;} varData;
Low-level RPC 응용 프로그램
• 프로토콜 정의 프로그램 (application.x)
– RPCGEN 으로 프로토콜 정의 프로그램 compile
XDR routine 생성 (application_xdr.c)
프로토콜 정의에 대한 include file 생성 (application.h)
client stub 생성 (application_clnt.c)
server stub 생성 (application_svc.c)
• 서버 서비스 프로그램 (application_svc_proc.c)
– server stub 의 dispatch 루틴에 의해서 호출될 함수
• 클라이언트 프로그램 (application.c)
Client Side Function
• clnt_create()
#include <rpc/rpc.h>CLIENT clnt_create(host, prognum, versnum, protocol)
char *host;u_long prognum, versnum;char *protocol;
• clnt_destroy()
#include <rpc/rpc.h>void clnt_destroy(clnt)
CLIENT *clnt;
• void svc_run()
#include <rpc/rpc.h>bool_t clnt_control(clnt, request, info)
CLIENT *clnt;int request;char *info;
Client Side Function
• clnt_call()
enum clnt_stat clnt_call(clnt, procnum, inproc, in, outproc, out, time out)CLIENT *clnt;u_long prognum;xdrproc_t inproc, outproc;char *in, *out;struct timeval timeout;
struct timeval {long tv_sec; /* seconds */long tv_usec; /* and microseconds */
}
Server Side Function
• svctcp_create()
#include <rpc/rpc.h>SVCXPRT svctcp_create(sock, sendsz, recvsz)
int sock;u_int sendz, recvsz;
• svcudp_create()
#include <rpc/rpc.h>
SVCXPRT svcudp_create(sock)int sock;
Example Program
XDR Filtersgenerated by compiler
client stubgenerated by compiler
your code, includesmain()
server stubgenerated by compiler
XDR Filtersgenerated by compiler
your codeservice procedures
ClientClient
ServerServer
NetworkRPC protocolrls_xdr.crls_xdr.c
rls_svc_proc.crls_svc_proc.crls_svc.crls_svc.c
rls_clnt.crls_clnt.c
rls.crls.c
readdir_1()readdir_1()
readdir_1()readdir_1()
rls.x
const MAXNAMELEN = 255;typedef string nametype<MAXNAMELEN>; /* a directory entry */typedef struct namenode *namelist; /* a link in the listing */
Struct namenode { nametype name; /* name of directory entry */
namelist pNext; /* next entry */};
union readdir_res switch (int errno) {case 0: namelist list; /* no error: return directory listing */default: void; /* error occurred: nothing else to return */
};
program DIRPROG {version DIRVERS {
readdir_res READDIR(nametype) = 1;} = 1;
} = 0x20000001;
Recommended