📄 ppp_init.c
字号:
/* * ppp_init.c --- PPP initialization/configuration for OSF/1. * * Get rid of svr4-style interface flag since the driver bits use * use the old calling conventions. * * Configure should return ENOTSUP instead of EINVAL * * Use sysconfigtab framework * * Defer initialization callback until later in boot, to avoid panic. * * Note: Checks for #ifdef CFG_OP_CONFIGURE is my cheap way of telling * whether this system is V3.0+ or V2.0. Is there a better way? srt * Note: Checks for #ifdef CFG_PT_VM_AVAIL is my cheap way of telling * whether this system is V4.0+ or earlier. smd */#include <sys/sysconfig.h>#include <sys/stream.h>static int configured = 0;static struct streamadm tmpl_sa = { OSF_STREAMS_11, STR_IS_MODULE, { NULL }, /* sa_name, filled in at boot time */ NULL, /* sa_ttys */ SQLVL_ELSEWHERE, "ppp" /* "global" sync across all PPP modules */};extern struct streamtab ppp_ahdlcinfo;extern struct streamtab if_pppinfo;extern struct streamtab ppp_compinfo;extern struct streamtab pppinfo;#ifdef CFG_OP_CONFIGURE/* the number of actual PPP interfaces is extended * on-the-fly, as needed */static int nppp = 1;cfg_subsys_attr_t ppp_attributes[] = { {"nppp", CFG_ATTR_INTTYPE, CFG_OP_QUERY | CFG_OP_CONFIGURE, (caddr_t) &nppp, 1, 1024, 0}, {"", 0, 0, 0, 0, 0, 0} /* must be the last element */};#elsetypedef sysconfig_op_t cfg_op_t;#endif/* Add the PPP streams modules to the pool of available modules. * If for some reason we can't add one of them, then remove the * ones we did succeed in adding. */static intppp_initialize(){ dev_t devno = NODEV; int ret = ESUCCESS; if (!configured) { strcpy(tmpl_sa.sa_name, "if_ppp"); if ((devno = strmod_add(NODEV, &if_pppinfo, &tmpl_sa)) == NODEV) ret = ENODEV; strcpy(tmpl_sa.sa_name, "ppp_ahdl"); if ((devno = strmod_add(NODEV, &ppp_ahdlcinfo, &tmpl_sa)) == NODEV) { strcpy(tmpl_sa.sa_name, "if_ppp"); strmod_del(NODEV, &if_pppinfo, &tmpl_sa); ret = ENODEV; } strcpy(tmpl_sa.sa_name, "pppcomp"); if ((devno = strmod_add(NODEV, &ppp_compinfo, &tmpl_sa)) == NODEV) { strcpy(tmpl_sa.sa_name, "if_ppp"); strmod_del(NODEV, &if_pppinfo, &tmpl_sa); strcpy(tmpl_sa.sa_name, "ppp_ahdl"); strmod_del(NODEV, &ppp_ahdlcinfo, &tmpl_sa); ret = ENODEV; } strcpy(tmpl_sa.sa_name, "ppp"); tmpl_sa.sa_flags = STR_IS_DEVICE; if ((devno = strmod_add(NODEV, &pppinfo, &tmpl_sa)) == NODEV) { tmpl_sa.sa_flags = STR_IS_MODULE; strcpy(tmpl_sa.sa_name, "if_ppp"); strmod_del(NODEV, &if_pppinfo, &tmpl_sa); strcpy(tmpl_sa.sa_name, "ppp_ahdl"); strmod_del(NODEV, &ppp_ahdlcinfo, &tmpl_sa); strcpy(tmpl_sa.sa_name, "pppcomp"); strmod_del(NODEV, &ppp_compinfo, &tmpl_sa); ret = ENODEV; } configured = 1; } else ret = EINVAL; return(ret);}#ifdef CFG_PT_VM_AVAILstatic voidppp_callback(point, order, arg, event_arg)int point;int order;ulong arg;ulong event_arg;{ int ret; ret = ppp_initialize(); return; /* _callback returns void, losing info */}#endif /* CFG_PT_VM_AVAIL */intppp_configure(op, indata, indata_size, outdata, outdata_size)cfg_op_t op;char *indata, *outdata;ulong indata_size, outdata_size;{ int ret = ESUCCESS; switch (op) {#ifdef CFG_OP_CONFIGURE case CFG_OP_CONFIGURE:#else case SYSCONFIG_CONFIGURE:#endif /* CFG_OP_CONFIGURE */#ifdef CFG_PT_VM_AVAIL ret = register_callback(ppp_callback, CFG_PT_OLD_CONF_ALL, CFG_ORD_DONTCARE, 0L);#else ret = ppp_initialize();#endif /* CFG_PT_VM_AVAIL */ break;#ifdef CFG_OP_QUERY case CFG_OP_QUERY:#else case SYSCONFIG_QUERY:#endif break;#ifdef CFG_OP_RECONFIGURE case CFG_OP_RECONFIGURE: break;#endif default: ret = ENOTSUP; break; } return(ret);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -