From 89c6369c203a8f724c8039536ee1cd0266a94f15 Mon Sep 17 00:00:00 2001
From: Phil <phil@secdev.org>
Date: Mon, 28 Jul 2008 16:13:00 +0200
Subject: [PATCH] Moved l2 specific fields to l2.py

---
 scapy/fields.py         | 74 -------------------------------------
 scapy/layers/l2.py      | 81 +++++++++++++++++++++++++++++++++++++++++
 scapy/layers/netbios.py |  1 +
 3 files changed, 82 insertions(+), 74 deletions(-)

diff --git a/scapy/fields.py b/scapy/fields.py
index 339796ef..2b289668 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -180,80 +180,6 @@ class MACField(Field):
     def randval(self):
         return RandMAC()
 
-class DestMACField(MACField):
-    def __init__(self, name):
-        MACField.__init__(self, name, None)
-    def i2h(self, pkt, x):
-        if x is None:
-            dstip = None
-            if isinstance(pkt.payload, IPv6):
-                dstip = pkt.payload.dst            
-            elif isinstance(pkt.payload, IP):
-                dstip = pkt.payload.dst
-            elif isinstance(pkt.payload, ARP):
-                dstip = pkt.payload.pdst
-            if isinstance(dstip, Gen):
-                dstip = dstip.__iter__().next()
-            if dstip is not None:
-                if isinstance(pkt.payload, IPv6):
-                    x = getmacbyip6(dstip, chainCC=1)
-                else:    
-                    x = getmacbyip(dstip, chainCC=1)
-            if x is None:
-                x = "ff:ff:ff:ff:ff:ff"
-                warning("Mac address to reach %s not found\n"%dstip)
-        return MACField.i2h(self, pkt, x)
-    def i2m(self, pkt, x):
-        return MACField.i2m(self, pkt, self.i2h(pkt, x))
-        
-class SourceMACField(MACField):
-    def __init__(self, name):
-        MACField.__init__(self, name, None)
-    def i2h(self, pkt, x):
-        if x is None:
-            dstip = None
-            if isinstance(pkt.payload, IPv6):
-                dstip = pkt.payload.dst
-            elif isinstance(pkt.payload, IP):
-                dstip = pkt.payload.dst
-            elif isinstance(pkt.payload, ARP):
-                dstip = pkt.payload.pdst
-            if isinstance(dstip, Gen):
-                dstip = dstip.__iter__().next()
-            if dstip is not None:
-                if isinstance(pkt.payload, IPv6):
-                    iff,a,nh = conf.route6.route(dstip)
-                else:
-                    iff,a,gw = conf.route.route(dstip)
-                try:
-                    x = get_if_hwaddr(iff)
-                except:
-                    pass
-                if x is None:
-                    x = "00:00:00:00:00:00"
-        return MACField.i2h(self, pkt, x)
-    def i2m(self, pkt, x):
-        return MACField.i2m(self, pkt, self.i2h(pkt, x))
-        
-class ARPSourceMACField(MACField):
-    def __init__(self, name):
-        MACField.__init__(self, name, None)
-    def i2h(self, pkt, x):
-        if x is None:
-            dstip = pkt.pdst
-            if isinstance(dstip, Gen):
-                dstip = dstip.__iter__().next()
-            if dstip is not None:
-                iff,a,gw = conf.route.route(dstip)
-                try:
-                    x = get_if_hwaddr(iff)
-                except:
-                    pass
-                if x is None:
-                    x = "00:00:00:00:00:00"
-        return MACField.i2h(self, pkt, x)
-    def i2m(self, pkt, x):
-        return MACField.i2m(self, pkt, self.i2h(pkt, x))
 
 class Dot11AddrMACField(MACField):
     def is_applicable(self, pkt):
diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py
index d112c177..6fd8ab21 100644
--- a/scapy/layers/l2.py
+++ b/scapy/layers/l2.py
@@ -6,6 +6,87 @@ from scapy.plist import SndRcvList
 from scapy.fields import *
 from scapy.sendrecv import srp,srp1
 
+### Fields
+
+class DestMACField(MACField):
+    def __init__(self, name):
+        MACField.__init__(self, name, None)
+    def i2h(self, pkt, x):
+        if x is None:
+            dstip = None
+            if isinstance(pkt.payload, IPv6):
+                dstip = pkt.payload.dst            
+            elif isinstance(pkt.payload, IP):
+                dstip = pkt.payload.dst
+            elif isinstance(pkt.payload, ARP):
+                dstip = pkt.payload.pdst
+            if isinstance(dstip, Gen):
+                dstip = dstip.__iter__().next()
+            if dstip is not None:
+                if isinstance(pkt.payload, IPv6):
+                    x = getmacbyip6(dstip, chainCC=1)
+                else:    
+                    x = getmacbyip(dstip, chainCC=1)
+            if x is None:
+                x = "ff:ff:ff:ff:ff:ff"
+                warning("Mac address to reach %s not found\n"%dstip)
+        return MACField.i2h(self, pkt, x)
+    def i2m(self, pkt, x):
+        return MACField.i2m(self, pkt, self.i2h(pkt, x))
+        
+class SourceMACField(MACField):
+    def __init__(self, name):
+        MACField.__init__(self, name, None)
+    def i2h(self, pkt, x):
+        if x is None:
+            dstip = None
+            if isinstance(pkt.payload, IPv6):
+                dstip = pkt.payload.dst
+            elif isinstance(pkt.payload, IP):
+                dstip = pkt.payload.dst
+            elif isinstance(pkt.payload, ARP):
+                dstip = pkt.payload.pdst
+            if isinstance(dstip, Gen):
+                dstip = dstip.__iter__().next()
+            if dstip is not None:
+                if isinstance(pkt.payload, IPv6):
+                    iff,a,nh = conf.route6.route(dstip)
+                else:
+                    iff,a,gw = conf.route.route(dstip)
+                try:
+                    x = get_if_hwaddr(iff)
+                except:
+                    pass
+                if x is None:
+                    x = "00:00:00:00:00:00"
+        return MACField.i2h(self, pkt, x)
+    def i2m(self, pkt, x):
+        return MACField.i2m(self, pkt, self.i2h(pkt, x))
+        
+class ARPSourceMACField(MACField):
+    def __init__(self, name):
+        MACField.__init__(self, name, None)
+    def i2h(self, pkt, x):
+        if x is None:
+            dstip = pkt.pdst
+            if isinstance(dstip, Gen):
+                dstip = dstip.__iter__().next()
+            if dstip is not None:
+                iff,a,gw = conf.route.route(dstip)
+                try:
+                    x = get_if_hwaddr(iff)
+                except:
+                    pass
+                if x is None:
+                    x = "00:00:00:00:00:00"
+        return MACField.i2h(self, pkt, x)
+    def i2m(self, pkt, x):
+        return MACField.i2m(self, pkt, self.i2h(pkt, x))
+
+
+
+### Layers
+
 class Ether_or_Dot3_metaclass(Packet_metaclass):
     def __call__(self, _pkt=None, *args, **kargs):
         cls = self
diff --git a/scapy/layers/netbios.py b/scapy/layers/netbios.py
index fdfa4215..098c965f 100644
--- a/scapy/layers/netbios.py
+++ b/scapy/layers/netbios.py
@@ -2,6 +2,7 @@ import struct
 from scapy.packet import *
 from scapy.fields import *
 from scapy.layers.inet import UDP,TCP
+from scapy.layers.l2 import SourceMACField
 
 class NetBIOS_DS(Packet):
     name = "NetBIOS datagram service"
-- 
GitLab