📄 pmrpc_svc.c
字号:
#include <stdio.h>
#include "include/rpc/rpc.h"
#include "pmrpc.h"
static void pmv2prog_2();
int main()
{
SVCXPRT *transp;
transp = svcudp_create(RPC_ANYSOCK);
if (transp == NULL) {
(void)fprintf(stderr, "cannot create udp service.\n");
exit(1);
}
if (!svc_register(transp, PMV2PROG, PMV2VERS, pmv2prog_2, FALSE)) {
(void)fprintf(stderr, "unable to register (PMV2PROG, PMV2VERS, udp).\n");
exit(1);
}
svc_run();
(void)fprintf(stderr, "svc_run returned\n");
exit(1);
}
static void
pmv2prog_2(rqstp, transp)
struct svc_req *rqstp;
SVCXPRT *transp;
{
union {
tcpdrop_args drop_tcpack_2_arg;
int set_crc_2_arg;
int set_scramble_2_arg;
u_int set_maxlen_2_arg;
u_int set_minlen_2_arg;
config_struct load_config_2_arg;
rule_struct load_rule_2_arg;
rule_array_struct load_batch_rule_2_arg;
u_int clear_rule_2_arg;
u_int show_rule_2_arg;
rule_struct config_rule_2_arg;
rule_array_struct config_batch_rule_2_arg;
defrule_args set_def_rule_2_arg;
int set_mactable_2_arg;
} argument;
char *result;
bool_t (*xdr_argument)(), (*xdr_result)();
char *(*local)();
switch (rqstp->rq_proc) {
case NULLPROC:
(void)svc_sendreply(transp, xdr_void, (char *)NULL);
return;
case DROP_TCPACK:
xdr_argument = xdr_tcpdrop_args;
xdr_result = xdr_int;
local = (char *(*)()) drop_tcpack_2;
break;
case SET_CRC:
xdr_argument = xdr_int;
xdr_result = xdr_int;
local = (char *(*)()) set_crc_2;
break;
case SET_SCRAMBLE:
xdr_argument = xdr_int;
xdr_result = xdr_int;
local = (char *(*)()) set_scramble_2;
break;
case SET_MAXLEN:
xdr_argument = xdr_u_int;
xdr_result = xdr_int;
local = (char *(*)()) set_maxlen_2;
break;
case SET_MINLEN:
xdr_argument = xdr_u_int;
xdr_result = xdr_int;
local = (char *(*)()) set_minlen_2;
break;
case SAVE_CONFIG:
xdr_argument = xdr_void;
xdr_result = xdr_config_struct;
local = (char *(*)()) save_config_2;
break;
case LOAD_CONFIG:
xdr_argument = xdr_config_struct;
xdr_result = xdr_int;
local = (char *(*)()) load_config_2;
break;
case SAVE_RULE:
xdr_argument = xdr_void;
xdr_result = xdr_rule_struct;
local = (char *(*)()) save_rule_2;
break;
/*case SAVE_BATCH_RULE:
xdr_argument = xdr_void;
xdr_result = xdr_rule_array_struct;
local = (char *(*)()) save_batch_rule_2;
break;*/
case LOAD_RULE:
xdr_argument = xdr_rule_struct;
xdr_result = xdr_int;
local = (char *(*)()) load_rule_2;
break;
case LOAD_BATCH_RULE:
xdr_argument = xdr_rule_array_struct;
xdr_result = xdr_int;
local = (char *(*)()) load_batch_rule_2;
break;
case CLEAR_RULE:
xdr_argument = xdr_u_int;
xdr_result = xdr_int;
local = (char *(*)()) clear_rule_2;
break;
case SHOW_RULE:
xdr_argument = xdr_u_int;
xdr_result = xdr_rule_struct;
local = (char *(*)()) show_rule_2;
break;
/*case SHOW_BATCH_RULE:
xdr_argument = xdr_void;
xdr_result = xdr_rule_array_struct;
local = (char *(*)()) show_batch_rule_2;
break;*/
case CONFIG_RULE:
xdr_argument = xdr_rule_struct;
xdr_result = xdr_int;
local = (char *(*)()) config_rule_2;
break;
case CONFIG_BATCH_RULE:
xdr_argument = xdr_rule_array_struct;
xdr_result = xdr_int;
local = (char *(*)()) config_batch_rule_2;
break;
case SET_DEF_RULE:
xdr_argument = xdr_defrule_args;
xdr_result = xdr_int;
local = (char *(*)()) set_def_rule_2;
break;
case SHOW_CONFIG:
xdr_argument = xdr_void;
xdr_result = xdr_config_struct;
local = (char *(*)()) show_config_2;
break;
case SET_MACTABLE:
xdr_argument = xdr_int;
xdr_result = xdr_int;
local = (char *(*)()) set_mactable_2;
break;
default:
svcerr_noproc(transp);
return;
}
bzero((char *)&argument, sizeof(argument));
if (!svc_getargs(transp, xdr_argument, &argument)) {
svcerr_decode(transp);
return;
}
result = (*local)(&argument, rqstp);
if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
svcerr_systemerr(transp);
}
if (!svc_freeargs(transp, xdr_argument, &argument)) {
(void)fprintf(stderr, "unable to free arguments\n");
exit(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -