prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Use nextproto property instead of nextprotocol
  This is just a checklist to guide you. You can remove it safely.
  
  **Checklist:**
  
  -   [x ] If you are new to Scapy: I have checked <https://github.com/secdev/scapy/blob/master/CONTRIBUTING.md> (esp. section submitting-pull-requests)
  -   [ ] I squashed commits belonging together
  -   [ ] I added unit tests or explained why they are not relevant
  -   [ ] I executed the regression tests for Python2 and Python3 (using `tox` or, `cd test && ./run_tests_py2, cd test && ./run_tests_py3`)
  -   [ ] If the PR is still not finished, please create a [Draft Pull Request](https://github.blog/2019-02-14-introducing-draft-pull-requests/)
  
  > brief description what this PR will do, e.g. fixes broken dissection of XXX
  Fix wrong property in `bind_layers` function of NSH protocol. In the NSH class, it defines `nextproto` for next protocol property. 
  
  I changed from `nextprotocol` to `nextproto` in `bind_layers`  functions.
  
  > if required - short explanation why you fixed something in a way that may look more complicated as it actually is
  
  > if required - outline impacts on other parts of the library
  
  
  </issue>
  <code>
  [start of scapy/contrib/nsh.py]
  1 # This file is part of Scapy
  2 # Scapy is free software: you can redistribute it and/or modify
  3 # it under the terms of the GNU General Public License as published by
  4 # the Free Software Foundation, either version 2 of the License, or
  5 # any later version.
  6 #
  7 # Scapy is distributed in the hope that it will be useful,
  8 # but WITHOUT ANY WARRANTY; without even the implied warranty of
  9 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10 # GNU General Public License for more details.
  11 #
  12 # You should have received a copy of the GNU General Public License
  13 # along with Scapy. If not, see <http://www.gnu.org/licenses/>.
  14 
  15 # scapy.contrib.description = Network Services Headers (NSH)
  16 # scapy.contrib.status = loads
  17 
  18 from scapy.all import bind_layers
  19 from scapy.fields import BitField, ByteField, ByteEnumField, BitEnumField, \
  20     ShortField, X3BytesField, XIntField, XStrFixedLenField, \
  21     ConditionalField, PacketListField, BitFieldLenField
  22 from scapy.layers.inet import Ether, IP
  23 from scapy.layers.inet6 import IPv6
  24 from scapy.layers.vxlan import VXLAN
  25 from scapy.packet import Packet
  26 from scapy.layers.l2 import GRE
  27 
  28 from scapy.contrib.mpls import MPLS
  29 
  30 #
  31 # NSH Support
  32 # https://www.rfc-editor.org/rfc/rfc8300.txt  January 2018
  33 #
  34 
  35 
  36 class NSHTLV(Packet):
  37     "NSH MD-type 2 - Variable Length Context Headers"
  38     name = "NSHTLV"
  39     fields_desc = [
  40         ShortField('class', 0),
  41         BitField('type', 0, 8),
  42         BitField('reserved', 0, 1),
  43         BitField('length', 0, 7),
  44         PacketListField('metadata', None, XIntField, count_from='length')
  45     ]
  46 
  47 
  48 class NSH(Packet):
  49     """Network Service Header.
  50        NSH MD-type 1 if there is no ContextHeaders"""
  51     name = "NSH"
  52 
  53     fields_desc = [
  54         BitField('ver', 0, 2),
  55         BitField('oam', 0, 1),
  56         BitField('unused1', 0, 1),
  57         BitField('ttl', 63, 6),
  58         BitFieldLenField('length', None, 6,
  59                          count_of='vlch',
  60                          adjust=lambda pkt, x: 6 if pkt.mdtype == 1
  61                          else x + 2),
  62         BitField('unused2', 0, 4),
  63         BitEnumField('mdtype', 1, 4, {0: 'Reserved MDType',
  64                                       1: 'Fixed Length',
  65                                       2: 'Variable Length',
  66                                       0xF: 'Experimental MDType'}),
  67         ByteEnumField('nextproto', 3, {1: 'IPv4',
  68                                        2: 'IPv6',
  69                                        3: 'Ethernet',
  70                                        4: 'NSH',
  71                                        5: 'MPLS',
  72                                        0xFE: 'Experiment 1',
  73                                        0xFF: 'Experiment 2'}),
  74         X3BytesField('spi', 0),
  75         ByteField('si', 0xFF),
  76         ConditionalField(XStrFixedLenField("context_header", "", 16),
  77                          lambda pkt: pkt.mdtype == 1),
  78         ConditionalField(PacketListField("vlch", None, NSHTLV,
  79                                          count_from="length"),
  80                          lambda pkt: pkt.mdtype == 2)
  81     ]
  82 
  83     def mysummary(self):
  84         return self.sprintf("SPI: %spi% - SI: %si%")
  85 
  86 
  87 bind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F)
  88 bind_layers(VXLAN, NSH, {'flags': 0xC, 'nextprotocol': 4}, nextprotocol=4)
  89 bind_layers(GRE, NSH, {'proto': 0x894F}, proto=0x894F)
  90 
  91 bind_layers(NSH, IP, {'nextprotocol': 1}, nextprotocol=1)
  92 bind_layers(NSH, IPv6, {'nextprotocol': 2}, nextprotocol=2)
  93 bind_layers(NSH, Ether, {'nextprotocol': 3}, nextprotocol=3)
  94 bind_layers(NSH, NSH, {'nextprotocol': 4}, nextprotocol=4)
  95 bind_layers(NSH, MPLS, {'nextprotocol': 5}, nextprotocol=5)
  96
  [end of scapy/contrib/nsh.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/scapy/contrib/nsh.py b/scapy/contrib/nsh.py
  --- a/scapy/contrib/nsh.py
  +++ b/scapy/contrib/nsh.py
  @@ -85,11 +85,11 @@
   
   
   bind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F)
  -bind_layers(VXLAN, NSH, {'flags': 0xC, 'nextprotocol': 4}, nextprotocol=4)
  +bind_layers(VXLAN, NSH, {'flags': 0xC, 'nextproto': 4}, nextproto=4)
   bind_layers(GRE, NSH, {'proto': 0x894F}, proto=0x894F)
   
  -bind_layers(NSH, IP, {'nextprotocol': 1}, nextprotocol=1)
  -bind_layers(NSH, IPv6, {'nextprotocol': 2}, nextprotocol=2)
  -bind_layers(NSH, Ether, {'nextprotocol': 3}, nextprotocol=3)
  -bind_layers(NSH, NSH, {'nextprotocol': 4}, nextprotocol=4)
  -bind_layers(NSH, MPLS, {'nextprotocol': 5}, nextprotocol=5)
  +bind_layers(NSH, IP, nextproto=1)
  +bind_layers(NSH, IPv6, nextproto=2)
  +bind_layers(NSH, Ether, nextproto=3)
  +bind_layers(NSH, NSH, nextproto=4)
  +bind_layers(NSH, MPLS, nextproto=5)
  
