2015-12-18 4 views
0

Lorsque j'ai ajouté la commande de délai, paramiko retourne "2" comme état de sortie (alors qu'il renvoie "0" pour le réglage de la commande de bande passante). Est-ce que 2 va bien? (Googling n'a pas aidé avec cela, je suppose que 2 doit être une erreur quelconque).'RTNETLINK répond: Le fichier existe'

La commande que j'utilise est: -

delay_cmd = "sudo tc qdisc add dev eth0 parent 1: handle 1: netem delay %dms" %(delay) 

Nous essayons essentiellement de suivre ceci:

# tc qdisc add dev eth0 root netem delay 100ms

d'un tutoriel en ligne.

Le bloc de commandes qui doit définir le bw, le filtre et le retard est celui-ci. (Je devine que je pourrais être en train de jouer avec les identifiants des parents/classe). Pouvez-vous voir ce que je pourrais faire de mal?

cmd2 = "sudo tc class add dev %s parent 1: classid 1:1 htb rate %dmbps ceil %dmbps" % (interface, bandwidth, 2*bandwidth) 
    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) 
    delay_cmd = "sudo tc qdisc add dev eth0 parent 1:0 handle 1: netem delay %dms" %(delay) 

C'est l'erreur que je reçois:

'RTNETLINK answers: File exists' 

Ceci est notre script pour régler le retard et la bande passante:

def exec_bw_config2(ssh, interface, bandwidth, ip, subnetmasklength, delay): 
    clear_bw_config2(ssh, interface) 
    # create a qdisc (queuing discipline), 12 is default class 
    cmd1 = "sudo tc qdisc add dev %s root handle 1: htb default 12" % interface 
    print cmd1 
    block_exec(ssh, cmd1) 

    # define the performance for default class 
    cmd2 = "sudo tc class add dev %s parent 1: classid 1:1 htb rate %dmbps ceil %dmbps" % (interface, bandwidth, 2*bandwidth) 
    print cmd2 

    block_exec(ssh, cmd2) 


    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) 
    print filter_cmd 
    block_exec(ssh, filter_cmd) 


delay_cmd = "sudo tc qdisc add dev eth0 parent 1: handle 1: netem delay %dms" %(delay) 
    print delay_cmd 
    block_exec(ssh, delay_cmd) 

donc quelque chose de mal avec delay_cmd ci-dessus?

Voici comment nous l'appelons dans notre code:

def main(): 
    myhosts = ["10.0.1.192", "10.0.1.191", "10.0.1.190"] 
    username="ubuntu" 
    port=22 
    #key = get_private_key() 
    for host in myhosts: 
     ssh = get_ssh(username, host, port) 
     clear_bw_config2(ssh, "eth0") 
     exec_bw_config2(ssh, "eth0", int(sys.argv[1]) , "10.0.1.0", 24, int(sys.argv[2])) 

    # iterate over hosts here 
    # for everyhost, 
    # 1. create ssh connection 
    # 2. run the exec_bw_config with params 
    return 

Sur une autre note, quelle est la différence entre parent 1: handle et parent 1:2 handle en soi?

Répondre

1

Ce n'est pas une erreur fatale: 'Fichier existe' signifie simplement qu'une telle émulation est déjà définie et 'Argument invalide' qu'une telle émulation n'est pas connue du noyau ou déjà supprimée.

petit échantillon rapide:

# ~ $ sudo tc qdisc add dev eth0 root netem delay 0ms 
# ~ $ sudo tc qdisc add dev eth0 root netem delay 0ms 
RTNETLINK answers: File exists 
# ~ $ sudo tc qdisc del dev eth0 root netem delay 0ms 
# ~ $ sudo tc qdisc del dev eth0 root netem delay 0ms 
RTNETLINK answers: Invalid argument