lamiastella

network_controller

Dec 18th, 2015
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.77 KB | None | 0 0
  1. import os
  2. import paramiko
  3. import sys
  4.  
  5. def get_private_key():
  6.     # or choose the location and the private key file on your client
  7.     private_key_file = os.path.expanduser("/home/ubuntu/.ssh/id_rsa")
  8.     return paramiko.RSAKey.from_private_key_file(private_key_file, password='')
  9.  
  10.  
  11. def get_ssh(myusername, myhostname, myport):
  12.     ssh = paramiko.SSHClient()
  13.     ssh.load_system_host_keys()
  14.     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  15.     #ssh.connect(myhostname, username=myusername, port=myport, pkey = private_key)
  16.     ssh.connect(myhostname, username=myusername, port=myport)
  17.     return ssh
  18.  
  19. def block_exec(ssh, command):
  20.     stdin, stdout, stderr = ssh.exec_command(command)
  21.     exit_status = stdout.channel.recv_exit_status()
  22.     print command, exit_status
  23.     return
  24.  
  25. def clear_bw_config2(ssh, interface):
  26.     block_exec(ssh, "sudo tc qdisc del dev %s root" % interface)
  27.     block_exec(ssh, "sudo tc qdisc del dev %s ingress" % interface)
  28.     block_exec(ssh, "sudo tc class del dev %s root" % interface)
  29.     block_exec(ssh, "sudo tc filter del dev %s root" % interface)
  30.  
  31.  
  32.  
  33. def exec_bw_config2(ssh, interface, bandwidth, ip, subnetmasklength, delay):
  34.     clear_bw_config2(ssh, interface)
  35.     # create a qdisc (queuing discipline), 12 is default class
  36.     cmd1 = "sudo tc qdisc add dev %s root handle 1: htb default 12" % interface
  37.     print cmd1
  38.     block_exec(ssh, cmd1)
  39.  
  40.     # define the performance for default class
  41.     cmd2 = "sudo tc class add dev %s parent 1: classid 1:1 htb rate %dmbps ceil %dmbps" % (interface, bandwidth, 2*bandwidth )
  42.     print cmd2
  43.  
  44.     block_exec(ssh, cmd2)
  45.  
  46.  
  47.     filter_cmd = "sudo tc filter add dev %s protocol ip parent 1:0 prio 1 u32 match ip dst %s/%d flowid 1:1" % (interface, ip, subnetmasklength)
  48.     print filter_cmd
  49.     block_exec(ssh, filter_cmd)
  50.  
  51.     #delay_cmd = "sudo tc qdisc add dev eth0 parent 1: handle 1: netem delay %dms" %(delay)
  52.     delay_cmd="sudo tc qdisc add dev eth0 root netem %dms" %delay
  53.     print delay_cmd
  54.     block_exec(ssh, delay_cmd)
  55.  
  56.  
  57. def main():
  58.     myhosts = ["10.0.1.192", "10.0.1.191", "10.0.1.190"]
  59.     username="ubuntu"
  60.     port=22
  61.     #key = get_private_key()
  62.     for host in myhosts:
  63.         ssh = get_ssh(username, host, port)
  64.         clear_bw_config2(ssh, "eth0")
  65.         del_cmd="sudo tc qdisc del dev eth0 root"
  66.         block_exec(ssh, del_cmd)
  67.         exec_bw_config2(ssh, "eth0", int(sys.argv[1]) , "10.0.1.0", 24, int(sys.argv[2]))
  68.  
  69.     # iterate over hosts here
  70.     # for everyhost,
  71.     # 1. create ssh connection
  72.     # 2. run the exec_bw_config with params
  73.     return
  74.  
  75. if __name__ == '__main__':
  76.     main()
Advertisement
Add Comment
Please, Sign In to add comment