We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
VXLAN Binding to IPv6 or IPv4 doesn't work
#### Brief description
When doing a VXLAN()/IP or VXLAN()/IPv6 the binding does not work properly. Both IP layers are interpreted as Ethernet Layers.

#### Environment

-   Scapy version: `2.4.0`
-   Python version: `3.5.2`
-   Operating System: `Ubuntu 16.04`

#### How to reproduce
```python
>>> issue = Ether()/IP()/UDP()/VXLAN(flags=4, NextProtocol=1)/IP()
>>> issue.show2()
###[ Ethernet ]### 
  dst= ff:ff:ff:ff:ff:ff
  src= 00:00:00:00:00:00
  type= 0x800
###[ IP ]### 
     version= 4
     ihl= 5
     tos= 0x0
     len= 56
     id= 1
     flags= 
     frag= 0
     ttl= 64
     proto= udp
     chksum= 0x7cb2
     src= 127.0.0.1
     dst= 127.0.0.1
     \options\
###[ UDP ]### 
        sport= 4789
        dport= 4789
        len= 36
        chksum= 0xd838
###[ VXLAN ]### 
           flags= NextProtocol
           reserved0= 0
           NextProtocol= IPv4
           vni= 0x0
           reserved2= 0x0
###[ Ethernet ]### 
              dst= 45:00:00:14:00:01
              src= 00:00:40:00:7c:e7
              type= 0x7f00
###[ Raw ]### 
                 load= '\x00\x01\x7f\x00\x00\x01'
```

#### Actual result
```python
###[ Ethernet ]### 
  dst= ff:ff:ff:ff:ff:ff
  src= 00:00:00:00:00:00
  type= 0x800
###[ IP ]### 
     version= 4
     ihl= 5
     tos= 0x0
     len= 56
     id= 1
     flags= 
     frag= 0
     ttl= 64
     proto= udp
     chksum= 0x7cb2
     src= 127.0.0.1
     dst= 127.0.0.1
     \options\
###[ UDP ]### 
        sport= 4789
        dport= 4789
        len= 36
        chksum= 0xd838
###[ VXLAN ]### 
           flags= NextProtocol
           reserved0= 0
           NextProtocol= IPv4
           vni= 0x0
           reserved2= 0x0
###[ Ethernet ]### 
              dst= 45:00:00:14:00:01
              src= 00:00:40:00:7c:e7
              type= 0x7f00
###[ Raw ]### 
                 load= '\x00\x01\x7f\x00\x00\x01'
```

