From 6057906368d55634d11e1d19a5cca1f127595b11 Mon Sep 17 00:00:00 2001
From: Robin Jarry <robin.jarry@6wind.com>
Date: Wed, 1 Jun 2016 16:17:07 +0200
Subject: [PATCH] Fix individual modules import

When using scapy as a third party library, we do not "benefit" from the
loading routine that puts all symbols in the __builtin__ namespace. This
implies that all modules must be "importable" without any errors for
undefined symbols.

This patch fixes importing every scapy module individually. Some
circular imports were fixed (between inet6 and dhcp6).

Most errors were detected by using pylint with the right configuration
(scapy produces a *lot* of errors). Other errors were detected with the
following shell script:

    export PYTHONPATH=".:$PYTHONPATH"
    for f in $(find scapy/ -name '*.py'); do
        f=${f%/__init__.py}
        module=$(echo ${f%.py} | sed 's,/,.,g')
        python -c "import $module; print $module"
    done

Also, replace all implicit relative imports by absolute imports to avoid
surprises with some python versions.

Signed-off-by: Robin Jarry <robin.jarry@6wind.com>
---
 scapy/all.py                     | 64 +++++++++++++++----------------
 scapy/ansmachine.py              |  6 +--
 scapy/arch/__init__.py           | 16 ++++----
 scapy/arch/linux.py              |  3 +-
 scapy/arch/pcapdnet.py           | 12 +++---
 scapy/arch/solaris.py            |  2 +-
 scapy/arch/unix.py               |  6 +--
 scapy/arch/windows/__init__.py   |  3 +-
 scapy/as_resolvers.py            |  2 +-
 scapy/asn1/asn1.py               |  2 +-
 scapy/asn1/ber.py                |  2 +-
 scapy/asn1fields.py              | 21 +++++-----
 scapy/asn1packet.py              |  3 +-
 scapy/automaton.py               | 12 +++---
 scapy/autorun.py                 |  8 ++--
 scapy/base_classes.py            |  6 +--
 scapy/config.py                  | 11 +++---
 scapy/contrib/HomePlugAV.py      |  5 ++-
 scapy/contrib/bgp.py             |  1 +
 scapy/contrib/carp.py            |  5 ++-
 scapy/contrib/eigrp.uts          |  1 +
 scapy/contrib/gsm_um.py          |  7 +++-
 scapy/contrib/icmp_extensions.py |  6 ++-
 scapy/contrib/igmp.py            |  4 +-
 scapy/contrib/igmpv3.py          |  4 +-
 scapy/contrib/ikev2.py           |  5 ++-
 scapy/contrib/isis.py            | 14 ++-----
 scapy/contrib/modbus.py          |  4 +-
 scapy/contrib/mpls.py            |  7 ++--
 scapy/contrib/openflow.py        |  5 ++-
 scapy/contrib/openflow3.py       |  4 +-
 scapy/contrib/ospf.py            |  6 ++-
 scapy/contrib/send.py            |  4 +-
 scapy/contrib/skinny.py          |  8 ++--
 scapy/contrib/spbm.py            |  4 +-
 scapy/contrib/vtp.py             |  5 ++-
 scapy/dadict.py                  |  2 +-
 scapy/data.py                    |  4 +-
 scapy/error.py                   |  2 +-
 scapy/fields.py                  | 12 +++---
 scapy/layers/bluetooth.py        |  3 +-
 scapy/layers/dhcp.py             |  3 +-
 scapy/layers/dhcp6.py            | 55 ++------------------------
 scapy/layers/dns.py              |  2 +
 scapy/layers/dot11.py            |  9 ++++-
 scapy/layers/inet.py             |  5 ++-
 scapy/layers/inet6.py            | 66 +++++++++++++++++++++++++++++---
 scapy/layers/isakmp.py           |  1 +
 scapy/layers/l2.py               |  4 +-
 scapy/layers/sctp.py             |  1 +
 scapy/layers/snmp.py             |  7 +++-
 scapy/layers/tftp.py             |  2 +-
 scapy/layers/x509.py             |  4 ++
 scapy/main.py                    | 17 +++++---
 scapy/modules/nmap.py            |  3 ++
 scapy/modules/p0f.py             | 11 +++++-
 scapy/modules/queso.py           |  3 ++
 scapy/modules/voip.py            |  2 +
 scapy/packet.py                  | 17 ++++----
 scapy/pipetool.py                |  8 ++--
 scapy/plist.py                   | 21 ++++------
 scapy/pton_ntop.py               |  4 +-
 scapy/route.py                   |  8 ++--
 scapy/route6.py                  |  8 ++--
 scapy/scapypipes.py              |  7 +++-
 scapy/sendrecv.py                | 18 ++++-----
 scapy/supersocket.py             | 14 ++++---
 scapy/themes.py                  |  4 +-
 scapy/tools/UTscapy.py           |  2 +-
 scapy/utils.py                   | 17 ++++----
 scapy/utils6.py                  | 12 ++++--
 scapy/volatile.py                |  4 +-
 test/ipsec.uts                   |  2 +
 test/regression.uts              |  8 +++-
 74 files changed, 372 insertions(+), 278 deletions(-)

diff --git a/scapy/all.py b/scapy/all.py
index 15dd3ca4..9d6e5b5d 100644
--- a/scapy/all.py
+++ b/scapy/all.py
@@ -7,41 +7,41 @@
 Aggregate top level objects from all Scapy modules.
 """
 
-from base_classes import *
-from config import *
-from dadict import *
-from data import *
-from error import *
-from themes import *
-from arch import *
-
-from plist import *
-from fields import *
-from packet import *
-from asn1fields import *
-from asn1packet import *
-
-from utils import *
-from route import *
+from scapy.base_classes import *
+from scapy.config import *
+from scapy.dadict import *
+from scapy.data import *
+from scapy.error import *
+from scapy.themes import *
+from scapy.arch import *
+
+from scapy.plist import *
+from scapy.fields import *
+from scapy.packet import *
+from scapy.asn1fields import *
+from scapy.asn1packet import *
+
+from scapy.utils import *
+from scapy.route import *
 if conf.ipv6_enabled:
-    from utils6 import *
-    from route6 import *
-from sendrecv import *
-from supersocket import *
-from volatile import *
-from as_resolvers import *
+    from scapy.utils6 import *
+    from scapy.route6 import *
+from scapy.sendrecv import *
+from scapy.supersocket import *
+from scapy.volatile import *
+from scapy.as_resolvers import *
 
-from ansmachine import *
-from automaton import *
-from autorun import *
+from scapy.ansmachine import *
+from scapy.automaton import *
+from scapy.autorun import *
 
-from main import *
+from scapy.main import *
 
-from layers.all import *
+from scapy.layers.all import *
 
-from asn1.asn1 import *
-from asn1.ber import *
-from asn1.mib import *
+from scapy.asn1.asn1 import *
+from scapy.asn1.ber import *
+from scapy.asn1.mib import *
 
-from pipetool import *
-from scapypipes import *
+from scapy.pipetool import *
+from scapy.scapypipes import *
diff --git a/scapy/ansmachine.py b/scapy/ansmachine.py
index d73bd421..7f570cbf 100644
--- a/scapy/ansmachine.py
+++ b/scapy/ansmachine.py
@@ -11,9 +11,9 @@ Answering machines.
 ## Answering machines ##
 ########################
 
-from sendrecv import send,sendp,sniff
-from config import conf
-from error import log_interactive
+from scapy.sendrecv import send,sendp,sniff
+from scapy.config import conf
+from scapy.error import log_interactive
 
 class ReferenceAM(type):
     def __new__(cls, name, bases, dct):
diff --git a/scapy/arch/__init__.py b/scapy/arch/__init__.py
index 058f0f17..389a22b2 100644
--- a/scapy/arch/__init__.py
+++ b/scapy/arch/__init__.py
@@ -9,8 +9,10 @@ Operating system specific functionality.
 
 
 import sys,os,socket
+
 from scapy.error import *
 import scapy.config
+from scapy.pton_ntop import inet_pton
 
 try:
     from matplotlib import get_backend as matplotlib_get_backend
@@ -79,19 +81,19 @@ ARM_64 = not WINDOWS and (os.uname()[4] == 'aarch64')
 
 
 if LINUX:
-    from linux import *
+    from scapy.arch.linux import *
     if scapy.config.conf.use_pcap or scapy.config.conf.use_dnet:
-        from pcapdnet import *
+        from scapy.arch.pcapdnet import *
 elif BSD:
-    from bsd import LOOPBACK_NAME
-    from unix import read_routes, read_routes6, in6_getifaddr
+    from scapy.arch.bsd import LOOPBACK_NAME
+    from scapy.arch.unix import read_routes, read_routes6, in6_getifaddr
     scapy.config.conf.use_pcap = True
     scapy.config.conf.use_dnet = True
-    from pcapdnet import *
+    from scapy.arch.pcapdnet import *
 elif SOLARIS:
-    from solaris import *
+    from scapy.arch.solaris import *
 elif WINDOWS:
-    from windows import *
+    from scapy.arch.windows import *
 
 if scapy.config.conf.iface is None:
     scapy.config.conf.iface = LOOPBACK_NAME
diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py
index 0b2b9b9e..a9908bfc 100644
--- a/scapy/arch/linux.py
+++ b/scapy/arch/linux.py
@@ -11,6 +11,7 @@ from __future__ import with_statement
 import sys,os,struct,socket,time
 from select import select
 from fcntl import ioctl
+
 import scapy.utils
 import scapy.utils6
 from scapy.packet import Packet, Padding
@@ -18,7 +19,7 @@ from scapy.config import conf
 from scapy.data import *
 from scapy.supersocket import SuperSocket
 import scapy.arch
-from scapy.error import warning, Scapy_Exception
+from scapy.error import warning, Scapy_Exception, log_interactive, log_loading
 from scapy.arch.common import get_if
 
 
diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py
index 13ec1fae..ae628bce 100755
--- a/scapy/arch/pcapdnet.py
+++ b/scapy/arch/pcapdnet.py
@@ -8,16 +8,16 @@ Packet sending and receiving with libdnet and libpcap/WinPcap.
 """
 
 import time,struct,sys
