⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppp_init.c

📁 unix and linux net driver
💻 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 + -