verification_info: {"golden_diff": "diff --git a/scapy/contrib/nsh.py b/scapy/contrib/nsh.py\n--- a/scapy/contrib/nsh.py\n+++ b/scapy/contrib/nsh.py\n@@ -85,11 +85,11 @@\n \n \n bind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F)\n-bind_layers(VXLAN, NSH, {'flags': 0xC, 'nextprotocol': 4}, nextprotocol=4)\n+bind_layers(VXLAN, NSH, {'flags': 0xC, 'nextproto': 4}, nextproto=4)\n bind_layers(GRE, NSH, {'proto': 0x894F}, proto=0x894F)\n \n-bind_layers(NSH, IP, {'nextprotocol': 1}, nextprotocol=1)\n-bind_layers(NSH, IPv6, {'nextprotocol': 2}, nextprotocol=2)\n-bind_layers(NSH, Ether, {'nextprotocol': 3}, nextprotocol=3)\n-bind_layers(NSH, NSH, {'nextprotocol': 4}, nextprotocol=4)\n-bind_layers(NSH, MPLS, {'nextprotocol': 5}, nextprotocol=5)\n+bind_layers(NSH, IP, nextproto=1)\n+bind_layers(NSH, IPv6, nextproto=2)\n+bind_layers(NSH, Ether, nextproto=3)\n+bind_layers(NSH, NSH, nextproto=4)\n+bind_layers(NSH, MPLS, nextproto=5)\n", "issue": "Use nextproto property instead of nextprotocol\nThis is just a checklist to guide you. You can remove it safely.\r\n\r\n**Checklist:**\r\n\r\n-   [x ] If you are new to Scapy: I have checked <https://github.com/secdev/scapy/blob/master/CONTRIBUTING.md> (esp. section submitting-pull-requests)\r\n-   [ ] I squashed commits belonging together\r\n-   [ ] I added unit tests or explained why they are not relevant\r\n-   [ ] I executed the regression tests for Python2 and Python3 (using `tox` or, `cd test && ./run_tests_py2, cd test && ./run_tests_py3`)\r\n-   [ ] If the PR is still not finished, please create a [Draft Pull Request](https://github.blog/2019-02-14-introducing-draft-pull-requests/)\r\n\r\n> brief description what this PR will do, e.g. fixes broken dissection of XXX\r\nFix wrong property in `bind_layers` function of NSH protocol. In the NSH class, it defines `nextproto` for next protocol property. \r\n\r\nI changed from `nextprotocol` to `nextproto` in `bind_layers`  functions.\r\n\r\n> if required - short explanation why you fixed something in a way that may look more complicated as it actually is\r\n\r\n> if required - outline impacts on other parts of the library\r\n\n", "before_files": [{"content": "# This file is part of Scapy\n# Scapy is free software: you can redistribute it and/or modify\n# it under the terms of the GNU General Public License as published by\n# the Free Software Foundation, either version 2 of the License, or\n# any later version.\n#\n# Scapy is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU General Public License for more details.\n#\n# You should have received a copy of the GNU General Public License\n# along with Scapy. If not, see <http://www.gnu.org/licenses/>.\n\n# scapy.contrib.description = Network Services Headers (NSH)\n# scapy.contrib.status = loads\n\nfrom scapy.all import bind_layers\nfrom scapy.fields import BitField, ByteField, ByteEnumField, BitEnumField, \\\n    ShortField, X3BytesField, XIntField, XStrFixedLenField, \\\n    ConditionalField, PacketListField, BitFieldLenField\nfrom scapy.layers.inet import Ether, IP\nfrom scapy.layers.inet6 import IPv6\nfrom scapy.layers.vxlan import VXLAN\nfrom scapy.packet import Packet\nfrom scapy.layers.l2 import GRE\n\nfrom scapy.contrib.mpls import MPLS\n\n#\n# NSH Support\n# https://www.rfc-editor.org/rfc/rfc8300.txt  January 2018\n#\n\n\nclass NSHTLV(Packet):\n    \"NSH MD-type 2 - Variable Length Context Headers\"\n    name = \"NSHTLV\"\n    fields_desc = [\n        ShortField('class', 0),\n        BitField('type', 0, 8),\n        BitField('reserved', 0, 1),\n        BitField('length', 0, 7),\n        PacketListField('metadata', None, XIntField, count_from='length')\n    ]\n\n\nclass NSH(Packet):\n    \"\"\"Network Service Header.\n       NSH MD-type 1 if there is no ContextHeaders\"\"\"\n    name = \"NSH\"\n\n    fields_desc = [\n        BitField('ver', 0, 2),\n        BitField('oam', 0, 1),\n        BitField('unused1', 0, 1),\n        BitField('ttl', 63, 6),\n        BitFieldLenField('length', None, 6,\n                         count_of='vlch',\n                         adjust=lambda pkt, x: 6 if pkt.mdtype == 1\n                         else x + 2),\n        BitField('unused2', 0, 4),\n        BitEnumField('mdtype', 1, 4, {0: 'Reserved MDType',\n                                      1: 'Fixed Length',\n                                      2: 'Variable Length',\n                                      0xF: 'Experimental MDType'}),\n        ByteEnumField('nextproto', 3, {1: 'IPv4',\n                                       2: 'IPv6',\n                                       3: 'Ethernet',\n                                       4: 'NSH',\n                                       5: 'MPLS',\n                                       0xFE: 'Experiment 1',\n                                       0xFF: 'Experiment 2'}),\n        X3BytesField('spi', 0),\n        ByteField('si', 0xFF),\n        ConditionalField(XStrFixedLenField(\"context_header\", \"\", 16),\n                         lambda pkt: pkt.mdtype == 1),\n        ConditionalField(PacketListField(\"vlch\", None, NSHTLV,\n                                         count_from=\"length\"),\n                         lambda pkt: pkt.mdtype == 2)\n    ]\n\n    def mysummary(self):\n        return self.sprintf(\"SPI: %spi% - SI: %si%\")\n\n\nbind_layers(Ether, NSH, {'type': 0x894F}, type=0x894F)\nbind_layers(VXLAN, NSH, {'flags': 0xC, 'nextprotocol': 4}, nextprotocol=4)\nbind_layers(GRE, NSH, {'proto': 0x894F}, proto=0x894F)\n\nbind_layers(NSH, IP, {'nextprotocol': 1}, nextprotocol=1)\nbind_layers(NSH, IPv6, {'nextprotocol': 2}, nextprotocol=2)\nbind_layers(NSH, Ether, {'nextprotocol': 3}, nextprotocol=3)\nbind_layers(NSH, NSH, {'nextprotocol': 4}, nextprotocol=4)\nbind_layers(NSH, MPLS, {'nextprotocol': 5}, nextprotocol=5)\n", "path": "scapy/contrib/nsh.py"}]}