#### Expected result
```python
###[ Ethernet ]### 
  dst= ff:ff:ff:ff:ff:ff
  src= 00:00:00:00:00:00
  type= 0x800
###[ IP ]### 
     version= 4
     ihl= 5
     tos= 0x0
     len= 56
     id= 1
     flags= 
     frag= 0
     ttl= 64
     proto= udp
     chksum= 0x7cb2
     src= 127.0.0.1
     dst= 127.0.0.1
     \options\
###[ UDP ]### 
        sport= 4789
        dport= 4789
        len= 36
        chksum= 0xd838
###[ VXLAN ]### 
           flags= NextProtocol
           reserved0= 0
           NextProtocol= IPv4
           vni= 0x0
           reserved2= 0x0
###[ IP ]### 
              version= 4
              ihl= 5
              tos= 0x0
              len= 20
              id= 1
              flags= 
              frag= 0
              ttl= 64
              proto= hopopt
              chksum= 0x7ce7
              src= 127.0.0.1
              dst= 127.0.0.1
              \options\
```


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `scapy/layers/vxlan.py`
Content:
```
1 # This file is part of Scapy
2 # See http://www.secdev.org/projects/scapy for more information
3 # Copyright (C) Philippe Biondi <phil@secdev.org>
4 # This program is published under a GPLv2 license
5 
6 """
7 Virtual eXtensible Local Area Network (VXLAN)
8 - RFC 7348 -
9 
10 A Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks
11 http://tools.ietf.org/html/rfc7348
12 https://www.ietf.org/id/draft-ietf-nvo3-vxlan-gpe-02.txt
13 
14 VXLAN Group Policy Option:
15 http://tools.ietf.org/html/draft-smith-vxlan-group-policy-00
16 """
17 
18 from scapy.packet import Packet, bind_layers
19 from scapy.layers.l2 import Ether
20 from scapy.layers.inet import IP, UDP
21 from scapy.layers.inet6 import IPv6
22 from scapy.fields import FlagsField, XByteField, ThreeBytesField, \
23     ConditionalField, ShortField, ByteEnumField, X3BytesField
24 
25 _GP_FLAGS = ["R", "R", "R", "A", "R", "R", "D", "R"]
26 
27 
28 class VXLAN(Packet):
29     name = "VXLAN"
30 
31     fields_desc = [
32         FlagsField("flags", 0x8, 8,
33                    ['OAM', 'R', 'NextProtocol', 'Instance',
34                     'V1', 'V2', 'R', 'G']),
35         ConditionalField(
36             ShortField("reserved0", 0),
37             lambda pkt: pkt.flags.NextProtocol,
38         ),
39         ConditionalField(
40             ByteEnumField('NextProtocol', 0,
41                           {0: 'NotDefined',
42                            1: 'IPv4',
43                            2: 'IPv6',
44                            3: 'Ethernet',
45                            4: 'NSH'}),
46             lambda pkt: pkt.flags.NextProtocol,
47         ),
48         ConditionalField(
49             ThreeBytesField("reserved1", 0),
50             lambda pkt: (not pkt.flags.G) and (not pkt.flags.NextProtocol),
51         ),
52         ConditionalField(
53             FlagsField("gpflags", 0, 8, _GP_FLAGS),
54             lambda pkt: pkt.flags.G,
55         ),
56         ConditionalField(
57             ShortField("gpid", 0),
58             lambda pkt: pkt.flags.G,
59         ),
60         X3BytesField("vni", 0),
61         XByteField("reserved2", 0),
62     ]
63 
64     # Use default linux implementation port
65     overload_fields = {
66         UDP: {'dport': 8472},
67     }
68 
69     def mysummary(self):
70         if self.flags.G:
71             return self.sprintf("VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)")
72         else:
73             return self.sprintf("VXLAN (vni=%VXLAN.vni%)")
74 
75 
76 bind_layers(UDP, VXLAN, dport=4789)  # RFC standard vxlan port
77 bind_layers(UDP, VXLAN, dport=4790)  # RFC standard vxlan-gpe port
78 bind_layers(UDP, VXLAN, dport=6633)  # New IANA assigned port for use with NSH
79 bind_layers(UDP, VXLAN, dport=8472)  # Linux implementation port
80 bind_layers(UDP, VXLAN, dport=48879)  # Cisco ACI
81 bind_layers(UDP, VXLAN, sport=4789)
82 bind_layers(UDP, VXLAN, sport=4790)
83 bind_layers(UDP, VXLAN, sport=6633)
84 bind_layers(UDP, VXLAN, sport=8472)
85 # By default, set both ports to the RFC standard
86 bind_layers(UDP, VXLAN, sport=4789, dport=4789)
87 
88 bind_layers(VXLAN, Ether)
89 bind_layers(VXLAN, IP, NextProtocol=1)
90 bind_layers(VXLAN, IPv6, NextProtocol=2)
91 bind_layers(VXLAN, Ether, flags=4, NextProtocol=0)
92 bind_layers(VXLAN, IP, flags=4, NextProtocol=1)
93 bind_layers(VXLAN, IPv6, flags=4, NextProtocol=2)
94 bind_layers(VXLAN, Ether, flags=4, NextProtocol=3)
95
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/scapy/layers/vxlan.py b/scapy/layers/vxlan.py
--- a/scapy/layers/vxlan.py
+++ b/scapy/layers/vxlan.py
@@ -85,9 +85,10 @@
 # By default, set both ports to the RFC standard
 bind_layers(UDP, VXLAN, sport=4789, dport=4789)
 
-bind_layers(VXLAN, Ether)
+bind_layers(VXLAN, Ether, NextProtocol=0)
 bind_layers(VXLAN, IP, NextProtocol=1)
 bind_layers(VXLAN, IPv6, NextProtocol=2)
+bind_layers(VXLAN, Ether, NextProtocol=3)
 bind_layers(VXLAN, Ether, flags=4, NextProtocol=0)
 bind_layers(VXLAN, IP, flags=4, NextProtocol=1)
 bind_layers(VXLAN, IPv6, flags=4, NextProtocol=2)

{"golden_diff": "diff --git a/scapy/layers/vxlan.py b/scapy/layers/vxlan.py\n--- a/scapy/layers/vxlan.py\n+++ b/scapy/layers/vxlan.py\n@@ -85,9 +85,10 @@\n # By default, set both ports to the RFC standard\n bind_layers(UDP, VXLAN, sport=4789, dport=4789)\n \n-bind_layers(VXLAN, Ether)\n+bind_layers(VXLAN, Ether, NextProtocol=0)\n bind_layers(VXLAN, IP, NextProtocol=1)\n bind_layers(VXLAN, IPv6, NextProtocol=2)\n+bind_layers(VXLAN, Ether, NextProtocol=3)\n bind_layers(VXLAN, Ether, flags=4, NextProtocol=0)\n bind_layers(VXLAN, IP, flags=4, NextProtocol=1)\n bind_layers(VXLAN, IPv6, flags=4, NextProtocol=2)\n", "issue": "VXLAN Binding to IPv6 or IPv4 doesn't work\n#### Brief description\r\nWhen doing a VXLAN()/IP or VXLAN()/IPv6 the binding does not work properly. Both IP layers are interpreted as Ethernet Layers.\r\n\r\n#### Environment\r\n\r\n-   Scapy version: `2.4.0`\r\n-   Python version: `3.5.2`\r\n-   Operating System: `Ubuntu 16.04`\r\n\r\n#### How to reproduce\r\n```python\r\n>>> issue = Ether()/IP()/UDP()/VXLAN(flags=4, NextProtocol=1)/IP()\r\n>>> issue.show2()\r\n###[ Ethernet ]### \r\n  dst= ff:ff:ff:ff:ff:ff\r\n  src= 00:00:00:00:00:00\r\n  type= 0x800\r\n###[ IP ]### \r\n     version= 4\r\n     ihl= 5\r\n     tos= 0x0\r\n     len= 56\r\n     id= 1\r\n     flags= \r\n     frag= 0\r\n     ttl= 64\r\n     proto= udp\r\n     chksum= 0x7cb2\r\n     src= 127.0.0.1\r\n     dst= 127.0.0.1\r\n     \\options\\\r\n###[ UDP ]### \r\n        sport= 4789\r\n        dport= 4789\r\n        len= 36\r\n        chksum= 0xd838\r\n###[ VXLAN ]### \r\n           flags= NextProtocol\r\n           reserved0= 0\r\n           NextProtocol= IPv4\r\n           vni= 0x0\r\n           reserved2= 0x0\r\n###[ Ethernet ]### \r\n              dst= 45:00:00:14:00:01\r\n              src= 00:00:40:00:7c:e7\r\n              type= 0x7f00\r\n###[ Raw ]### \r\n                 load= '\\x00\\x01\\x7f\\x00\\x00\\x01'\r\n```\r\n\r\n#### Actual result\r\n```python\r\n###[ Ethernet ]### \r\n  dst= ff:ff:ff:ff:ff:ff\r\n  src= 00:00:00:00:00:00\r\n  type= 0x800\r\n###[ IP ]### \r\n     version= 4\r\n     ihl= 5\r\n     tos= 0x0\r\n     len= 56\r\n     id= 1\r\n     flags= \r\n     frag= 0\r\n     ttl= 64\r\n     proto= udp\r\n     chksum= 0x7cb2\r\n     src= 127.0.0.1\r\n     dst= 127.0.0.1\r\n     \\options\\\r\n###[ UDP ]### \r\n        sport= 4789\r\n        dport= 4789\r\n        len= 36\r\n        chksum= 0xd838\r\n###[ VXLAN ]### \r\n           flags= NextProtocol\r\n           reserved0= 0\r\n           NextProtocol= IPv4\r\n           vni= 0x0\r\n           reserved2= 0x0\r\n###[ Ethernet ]### \r\n              dst= 45:00:00:14:00:01\r\n              src= 00:00:40:00:7c:e7\r\n              type= 0x7f00\r\n###[ Raw ]### \r\n                 load= '\\x00\\x01\\x7f\\x00\\x00\\x01'\r\n```\r\n\r\n#### Expected result\r\n```python\r\n###[ Ethernet ]### \r\n  dst= ff:ff:ff:ff:ff:ff\r\n  src= 00:00:00:00:00:00\r\n  type= 0x800\r\n###[ IP ]### \r\n     version= 4\r\n     ihl= 5\r\n     tos= 0x0\r\n     len= 56\r\n     id= 1\r\n     flags= \r\n     frag= 0\r\n     ttl= 64\r\n     proto= udp\r\n     chksum= 0x7cb2\r\n     src= 127.0.0.1\r\n     dst= 127.0.0.1\r\n     \\options\\\r\n###[ UDP ]### \r\n        sport= 4789\r\n        dport= 4789\r\n        len= 36\r\n        chksum= 0xd838\r\n###[ VXLAN ]### \r\n           flags= NextProtocol\r\n           reserved0= 0\r\n           NextProtocol= IPv4\r\n           vni= 0x0\r\n           reserved2= 0x0\r\n###[ IP ]### \r\n              version= 4\r\n              ihl= 5\r\n              tos= 0x0\r\n              len= 20\r\n              id= 1\r\n              flags= \r\n              frag= 0\r\n              ttl= 64\r\n              proto= hopopt\r\n              chksum= 0x7ce7\r\n              src= 127.0.0.1\r\n              dst= 127.0.0.1\r\n              \\options\\\r\n```\r\n\n", "before_files": [{"content": "# This file is part of Scapy\n# See http://www.secdev.org/projects/scapy for more information\n# Copyright (C) Philippe Biondi <phil@secdev.org>\n# This program is published under a GPLv2 license\n\n\"\"\"\nVirtual eXtensible Local Area Network (VXLAN)\n- RFC 7348 -\n\nA Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks\nhttp://tools.ietf.org/html/rfc7348\nhttps://www.ietf.org/id/draft-ietf-nvo3-vxlan-gpe-02.txt\n\nVXLAN Group Policy Option:\nhttp://tools.ietf.org/html/draft-smith-vxlan-group-policy-00\n\"\"\"\n\nfrom scapy.packet import Packet, bind_layers\nfrom scapy.layers.l2 import Ether\nfrom scapy.layers.inet import IP, UDP\nfrom scapy.layers.inet6 import IPv6\nfrom scapy.fields import FlagsField, XByteField, ThreeBytesField, \\\n    ConditionalField, ShortField, ByteEnumField, X3BytesField\n\n_GP_FLAGS = [\"R\", \"R\", \"R\", \"A\", \"R\", \"R\", \"D\", \"R\"]\n\n\nclass VXLAN(Packet):\n    name = \"VXLAN\"\n\n    fields_desc = [\n        FlagsField(\"flags\", 0x8, 8,\n                   ['OAM', 'R', 'NextProtocol', 'Instance',\n                    'V1', 'V2', 'R', 'G']),\n        ConditionalField(\n            ShortField(\"reserved0\", 0),\n            lambda pkt: pkt.flags.NextProtocol,\n        ),\n        ConditionalField(\n            ByteEnumField('NextProtocol', 0,\n                          {0: 'NotDefined',\n                           1: 'IPv4',\n                           2: 'IPv6',\n                           3: 'Ethernet',\n                           4: 'NSH'}),\n            lambda pkt: pkt.flags.NextProtocol,\n        ),\n        ConditionalField(\n            ThreeBytesField(\"reserved1\", 0),\n            lambda pkt: (not pkt.flags.G) and (not pkt.flags.NextProtocol),\n        ),\n        ConditionalField(\n            FlagsField(\"gpflags\", 0, 8, _GP_FLAGS),\n            lambda pkt: pkt.flags.G,\n        ),\n        ConditionalField(\n            ShortField(\"gpid\", 0),\n            lambda pkt: pkt.flags.G,\n        ),\n        X3BytesField(\"vni\", 0),\n        XByteField(\"reserved2\", 0),\n    ]\n\n    # Use default linux implementation port\n    overload_fields = {\n        UDP: {'dport': 8472},\n    }\n\n    def mysummary(self):\n        if self.flags.G:\n            return self.sprintf(\"VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)\")\n        else:\n            return self.sprintf(\"VXLAN (vni=%VXLAN.vni%)\")\n\n\nbind_layers(UDP, VXLAN, dport=4789)  # RFC standard vxlan port\nbind_layers(UDP, VXLAN, dport=4790)  # RFC standard vxlan-gpe port\nbind_layers(UDP, VXLAN, dport=6633)  # New IANA assigned port for use with NSH\nbind_layers(UDP, VXLAN, dport=8472)  # Linux implementation port\nbind_layers(UDP, VXLAN, dport=48879)  # Cisco ACI\nbind_layers(UDP, VXLAN, sport=4789)\nbind_layers(UDP, VXLAN, sport=4790)\nbind_layers(UDP, VXLAN, sport=6633)\nbind_layers(UDP, VXLAN, sport=8472)\n# By default, set both ports to the RFC standard\nbind_layers(UDP, VXLAN, sport=4789, dport=4789)\n\nbind_layers(VXLAN, Ether)\nbind_layers(VXLAN, IP, NextProtocol=1)\nbind_layers(VXLAN, IPv6, NextProtocol=2)\nbind_layers(VXLAN, Ether, flags=4, NextProtocol=0)\nbind_layers(VXLAN, IP, flags=4, NextProtocol=1)\nbind_layers(VXLAN, IPv6, flags=4, NextProtocol=2)\nbind_layers(VXLAN, Ether, flags=4, NextProtocol=3)\n", "path": "scapy/layers/vxlan.py"}], "after_files": [{"content": "# This file is part of Scapy\n# See http://www.secdev.org/projects/scapy for more information\n# Copyright (C) Philippe Biondi <phil@secdev.org>\n# This program is published under a GPLv2 license\n\n\"\"\"\nVirtual eXtensible Local Area Network (VXLAN)\n- RFC 7348 -\n\nA Framework for Overlaying Virtualized Layer 2 Networks over Layer 3 Networks\nhttp://tools.ietf.org/html/rfc7348\nhttps://www.ietf.org/id/draft-ietf-nvo3-vxlan-gpe-02.txt\n\nVXLAN Group Policy Option:\nhttp://tools.ietf.org/html/draft-smith-vxlan-group-policy-00\n\"\"\"\n\nfrom scapy.packet import Packet, bind_layers\nfrom scapy.layers.l2 import Ether\nfrom scapy.layers.inet import IP, UDP\nfrom scapy.layers.inet6 import IPv6\nfrom scapy.fields import FlagsField, XByteField, ThreeBytesField, \\\n    ConditionalField, ShortField, ByteEnumField, X3BytesField\n\n_GP_FLAGS = [\"R\", \"R\", \"R\", \"A\", \"R\", \"R\", \"D\", \"R\"]\n\n\nclass VXLAN(Packet):\n    name = \"VXLAN\"\n\n    fields_desc = [\n        FlagsField(\"flags\", 0x8, 8,\n                   ['OAM', 'R', 'NextProtocol', 'Instance',\n                    'V1', 'V2', 'R', 'G']),\n        ConditionalField(\n            ShortField(\"reserved0\", 0),\n            lambda pkt: pkt.flags.NextProtocol,\n        ),\n        ConditionalField(\n            ByteEnumField('NextProtocol', 0,\n                          {0: 'NotDefined',\n                           1: 'IPv4',\n                           2: 'IPv6',\n                           3: 'Ethernet',\n                           4: 'NSH'}),\n            lambda pkt: pkt.flags.NextProtocol,\n        ),\n        ConditionalField(\n            ThreeBytesField(\"reserved1\", 0),\n            lambda pkt: (not pkt.flags.G) and (not pkt.flags.NextProtocol),\n        ),\n        ConditionalField(\n            FlagsField(\"gpflags\", 0, 8, _GP_FLAGS),\n            lambda pkt: pkt.flags.G,\n        ),\n        ConditionalField(\n            ShortField(\"gpid\", 0),\n            lambda pkt: pkt.flags.G,\n        ),\n        X3BytesField(\"vni\", 0),\n        XByteField(\"reserved2\", 0),\n    ]\n\n    # Use default linux implementation port\n    overload_fields = {\n        UDP: {'dport': 8472},\n    }\n\n    def mysummary(self):\n        if self.flags.G:\n            return self.sprintf(\"VXLAN (vni=%VXLAN.vni% gpid=%VXLAN.gpid%)\")\n        else:\n            return self.sprintf(\"VXLAN (vni=%VXLAN.vni%)\")\n\n\nbind_layers(UDP, VXLAN, dport=4789)  # RFC standard vxlan port\nbind_layers(UDP, VXLAN, dport=4790)  # RFC standard vxlan-gpe port\nbind_layers(UDP, VXLAN, dport=6633)  # New IANA assigned port for use with NSH\nbind_layers(UDP, VXLAN, dport=8472)  # Linux implementation port\nbind_layers(UDP, VXLAN, dport=48879)  # Cisco ACI\nbind_layers(UDP, VXLAN, sport=4789)\nbind_layers(UDP, VXLAN, sport=4790)\nbind_layers(UDP, VXLAN, sport=6633)\nbind_layers(UDP, VXLAN, sport=8472)\n# By default, set both ports to the RFC standard\nbind_layers(UDP, VXLAN, sport=4789, dport=4789)\n\nbind_layers(VXLAN, Ether, NextProtocol=0)\nbind_layers(VXLAN, IP, NextProtocol=1)\nbind_layers(VXLAN, IPv6, NextProtocol=2)\nbind_layers(VXLAN, Ether, NextProtocol=3)\nbind_layers(VXLAN, Ether, flags=4, NextProtocol=0)\nbind_layers(VXLAN, IP, flags=4, NextProtocol=1)\nbind_layers(VXLAN, IPv6, flags=4, NextProtocol=2)\nbind_layers(VXLAN, Ether, flags=4, NextProtocol=3)\n", "path": "scapy/layers/vxlan.py"}]}