Exemple #1
0
def l2_probe(args):
    src_host, src_ins, src_vif, err = find_vif_by_ip(int(args['epc_id']), 0,
                                                     args['src_ip'])
    if err:
        print sys.stderr, err
        return

    next_host, next_ins, next_vif, err = find_vif_by_ip(
        int(args['epc_id']), src_vif.subnetid, args['dst_ip'])

    if src_host.type == HOST_TYPE_VM:
        script = kvm_probe_script
    elif src_host.type == HOST_TYPE_NSP:
        script = nsp_probe_script
    else:
        print >> sys.stderr, "Error: unknown host type, %r" % src_host
        return

    for line in call_system_streaming([
            '/usr/bin/sshpass',
            '-p',
            src_host.user_passwd,
            'ssh',
    ] + SSH_OPTION_LIST + [
            '%s@%s' %
        (src_host.user_name, src_host.ip), script, 'ARP', '1', '5',
            str(src_vif.vlantag), args['src_ip'], src_vif.mac, args['dst_ip'],
            next_vif.mac if next_vif else '-'
    ],
                                      ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #2
0
def l4_probe(args):
    src_host, src_ins, src_vif, err = find_vif_by_ip(
        int(args['epc_id']), 0, args['src_ip'])
    if err:
        print sys.stderr, err
        return

    next_host, next_ins, next_vif, err = find_vif_by_ip(
        int(args['epc_id']), src_vif.subnetid, args['next_hop'])

    if src_host.type == HOST_TYPE_VM:
        script = kvm_probe_script
    elif src_host.type == HOST_TYPE_NSP:
        script = nsp_probe_script
    else:
        print >> sys.stderr, "Error: unknown host type, %r" % src_host
        return

    if args['app'] == 'tcp':
        protocol = 'TCP'
    else:
        print >> sys.stderr, "app must be one of: tcp"
        return

    for line in call_system_streaming(
            ['/usr/bin/sshpass', '-p', src_host.user_passwd, 'ssh',
             ] + SSH_OPTION_LIST +
            ['%s@%s' % (src_host.user_name, src_host.ip),
             script, protocol, '1', '5', str(src_vif.vlantag),
             args['src_ip'], src_vif.mac,
             args['dst_ip'], next_vif.mac if next_vif else '-',
             args['next_hop'], args['dst_port']],
            ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #3
0
def tcpdump_vm(args):
    try:
        vm = VM.get(VM.id == args['id'])
    except Exception:
        print >> sys.stderr, 'Error: get vm from db failed'
        return

    try:
        host = HostDevice.get(HostDevice.ip == vm.launch_server)
    except Exception:
        print >> sys.stderr, \
            'Error: get launch_server %s from db failed' % vm.launch_server
        return

    try:
        vif = VInterface.get(VInterface.devicetype == VIF_DEVICE_TYPE_VM,
                             VInterface.deviceid == args['id'],
                             VInterface.ifindex == args['if_index'])
    except Exception:
        print >> sys.stderr, 'Error: get vif if_index=%s from db failed' % \
            args['if_index']
        return

    cmd = 'sshpass -p %s ssh %s %s@%s "ovs-vsctl --bare -- --columns=name ' \
        'find interface \'external_ids:attached-mac=\\\"%s\\\"\'"' % \
        (host.user_passwd, SSH_OPTION_STRING, host.user_name, host.ip, vif.mac)
    rc, output = commands.getstatusoutput(cmd)
    if rc:
        print >> sys.stderr, \
            'Error: cmd [%s] failed, rc=%d out=%s' % \
            (cmd.replace(host.user_passwd, '*'), rc, output)
        return
    if_name = output

    tcpdump_cmds = [
        'tcpdump', '-i', if_name, '-l', '-nn', '-e', '-v', '-c', args['count'],
        args['filter']
    ]
    print ' '.join(tcpdump_cmds)
    for line in call_system_streaming([
            '/usr/bin/timeout',
            args['timeout'],
            '/usr/bin/sshpass',
            '-p',
            host.user_passwd,
            'ssh',
    ] + SSH_OPTION_LIST + ['%s@%s' % (host.user_name, host.ip)] + tcpdump_cmds,
                                      ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #4
0
def tcpdump_vm(args):
    try:
        vm = VM.get(VM.id == args['id'])
    except Exception:
        print >> sys.stderr, 'Error: get vm from db failed'
        return

    try:
        host = HostDevice.get(HostDevice.ip == vm.launch_server)
    except Exception:
        print >> sys.stderr, \
            'Error: get launch_server %s from db failed' % vm.launch_server
        return

    try:
        vif = VInterface.get(
            VInterface.devicetype == VIF_DEVICE_TYPE_VM,
            VInterface.deviceid == args['id'],
            VInterface.ifindex == args['if_index'])
    except Exception:
        print >> sys.stderr, 'Error: get vif if_index=%s from db failed' % \
            args['if_index']
        return

    cmd = 'sshpass -p %s ssh %s %s@%s "ovs-vsctl --bare -- --columns=name ' \
        'find interface \'external_ids:attached-mac=\\\"%s\\\"\'"' % \
        (host.user_passwd, SSH_OPTION_STRING, host.user_name, host.ip, vif.mac)
    rc, output = commands.getstatusoutput(cmd)
    if rc:
        print >> sys.stderr, \
            'Error: cmd [%s] failed, rc=%d out=%s' % \
            (cmd.replace(host.user_passwd, '*'), rc, output)
        return
    if_name = output

    tcpdump_cmds = [
        'tcpdump', '-i', if_name,
        '-l', '-nn', '-e', '-v',
        '-c', args['count'], args['filter']]
    print ' '.join(tcpdump_cmds)
    for line in call_system_streaming(
            ['/usr/bin/timeout', args['timeout'],
             '/usr/bin/sshpass', '-p', host.user_passwd, 'ssh',
             ] + SSH_OPTION_LIST +
            ['%s@%s' % (host.user_name, host.ip)] + tcpdump_cmds,
            ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #5
0
def tcpdump_vgateway(args):
    try:
        vgw = VGateway.get(VGateway.id == args['id'])
    except Exception:
        print >> sys.stderr, 'Error: get vgw from db failed'
        return

    try:
        host = HostDevice.get(HostDevice.ip == vgw.gw_launch_server)
    except Exception:
        print >> sys.stderr, \
            'Error: get gw_launch_server %s from db failed' % \
            vgw.gw_launch_server
        return

    try:
        vif = VInterface.get(VInterface.devicetype == VIF_DEVICE_TYPE_VGATEWAY,
                             VInterface.deviceid == args['id'],
                             VInterface.ifindex == args['if_index'])
    except Exception:
        print >> sys.stderr, 'Error: get vif if_index=%s from db failed' % \
            args['if_index']
        return

    if vif.iftype == VINTERFACE_TYPE_WAN:
        if_name = '%d-w-%d' % (vgw.id, vif.ifindex)
    else:
        if_name = '%d-l-%d' % (vgw.id, vif.ifindex)

    tcpdump_cmds = [
        'tcpdump', '-i', if_name, '-l', '-nn', '-e', '-v', '-c', args['count'],
        args['filter']
    ]
    print ' '.join(tcpdump_cmds)
    for line in call_system_streaming([
            '/usr/bin/timeout',
            args['timeout'],
            '/usr/bin/sshpass',
            '-p',
            host.user_passwd,
            'ssh',
    ] + SSH_OPTION_LIST + ['%s@%s' % (host.user_name, host.ip)] + tcpdump_cmds,
                                      ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #6
0
def tcpdump_vgateway(args):
    try:
        vgw = VGateway.get(VGateway.id == args['id'])
    except Exception:
        print >> sys.stderr, 'Error: get vgw from db failed'
        return

    try:
        host = HostDevice.get(HostDevice.ip == vgw.gw_launch_server)
    except Exception:
        print >> sys.stderr, \
            'Error: get gw_launch_server %s from db failed' % \
            vgw.gw_launch_server
        return

    try:
        vif = VInterface.get(
            VInterface.devicetype == VIF_DEVICE_TYPE_VGATEWAY,
            VInterface.deviceid == args['id'],
            VInterface.ifindex == args['if_index'])
    except Exception:
        print >> sys.stderr, 'Error: get vif if_index=%s from db failed' % \
            args['if_index']
        return

    if vif.iftype == VINTERFACE_TYPE_WAN:
        if_name = '%d-w-%d' % (vgw.id, vif.ifindex)
    else:
        if_name = '%d-l-%d' % (vgw.id, vif.ifindex)

    tcpdump_cmds = [
        'tcpdump', '-i', if_name,
        '-l', '-nn', '-e', '-v',
        '-c', args['count'], args['filter']]
    print ' '.join(tcpdump_cmds)
    for line in call_system_streaming(
            ['/usr/bin/timeout', args['timeout'],
             '/usr/bin/sshpass', '-p', host.user_passwd, 'ssh',
             ] + SSH_OPTION_LIST +
            ['%s@%s' % (host.user_name, host.ip)] + tcpdump_cmds,
            ignore_err=False):
        print line,  # do not print duplicate newline
Exemple #7
0
def l3_probe(args):
    src_host, src_ins, src_vif, err = find_vif_by_ip(int(args['epc_id']), 0,
                                                     args['src_ip'])
    if err:
        print sys.stderr, err
        return

    next_host, next_ins, next_vif, err = find_vif_by_ip(
        int(args['epc_id']), src_vif.subnetid, args['next_hop'])

    if src_host.type == HOST_TYPE_VM:
        script = kvm_probe_script
    elif src_host.type == HOST_TYPE_NSP:
        script = nsp_probe_script
    else:
        print >> sys.stderr, "Error: unknown host type, %r" % src_host
        return

    if args['app'] == 'ping':
        protocol = 'ICMP'
    elif args['app'] == 'traceroute':
        protocol = 'TRACEROUTE'
    else:
        print >> sys.stderr, "app must be one of: ping, traceroute"
        return

    for line in call_system_streaming([
            '/usr/bin/sshpass',
            '-p',
            src_host.user_passwd,
            'ssh',
    ] + SSH_OPTION_LIST + [
            '%s@%s' % (src_host.user_name, src_host.ip), script, protocol, '1',
            '30' if protocol == 'TRACEROUTE' else '5',
            str(src_vif.vlantag), args['src_ip'], src_vif.mac, args['dst_ip'],
            next_vif.mac if next_vif else '-', args['next_hop']
    ],
                                      ignore_err=False):
        print line,  # do not print duplicate newline