module 10 – protocol compiling & lower-level rpc programming

21
Module 10 – Protocol Compiling & Lower-level RPC Programming

Upload: camila

Post on 12-Jan-2016

45 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: Module 10 – Protocol Compiling & Lower-level RPC Programming

Module 10 – Protocol Compiling & Lower-level RPC Programming

Page 2: Module 10 – Protocol Compiling & Lower-level RPC Programming

Objectives

• rpcgen 에 대해 이해한다 .• rpcgen 을 이용하여 간단한 프로그램을 작성한다 .• RPCL 언어에 대해 이해하고 사용 방법을 기술한다 .• low-level RPC 인터페이스에 대해 이해한다 .• 간단한 low-level 응용 프로그램을 작성한다 . • RPC Library Interface 에 대해 이해 한다 .

Page 3: Module 10 – Protocol Compiling & Lower-level RPC Programming

RPCGEN 을 이용한 응용 개발user developed

clientclientexecutableexecutable

serverserverexecutableexecutable

rpcgen

RPC Specification

shared filters& header file

client stub server stub

clientfunctions

RPC and datarepresentation

libraries

serverfunctions

compileandlink

compileandlink

Page 4: Module 10 – Protocol Compiling & Lower-level RPC Programming

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

Page 5: Module 10 – Protocol Compiling & Lower-level RPC Programming

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)

Page 6: Module 10 – Protocol Compiling & Lower-level RPC Programming

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

Page 7: Module 10 – Protocol Compiling & Lower-level RPC Programming

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];

Page 8: Module 10 – Protocol Compiling & Lower-level RPC Programming

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;

Page 9: Module 10 – Protocol Compiling & Lower-level RPC Programming

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)

Page 10: Module 10 – Protocol Compiling & Lower-level RPC Programming

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;

Page 11: Module 10 – Protocol Compiling & Lower-level RPC Programming

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 */

}

Page 12: Module 10 – Protocol Compiling & Lower-level RPC Programming

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;

Page 13: Module 10 – Protocol Compiling & Lower-level RPC Programming

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()

Page 14: Module 10 – Protocol Compiling & Lower-level RPC Programming

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;

Page 15: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 16: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 17: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 18: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 19: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 20: Module 10 – Protocol Compiling & Lower-level RPC Programming
Page 21: Module 10 – Protocol Compiling & Lower-level RPC Programming