static int vdev_mirror_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift) { vdev_t *cvd; uint64_t c; int numerrors = 0; int ret, lasterror = 0; if (vd->vdev_children == 0) { vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; return (EINVAL); } for (c = 0; c < vd->vdev_children; c++) { cvd = vd->vdev_child[c]; if ((ret = vdev_open(cvd)) != 0) { lasterror = ret; numerrors++; continue; } *asize = MIN(*asize - 1, cvd->vdev_asize - 1) + 1; *ashift = MAX(*ashift, cvd->vdev_ashift); } if (numerrors == vd->vdev_children) { vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS; return (lasterror); } return (0); }
static int vdev_root_open(vdev_t *vd, uint64_t *asize, uint64_t *ashift) { vdev_t *cvd; int c, error; int lasterror = 0; int numerrors = 0; if (vd->vdev_children == 0) { vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; return (EINVAL); } for (c = 0; c < vd->vdev_children; c++) { cvd = vd->vdev_child[c]; if ((error = vdev_open(cvd)) != 0) { lasterror = error; numerrors++; continue; } } if (too_many_errors(vd, numerrors)) { vd->vdev_stat.vs_aux = VDEV_AUX_NO_REPLICAS; return (lasterror); } *asize = 0; *ashift = 0; return (0); }
/** * init the onet once the iaddr has been obtained */ static int onet_init_post_iaddr( void ) { onet_t *onet = onet_main; int err; // start the responder onet->resp = resp_start(&onet->local_cnxid, usercfg_get_auth_type(), onet_resp_accepted_cb, NULL); if( !onet->resp ){ LOGM_CRIT("cant start onet's responder\n"); return -1; } resp_set_label(onet->resp, "NeoIP_router tunnel"); // publish the records for this router ns_util_publish_dns_hostname( NULL, usercfg_get_peername(), &onet->ip_iaddr, ONET_DNS_RECORD_TTL, NULL, NULL ); ns_util_publish_dns_ip_addr( NULL, &onet->ip_iaddr, usercfg_get_peername(), ONET_DNS_RECORD_TTL, NULL, NULL ); // open the virtual netif err = vdev_open( &onet->vdev ); if( err ){ LOGM_ERR("cant init vdev err=%d\n", err ); return -1; } // set the mtu netif_set_mtu( onet->vdev.dev_name, 10000 ); // register callback for the virtual netif vdev_register_callback( &onet->vdev, onet_vdev_in ); // set the ip addr and netmask onet_set_ip_addr( &onet->ip_iaddr ); onet_add_route_netmask( &onet->ip_netmask ); // start the dnsgrab layer if( prop_get_bool_dfl( "neoip_router", "debug:dnsgrab", 1 ) ){ if( dnsgrab_start() ){ LOGM_CRIT("cant start the dns grabber\n"); } if( watchdog_open() ){ LOGM_CRIT("cant start the watchdog\n"); } } // add the handler in httpd httpd_handler_add( "/neoip_router", onet_httpd_handler_cb ); return 0; }