Skip to content

Commit

Permalink
Merge pull request #1776 from polybassa/gmlan_fixes
Browse files Browse the repository at this point in the history
Fix a field in the GMLAN RDBPKTI packet
  • Loading branch information
gpotter2 committed Jan 10, 2019
2 parents 3f7c190 + 6a4a1f7 commit bad14cb
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
3 changes: 2 additions & 1 deletion scapy/contrib/automotive/gm/gmlan.py
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,8 @@ class GMLAN_RDBPKTI(Packet):

fields_desc = [
XByteEnumField('subfunction', 0, subfunctions),
ConditionalField(StrField('request_DPIDs', b''),
ConditionalField(FieldListField('request_DPIDs', [],
XByteField("", 0)),
lambda pkt: pkt.subfunction > 0x0)
]

Expand Down
25 changes: 23 additions & 2 deletions scapy/contrib/automotive/gm/gmlan.uts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ load_contrib('automotive.gm.gmlan')

+ Basic Packet Tests()
= Set GMLAN ECU AddressingScheme

conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] = 2
conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] == 2

assert conf.contribs['GMLAN']['GMLAN_ECU_AddressingScheme'] == 2

= Craft Packet
x = GMLAN(b'\x52\x02\x01\x16\x71\x00\x00\x0c\xaa\xbb')
Expand All @@ -37,6 +39,7 @@ x.memoryAddress == 0x1122
x.dataRecord == b'\x44\x22'

= Craft Packet with ECU AddressingScheme2
x = GMLAN() / GMLAN_RMBA(b'\x11\x22\x44\x22')
y = GMLAN()/GMLAN_RMBA(memoryAddress=0x1122, memorySize=0x4422)
bytes(x) == bytes(y)

Expand All @@ -52,6 +55,7 @@ x.memoryAddress == 0x112244
x.dataRecord == b'\x22\x11'

= Craft Packet with ECU AddressingScheme3
x = GMLAN() / GMLAN_RMBA(b'\x11\x22\x44\x22\x11')
y = GMLAN()/GMLAN_RMBA(memoryAddress=0x112244, memorySize=0x2211)
bytes(x) == bytes(y)

Expand All @@ -67,6 +71,7 @@ x.memoryAddress == 0x11224422
x.dataRecord == b'\x11\x00'

= Craft Packet with ECU AddressingScheme4
x = GMLAN() / GMLAN_RMBA(b'\x11\x22\x44\x22\x11\x00')
y = GMLAN()/GMLAN_RMBA(memoryAddress=0x11224422, memorySize=0x1100)
bytes(x) == bytes(y)

Expand Down Expand Up @@ -189,13 +194,29 @@ x.load == b'deadbeef'
x = GMLAN(b'\xAA\x01deadbeef')
x.service == 0xAA
x.subfunction == 0x01
x.request_DPIDs == b'deadbeef'
x.request_DPIDs == [0x64, 0x65, 0x61, 0x64, 0x62, 0x65, 0x65, 0x66]

= Craft Packet for GMLAN_RDBPKTI3
x = GMLAN(b'\xAA\x02deadbeef')
x.service == 0xAA
x.subfunction == 0x02
x.request_DPIDs == [0x64, 0x65, 0x61, 0x64, 0x62, 0x65, 0x65, 0x66]

= Craft Packet for GMLAN_RDBPKTI4
x = GMLAN(b'\xAA\x03deadbeef')
x.service == 0xAA
x.subfunction == 0x03
x.request_DPIDs == [0x64, 0x65, 0x61, 0x64, 0x62, 0x65, 0x65, 0x66]

= Craft Packet for GMLAN_RDBPKTI2
x = GMLAN(b'\xAA\x00')
x.service == 0xAA
x.subfunction == 0

= Build GMLAN_RDBPKTI1
x = GMLAN()/GMLAN_RDBPKTI(subfunction=1, request_DPIDs=[0x64, 0x65])
assert b"\xaa\x01de" == bytes(x)

= Craft Packet for GMLAN_SA1
x = GMLAN(b'\x27\x01')
x.service == 0x27
Expand Down

0 comments on commit bad14cb

Please sign in to comment.