# Global parameters
TCP_ACCEPTOR = ''
-
+MAXTCPBUF = 1048576
#
# Maximum number of devices to search for.
# (the /dev/loop* nodes need to be created beforehand)
quit """ % (net, gw, lo, hi)
self.run(cmds)
+
+ # add a route to a range
+ def del_route(self, net, gw, lo, hi):
+ cmds = """
+ network %s
+ del_route %s %s
+ quit """ % (net, lo, hi)
+ self.run(cmds)
+
# add a route to a host
def add_route_host(self, net, uuid, gw, tgt):
cmds = """
self.net_type = get_attr(dom_node,'type')
self.nid = get_text(dom_node, 'server', '*')
self.port = get_text_int(dom_node, 'port', 0)
- self.send_buf = get_text_int(dom_node, 'send_buf', 65536)
- self.read_buf = get_text_int(dom_node, 'read_buf', 65536)
+ self.send_mem = get_text_int(dom_node, 'send_mem', 65536)
+ self.recv_mem = get_text_int(dom_node, 'recv_mem', 65536)
if self.nid == '*':
self.nid = get_local_address(self.net_type)
if not self.nid:
def prepare(self):
self.info(self.net_type, self.nid, self.port)
if self.net_type == 'tcp':
- ret = run_daemon(TCP_ACCEPTOR, self.port)
+ ret = run_daemon(TCP_ACCEPTOR, '-s', self.send_mem, '-r', self.recv_mem, self.port)
if ret:
raise CommandError(TCP_ACCEPTOR, 'failed', ret)
-
ret = self.dom_node.getElementsByTagName('route_tbl')
for a in ret:
for r in a.getElementsByTagName('route'):
- lctl.add_route(self.net_type, self.nid, get_attr(r, 'lo'),
- get_attr(r,'hi', ''))
+ lo = get_attr(r, 'lo')
+ hi = get_attr(r,'hi', '')
+ lctl.add_route(self.net_type, self.nid, lo, hi)
+ if self.net_type == 'tcp' and hi == '':
+ srv = nid2server(self.dom_node.parentNode.parentNode, lo)
+ if not srv:
+ panic("no server for nid", lo)
+ else:
+ lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_mem, srv.recv_mem)
+
lctl.network(self.net_type, self.nid)
lctl.newdev(attach = "ptlrpc RPCDEV")
def cleanup(self):
self.info(self.net_type, self.nid, self.port)
+ ret = self.dom_node.getElementsByTagName('route_tbl')
+ for a in ret:
+ for r in a.getElementsByTagName('route'):
+ lo = get_attr(r, 'lo')
+ hi = get_attr(r,'hi', '')
+ if self.net_type == 'tcp' and hi == '':
+ srv = nid2server(self.dom_node.parentNode.parentNode, lo)
+ if not srv:
+ panic("no server for nid", lo)
+ else:
+ lctl.disconnect(srv.net_type, srv.nid, srv.port, srv.uuid)
+ lctl.del_route(self.net_type, self.nid, lo, hi)
try:
lctl.cleanup("RPCDEV", "")
except CommandError, e:
def prepare(self):
self.info(self.mds_uuid)
srv = self.get_server()
- lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_buf, srv.read_buf)
+ lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_mem, srv.recv_mem)
lctl.newdev(attach="mdc %s %s" % (self.name, self.uuid),
setup ="%s %s" %(self.mds_uuid, srv.uuid))
self.info(self.obd_uuid, self.ost_uuid)
srv = self.get_server()
if local_net(srv):
- lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_buf, srv.read_buf)
+ lctl.connect(srv.net_type, srv.nid, srv.port, srv.uuid, srv.send_mem, srv.recv_mem)
else:
r = find_route(srv)
if r:
if not uuid:
return None
return lookup(dom_node, uuid)
+
+def nid2server(dom_node, nid):
+ netlist = dom_node.getElementsByTagName('network')
+ for net_node in netlist:
+ if get_text(net_node, 'server') == nid:
+ return Network(net_node)
+ return None
def lookup(dom_node, uuid):
for n in dom_node.childNodes:
except IOError, e:
print e
+#/proc/sys/net/core/rmem_max
+#/proc/sys/net/core/wmem_max
+def sys_set_netmem_max(path, max):
+ debug("setting", path, "to at least", max)
+ if config.noexec():
+ return
+ fp = open(path)
+ str = fp.readline()
+ fp.close
+ cur = int(str)
+ if max > cur:
+ fp = open(path, 'w')
+ fp.write('%d\n' %(max))
+ fp.close()
+
def sys_make_devices():
if not os.access('/dev/portals', os.R_OK):
# Shutdown does steps in reverse
#
def main():
- global TCP_ACCEPTOR, lctl
+ global TCP_ACCEPTOR, lctl, MAXTCPBUF
args = parse_cmdline(sys.argv[1:])
if len(args) > 0:
if not os.access(args[0], os.R_OK | os.W_OK):
setupModulePath(sys.argv[0])
sys_make_devices()
+ sys_set_netmem_max('/proc/sys/net/core/rmem_max', MAXTCPBUF)
+ sys_set_netmem_max('/proc/sys/net/core/wmem_max', MAXTCPBUF)
doHost(dom.documentElement, node_list)
if __name__ == "__main__":
except CommandError, e:
e.dump()
-
node.appendChild(new)
return new
- def network(self, name, uuid, hostname, net, port=0):
+ def network(self, name, uuid, hostname, net, port=0, tcpbuf=0):
"""create <network> node"""
network = self.newService("network", name, uuid)
network.setAttribute("type", net);
self.addElement(network, "server", hostname)
if port:
self.addElement(network, "port", "%d" %(port))
+ if tcpbuf:
+ self.addElement(network, "send_mem", "%d" %(tcpbuf))
+ self.addElement(network, "recv_mem", "%d" %(tcpbuf))
+
return network
def route(self, lo, hi):
node_name = options['node']
nid = args[0]
net_type = args[1]
+ port = 0
+ tcpbuf = 0
if net_type == 'tcp':
if len(args) > 2:
port = int(args[2])
else:
port = DEFAULT_PORT
- # add send, recv buffer size here
+ if options.has_key('tcpbuf'):
+ tcpbuf = int(options['tcpbuf'])
elif net_type in ('elan', 'gm'):
port = 0
else:
node = ret
net_name = new_name('NET_'+ node_name +'_'+ net_type)
net_uuid = new_uuid(net_name)
- node.appendChild(gen.network(net_name, net_uuid, nid, net_type, port))
+ node.appendChild(gen.network(net_name, net_uuid, nid, net_type, port, tcpbuf))
node_add_profile(gen, node, "network", net_uuid)
#
def parse_cmdline(argv):
short_opts = "ho:i:m:"
- long_opts = ["ost", "osc", "mtpt", "lov=", "node=", "mds=", "net",
+ long_opts = ["ost", "osc", "mtpt", "lov=", "node=", "mds=", "net", "tcpbuf=",
"mdc", "route", "router", "merge=", "format", "reformat", "output=",
"obdtype=", "in=", "help"]
opts = []
options['merge'] = a
if o == "--obdtype":
options['obdtype'] = a
+ if o == "--tcpbuf":
+ options['tcpbuf'] = a
if o == "--format":
options['format'] = 1
if o == "--reformat":