+import socket
 if not sys.platform.startswith("win"):
     from fcntl import ioctl
+
 from scapy.data import *
 from scapy.config import conf
 from scapy.utils import warning, mac2str
 from scapy.supersocket import SuperSocket
-from scapy.error import Scapy_Exception
+from scapy.error import Scapy_Exception, log_loading
 import scapy.arch
-import socket
-
 
 if conf.use_winpcapy:
   #mostly code from https://github.com/phaethon/scapy translated to python2.X
@@ -145,17 +145,17 @@ if conf.use_winpcapy:
           return pcap_datalink(self.pcap)
       def fileno(self):
           if sys.platform.startswith("win"):
-            error("Cannot get selectable PCAP fd on Windows")
+            log_loading.error("Cannot get selectable PCAP fd on Windows")
             return 0
           return pcap_get_selectable_fd(self.pcap) 
       def setfilter(self, f):
           filter_exp = create_string_buffer(f)
           if pcap_compile(self.pcap, byref(self.bpf_program), filter_exp, 0, -1) == -1:
-            error("Could not compile filter expression %s" % f)
+            log_loading.error("Could not compile filter expression %s" % f)
             return False
           else:
             if pcap_setfilter(self.pcap, byref(self.bpf_program)) == -1:
-              error("Could not install filter %s" % f)
+              log_loading.error("Could not install filter %s" % f)
               return False
           return True
       def setnonblock(self, i):
diff --git a/scapy/arch/solaris.py b/scapy/arch/solaris.py
index 3117076a..13d23497 100644
--- a/scapy/arch/solaris.py
+++ b/scapy/arch/solaris.py
@@ -13,4 +13,4 @@ socket.IPPROTO_GRE = 47
 
 LOOPBACK_NAME="lo0"
 
-from unix import *
+from scapy.arch.unix import *
diff --git a/scapy/arch/unix.py b/scapy/arch/unix.py
index 1449df37..624844d4 100644
--- a/scapy/arch/unix.py
+++ b/scapy/arch/unix.py
@@ -9,7 +9,9 @@ Common customizations for all Unix-like operating systems other than Linux
 
 import sys,os,struct,socket,time
 from fcntl import ioctl
-from scapy.error import warning
+import socket
+
+from scapy.error import warning, log_interactive
 import scapy.config
 import scapy.utils
 from scapy.utils6 import in6_getscope, construct_source_candidate_set
@@ -17,8 +19,6 @@ from scapy.utils6 import in6_isvalid, in6_ismlladdr, in6_ismnladdr
 import scapy.arch
 from scapy.config import conf
 
-import socket
-
 
 ##################
 ## Routes stuff ##
diff --git a/scapy/arch/windows/__init__.py b/scapy/arch/windows/__init__.py
index b2855117..3884dac7 100755
--- a/scapy/arch/windows/__init__.py
+++ b/scapy/arch/windows/__init__.py
@@ -19,7 +19,6 @@ from scapy.utils import atol, itom, inet_aton, inet_ntoa, PcapReader
 from scapy.base_classes import Gen, Net, SetGen
 import scapy.plist as plist
 from scapy.sendrecv import debug, srp1
-from scapy.layers.l2 import Ether, ARP
 from scapy.data import MTU, ETHER_BROADCAST, ETH_P_ARP
 
 conf.use_pcap = False
@@ -211,7 +210,7 @@ def get_windows_if_list():
     ]
 
 def get_ip_from_name(ifname, v6=False):
