Commit 0e054578 authored by Ulysse Beaugnon's avatar Ulysse Beaugnon

Sevral bug fix

parent f73a5631
Bug :
Peers stay connected to the bootstrap node so none can enter
re6stnet adress should appear on only one interface
Bug in the upnp refresh
Check :
Check that boostrap nodes work as intended
possible bug in the upnp refresh
To be done :
Choose the metric to add to bootstrap peers
test with python 2.6
Choose peer DB size.
Choose the number of peer we ask to the server
Compare prefixes when 2 tunnels are established between the 2 same machines
Warn babeld about the tunnels wich are about to be deleted. Maybe we could
just increase the cost.
Warn babeld about the tunnels wich are about to be deleted. Maybe we could just increase the cost.
Do a test, on one ( or more ) real machine(s) preferably :
- package re6stnet
......@@ -21,14 +14,11 @@ To be done :
- follow the HOW TO section of the man page to setup a network
- see if it works....
Put more information in the token mail ( registry ), such as :
- the ip address of the network being built
- the creator of the network ( add option in registry ? )
Make sure the re6stnet ip address is added on only one interface
( tweak the ovpn-server script ), else duplicate addresses appears in routing
tables.
Fix bootstrap problem :
registry & --private option ( see re6stnet man page HOW TO ).
one have to start the registry twice, the first time without
......@@ -36,4 +26,6 @@ To be done :
Put a section about how to build the package from the sources in the README
Remove unnecessary information when sending a request to the server
......@@ -266,13 +266,6 @@ you can get them in the python interpreter::
>>> print prefix
0000000000000011
from re6st import utils
network = utils.networkFromCa('clients/server/ca.pem')
re6st_ip, prefix = utils.ipFromCert(network, 'clients/server/cert.crt')
print re6st_ip
print prefix
Now you can restart your re6st-registry with two more options:
``re6st-registry port_number --db db_path --ca path_to_ca.crt
......
......@@ -235,7 +235,7 @@ class main(object):
def declare(self, handler, address):
print "declaring new node"
client_address, address = address
client_address, _ = handler.client_address
client_address, _, _, _ = handler.client_address
client_ip = utils.binFromIp(client_address)
if client_ip.startswith(self.network):
prefix = client_ip[len(self.network):]
......@@ -249,6 +249,7 @@ class main(object):
def getPeerList(self, handler, n, client_address):
assert 0 < n < 1000
client_address, _, _, _ = handler.client_address
client_ip = utils.binFromIp(client_address)
if client_ip.startswith(self.network):
if time.time() > self.last_refresh + self.refresh_interval:
......
......@@ -86,6 +86,9 @@ class PeerManager:
def _declare(self):
if self._address != None:
print self._internal_ip
print self._address
print utils.address_str(self._address)
logging.info('Sending connection info to server...')
self._proxy.declare((self._internal_ip,
utils.address_str(self._address)))
......
......@@ -42,8 +42,11 @@ script_type = os.environ['script_type']
if script_type == 'up':
from subprocess import call
dev = os.environ['dev']
sys.exit(call(('ip', 'link', 'set', dev, 'up'))
or call(('ip', 'addr', 'add', sys.argv[1], 'dev', dev)))
if sys.argv[1] != 'none':
sys.exit(call(('ip', 'link', 'set', dev, 'up'))
or call(('ip', 'addr', 'add', sys.argv[1], 'dev', dev)))
else:
sys.exit(call(('ip', 'link', 'set', dev, 'up')))
if script_type == 'client-connect':
# Send client its external ip address
......
......@@ -25,10 +25,14 @@ def openvpn(hello_interval, *args, **kw):
def server(server_ip, ip_length, max_clients, dh_path, pipe_fd, port, proto, hello_interval, *args, **kw):
logging.debug('Starting server...')
if server_ip != '':
script_up = '%s %s/%u' % (ovpn_server, server_ip, 64)
else:
script_up = '%s none' % ovpn_server
return openvpn(hello_interval,
'--tls-server',
'--mode', 'server',
'--up', '%s %s/%u' % (ovpn_server, server_ip, 64),
'--up', script_up,
'--client-connect', ovpn_server + ' ' + str(pipe_fd),
'--client-disconnect', ovpn_server + ' ' + str(pipe_fd),
'--dh', dh_path,
......@@ -56,7 +60,7 @@ def client(server_address, pipe_fd, hello_interval, *args, **kw):
return openvpn(hello_interval, *remote, **kw)
def router(network, internal_ip, interface_list, isBootstrap,
def router(network, internal_ip, interface_list,
wireless, hello_interval, state_path, **kw):
logging.info('Starting babel...')
args = ['babeld',
......@@ -76,8 +80,6 @@ def router(network, internal_ip, interface_list, isBootstrap,
'-S', state_path,
'-s',
]
#if isBootstrap:
# args.extend(['-C', 'redistribute ip %s::/%u metric 16000' % (utils.ipFromBin(network), len(network))])
if wireless:
args.append('-w')
args = args + interface_list
......
......@@ -102,6 +102,11 @@ class TunnelManager:
self._client_count - len(self._connection_dict)):
logging.info('Establishing a connection with %s/%u' %
(hex(int(prefix, 2))[2:], len(prefix)))
# DEBUG
print self.free_interface_set
print self._client_count
print self._connection_dict
print len(self._connection_dict)
iface = self.free_interface_set.pop()
self._connection_dict[prefix] = Connection(address,
self._write_pipe, self._hello, iface,
......
......@@ -44,7 +44,7 @@ class Forwarder:
return None
# Make the redirection
if self._u.addportmapping(external_port, 'UDP', self._u.lanaddr,
if self._u.addportmapping(external_port, upnp_proto, self._u.lanaddr,
int(local_port), 're6stnet openvpn server', ''):
logging.debug('Forwarding %s:%s to %s:%s' % (self._external_ip,
external_port, self._u.lanaddr, local_port))
......
......@@ -59,9 +59,6 @@ def getConfig():
_('-w', '--wireless', action='store_true',
help='''Set all interfaces to be treated as wireless interfaces
for the routing protocol''')
_('--isbootstrap', default=False, action='store_true',
help="""Notify that the peer is a bootstrap peer and that other
peers shouldn't stay connected to it for too long""")
# Tunnel options
_('--pp', nargs=2, action='append',
......@@ -149,7 +146,7 @@ def main():
interface_list = list(tunnel_manager.free_interface_set) \
+ config.iface_list + list(iface
for _, _, iface in config.pp)
router = plib.router(network, internal_ip, interface_list, config.isbootstrap, config.wireless,
router = plib.router(network, internal_ip, interface_list, config.wireless,
config.hello, os.path.join(config.state, 'babeld.state'),
stdout=os.open(os.path.join(config.log, 'babeld.log'),
os.O_WRONLY | os.O_CREAT | os.O_TRUNC), stderr=subprocess.STDOUT)
......
......@@ -14,8 +14,8 @@ Results Simulate(int seed, int n, int k, int maxPeer, int maxDistanceFrom, floa
for(int r=0; r<runs; r++)
{
Graph graph(n, k, maxPeer, rng);
//graph.KillMachines(alivePercent);
//results.AddAccessibilitySample(((double)graph.CountUnreachableFrom(0))/((double)n));
graph.KillMachines(alivePercent);
results.AddAccessibilitySample(((double)graph.CountUnreachableFrom(0))/((double)n));
//int minCut = graph.GetMinCut();
//if(results.minKConnexity == -1 || results.minKConnexity > minCut)
//results.minKConnexity = minCut;
......@@ -29,7 +29,7 @@ Results Simulate(int seed, int n, int k, int maxPeer, int maxDistanceFrom, floa
results.UpdateDistance(distance, graph.size);
}*/
int distance[graph.size];
/*int distance[graph.size];
float routesCount[graph.size];
int nRefresh = 1;
......@@ -77,7 +77,7 @@ Results Simulate(int seed, int n, int k, int maxPeer, int maxDistanceFrom, floa
moy += distance[i];
moy /= graph.size;
cout << "Avg distance : " << moy << endl;
}
}*/
}
results.Finalise();
......@@ -90,26 +90,19 @@ int main(int argc, char** argv)
FILE* output = fopen(outName, "wt");
int fno = fileno(output);
fprintf(output, "n,k,a,maxPeer,avgDistance,disconnected,disconnectionProba,"
"maxDistance,maxArityDistrib,minCut,accessibility\n");
fprintf(output, "n,k,a,accessibility\n");
vector<future<string>> outputStrings;
for(int n=2000; n<=2000; n*=2)
for(int k=10; k<=10; k+=5)
for(float a=1; a<=1; a+=0.05)
for(int n=10000; n<=10000; n*=2)
for(int k=5; k<=15; k+=5)
for(float a=0.05; a<1; a+=0.05)
{
int seed = rng();
outputStrings.push_back(async(launch::async, [seed, n, k, a]()
{
Results results = Simulate(seed, n, k, 2.5*k, 10000, a, 1);
Results results = Simulate(seed, n, k, 2.5*k, 10000, a, 100);
ostringstream out;
out << n << "," << k << "," << a << "," << 3*k << ","
<< results.avgDistance << ","
<< results.disconnected << ","
<< results.disconnectionProba << ","
<< results.maxDistanceReached << ","
<< results.arityDistrib[3*k] << ","
<< results.minKConnexity << ","
out << n << "," << k << "," << a << ","
<< results.avgAccessibility
<< endl;
return out.str();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment