mirror of
				https://github.com/opennetworkinglab/onos.git
				synced 2025-11-04 10:11:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/python
 | 
						|
 | 
						|
import sys
 | 
						|
import os
 | 
						|
import json
 | 
						|
 | 
						|
# TODO: if none given, use OCI
 | 
						|
try:
 | 
						|
    onosIp = sys.argv[1]
 | 
						|
    print "Reading hosts view from ONOS node " + onosIp + ":"
 | 
						|
except Exception as e:
 | 
						|
    print "Error reading ONOS IP arguement"
 | 
						|
    print e
 | 
						|
# Grab the json objects from ONOS
 | 
						|
output = os.popen("onos " + onosIp + " \"hosts -j\"" )
 | 
						|
hosts = json.loads( output.read() )
 | 
						|
#hosts = json.loads( output.split( 'Logging in as karaf\n' )[1] )
 | 
						|
 | 
						|
hostAttachment = True
 | 
						|
# FIXME: topo-HA/obelisk specific mappings:
 | 
						|
# key is mac and value is dpid
 | 
						|
mappings = {}
 | 
						|
for i in range( 1, 29 ):  # hosts 1 through 28
 | 
						|
    # set up correct variables:
 | 
						|
    macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
 | 
						|
    if i == 1:
 | 
						|
        deviceId = "1000".zfill(16)
 | 
						|
    elif i == 2:
 | 
						|
        deviceId = "2000".zfill(16)
 | 
						|
    elif i == 3:
 | 
						|
        deviceId = "3000".zfill(16)
 | 
						|
    elif i == 4:
 | 
						|
        deviceId = "3004".zfill(16)
 | 
						|
    elif i == 5:
 | 
						|
        deviceId = "5000".zfill(16)
 | 
						|
    elif i == 6:
 | 
						|
        deviceId = "6000".zfill(16)
 | 
						|
    elif i == 7:
 | 
						|
        deviceId = "6007".zfill(16)
 | 
						|
    elif i >= 8 and i <= 17:
 | 
						|
        dpid = '3' + str( i ).zfill( 3 )
 | 
						|
        deviceId = dpid.zfill(16)
 | 
						|
    elif i >= 18 and i <= 27:
 | 
						|
        dpid = '6' + str( i ).zfill( 3 )
 | 
						|
        deviceId = dpid.zfill(16)
 | 
						|
    elif i == 28:
 | 
						|
        deviceId = "2800".zfill(16)
 | 
						|
    mappings[ macId ] = deviceId
 | 
						|
 | 
						|
if hosts or "Error" not in hosts:
 | 
						|
    if hosts == []:
 | 
						|
        print "WARNING: There are no hosts discovered"
 | 
						|
    else:
 | 
						|
        for host in hosts:
 | 
						|
            mac = None
 | 
						|
            location = None
 | 
						|
            device = None
 | 
						|
            port = None
 | 
						|
            try:
 | 
						|
                mac = host.get( 'mac' )
 | 
						|
                assert mac, "mac field could not be found for this host object"
 | 
						|
 | 
						|
                location = host.get( 'location' )
 | 
						|
                assert location, "location field could not be found for this host object"
 | 
						|
 | 
						|
                # Trim the protocol identifier off deviceId
 | 
						|
                device = str( location.get( 'elementId' ) ).split(':')[1]
 | 
						|
                assert device, "elementId field could not be found for this host location object"
 | 
						|
 | 
						|
                port = location.get( 'port' )
 | 
						|
                assert port, "port field could not be found for this host location object"
 | 
						|
 | 
						|
                # Now check if this matches where they should be
 | 
						|
                if mac and device and port:
 | 
						|
                    if device != mappings[ str( mac ) ]:
 | 
						|
                        print "The attachment device is incorrect for host " + str( mac ) +\
 | 
						|
                              ". Expected: " + mappings[ str( mac ) ] + "; Actual: " + device
 | 
						|
                        hostAttachment = False
 | 
						|
                    if str( port ) != "1":
 | 
						|
                        print "The attachment port is incorrect for host " + str( mac ) +\
 | 
						|
                              ". Expected: 1; Actual: " + str( port)
 | 
						|
                        hostAttachment = False
 | 
						|
                else:
 | 
						|
                    hostAttachment = False
 | 
						|
            except AssertionError as e:
 | 
						|
                print "ERROR: Json object not as expected:"
 | 
						|
                print e
 | 
						|
                print "host object: " + repr( host )
 | 
						|
                hostAttachment = False
 | 
						|
else:
 | 
						|
    print "No hosts json output or \"Error\" in output. hosts = " + repr( hosts )
 |