# This file is part of Scapy
|
# See http://www.secdev.org/projects/scapy for more informations
|
# Copyright (C) Philippe Biondi <phil@secdev.org>
|
# This program is published under a GPLv2 license
|
|
|
"""A minimal implementation of the CANopen protocol, based on
|
Wireshark dissectors. See https://wiki.wireshark.org/CANopen
|
|
"""
|
|
|
from scapy.config import conf
|
from scapy.data import DLT_CAN_SOCKETCAN
|
from scapy.fields import BitField, FieldLenField, FlagsField, StrLenField, \
|
ThreeBytesField, XBitField
|
from scapy.packet import Packet
|
|
|
class CAN(Packet):
|
"""A minimal implementation of the CANopen protocol, based on
|
Wireshark dissectors. See https://wiki.wireshark.org/CANopen
|
|
"""
|
fields_desc = [
|
FlagsField("flags", 0, 3, ["extended", "remote_transmission_request",
|
"error"]),
|
BitField("unknown", 0, 18),
|
XBitField("identifier", 0, 11),
|
FieldLenField("length", None, length_of="data", fmt="B"),
|
ThreeBytesField("reserved", 0),
|
StrLenField("data", "", length_from=lambda pkt: pkt.length),
|
]
|
|
|
conf.l2types.register(DLT_CAN_SOCKETCAN, CAN)
|