Module 10 – Protocol Compiling & Lower-level RPC Programming

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;