def ls(obj=None):
    """List  available layers, or infos on a given layer"""
    if obj is None:
        
        import builtins
        all = builtins.__dict__.copy()
        all.update(globals())
        objlst = sorted(conf.layers, key=lambda x:x.__name__)
        for o in objlst:
            print("%-10s : %s" %(o.__name__,o.name))
    else:
        if isinstance(obj, type) and issubclass(obj, Packet):
            for f in obj.fields_desc:
                print("%-10s : %-20s = (%s)" % (f.name, f.__class__.__name__,  repr(f.default)))
        elif isinstance(obj, Packet):
            for f in obj.fields_desc:
                print("%-10s : %-20s = %-15s (%s)" % (f.name, f.__class__.__name__, repr(getattr(obj,f.name)), repr(f.default)))
            if not isinstance(obj.payload, NoPayload):
                print("--")
                ls(obj.payload)
                

        else:
            print("Not a packet class. Type 'ls()' to list packet classes.")
List  available layers, or infos on a given layer