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
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
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
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
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
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
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