예제 #1
0
static void patch_destroy(struct vport *vport)
{
	struct patch_vport *patch_vport = patch_vport_priv(vport);

	update_peers(ovs_dp_get_net(vport->dp), patch_vport->name, NULL);
	hlist_del(&patch_vport->hash_node);
	call_rcu(&patch_vport->rcu, free_port_rcu);
}
예제 #2
0
static struct vport *patch_create(const struct vport_parms *parms)
{
	struct vport *vport;
	struct patch_vport *patch_vport;
	const char *peer_name;
	struct patch_config *patchconf;
	struct net *net = ovs_dp_get_net(parms->dp);
	int err;

	vport = ovs_vport_alloc(sizeof(struct patch_vport),
				&ovs_patch_vport_ops, parms);
	if (IS_ERR(vport)) {
		err = PTR_ERR(vport);
		goto error;
	}

	patch_vport = patch_vport_priv(vport);

	strcpy(patch_vport->name, parms->name);

	patchconf = kmalloc(sizeof(struct patch_config), GFP_KERNEL);
	if (!patchconf) {
		err = -ENOMEM;
		goto error_free_vport;
	}

	err = patch_set_config(vport, parms->options, patchconf);
	if (err)
		goto error_free_patchconf;

	random_ether_addr(patchconf->eth_addr);

	rcu_assign_pointer(patch_vport->patchconf, patchconf);

	peer_name = patchconf->peer_name;
	hlist_add_head(&patch_vport->hash_node, hash_bucket(net, peer_name));
	rcu_assign_pointer(patch_vport->peer, ovs_vport_locate(net, peer_name));
	update_peers(net, patch_vport->name, vport);

	return vport;

error_free_patchconf:
	kfree(patchconf);
error_free_vport:
	ovs_vport_free(vport);
error:
	return ERR_PTR(err);
}
예제 #3
0
int network_manager_update(struct network_manager* nm)
{
    // If disabled, do nothing
    if(chaind_config(nm->chaind)->network.participate != 1) {
        return 0;
    }

    check_peer_discovery(nm);

    // If we have fewer peers connected than we want, try connecting some
    while(nm->num_peers < nm->num_peer_goal) {
        if(start_peer(nm) < 0) {
            // This can happen if we're out of addresses
            break;
        }
    }

    update_peers(nm);

    return 0;
}
예제 #4
0
void update_block(struct consensus_model *model,struct crypto777_node *nn,struct crypto777_block **blocks,uint32_t blocknum,struct crypto777_block *block,uint32_t mytimestamp)
{
    int32_t lookback;
    if ( is_newhwm_block(blocks,block) != 0 )
    {
        if ( blocks[blocknum] != 0 )
            free(blocks[blocknum]);
        blocks[blocknum] = block;
        if ( blocknum > nn->blocknum )
            nn->blocknum = blocknum;
        if ( blocknum == (nn->lastblocknum + 1) || blocknum < nn->lastblocknum )
        {
            lookback = blocknum - 5;
            if ( lookback < 0 )
                lookback = 0;
            nn->lastblocknum2 = blocks[lookback]->blocknum, nn->blocktxid2 = blocks[lookback]->hash.txid;
            nn->lastblocknum = blocknum, nn->blocktxid = block->hash.txid;
        }
        nn->lastblocktimestamp = mytimestamp;
        update_peers(nn,block,model->peermetrics,nn->numpeers,model->packet_leverage);
    }
}
예제 #5
0
void Peers::ctx_refresh()
{
	update_peers();
}
예제 #6
0
void Peers::setWpaGui(WpaGui *_wpagui)
{
	wpagui = _wpagui;
	update_peers();
}