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);
}
Beispiel #2
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);
}
Beispiel #3
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;
}