-    for descr, ipadrr in exec_query(['Get-WmiObject',
+    for descr, ipaddr in exec_query(['Get-WmiObject',
                                      'Win32_NetworkAdapterConfiguration'],
                                     ['Description', 'IPAddress']):
         if descr == ifname.strip():
diff --git a/scapy/as_resolvers.py b/scapy/as_resolvers.py
index 24573c20..a1f3b796 100644
--- a/scapy/as_resolvers.py
+++ b/scapy/as_resolvers.py
@@ -9,7 +9,7 @@ Resolve Autonomous Systems (AS).
 
 
 import socket
-from config import conf
+from scapy.config import conf
 
 class AS_resolver:
     server = None
diff --git a/scapy/asn1/asn1.py b/scapy/asn1/asn1.py
index 6823d45b..55d7ab6b 100644
--- a/scapy/asn1/asn1.py
+++ b/scapy/asn1/asn1.py
@@ -12,7 +12,7 @@ import random
 from datetime import datetime
 from scapy.config import conf
 from scapy.error import Scapy_Exception, warning
-from scapy.volatile import RandField
+from scapy.volatile import RandField, RandIP
 from scapy.utils import Enum_metaclass, EnumElement, binrepr
 
 class RandASN1Object(RandField):
diff --git a/scapy/asn1/ber.py b/scapy/asn1/ber.py
index f1cdcc64..bfe74726 100644
--- a/scapy/asn1/ber.py
+++ b/scapy/asn1/ber.py
@@ -11,7 +11,7 @@ Basic Encoding Rules (BER) for ASN.1
 
 from scapy.error import warning
 from scapy.utils import binrepr,inet_aton,inet_ntoa
-from asn1 import ASN1_Decoding_Error,ASN1_Encoding_Error,ASN1_BadTag_Decoding_Error,ASN1_Codecs,ASN1_Class_UNIVERSAL,ASN1_Error,ASN1_DECODING_ERROR,ASN1_BADTAG
+from scapy.asn1.asn1 import ASN1_Decoding_Error,ASN1_Encoding_Error,ASN1_BadTag_Decoding_Error,ASN1_Codecs,ASN1_Class_UNIVERSAL,ASN1_Error,ASN1_DECODING_ERROR,ASN1_BADTAG
 
 ##################
 ## BER encoding ##
diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py
index 78d4399a..7c37d14f 100644
--- a/scapy/asn1fields.py
+++ b/scapy/asn1fields.py
@@ -8,12 +8,13 @@
 Classes that implement ASN.1 data structures.
 """
 
-from asn1.asn1 import *
-from asn1.ber import *
-from asn1.mib import *
-from volatile import *
-from base_classes import BasePacket
-from utils import binrepr
+from scapy.asn1.asn1 import *
+from scapy.asn1.ber import *
+from scapy.asn1.mib import *
+from scapy.volatile import *
+from scapy.base_classes import BasePacket
+from scapy.utils import binrepr
+from scapy import packet
 
 class ASN1F_badsequence(Exception):
     pass
@@ -376,7 +377,7 @@ class ASN1F_SEQUENCE_OF(ASN1F_field):
         return self.i2m(pkt, s)
 
     def randval(self):
-        return fuzz(self.asn1pkt())
+        return packet.fuzz(self.asn1pkt())
     def __repr__(self):
         return "<%s %s>" % (self.__class__.__name__, self.name)
 
@@ -496,7 +497,7 @@ class ASN1F_CHOICE(ASN1F_field):
                                 explicit_tag=exp)
         return BER_tagging_enc(s, explicit_tag=self.explicit_tag)
     def randval(self):
-        return RandChoice(*(fuzz(x()) for x in self.choices.itervalues()))
+        return RandChoice(*(packet.fuzz(x()) for x in self.choices.itervalues()))
 
 class ASN1F_PACKET(ASN1F_field):
     holds_packets = 1
@@ -579,7 +580,3 @@ class ASN1F_FLAGS(ASN1F_BIT_STRING):
             pretty_s = ", ".join(self.get_flags(pkt))
             return pretty_s + " " + repr(x)
         return repr(x)
-
-
-# This import must come last to avoid problems with cyclic dependencies
-import packet
diff --git a/scapy/asn1packet.py b/scapy/asn1packet.py
index 1b83c3a3..5d7b56a3 100644
--- a/scapy/asn1packet.py
+++ b/scapy/asn1packet.py
@@ -7,7 +7,8 @@
 Packet holding data in Abstract Syntax Notation (ASN.1).
 """
 
-from packet import *
+from scapy.base_classes import Packet_metaclass
+from scapy.packet import Packet
 
 class ASN1Packet_metaclass(Packet_metaclass):
     def __new__(cls, name, bases, dct):
diff --git a/scapy/automaton.py b/scapy/automaton.py
index 1dde1dac..247fa9d1 100644
--- a/scapy/automaton.py
+++ b/scapy/automaton.py
@@ -12,12 +12,12 @@ import types,itertools,time,os,sys,socket,traceback
 from select import select
 from collections import deque
 import thread
-from config import conf
-from utils import do_graph
-from error import log_interactive
-from plist import PacketList
-from data import MTU
-from supersocket import SuperSocket
+from scapy.config import conf
+from scapy.utils import do_graph
+from scapy.error import log_interactive
+from scapy.plist import PacketList
+from scapy.data import MTU
+from scapy.supersocket import SuperSocket
 
 class ObjectPipe:
     def __init__(self):
diff --git a/scapy/autorun.py b/scapy/autorun.py
index a4534949..b3b5c568 100644
--- a/scapy/autorun.py
+++ b/scapy/autorun.py
@@ -8,10 +8,10 @@ Run commands when the Scapy interpreter starts.
 """
 
 import code,sys
-from config import conf
-from themes import *
-from error import Scapy_Exception
-from utils import tex_escape
+from scapy.config import conf
+from scapy.themes import *
+from scapy.error import Scapy_Exception
+from scapy.utils import tex_escape
 
 
 #########################
diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index 7575bf6b..a810c085 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -12,8 +12,6 @@ Generators and packet meta classes.
 ################
 
 import re,random,socket
-import config
-import error
 import types
 
 class Gen(object):
@@ -202,6 +200,7 @@ class Packet_metaclass(type):
         for f in newcls.fields_desc:
             if hasattr(f, "register_owner"):
                 f.register_owner(newcls)
+        from scapy import config
         config.conf.layers.register(newcls)
         return newcls
 
@@ -216,6 +215,7 @@ class Packet_metaclass(type):
             try:
                 cls = cls.dispatch_hook(*args, **kargs)
             except:
+                from scapy import config
                 if config.conf.debug_dissector:
                     raise
                 cls = config.conf.raw_layer
@@ -238,7 +238,7 @@ class NewDefaultValues(Packet_metaclass):
     and it should still work.
     """    
     def __new__(cls, name, bases, dct):
-        from error import log_loading
+        from scapy.error import log_loading
         import traceback
         try:
             for tb in traceback.extract_stack()+[("??",-1,None,"")]:
diff --git a/scapy/config.py b/scapy/config.py
index 7f99e3d8..3f4fe8e6 100755
--- a/scapy/config.py
+++ b/scapy/config.py
@@ -8,10 +8,11 @@ Implementation for of the configuration object.
 """
 
 import os,time,socket,sys
-from data import *
-import base_classes
-import themes
-from error import log_scapy
+
+from scapy.data import *
+from scapy import base_classes
+from scapy import themes
+from scapy.error import log_scapy
 
 ############
 ## Config ##
@@ -279,7 +280,7 @@ def _prompt_changer(attr,val):
     prompt = conf.prompt
     try:
         ct = val
-        if isinstance(ct, AnsiColorTheme) and ct.prompt(""):
+        if isinstance(ct, themes.AnsiColorTheme) and ct.prompt(""):
             ## ^A and ^B delimit invisible caracters for readline to count right.
             ## And we need ct.prompt() to do change something or else ^A and ^B will be
             ## displayed
diff --git a/scapy/contrib/HomePlugAV.py b/scapy/contrib/HomePlugAV.py
index 1717f442..704720f3 100644
--- a/scapy/contrib/HomePlugAV.py
+++ b/scapy/contrib/HomePlugAV.py
@@ -1,4 +1,7 @@
-from scapy.all import *
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.l2 import Ether
+
 """
     Copyright (C) HomePlugAV Layer for Scapy by FlUxIuS (Sebastien Dudek)
 """
diff --git a/scapy/contrib/bgp.py b/scapy/contrib/bgp.py
index 61655e37..e6b86308 100644
--- a/scapy/contrib/bgp.py
+++ b/scapy/contrib/bgp.py
@@ -165,5 +165,6 @@ bind_layers( BGPHeader,       BGPHeader,   type=4)
 
 
 if __name__ == "__main__":
+    from scapy.main import interact
     interact(mydict=globals(), mybanner="BGP addon .05")
 
diff --git a/scapy/contrib/carp.py b/scapy/contrib/carp.py
index 3831aae4..aba858fc 100644
--- a/scapy/contrib/carp.py
+++ b/scapy/contrib/carp.py
@@ -2,11 +2,12 @@
 # scapy.contrib.description = CARP
 # scapy.contrib.status = loads
 
+import struct, hmac, hashlib
+
 from scapy.packet import *
 from scapy.layers.inet import IP
 from scapy.fields import BitField, ByteField, XShortField, IntField, XIntField
-from scapy.utils import checksum
-import struct, hmac, hashlib
+from scapy.utils import checksum, inet_aton
 
 class CARP(Packet):
     name = "CARP"
diff --git a/scapy/contrib/eigrp.uts b/scapy/contrib/eigrp.uts
index 77379679..c19a56b7 100644
--- a/scapy/contrib/eigrp.uts
+++ b/scapy/contrib/eigrp.uts
@@ -60,6 +60,7 @@ f = EigrpIP6Field("ipaddr", "2000::", length=128)
 f.i2len(None, "") == 16
 
 = EIGRPGuessPayloadClass function: Return Parameters TLV
+from scapy.contrib.eigrp import _EIGRPGuessPayloadClass
 isinstance(_EIGRPGuessPayloadClass("\x00\x01"), EIGRPParam)
 
 = EIGRPGuessPayloadClass function: Return Authentication Data TLV
diff --git a/scapy/contrib/gsm_um.py b/scapy/contrib/gsm_um.py
index 923d80b7..36b6a411 100644
--- a/scapy/contrib/gsm_um.py
+++ b/scapy/contrib/gsm_um.py
@@ -35,7 +35,9 @@ from types import StringType
 #from  time import sleep
 import socket
 logging.getLogger("scapy").setLevel(1)
-from scapy.all import *
+
+from scapy.packet import *
+from scapy.fields import *
 
 # This method is intended to send gsm air packets. It uses a unix domain
 # socket. It opens a socket, sends the parameter to the socket and
@@ -2229,7 +2231,7 @@ def startCc(CallControlCapabilities_presence=0):
     packet = a / b
     if CallControlCapabilities_presence is 1:
         c = CallControlCapabilitiesHdr(ieiCCC=0x15, eightBitCCC=0x0)
-        packet = paclet / c
+        packet = packet / c
     return packet
 
 
@@ -12789,4 +12791,5 @@ class AttachType(Packet):
 
 
 if __name__ == "__main__":
+    from scapy.main import interact
     interact(mydict=globals(), mybanner="Scapy GSM-UM (Air) Addon")
diff --git a/scapy/contrib/icmp_extensions.py b/scapy/contrib/icmp_extensions.py
index d86ac2ce..56820898 100644
--- a/scapy/contrib/icmp_extensions.py
+++ b/scapy/contrib/icmp_extensions.py
@@ -1,8 +1,10 @@
-from scapy.contrib.mpls import MPLS
+import scapy
+from scapy.packet import Packet, bind_layers
 from scapy.fields import *
+from scapy.layers.inet import IP, ICMP
 from scapy.layers.inet6 import IP6Field
-from scapy.packet import Packet, bind_layers
 from scapy.utils import warning
+from scapy.contrib.mpls import MPLS
 
 
 class ICMPExtensionObject(Packet):
diff --git a/scapy/contrib/igmp.py b/scapy/contrib/igmp.py
index cc3dadc8..fe7b225b 100644
--- a/scapy/contrib/igmp.py
+++ b/scapy/contrib/igmp.py
@@ -7,7 +7,9 @@
 #  TODO: scapy 2 has function getmacbyip, maybe it can replace igmpize
 #          at least from the MAC layer
 
-from scapy.all import *
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.inet import *
 
 #--------------------------------------------------------------------------
 def isValidMCAddr(ip):
diff --git a/scapy/contrib/igmpv3.py b/scapy/contrib/igmpv3.py
index dfdcf3a1..dd41f992 100644
--- a/scapy/contrib/igmpv3.py
+++ b/scapy/contrib/igmpv3.py
@@ -6,6 +6,9 @@
 # scapy.contrib.status = loads
 
 from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.inet import *
+from scapy.contrib.igmp import isValidMCAddr
 
 """ Based on the following references
  http://www.iana.org/assignments/igmp-type-numbers
@@ -25,7 +28,6 @@ from scapy.packet import *
 #
 
 #import sys, socket, struct, time
-from scapy.all import *
 print "IGMPv3  is still under development - Nov 2010"
 
 
diff --git a/scapy/contrib/ikev2.py b/scapy/contrib/ikev2.py
index 07d4dbb2..9b3f394e 100644
--- a/scapy/contrib/ikev2.py
+++ b/scapy/contrib/ikev2.py
@@ -5,17 +5,17 @@
 # scapy.contrib.description = IKEv2
 # scapy.contrib.status = loads
 
-from scapy.all import *
 import logging
+import struct
 
 
 ## Modified from the original ISAKMP code by Yaron Sheffer <yaronf.ietf@gmail.com>, June 2010.
 
-import struct
 from scapy.packet import *
 from scapy.fields import *
 from scapy.ansmachine import *
 from scapy.layers.inet import IP,UDP
+from scapy.layers.isakmp import ISAKMP
 from scapy.sendrecv import sr
 
 # see http://www.iana.org/assignments/ikev2-parameters for details
@@ -358,4 +358,5 @@ def ikev2scan(ip):
 # conf.debug_dissector = 1
 
 if __name__ == "__main__":
+    from scapy.main import interact
     interact(mydict=globals(), mybanner="IKEv2 alpha-level protocol implementation")
diff --git a/scapy/contrib/isis.py b/scapy/contrib/isis.py
index 34325657..c37dd163 100644
--- a/scapy/contrib/isis.py
+++ b/scapy/contrib/isis.py
@@ -46,19 +46,13 @@
 """
 
 import struct
+import random
 
 from scapy.config import conf
-from scapy.fields import Field, FlagsField, ByteField, ByteEnumField, \
-    FieldLenField, ShortField, PacketListField, XIntField, \
-    XShortField, ConditionalField, ThreeBytesField, IntField, BitField, IPField, \
-    FieldListField, MACField, BitFieldLenField, IPPrefixField, IP6PrefixField,\
-    BoundStrLenField
+from scapy.fields import *
+from scapy.packet import *
 from scapy.layers.clns import network_layer_protocol_ids, register_cln_protocol
 from scapy.layers.inet6 import IP6ListField
-from scapy.packet import Packet, bind_layers
-from scapy.utils import fletcher16_checkbytes
-from scapy.volatile import RandString, RandByte
-import random
 
 
 EXT_VERSION = "v0.0.1"
@@ -772,4 +766,4 @@ bind_layers(ISIS_CommonHdr, ISIS_L2_LSP, hdrlen=27, pdutype=20)
 bind_layers(ISIS_CommonHdr, ISIS_L1_CSNP, hdrlen=33, pdutype=24)
 bind_layers(ISIS_CommonHdr, ISIS_L2_CSNP, hdrlen=33, pdutype=25)
 bind_layers(ISIS_CommonHdr, ISIS_L1_PSNP, hdrlen=17, pdutype=26)
-bind_layers(ISIS_CommonHdr, ISIS_L2_PSNP, hdrlen=17, pdutype=27)
\ No newline at end of file
+bind_layers(ISIS_CommonHdr, ISIS_L2_PSNP, hdrlen=17, pdutype=27)
diff --git a/scapy/contrib/modbus.py b/scapy/contrib/modbus.py
index 8f4e83da..a6be7ff5 100644
--- a/scapy/contrib/modbus.py
+++ b/scapy/contrib/modbus.py
@@ -16,7 +16,9 @@
 
 # Copyright (C) 2016 Arthur Gervais, Ken LE PRADO, Sébastien Mainand
 
-from scapy.all import *
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.inet import *
 
 # TODO: implement serial specific function codes
 
diff --git a/scapy/contrib/mpls.py b/scapy/contrib/mpls.py
index 7f1f85a3..640a0c57 100644
--- a/scapy/contrib/mpls.py
+++ b/scapy/contrib/mpls.py
@@ -3,10 +3,11 @@
 # scapy.contrib.description = MPLS
 # scapy.contrib.status = loads
 
-from scapy.packet import Packet,bind_layers
+from scapy.packet import Packet, bind_layers, Padding
 from scapy.fields import BitField,ByteField
-from scapy.layers.l2 import Ether
-from scapy.layers.l2 import GRE
+from scapy.layers.inet import IP
+from scapy.layers.inet6 import IPv6
+from scapy.layers.l2 import Ether, GRE
 
 class MPLS(Packet):
    name = "MPLS"
diff --git a/scapy/contrib/openflow.py b/scapy/contrib/openflow.py
index 3e5fcf73..dd11630a 100755
--- a/scapy/contrib/openflow.py
+++ b/scapy/contrib/openflow.py
@@ -12,8 +12,9 @@
 # scapy.contrib.status = loads
 
 import struct
-from scapy.all import *
-from scapy.utils import binrepr
+from scapy.fields import *
+from scapy.layers.l2 import *
+from scapy.layers.inet import *
 
 ### If prereq_autocomplete is True then match prerequisites will be
 ### automatically handled. See OFPMatch class.
diff --git a/scapy/contrib/openflow3.py b/scapy/contrib/openflow3.py
index 5df721ad..9ef88587 100755
--- a/scapy/contrib/openflow3.py
+++ b/scapy/contrib/openflow3.py
@@ -12,7 +12,9 @@
 # scapy.contrib.status = loads
 
 import struct
-from scapy.all import *
+from scapy.fields import *
+from scapy.layers.l2 import *
+from scapy.layers.inet import *
 
 ### If prereq_autocomplete is True then match prerequisites will be
 ### automatically handled. See OFPMatch class.
diff --git a/scapy/contrib/ospf.py b/scapy/contrib/ospf.py
index 66c79b3e..7b10cea6 100644
--- a/scapy/contrib/ospf.py
+++ b/scapy/contrib/ospf.py
@@ -24,7 +24,10 @@ GNU General Public License for more details.
 """
 
 
-from scapy.all import *
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.inet import *
+from scapy.layers.inet6 import *
 
 EXT_VERSION = "v0.9.2"
 
@@ -746,4 +749,5 @@ DestIP6Field.bind_addr(OSPFv3_Hdr, "ff02::5")
 
 
 if __name__ == "__main__":
+    from scapy.main import interact
     interact(mydict=globals(), mybanner="OSPF extension %s" % EXT_VERSION)
diff --git a/scapy/contrib/send.py b/scapy/contrib/send.py
index 23f8c1cd..676158a4 100644
--- a/scapy/contrib/send.py
+++ b/scapy/contrib/send.py
@@ -8,9 +8,11 @@
 # scapy.contrib.description = SEND
 # scapy.contrib.status = loads
 
+import socket
+
 from scapy.packet import *
 from scapy.fields import *
-from scapy.layers.inet6 import icmp6typescls, _ICMPv6NDGuessPayload
+from scapy.layers.inet6 import icmp6typescls, _ICMPv6NDGuessPayload, Net6
 
 send_icmp6typescls = { 11: "ICMPv6NDOptCGA",
                        12: "ICMPv6NDOptRsaSig",
diff --git a/scapy/contrib/skinny.py b/scapy/contrib/skinny.py
index 41cbaa0a..1ed02e42 100644
--- a/scapy/contrib/skinny.py
+++ b/scapy/contrib/skinny.py
@@ -22,8 +22,9 @@
 ##                                                                         ##
 #############################################################################
 
-from scapy.all import *
-import __builtin__
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.inet import TCP
 
 #####################################################################
 # Helpers and constants
@@ -474,7 +475,7 @@ class Skinny(Packet):
     name="Skinny"
     fields_desc = [ LEIntField("len", None),
                     LEIntField("res",0),
-                    LEIntEnumField("msg",0, skinny_messages) ]
+                    LEIntEnumField("msg",0, skinny_messages_cls) ]
 
     def post_build(self, pkt, p):
         if self.len is None:
@@ -495,5 +496,6 @@ bind_layers(TCP, Skinny, { "dport": 2000 } )
 bind_layers(TCP, Skinny, { "sport": 2000 } )
 
 if __name__ == "__main__":
+    from scapy.main import interact
     interact(mydict=globals(),mybanner="Welcome to Skinny add-on")
 
diff --git a/scapy/contrib/spbm.py b/scapy/contrib/spbm.py
index efd48488..44ae942d 100644
--- a/scapy/contrib/spbm.py
+++ b/scapy/contrib/spbm.py
@@ -19,8 +19,8 @@
 # spb_example = backboneEther/backboneDot1Q/backboneServiceID/customerEther/customerDot1Q/customerIP/customerUDP/"Payload"
 
 from scapy.packet import Packet, bind_layers
-from scapy.layers.l2 import Ether
 from scapy.fields import *
+from scapy.layers.l2 import Ether, Dot1Q
 
 class SPBM(Packet):
     name = "SPBM"
@@ -35,4 +35,4 @@ class SPBM(Packet):
         return self.sprintf("SPBM (isid=%SPBM.isid%")
 
 bind_layers(Dot1Q, SPBM, type=0x88e7)
-bind_layers(SPBM, Ether)
\ No newline at end of file
+bind_layers(SPBM, Ether)
diff --git a/scapy/contrib/vtp.py b/scapy/contrib/vtp.py
index af5c2823..0ebb17d8 100644
--- a/scapy/contrib/vtp.py
+++ b/scapy/contrib/vtp.py
@@ -42,7 +42,9 @@
         http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml
 """
 
-from scapy.all import *
+from scapy.packet import *
+from scapy.fields import *
+from scapy.layers.l2 import *
 
 _VTP_VLAN_TYPE = {
             1 : 'Ethernet',
@@ -168,4 +170,5 @@ class VTP(Packet):
 bind_layers(SNAP, VTP, code=0x2003)
 
 if __name__ == '__main__':
+    from scapy.main import interact
     interact(mydict=globals(), mybanner="VTP")
diff --git a/scapy/dadict.py b/scapy/dadict.py
index f50ccfb1..62addb31 100644
--- a/scapy/dadict.py
+++ b/scapy/dadict.py
@@ -7,7 +7,7 @@
 Direct Access dictionary.
 """
 
-from error import Scapy_Exception
+from scapy.error import Scapy_Exception
 
 ###############################
 ## Direct Access dictionnary ##
diff --git a/scapy/data.py b/scapy/data.py
index 643ba964..890b00af 100644
--- a/scapy/data.py
+++ b/scapy/data.py
@@ -8,8 +8,8 @@ Global variables and functions for handling external data sets.
 """
 
 import os,sys,re
-from dadict import DADict
-from error import log_loading
+from scapy.dadict import DADict
+from scapy.error import log_loading
 
 ############
 ## Consts ##
diff --git a/scapy/error.py b/scapy/error.py
index 29ebc1ba..ee879d53 100644
--- a/scapy/error.py
+++ b/scapy/error.py
@@ -21,7 +21,7 @@ class ScapyFreqFilter(logging.Filter):
         logging.Filter.__init__(self)
         self.warning_table = {}
     def filter(self, record):        
-        from config import conf
+        from scapy.config import conf
         wt = conf.warning_threshold
         if wt > 0:
             stk = traceback.extract_stack()
diff --git a/scapy/fields.py b/scapy/fields.py
index e7a2ed55..0a92cef8 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -8,11 +8,11 @@ Fields: basic data structures that make up parts of packets.
 """
 
 import struct,copy,socket
-from config import conf
-from volatile import *
-from data import *
-from utils import *
-from base_classes import BasePacket, Gen, Net, Field_metaclass
+from scapy.config import conf
+from scapy.volatile import *
+from scapy.data import *
+from scapy.utils import *
+from scapy.base_classes import BasePacket, Gen, Net, Field_metaclass
 
 
 ############
@@ -630,7 +630,7 @@ class FieldLenField(Field):
         self.count_of = count_of
         self.adjust = adjust
         if fld is not None:
-            FIELD_LENGTH_MANAGEMENT_DEPRECATION(self.__class__.__name__)
+            #FIELD_LENGTH_MANAGEMENT_DEPRECATION(self.__class__.__name__)
             self.length_of = fld
     def i2m(self, pkt, x):
         if x is None:
diff --git a/scapy/layers/bluetooth.py b/scapy/layers/bluetooth.py
index db91e5da..9d7e4963 100644
--- a/scapy/layers/bluetooth.py
+++ b/scapy/layers/bluetooth.py
@@ -10,13 +10,14 @@ Bluetooth layers, sockets and send/receive functions.
 
 import socket,struct,array
 from ctypes import *
+from select import select
 
 from scapy.config import conf
 from scapy.packet import *
 from scapy.fields import *
 from scapy.supersocket import SuperSocket
+from scapy.sendrecv import sndrcv
 from scapy.data import MTU
-from select import select
 
 ##########
 # Fields #
diff --git a/scapy/layers/dhcp.py b/scapy/layers/dhcp.py
index ebd8f67c..612d72f7 100644
--- a/scapy/layers/dhcp.py
+++ b/scapy/layers/dhcp.py
@@ -12,13 +12,14 @@ import struct
 from scapy.packet import *
 from scapy.fields import *
 from scapy.ansmachine import *
+from scapy.data import *
 from scapy.layers.inet import UDP,IP
 from scapy.layers.l2 import Ether
 from scapy.base_classes import Net
 from scapy.volatile import RandField
 
 from scapy.arch import get_if_raw_hwaddr
-from scapy.sendrecv import srp1
+from scapy.sendrecv import *
 
 dhcpmagic="c\x82Sc"
 
diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py
index 32f28d6e..40ecedc1 100644
--- a/scapy/layers/dhcp6.py
+++ b/scapy/layers/dhcp6.py
@@ -11,11 +11,15 @@ DHCPv6: Dynamic Host Configuration Protocol for IPv6. [RFC 3315]
 """
 
 import socket
+
 from scapy.packet import *
 from scapy.fields import *
+from scapy.data import *
 from scapy.utils6 import *
+from scapy.themes import Color
 from scapy.layers.inet6 import *
 from scapy.ansmachine import AnsweringMachine
+from scapy.sendrecv import *
 
 #############################################################################
 # Helpers                                                                  ##
@@ -657,57 +661,6 @@ class DHCP6OptReconfAccept(_DHCP6OptGuessPayload):   # RFC sect 22.20
     fields_desc = [ ShortEnumField("optcode", 20, dhcp6opts),
                     ShortField("optlen", 0)]
 
-# As required in Sect 8. of RFC 3315, Domain Names must be encoded as 
-# described in section 3.1 of RFC 1035
-# XXX Label should be at most 63 octets in length : we do not enforce it
-#     Total length of domain should be 255 : we do not enforce it either
-class DomainNameListField(StrLenField):
-    __slots__ = ["padded"]
-    islist = 1
-    padded_unit = 8
-
-    def __init__(self, name, default, fld=None, length_from=None, padded=False):
-        self.padded = padded
-        StrLenField.__init__(self, name, default, fld, length_from)
-
-    def i2len(self, pkt, x):
-        return len(self.i2m(pkt, x))
-
-    def m2i(self, pkt, x):
-        res = []
-        while x:
-            # Get a name until \x00 is reached
-            cur = []
-            while x and x[0] != '\x00':
-                l = ord(x[0])
-                cur.append(x[1:l+1])
-                x = x[l+1:]
-            if self.padded:
-              # Discard following \x00 in padded mode
-              if len(cur):
-                res.append(".".join(cur) + ".")
-            else:
-              # Store the current name
-              res.append(".".join(cur) + ".")
-            if x and x[0] == '\x00':
-                x = x[1:]
-        return res
-
-    def i2m(self, pkt, x):
-        def conditionalTrailingDot(z):
-            if z and z[-1] == '\x00':
-                return z
-            return z+'\x00'
-        # Build the encode names
-        tmp = map(lambda y: map((lambda z: chr(len(z))+z), y.split('.')), x)
-        ret_string  = "".join(map(lambda x: conditionalTrailingDot("".join(x)), tmp))
-
-        # In padded mode, add some \x00 bytes
-        if self.padded and not len(ret_string) % self.padded_unit == 0:
-            ret_string += "\x00" * (self.padded_unit - len(ret_string) % self.padded_unit)
-
-        return ret_string
-
 class DHCP6OptSIPDomains(_DHCP6OptGuessPayload):       #RFC3319
     name = "DHCP6 Option - SIP Servers Domain Name List"
     fields_desc = [ ShortEnumField("optcode", 21, dhcp6opts),
diff --git a/scapy/layers/dns.py b/scapy/layers/dns.py
index ac7d4ad5..2532633a 100644
--- a/scapy/layers/dns.py
+++ b/scapy/layers/dns.py
@@ -9,9 +9,11 @@ DNS: Domain Name System.
 
 import socket,struct
 
+from scapy.config import conf
 from scapy.packet import *
 from scapy.fields import *
 from scapy.ansmachine import *
+from scapy.sendrecv import sr1
 from scapy.layers.inet import IP, DestIPField, UDP
 from scapy.layers.inet6 import DestIP6Field
 
diff --git a/scapy/layers/dot11.py b/scapy/layers/dot11.py
index df91e104..27e84dbc 100644
--- a/scapy/layers/dot11.py
+++ b/scapy/layers/dot11.py
@@ -8,11 +8,16 @@ Wireless LAN according to IEEE 802.11.
 """
 
 import re,struct
+from zlib import crc32
 
+from scapy.config import conf
+from scapy.data import *
 from scapy.packet import *
 from scapy.fields import *
+from scapy.ansmachine import *
 from scapy.plist import PacketList
 from scapy.layers.l2 import *
+from scapy.layers.inet import IP, TCP
 
 
 try:
@@ -441,11 +446,11 @@ iwconfig wlan0 mode managed
         p /= self.replace
         q.ID += 1
         q.getlayer(TCP).flags="RA"
-        q.getlayer(TCP).seq+=len(replace)
+        q.getlayer(TCP).seq+=len(self.replace)
         return [p,q]
     
     def print_reply(self):
-        print p.sprintf("Sent %IP.src%:%IP.sport% > %IP.dst%:%TCP.dport%")
+        print self.sprintf("Sent %IP.src%:%IP.sport% > %IP.dst%:%TCP.dport%")
 
     def send_reply(self, reply):
         sendp(reply, iface=self.ifto, **self.optsend)
diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py
index cf5cbbff..7f080acb 100644
--- a/scapy/layers/inet.py
+++ b/scapy/layers/inet.py
@@ -11,7 +11,9 @@ import os,time,struct,re,socket,new
 from select import select
 from collections import defaultdict
 
-from scapy.utils import checksum
+from scapy.utils import checksum,inet_aton,inet_ntoa
+from scapy.base_classes import Gen
+from scapy.data import *
 from scapy.layers.l2 import *
 from scapy.config import conf
 from scapy.fields import *
@@ -20,6 +22,7 @@ from scapy.volatile import *
 from scapy.sendrecv import sr,sr1,srp1
 from scapy.plist import PacketList,SndRcvList
 from scapy.automaton import Automaton,ATMT
+from scapy.error import warning
 
 import scapy.as_resolvers
 
diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index d64496cc..ec2c94a1 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -24,7 +24,9 @@ IPv6 (Internet Protocol v6).
 """
 
 
+import random
 import socket
+import sys
 if not socket.has_ipv6:
     raise socket.error("can't use AF_INET6, IPv6 is disabled")
 if not hasattr(socket, "IPPROTO_IPV6"):
@@ -35,8 +37,8 @@ if not hasattr(socket, "IPPROTO_IPIP"):
     socket.IPPROTO_IPIP = 4
 
 from scapy.config import conf
-from scapy.layers.l2 import *
-from scapy.layers.inet import *
+from scapy.base_classes import *
+from scapy.data import *
 from scapy.fields import *
 from scapy.packet import *
 from scapy.volatile import *
@@ -45,6 +47,10 @@ from scapy.as_resolvers import AS_resolver_riswhois
 from scapy.supersocket import SuperSocket,L3RawSocket
 from scapy.arch import *
 from scapy.utils6 import *
+from scapy.layers.l2 import *
+from scapy.layers.inet import *
+from scapy.utils import inet_pton, inet_ntop, strxor
+from scapy.error import warning
 
 
 #############################################################################
@@ -1649,7 +1655,7 @@ class ICMPv6NDOptMAP(_ICMPv6NDGuessPayload, Packet):     # RFC 4140
                     IP6Field("addr", "::") ] 
 
 
-class IP6PrefixField(IP6Field):
+class _IP6PrefixField(IP6Field):
     __slots__ = ["length_from"]
     def __init__(self, name, default):
         IP6Field.__init__(self, name, default)
@@ -1696,7 +1702,7 @@ class ICMPv6NDOptRouteInfo(_ICMPv6NDGuessPayload, Packet): # RFC 4191
                     BitField("prf",0,2),
                     BitField("res2",0,3),
                     IntField("rtlifetime", 0xffffffff),
-                    IP6PrefixField("prefix", None) ]
+                    _IP6PrefixField("prefix", None) ]
   
 class ICMPv6NDOptRDNSS(_ICMPv6NDGuessPayload, Packet): # RFC 5006
     name = "ICMPv6 Neighbor Discovery Option - Recursive DNS Server Option"
@@ -1714,7 +1720,57 @@ class ICMPv6NDOptEFA(_ICMPv6NDGuessPayload, Packet): # RFC 5175 (prev. 5075)
                     ByteField("len", 1),
                     BitField("res", 0, 48) ]
 
-from scapy.layers.dhcp6 import DomainNameListField
+# As required in Sect 8. of RFC 3315, Domain Names must be encoded as
+# described in section 3.1 of RFC 1035
+# XXX Label should be at most 63 octets in length : we do not enforce it
+#     Total length of domain should be 255 : we do not enforce it either
+class DomainNameListField(StrLenField):
+    __slots__ = ["padded"]
+    islist = 1
+    padded_unit = 8
+
+    def __init__(self, name, default, fld=None, length_from=None, padded=False):
+        self.padded = padded
+        StrLenField.__init__(self, name, default, fld, length_from)
+
+    def i2len(self, pkt, x):
+        return len(self.i2m(pkt, x))
+
+    def m2i(self, pkt, x):
+        res = []
+        while x:
+            # Get a name until \x00 is reached
+            cur = []
+            while x and x[0] != '\x00':
+                l = ord(x[0])
+                cur.append(x[1:l+1])
+                x = x[l+1:]
+            if self.padded:
+              # Discard following \x00 in padded mode
+              if len(cur):
+                res.append(".".join(cur) + ".")
+            else:
+              # Store the current name
+              res.append(".".join(cur) + ".")
+            if x and x[0] == '\x00':
+                x = x[1:]
+        return res
+
+    def i2m(self, pkt, x):
+        def conditionalTrailingDot(z):
+            if z and z[-1] == '\x00':
+                return z
+            return z+'\x00'
+        # Build the encode names
+        tmp = map(lambda y: map((lambda z: chr(len(z))+z), y.split('.')), x)
+        ret_string  = "".join(map(lambda x: conditionalTrailingDot("".join(x)), tmp))
+
+        # In padded mode, add some \x00 bytes
+        if self.padded and not len(ret_string) % self.padded_unit == 0:
+            ret_string += "\x00" * (self.padded_unit - len(ret_string) % self.padded_unit)
+
+        return ret_string
+
 class ICMPv6NDOptDNSSL(_ICMPv6NDGuessPayload, Packet): # RFC 6106
     name = "ICMPv6 Neighbor Discovery Option - DNS Search List Option"
     fields_desc = [ ByteField("type", 31),
diff --git a/scapy/layers/isakmp.py b/scapy/layers/isakmp.py
index 4d96a626..17e538dd 100644
--- a/scapy/layers/isakmp.py
+++ b/scapy/layers/isakmp.py
@@ -8,6 +8,7 @@ ISAKMP (Internet Security Association and Key Management Protocol).
 """
 
 import struct
+from scapy.config import conf
 from scapy.packet import *
 from scapy.fields import *
 from scapy.ansmachine import *
diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py
index 5ddc803b..db479314 100644
--- a/scapy/layers/l2.py
+++ b/scapy/layers/l2.py
@@ -11,12 +11,14 @@ import os, struct, time, socket
 
 from scapy.base_classes import Net
 from scapy.config import conf
+from scapy.data import *
 from scapy.packet import *
 from scapy.ansmachine import *
 from scapy.plist import SndRcvList
 from scapy.fields import *
-from scapy.sendrecv import srp,srp1
+from scapy.sendrecv import *
 from scapy.arch import get_if_hwaddr
+from scapy.utils import inet_ntoa, inet_aton
 
 
 
diff --git a/scapy/layers/sctp.py b/scapy/layers/sctp.py
index 49d44122..ff0b0946 100644
--- a/scapy/layers/sctp.py
+++ b/scapy/layers/sctp.py
@@ -10,6 +10,7 @@ SCTP (Stream Control Transmission Protocol).
 
 import struct
 
+from scapy.config import conf
 from scapy.packet import *
 from scapy.fields import *
 from scapy.layers.inet import IP
diff --git a/scapy/layers/snmp.py b/scapy/layers/snmp.py
index 2c588250..37bcdfe1 100644
--- a/scapy/layers/snmp.py
+++ b/scapy/layers/snmp.py
@@ -7,9 +7,14 @@
 SNMP (Simple Network Management Protocol).
 """
 
+from scapy.packet import *
 from scapy.asn1packet import *
 from scapy.asn1fields import *
-from scapy.layers.inet import UDP
+from scapy.asn1.asn1 import *
+from scapy.asn1.ber import *
+from scapy.sendrecv import sr1
+from scapy.volatile import *
+from scapy.layers.inet import UDP, IP, ICMP
 
 ##########
 ## SNMP ##
diff --git a/scapy/layers/tftp.py b/scapy/layers/tftp.py
index 9a2aa0a5..4727108b 100644
--- a/scapy/layers/tftp.py
+++ b/scapy/layers/tftp.py
@@ -11,7 +11,7 @@ import os,random
 from scapy.packet import *
 from scapy.fields import *
 from scapy.automaton import *
-from scapy.layers.inet import UDP
+from scapy.layers.inet import UDP, IP
 
 
 
diff --git a/scapy/layers/x509.py b/scapy/layers/x509.py
index a5ca38cc..ee14bc43 100644
--- a/scapy/layers/x509.py
+++ b/scapy/layers/x509.py
@@ -8,9 +8,13 @@
 X.509 certificates.
 """
 
+from scapy.asn1.asn1 import *
+from scapy.asn1.ber import *
 from scapy.asn1packet import *
 from scapy.asn1fields import *
+from scapy.packet import Packet
 from scapy.fields import PacketField
+from scapy.volatile import *
 
 class ASN1P_OID(ASN1_Packet):
     ASN1_codec = ASN1_Codecs.BER
diff --git a/scapy/main.py b/scapy/main.py
index 63c615c1..4337cdd5 100644
--- a/scapy/main.py
+++ b/scapy/main.py
@@ -10,9 +10,13 @@ Main module for interactive startup.
 from __future__ import generators
 import os,sys
 import glob
+import types
+import gzip
+import cPickle
 import __builtin__
-from error import *
-import utils
+
+from scapy.error import *
+from scapy import utils
     
 
 def _probe_config_file(cf):
@@ -44,8 +48,8 @@ def _usage():
     sys.exit(0)
 
 
-from config import conf
-from themes import DefaultTheme
+from scapy.config import conf
+from scapy.themes import DefaultTheme
 
 
 ######################
@@ -178,8 +182,8 @@ def scapy_write_history_file(readline):
 
 def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
     global session
-    import code,sys,cPickle,os,getopt,re
-    from config import conf
+    import code,sys,os,getopt,re
+    from scapy.config import conf
     conf.interactive = True
     if loglevel is not None:
         conf.logLevel=loglevel
@@ -220,6 +224,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20):
                     object = eval(expr)
                 except:
                     object = eval(expr, session)
+                from scapy.packet import Packet, Packet_metaclass
                 if isinstance(object, Packet) or isinstance(object, Packet_metaclass):
                     words = filter(lambda x: x[0]!="_",dir(object))
                     words += [x.name for x in object.fields_desc]
diff --git a/scapy/modules/nmap.py b/scapy/modules/nmap.py
index 4ff1a56a..0eeafdbd 100644
--- a/scapy/modules/nmap.py
+++ b/scapy/modules/nmap.py
@@ -12,6 +12,9 @@ import os
 from scapy.data import KnowledgeBase
 from scapy.config import conf
 from scapy.arch import WINDOWS
+from scapy.error import warning
+from scapy.layers.inet import IP, TCP, UDP, ICMP, UDPerror, IPerror
+from scapy.sendrecv import sr
 
 
 if WINDOWS:
diff --git a/scapy/modules/p0f.py b/scapy/modules/p0f.py
index 2585adb6..a93482d7 100644
--- a/scapy/modules/p0f.py
+++ b/scapy/modules/p0f.py
@@ -7,10 +7,19 @@
 Clone of p0f passive OS fingerprinting
 """
 
+import time
+import struct
+import os
+import socket
+import random
+
 from scapy.data import KnowledgeBase
 from scapy.config import conf
 from scapy.layers.inet import IP, TCP, TCPOptions
-from scapy.packet import NoPayload
+from scapy.packet import NoPayload, Packet
+from scapy.error import warning, Scapy_Exception, log_runtime
+from scapy.volatile import RandInt, RandByte, RandChoice, RandNum, RandShort, RandString
+from scapy.sendrecv import sniff
 
 conf.p0f_base ="/etc/p0f/p0f.fp"
 conf.p0fa_base ="/etc/p0f/p0fa.fp"
diff --git a/scapy/modules/queso.py b/scapy/modules/queso.py
index ebc5486e..9c38f427 100644
--- a/scapy/modules/queso.py
+++ b/scapy/modules/queso.py
@@ -10,6 +10,9 @@ Clone of queso OS fingerprinting
 from scapy.data import KnowledgeBase
 from scapy.config import conf
 from scapy.layers.inet import IP,TCP
+from scapy.error import warning
+from scapy.volatile import RandInt
+from scapy.sendrecv import sr
 #from 
 
 conf.queso_base ="/etc/queso.conf"
diff --git a/scapy/modules/voip.py b/scapy/modules/voip.py
index de9ed1d3..52c7893d 100644
--- a/scapy/modules/voip.py
+++ b/scapy/modules/voip.py
@@ -94,6 +94,7 @@ def voip_play1(s1,list=None,**kargs):
             return 
         ip=pkt.getlayer(IP)
         if s1 in [ip.src, ip.dst]:
+            from scapy.config import conf
             dsp.write(pkt.getlayer(conf.raw_layer).load[12:])
     try:
         if list is None:
@@ -137,6 +138,7 @@ def voip_play3(lst=None,**kargs):
     dsp,rd = os.popen2("sox -t .ul - -t ossdsp /dev/dsp")
     try:
         def play(pkt, dsp=dsp):
+            from scapy.config import conf
             if pkt and pkt.haslayer(UDP) and pkt.haslayer(conf.raw_layer):
                 dsp.write(pkt.getlayer(RTP).load)
         if lst is None:
diff --git a/scapy/packet.py b/scapy/packet.py
index 611c373e..f3739c8f 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -10,16 +10,16 @@ Packet class. Binding mechanism. fuzz() method.
 import re
 import time,itertools
 import copy
-from fields import StrField, ConditionalField, Emph, PacketListField, BitField, \
-    MultiEnumField, EnumField, FlagsField
-from themes import AnsiColorTheme
-from config import conf
-from base_classes import BasePacket, Gen, SetGen, Packet_metaclass
-from volatile import VolatileValue
-from utils import import_hexcap,tex_escape,colgen,get_temp_file
-from error import Scapy_Exception,log_runtime
 import subprocess
 
+from scapy.fields import StrField, ConditionalField, Emph, PacketListField, BitField, \
+    MultiEnumField, EnumField, FlagsField
+from scapy.config import conf
+from scapy.base_classes import BasePacket, Gen, SetGen, Packet_metaclass
+from scapy.volatile import VolatileValue
+from scapy.utils import import_hexcap,tex_escape,colgen,get_temp_file
+from scapy.error import Scapy_Exception,log_runtime
+
 try:
     import pyx
 except ImportError:
@@ -845,6 +845,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary
         """
 
         if dump:
+            from scapy.themes import AnsiColorTheme
             ct = AnsiColorTheme() # No color for dump output
         else:
             ct = conf.color_theme
diff --git a/scapy/pipetool.py b/scapy/pipetool.py
index 7b85dd78..fb6f6179 100644
--- a/scapy/pipetool.py
+++ b/scapy/pipetool.py
@@ -7,15 +7,16 @@
 
 from __future__ import with_statement
 
-import scapy.utils
-from scapy.config import conf
 import os,thread,select
 import subprocess
 import itertools
 import collections
 import time
-from scapy.error import log_interactive,warning
 import Queue
+import scapy.utils
+
+from scapy.error import log_interactive,warning
+from scapy.config import conf
 
 class PipeEngine:
     pipes = {}
@@ -262,6 +263,7 @@ class Source(Pipe):
         Pipe.__init__(self, name=name)
         self.is_exhausted = False
     def _read_message(self):
+        from scapy.automaton import Message
         return Message()
     def deliver(self):
         msg = self._read_message
diff --git a/scapy/plist.py b/scapy/plist.py
index 5e3fdea5..9c754f41 100644
--- a/scapy/plist.py
+++ b/scapy/plist.py
@@ -9,11 +9,11 @@ PacketList: holds several packets and allows to do operations on them.
 
 
 import os,subprocess
-from config import conf
-from base_classes import BasePacket,BasePacketList
 from collections import defaultdict
 
-from utils import do_graph,hexdump,make_table,make_lined_table,make_tex_table,get_temp_file
+from scapy.config import conf
+from scapy.base_classes import BasePacket,BasePacketList
+from scapy.utils import do_graph,hexdump,make_table,make_lined_table,make_tex_table,get_temp_file
 
 from scapy.arch import plt, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS
 
@@ -293,10 +293,10 @@ lfilter: truth function to apply to each packet to decide whether it will be dis
         prog: which graphviz program to use"""
         if getsrcdst is None:
             def getsrcdst(pkt):
-                if IP in pkt:
-                    return (pkt[IP].src, pkt[IP].dst)
-                if ARP in pkt:
-                    return (pkt[ARP].psrc, pkt[ARP].pdst)
+                if 'IP' in pkt:
+                    return (pkt['IP'].src, pkt['IP'].dst)
+                if 'ARP' in pkt:
+                    return (pkt['ARP'].psrc, pkt['ARP'].pdst)
                 raise TypeError()
         conv = {}
         for p in self.res:
@@ -546,10 +546,3 @@ class SndRcvList(PacketList):
         return elt[1]
     def _elt2sum(self, elt):
         return "%s ==> %s" % (elt[0].summary(),elt[1].summary()) 
-
-
-
-    
-
-        
-                                                                               
diff --git a/scapy/pton_ntop.py b/scapy/pton_ntop.py
index 1bd88920..ce93b676 100644
--- a/scapy/pton_ntop.py
+++ b/scapy/pton_ntop.py
@@ -15,7 +15,7 @@ import socket,struct
 def inet_pton(af, addr):
     """Convert an IP address from text representation into binary form"""
     if af == socket.AF_INET:
-        return inet_aton(addr)
+        return socket.inet_aton(addr)
     elif af == socket.AF_INET6:
         # IPv6: The use of "::" indicates one or more groups of 16 bits of zeros.
         # We deal with this form of wildcard using a special marker. 
@@ -63,7 +63,7 @@ def inet_pton(af, addr):
 def inet_ntop(af, addr):
     """Convert an IP address from binary form into text represenation"""
     if af == socket.AF_INET:
-        return inet_ntoa(addr)
+        return socket.inet_ntoa(addr)
     elif af == socket.AF_INET6:
         # IPv6 addresses have 128bits (16 bytes)
         if len(addr) != 16:
diff --git a/scapy/route.py b/scapy/route.py
index 170de483..1e426a7a 100644
--- a/scapy/route.py
+++ b/scapy/route.py
@@ -8,10 +8,10 @@ Routing and handling of network interfaces.
 """
 
 import socket
-from arch import read_routes,get_if_addr,LOOPBACK_NAME
-from utils import atol,ltoa,itom
-from config import conf
-from error import Scapy_Exception,warning
+from scapy.arch import read_routes,get_if_addr,LOOPBACK_NAME
+from scapy.utils import atol,ltoa,itom
+from scapy.config import conf
+from scapy.error import Scapy_Exception,warning
 
 ##############################
 ## Routing/Interfaces stuff ##
diff --git a/scapy/route6.py b/scapy/route6.py
index 341a7c3e..82c6f8f3 100644
--- a/scapy/route6.py
+++ b/scapy/route6.py
@@ -17,9 +17,11 @@ Routing and network interface handling for IPv6.
 #############################################################################
 
 import socket
-from config import conf
-from utils6 import *
-from arch import *
+from scapy.config import conf
+from scapy.utils6 import *
+from scapy.arch import *
+from scapy.pton_ntop import *
+from scapy.error import warning, log_loading
 
 
 class Route6:
diff --git a/scapy/scapypipes.py b/scapy/scapypipes.py
index 94bd401a..9af8193e 100644
--- a/scapy/scapypipes.py
+++ b/scapy/scapypipes.py
@@ -3,8 +3,9 @@
 ## Copyright (C) Philippe Biondi <phil@secdev.org>
 ## This program is published under a GPLv2 license
 
-from pipetool import Source,Drain,Sink
-from config import conf
+from scapy.pipetool import Source,Drain,Sink
+from scapy.config import conf
+from scapy.utils import PcapReader, PcapWriter
 
 
 class SniffSource(Source):
@@ -114,10 +115,12 @@ class UDPDrain(Drain):
         self.port = port
 
     def push(self, msg):
+        from scapy.layers.inet import IP, UDP
         if IP in msg and msg[IP].proto == 17 and UDP in msg:
             payload = msg[UDP].payload
             self._high_send(str(payload))
     def high_push(self, msg):
+        from scapy.layers.inet import IP, UDP
         p = IP(dst=self.ip)/UDP(sport=1234,dport=self.port)/msg
         self._send(p)
         
diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py
index 29227409..474bcccd 100644
--- a/scapy/sendrecv.py
+++ b/scapy/sendrecv.py
@@ -11,15 +11,15 @@ import errno
 import cPickle,os,sys,time,subprocess
 import itertools
 from select import select
-from data import *
-import arch
-from config import conf
-from packet import Gen
-from utils import warning,get_temp_file,PcapReader,wrpcap
-import plist
-from error import log_runtime,log_interactive
-from base_classes import SetGen
-from supersocket import StreamSocket
+from scapy.data import *
+from scapy import arch
+from scapy.config import conf
+from scapy.packet import Gen
+from scapy.utils import warning,get_temp_file,PcapReader,wrpcap
+from scapy import plist
+from scapy.error import log_runtime,log_interactive
+from scapy.base_classes import SetGen
+from scapy.supersocket import StreamSocket
 
 #################
 ## Debug class ##
diff --git a/scapy/supersocket.py b/scapy/supersocket.py
index 6e844197..3fd0fef5 100644
--- a/scapy/supersocket.py
+++ b/scapy/supersocket.py
@@ -8,8 +8,9 @@ SuperSocket.
 """
 
 import socket,time
-from config import conf
-from data import *
+
+from scapy.config import conf
+from scapy.data import *
 from scapy.error import warning, log_runtime
 
 class _SuperSocket_metaclass(type):
@@ -47,14 +48,17 @@ class SuperSocket:
         if self.ins and self.ins.fileno() != -1:
             self.ins.close()
     def sr(self, *args, **kargs):
+        from scapy import sendrecv
         return sendrecv.sndrcv(self, *args, **kargs)
     def sr1(self, *args, **kargs):        
+        from scapy import sendrecv
         a,b = sendrecv.sndrcv(self, *args, **kargs)
         if len(a) > 0:
             return a[0][1]
         else:
             return None
     def sniff(self, *args, **kargs):
+        from scapy import sendrecv
         return sendrecv.sniff(opened_socket=self, *args, **kargs)
 
 class L3RawSocket(SuperSocket):
@@ -92,7 +96,7 @@ class L3RawSocket(SuperSocket):
             pkt = pkt.payload
             
         if pkt is not None:
-            from arch import get_last_packet_timestamp
+            from scapy.arch import get_last_packet_timestamp
             pkt.time = get_last_packet_timestamp(self.ins)
         return pkt
     def send(self, x):
@@ -127,6 +131,7 @@ class StreamSocket(SimpleSocket):
         pad = pkt.getlayer(conf.padding_layer)
         if pad is not None and pad.underlayer is not None:
             del(pad.underlayer.payload)
+        from scapy.packet import NoPayload
         while pad is not None and not isinstance(pad, NoPayload):
             x -= len(pad.load)
             pad = pad.payload
@@ -137,6 +142,3 @@ class StreamSocket(SimpleSocket):
 
 if conf.L3socket is None:
     conf.L3socket = L3RawSocket
-
-import arch
-import sendrecv
diff --git a/scapy/themes.py b/scapy/themes.py
index 188fd547..a0529d70 100644
--- a/scapy/themes.py
+++ b/scapy/themes.py
@@ -264,6 +264,7 @@ class ColorPrompt:
     __prompt = ">>> "
     def __str__(self):
         try:
+            from scapy import config
             ct = config.conf.color_theme
             if isinstance(ct, AnsiColorTheme):
                 ## ^A and ^B delimit invisible caracters for readline to count right
@@ -272,6 +273,3 @@ class ColorPrompt:
                 return ct.prompt(config.conf.prompt)
         except:
             return self.__prompt
-
-
-import config
diff --git a/scapy/tools/UTscapy.py b/scapy/tools/UTscapy.py
index 7753e1a1..c6401468 100755
--- a/scapy/tools/UTscapy.py
+++ b/scapy/tools/UTscapy.py
@@ -38,7 +38,7 @@ class File:
     def get_local(self):
         return bz2.decompress(base64.decodestring(self.local))
     def get_URL(self):
-        return URL
+        return self.URL
     def write(self, dir):
         if dir:
             dir += "/"
diff --git a/scapy/utils.py b/scapy/utils.py
index 21118561..c8daa522 100644
--- a/scapy/utils.py
+++ b/scapy/utils.py
@@ -17,10 +17,10 @@ import subprocess
 import warnings
 warnings.filterwarnings("ignore","tempnam",RuntimeWarning, __name__)
 
-from config import conf
-from data import MTU
-from error import log_runtime,log_loading,log_interactive, Scapy_Exception
-from base_classes import BasePacketList
+from scapy.config import conf
+from scapy.data import MTU
+from scapy.error import log_runtime,log_loading,log_interactive, Scapy_Exception
+from scapy.base_classes import BasePacketList
 
 WINDOWS=sys.platform.startswith("win32")
 
@@ -215,9 +215,6 @@ def hexdiff(x,y):
             else:
                 i += 16
 
-    
-crc32 = zlib.crc32
-
 if struct.pack("H",1) == "\x00\x01": # big endian
     def checksum(pkt):
         if len(pkt) % 2 == 1:
@@ -592,7 +589,7 @@ class PcapReader_metaclass(type):
                     i.__init__(filename, fdesc, magic)
                 except Scapy_Exception:
                     try:
-                        self.f.seek(-4, 1)
+                        i.f.seek(-4, 1)
                     except:
                         pass
                     raise Scapy_Exception("Not a supported capture file")
@@ -730,7 +727,7 @@ class PcapReader(RawPcapReader):
         return p
     def read_all(self,count=-1):
         res = RawPcapReader.read_all(self, count)
-        import plist
+        from scapy import plist
         return plist.PacketList(res,name = os.path.basename(self.filename))
     def recv(self, size=MTU):
         return self.read_packet(size=size)
@@ -829,7 +826,7 @@ class PcapNgReader(RawPcapNgReader):
         return p
     def read_all(self,count=-1):
         res = RawPcapNgReader.read_all(self, count)
-        import plist
+        from scapy import plist
         return plist.PacketList(res, name=os.path.basename(self.filename))
     def recv(self, size=MTU):
         return self.read_packet()
diff --git a/scapy/utils6.py b/scapy/utils6.py
index 6a2ae83d..eb4ecb5a 100644
--- a/scapy/utils6.py
+++ b/scapy/utils6.py
@@ -9,10 +9,14 @@
 """
 Utility functions for IPv6.
 """
-
-from config import conf
-from data import *
-from utils import *
+import random
+import socket
+import struct
+
+from scapy.config import conf
+from scapy.data import *
+from scapy.utils import *
+from scapy.pton_ntop import *
 
 
 def construct_source_candidate_set(addr, plen, laddr, loname):
diff --git a/scapy/volatile.py b/scapy/volatile.py
index a870b23c..f59e9ecf 100644
--- a/scapy/volatile.py
+++ b/scapy/volatile.py
@@ -8,8 +8,8 @@ Fields that hold random numbers.
 """
 
 import random,time,math
-from base_classes import Net
-from utils import corrupt_bits,corrupt_bytes
+from scapy.base_classes import Net
+from scapy.utils import corrupt_bits,corrupt_bytes
 
 ####################
 ## Random numbers ##
diff --git a/test/ipsec.uts b/test/ipsec.uts
index 01f13571..bf13075a 100644
--- a/test/ipsec.uts
+++ b/test/ipsec.uts
@@ -8,6 +8,8 @@
 #######################################
 = IPv4 / ESP - Transport - AES-CBC - NULL
 
+import socket
+
 p = IP(src='1.1.1.1', dst='2.2.2.2')
 p /= TCP(sport=45012, dport=80)
 p /= Raw('testdata')
diff --git a/test/regression.uts b/test/regression.uts
index 849fb80c..ff454d71 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -46,7 +46,7 @@ routes6 = read_routes6()
 
 if len(routes6):
     iflist = get_if_list()
-    if iflist == [scapy.arch.LOOPBACK_NAME]:
+    if iflist == [LOOPBACK_NAME]:
 	len(routes6) == 1
     elif len(iflist) >= 2:
 	len(routes6) >= 3
@@ -358,10 +358,12 @@ a = TestFLF()
 a.lst = [7,65539]
 ls(a)
 str(a)
+import struct
 _ == struct.pack("!BII", 2,7,65539)
 
 = Disassemble
 ~ field
+import struct
 TestFLF("\x00\x11\x12")
 assert(_.len == 0 and Raw in _ and _[Raw].load == "\x11\x12")
 TestFLF(struct.pack("!BIII",3,1234,2345,12345678))
@@ -900,6 +902,8 @@ assert( _ == "Saturn" )
 
 = Automaton test io event from external fd
 ~ automaton
+import os
+
 class ATMT8(Automaton):
     @ATMT.state(initial=1)
     def BEGIN(self):
@@ -1257,6 +1261,8 @@ in6_addrtomac("FE80::" + in6_mactoifaceid("FF:00:00:00:00:00", ulbit=0)) == 'ff:
 
 ########### RFC 3041 related function ###############################
 = Test in6_getRandomizedIfaceId
+import socket
+
 res=True
 for _ in xrange(10):
     s1,s2 = in6_getRandomizedIfaceId('20b:93ff:feeb:2d3')
-- 
GitLab