From cb081c793f8fbeb21c68c136967a561988d1b15f Mon Sep 17 00:00:00 2001
From: Pierre LALET <pierre.lalet@cea.fr>
Date: Fri, 15 Jan 2016 09:41:55 +0100
Subject: [PATCH] Handle dynamic Packet().name

---
 scapy/base_classes.py | 2 ++
 scapy/packet.py       | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index f805c18b..0648e9ce 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -178,6 +178,8 @@ class Packet_metaclass(type):
 
         if "__slots__" not in dct:
             dct["__slots__"] = []
+        if "name" in dct:
+            dct["_name"] = dct.pop("name")
         newcls = super(Packet_metaclass, cls).__new__(cls, name, bases, dct)
         if hasattr(newcls, "aliastypes"):
             newcls.aliastypes = [newcls] + newcls.aliastypes
diff --git a/scapy/packet.py b/scapy/packet.py
index e4ea22f5..25300749 100644
--- a/scapy/packet.py
+++ b/scapy/packet.py
@@ -40,6 +40,7 @@ class Packet(BasePacket):
         "raw_packet_cache_fields", "_pkt", "post_transforms",
         # then payload and underlayer
         "payload", "underlayer",
+        "name",
     ]
     __metaclass__ = Packet_metaclass
     name = None
@@ -65,6 +66,9 @@ class Packet(BasePacket):
     def __init__(self, _pkt="", post_transform=None, _internal=0, _underlayer=None, **fields):
         self.time  = time.time()
         self.sent_time = None
+        self.name = (self.__class__.__name__
+                     if self._name is None else
+                     self._name)
         self.default_fields = {}
         self.overloaded_fields = {}
         self.fields = {}
-- 
GitLab