diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py
index 26bf33d4ca3ee573d30725414eb3965169a82194..0c68a4af0097132878bef96a981cbb028d000b2a 100644
--- a/scapy/layers/l2.py
+++ b/scapy/layers/l2.py
@@ -496,6 +496,20 @@ class EAP(Packet):
         return p + pay
 
 
+class EAP_MD5(Packet):
+
+    """
+    RFC 3748 - "Extensible Authentication Protocol (EAP)"
+    """
+
+    name = "EAP-MD5"
+    fields_desc = [
+        ByteField("value_size", 0),
+        StrFixedLenField("value", 0, length=16), # MD5 hash length
+        StrLenField("optional_name", "", length_from=lambda p: p.value_size - 16)
+    ]
+
+
 class EAP_TLS(Packet):
 
     """
@@ -660,6 +674,7 @@ bind_layers( GRE,           GRErouting,    { "routing_present" : 1 } )
 bind_layers( GRErouting,    conf.raw_layer,{ "address_family" : 0, "SRE_len" : 0 })
 bind_layers( GRErouting,    GRErouting,    { } )
 bind_layers( EAPOL,         EAP,           type=0)
+bind_layers( EAP,           EAP_MD5,       type=4)
 bind_layers(EAP,           EAP_TLS,       type=13)
 bind_layers(EAP,           EAP_FAST,      type=43)
 bind_layers( LLC,           STP,           dsap=66, ssap=66, ctrl=3)
diff --git a/test/regression.uts b/test/regression.uts
index 41c640a052f88744958fa0db5aade328c5bf3700..d5645714b191ef11911a3e47fe073b112255c4e4 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -5464,6 +5464,29 @@ assert(eap.type == 3)
 assert(hasattr(eap, 'desired_auth_type'))
 assert(eap.desired_auth_type == 43)
 
+= EAP - EAP_MD5 - Request - Dissection (8)
+s = '\x01\x02\x00\x16\x04\x10\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+eap = EAP(s)
+assert(eap.code == 1)
+assert(eap.id == 2)
+assert(eap.len == 22)
+assert(eap.type == 4)
+assert(eap.haslayer(EAP_MD5))
+assert(eap[EAP_MD5].value_size == 16)
+assert(eap[EAP_MD5].value == '\x86\xf9\x89\x94\x81\x01\xb3 nHh\x1b\x8d\xe7^\xdb')
+assert(eap[EAP_MD5].optional_name == '')
+
+= EAP - EAP_MD5 - Response - Dissection (9)
+s = '\x02\x02\x00\x16\x04\x10\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+eap = EAP(s)
+assert(eap.code == 2)
+assert(eap.id == 2)
+assert(eap.len == 22)
+assert(eap.type == 4)
+assert(eap.haslayer(EAP_MD5))
+assert(eap[EAP_MD5].value_size == 16)
+assert(eap[EAP_MD5].value == '\xfd\x1e\xffe\xf5\x80y\xa8\xe3\xc8\xf1\xbd\xc2\x85\xae\xcf')
+assert(eap[EAP_MD5].optional_name == '')
 
 ############
 ############