VPP-1508: Use scapy.compat to manage packet level library differences.

Change-Id: Icdf6abc9e53d33b26fd1d531c7dda6be0bb9cb55
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
This commit is contained in:
Paul Vinciguerra
2019-03-10 10:04:23 -07:00
committed by Ole Trøan
parent 0f6602cb24
commit a7427ec6f8
27 changed files with 261 additions and 193 deletions

View File

@ -7,6 +7,7 @@ import six
import sys
import os.path
import scapy.compat
from scapy.layers.l2 import Ether
from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6, IPv6ExtHdrFragment, IPv6ExtHdrRouting,\
@ -282,7 +283,7 @@ def fragment_rfc791(packet, fragsize, _logger=None):
"""
logger = LoggerWrapper(_logger)
logger.debug(ppp("Fragmenting packet:", packet))
packet = packet.__class__(str(packet)) # recalculate all values
packet = packet.__class__(scapy.compat.raw(packet)) # recalc. all values
if len(packet[IP].options) > 0:
raise Exception("Not implemented")
if len(packet) <= fragsize:
@ -290,7 +291,7 @@ def fragment_rfc791(packet, fragsize, _logger=None):
pre_ip_len = len(packet) - len(packet[IP])
ip_header_len = packet[IP].ihl * 4
hex_packet = str(packet)
hex_packet = scapy.compat.raw(packet)
hex_headers = hex_packet[:(pre_ip_len + ip_header_len)]
hex_payload = hex_packet[(pre_ip_len + ip_header_len):]
@ -327,7 +328,7 @@ def fragment_rfc8200(packet, identification, fragsize, _logger=None):
:returns: list of fragments
"""
logger = LoggerWrapper(_logger)
packet = packet.__class__(str(packet)) # recalculate all values
packet = packet.__class__(scapy.compat.raw(packet)) # recalc. all values
if len(packet) <= fragsize:
return [packet]
logger.debug(ppp("Fragmenting packet:", packet))
@ -378,7 +379,7 @@ def fragment_rfc8200(packet, identification, fragsize, _logger=None):
logger.debug(ppp("Per-fragment headers:", per_fragment_headers))
ext_and_upper_layer = packet.getlayer(last_per_fragment_hdr)[1]
hex_payload = str(ext_and_upper_layer)
hex_payload = scapy.compat.raw(ext_and_upper_layer)
logger.debug("Payload length is %s" % len(hex_payload))
logger.debug(ppp("Ext and upper layer:", ext_and_upper_layer))
@ -407,7 +408,7 @@ def fragment_rfc8200(packet, identification, fragsize, _logger=None):
p[IPv6ExtHdrFragment].id = identification
p[IPv6ExtHdrFragment].offset = 0
p[IPv6ExtHdrFragment].m = 1
p = p.__class__(str(p))
p = p.__class__(scapy.compat.raw(p))
logger.debug(ppp("Fragment %s:" % len(pkts), p))
pkts.append(p)
offset = first_payload_len_nfb * 8
@ -424,7 +425,7 @@ def fragment_rfc8200(packet, identification, fragsize, _logger=None):
p[IPv6ExtHdrFragment].id = identification
p[IPv6ExtHdrFragment].offset = offset / 8
p[IPv6ExtHdrFragment].m = 1
p = p.__class__(str(p))
p = p.__class__(scapy.compat.raw(p))
logger.debug(ppp("Fragment %s:" % len(pkts), p))
pkts.append(p)
offset = offset + l_nfb * 8