1% Regression tests for nativecansocket 2~ not_pypy vcan_socket needs_root linux 3 4# More information at http://www.secdev.org/projects/UTscapy/ 5 6 7############ 8############ 9+ Configuration of CAN virtual sockets 10~ conf 11 12= Load module 13load_layer("can", globals_dict=globals()) 14conf.contribs['CANSocket'] = {'use-python-can': False} 15from scapy.contrib.cansocket_native import * 16conf.contribs['CAN'] = {'swap-bytes': False, 'remove-padding': True} 17 18 19= Setup string for vcan 20bashCommand = "/bin/bash -c 'sudo modprobe vcan; sudo ip link add name vcan0 type vcan; sudo ip link set dev vcan0 up'" 21 22= Load os 23import os 24import threading 25from time import sleep 26from subprocess import call 27 28= Setup vcan0 29assert 0 == os.system(bashCommand) 30 31+ Basic Packet Tests() 32= CAN Packet init 33canframe = CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 34assert bytes(canframe) == b'\x00\x00\x07\xff\x08\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08' 35 36+ Basic Socket Tests() 37= CAN Socket Init 38sock1 = CANSocket(channel="vcan0") 39 40= CAN Socket send recv small packet without remove padding 41 42conf.contribs['CAN'] = {'swap-bytes': False, 'remove-padding': False} 43 44sock2 = CANSocket(channel="vcan0") 45sock2.send(CAN(identifier=0x7ff,length=1,data=b'\x01')) 46sock2.close() 47 48rx = sock1.recv() 49print(repr(rx)) 50assert rx == CAN(identifier=0x7ff,length=1,data=b'\x01') / Padding(b"\x00" * 7) 51 52 53= CAN Socket send recv small packet 54 55conf.contribs['CAN'] = {'swap-bytes': False, 'remove-padding': True} 56 57sock2 = CANSocket(channel="vcan0") 58sock2.send(CAN(identifier=0x7ff,length=1,data=b'\x01')) 59sock2.close() 60 61rx = sock1.recv() 62print(repr(rx)) 63assert rx == CAN(identifier=0x7ff,length=1,data=b'\x01') 64 65= CAN Socket send recv 66 67 68sock2 = CANSocket(channel="vcan0") 69sock2.send(CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 70sock2.close() 71 72rx = sock1.recv() 73assert rx == CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 74 75= CAN Socket basecls test 76 77 78sock2 = CANSocket(channel="vcan0") 79sock2.send(CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 80sock2.close() 81 82sock1.basecls = Raw 83rx = sock1.recv() 84assert rx == Raw(bytes(CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08'))) 85sock1.basecls = CAN 86 87+ Advanced Socket Tests() 88= CAN Socket sr1 89tx = CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 90 91= CAN Socket sr1 init time 92assert tx.sent_time == None 93 94sock2 = CANSocket(channel="vcan0") 95sock2.send(tx) 96sock2.close() 97 98rx = None 99rx = sock1.sr1(tx, verbose=False, timeout=3) 100assert rx == tx 101 102sock1.close() 103 104= CAN Socket sr1 time check 105assert abs(tx.sent_time - rx.time) < 0.1 106assert rx.time > 0 107 108= sr can 109tx = CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 110 111= sr can check init time 112assert tx.sent_time == None 113 114sock1 = CANSocket(channel="vcan0") 115 116sock2 = CANSocket(channel="vcan0") 117sock2.send(tx) 118sock2.close() 119 120rx = None 121rx = sock1.sr(tx, timeout=1, verbose=False) 122rx = rx[0][0][1] 123assert tx == rx 124 125 126= srcan check init time basecls 127 128sock1 = CANSocket(channel="vcan0", basecls=Raw) 129 130sock2 = CANSocket(channel="vcan0") 131sock2.send(tx) 132sock2.close() 133 134rx = None 135rx = sock1.sr(tx, timeout=1, verbose=False) 136rx = rx[0][0][1] 137assert Raw(bytes(tx)) == rx 138 139sock1.close() 140 141= sr can check rx and tx 142 143assert tx.sent_time > 0 and rx.time > 0 144 145= sniff with filtermask 0x7ff 146 147sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x200, 'can_mask': 0x7ff}]) 148 149sock2 = CANSocket(channel="vcan0") 150sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 151sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 152sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 153sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 154sock2.send(CAN(identifier=0x100, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 155sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 156sock2.close() 157 158packets = sock1.sniff(timeout=0.1, verbose=False, count=3) 159assert len(packets) == 3 160sock1.close() 161 162= sniff with filtermask 0x700 163 164sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x200, 'can_mask': 0x700}]) 165 166sock2 = CANSocket(channel="vcan0") 167sock2.send(CAN(identifier=0x212, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 168sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 169sock2.send(CAN(identifier=0x2ff, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 170sock2.send(CAN(identifier=0x1ff, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 171sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 172sock2.send(CAN(identifier=0x2aa, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 173sock2.close() 174 175packets = sock1.sniff(timeout=0.1, verbose=False, count=4) 176assert len(packets) == 4 177 178sock1.close() 179 180= sniff with filtermask 0x0ff 181 182 183sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x200, 'can_mask': 0x0ff}]) 184 185sock2 = CANSocket(channel="vcan0") 186sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 187sock2.send(CAN(identifier=0x301, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 188sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 189sock2.send(CAN(identifier=0x1ff, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 190sock2.send(CAN(identifier=0x700, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 191sock2.send(CAN(identifier=0x100, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 192sock2.close() 193 194packets = sock1.sniff(timeout=0.1, verbose=False, count=4) 195assert len(packets) == 4 196 197sock1.close() 198 199= sniff with multiple filters 200 201 202sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x200, 'can_mask': 0x7ff}, {'can_id': 0x400, 'can_mask': 0x7ff}, {'can_id': 0x600, 'can_mask': 0x7ff}, {'can_id': 0x7ff, 'can_mask': 0x7ff}]) 203 204sock2 = CANSocket(channel="vcan0") 205sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 206sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 207sock2.send(CAN(identifier=0x400, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 208sock2.send(CAN(identifier=0x500, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 209sock2.send(CAN(identifier=0x600, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 210sock2.send(CAN(identifier=0x700, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 211sock2.send(CAN(identifier=0x7ff, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 212sock2.close() 213 214packets = sock1.sniff(timeout=0.1, verbose=False, count=4) 215assert len(packets) == 4 216 217sock1.close() 218 219= sniff with filtermask 0x7ff and inverse filter 220 221 222sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x200 | CAN_INV_FILTER, 'can_mask': 0x7ff}]) 223 224sock2 = CANSocket(channel="vcan0") 225sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 226sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 227sock2.send(CAN(identifier=0x300, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 228sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 229sock2.send(CAN(identifier=0x100, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 230sock2.send(CAN(identifier=0x200, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 231sock2.close() 232 233packets = sock1.sniff(timeout=0.1, verbose=False, count=2) 234assert len(packets) == 2 235 236sock1.close() 237 238= sniff with filtermask 0x1FFFFFFF 239 240 241sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x10000000, 'can_mask': 0x1fffffff}]) 242 243sock2 = CANSocket(channel="vcan0") 244sock2.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 245sock2.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 246sock2.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 247sock2.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 248sock2.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 249sock2.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 250sock2.close() 251 252packets = sock1.sniff(timeout=0.1, verbose=False, count=2) 253assert len(packets) == 2 254 255sock1.close() 256 257= sniff with filtermask 0x1FFFFFFF and inverse filter 258 259 260sock1 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x10000000 | CAN_INV_FILTER, 'can_mask': 0x1fffffff}]) 261 262sock2 = CANSocket(channel="vcan0") 263sock2.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 264sock2.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 265sock2.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 266sock2.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 267sock2.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 268sock2.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 269sock2.close() 270 271packets = sock1.sniff(timeout=0.1, verbose=False, count=4) 272assert len(packets) == 4 273 274sock1.close() 275 276= CAN Socket sr1 with receive own messages 277 278 279sock1 = CANSocket(channel="vcan0", receive_own_messages=True) 280tx = CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 281rx = None 282rx = sock1.sr1(tx, verbose=False, timeout=3) 283assert tx == rx 284assert tx.sent_time < rx.time and tx == rx and rx.time > 0 285 286sock1.close() 287 288= sr can 289 290sock1 = CANSocket(channel="vcan0", receive_own_messages=True) 291tx = CAN(identifier=0x7ff,length=8,data=b'\x01\x02\x03\x04\x05\x06\x07\x08') 292rx = None 293rx = sock1.sr(tx, timeout=0.1, verbose=False) 294assert tx == rx[0][0][1] 295 296+ bridge and sniff tests 297 298= bridge and sniff setup vcan1 package forwarding 299 300 301bashCommand = "/bin/bash -c 'sudo ip link add name vcan1 type vcan; sudo ip link set dev vcan1 up'" 302assert 0 == os.system(bashCommand) 303 304sock0 = CANSocket(channel='vcan0') 305sock1 = CANSocket(channel='vcan1') 306 307bridgeStarted = threading.Event() 308 309def bridge(): 310 global bridgeStarted 311 bSock0 = CANSocket(channel="vcan0") 312 bSock1 = CANSocket(channel='vcan1') 313 def pnr(pkt): 314 return pkt 315 bridgeStarted.set() 316 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, xfrm21=pnr, timeout=0.2, verbose=False, count=6) 317 bSock0.close() 318 bSock1.close() 319 320threadBridge = threading.Thread(target=bridge) 321threadBridge.start() 322bridgeStarted.wait(timeout=5) 323sock0.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 324sock0.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 325sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 326sock0.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 327sock0.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 328sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 329 330packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=6) 331assert len(packetsVCan1) == 6 332 333threadBridge.join(timeout=5) 334assert not threadBridge.is_alive() 335 336sock1.close() 337sock0.close() 338 339= bridge and sniff setup vcan0 package forwarding 340 341 342sock0 = CANSocket(channel='vcan0') 343sock1 = CANSocket(channel='vcan1') 344 345bridgeStarted = threading.Event() 346 347def bridge(): 348 global bridgeStarted 349 bSock0 = CANSocket(channel="vcan0") 350 bSock1 = CANSocket(channel='vcan1') 351 def pnr(pkt): 352 return pkt 353 bridgeStarted.set() 354 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, xfrm21=pnr, timeout=0.2, verbose=False, count=4) 355 bSock0.close() 356 bSock1.close() 357 358threadBridge = threading.Thread(target=bridge) 359threadBridge.start() 360bridgeStarted.wait(timeout=5) 361 362sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 363sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 364sock1.send(CAN(flags='extended', identifier=0x80, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 365sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 366 367packetsVCan0 = sock0.sniff(timeout=0.1, verbose=False, count=4) 368assert len(packetsVCan0) == 4 369 370sock0.close() 371sock1.close() 372 373threadBridge.join(timeout=5) 374assert not threadBridge.is_alive() 375 376=bridge and sniff setup vcan0 vcan1 package forwarding both directions 377 378 379sock0 = CANSocket(channel='vcan0') 380sock1 = CANSocket(channel='vcan1') 381 382bridgeStarted = threading.Event() 383 384def bridge(): 385 global bridgeStarted 386 bSock0 = CANSocket(channel="vcan0") 387 bSock1 = CANSocket(channel='vcan1') 388 def pnr(pkt): 389 return pkt 390 bridgeStarted.set() 391 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, xfrm21=pnr, timeout=0.2, verbose=False, count=10) 392 bSock0.close() 393 bSock1.close() 394 395threadBridge = threading.Thread(target=bridge) 396threadBridge.start() 397bridgeStarted.wait(timeout=5) 398 399sock0.send(CAN(flags='extended', identifier=0x25, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 400sock0.send(CAN(flags='extended', identifier=0x20, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 401sock0.send(CAN(flags='extended', identifier=0x25, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 402sock0.send(CAN(flags='extended', identifier=0x25, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 403sock0.send(CAN(flags='extended', identifier=0x20, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 404sock0.send(CAN(flags='extended', identifier=0x30, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 405sock1.send(CAN(flags='extended', identifier=0x40, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 406sock1.send(CAN(flags='extended', identifier=0x40, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 407sock1.send(CAN(flags='extended', identifier=0x80, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 408sock1.send(CAN(flags='extended', identifier=0x40, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 409 410packetsVCan0 = sock0.sniff(timeout=0.1, count=4, verbose=False) 411packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=6) 412 413assert len(packetsVCan0) == 4 414assert len(packetsVCan1) == 6 415 416sock0.close() 417sock1.close() 418 419threadBridge.join(timeout=5) 420assert not threadBridge.is_alive() 421 422=bridge and sniff setup vcan1 package change 423 424 425sock0 = CANSocket(channel='vcan0') 426sock1 = CANSocket(channel='vcan1', can_filters=[{'can_id': 0x10010000, 'can_mask': 0x1fffffff}]) 427 428bridgeStarted = threading.Event() 429 430def bridgeWithPackageChangeVCan0ToVCan1(): 431 global bridgeStarted 432 bSock0 = CANSocket(channel="vcan0") 433 bSock1 = CANSocket(channel="vcan1") 434 def pnr(pkt): 435 pkt.data = b'\x08\x07\x06\x05\x04\x03\x02\x01' 436 pkt.identifier = 0x10010000 437 return pkt 438 bridgeStarted.set() 439 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, timeout=0.2, verbose=False, count=6) 440 bSock0.close() 441 bSock1.close() 442 443threadBridge = threading.Thread(target=bridgeWithPackageChangeVCan0ToVCan1) 444threadBridge.start() 445 446bridgeStarted.wait(timeout=5) 447sock0.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 448sock0.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 449sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 450sock0.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 451sock0.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 452sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 453 454packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=6) 455assert len(packetsVCan1) == 6 456 457sock0.close() 458sock1.close() 459 460threadBridge.join(timeout=5) 461assert not threadBridge.is_alive() 462 463=bridge and sniff setup vcan0 package change 464 465 466sock0 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x10010000, 'can_mask': 0x1fffffff}]) 467sock1 = CANSocket(channel='vcan1') 468 469bridgeStarted = threading.Event() 470 471def bridgeWithPackageChangeVCan1ToVCan0(): 472 global bridgeStarted 473 bSock0 = CANSocket(channel="vcan0") 474 bSock1 = CANSocket(channel="vcan1") 475 def pnr(pkt): 476 pkt.data = b'\x08\x07\x06\x05\x04\x03\x02\x01' 477 pkt.identifier = 0x10010000 478 return pkt 479 bridgeStarted.set() 480 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm21=pnr, timeout=0.2, verbose=False, count=4) 481 bSock0.close() 482 bSock1.close() 483 484threadBridge = threading.Thread(target=bridgeWithPackageChangeVCan1ToVCan0) 485threadBridge.start() 486 487bridgeStarted.wait(timeout=5) 488sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 489sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 490sock1.send(CAN(flags='extended', identifier=0x10050000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 491sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 492 493packetsVCan0 = sock0.sniff(timeout=0.1, verbose=False, count=4) 494assert len(packetsVCan0) == 4 495 496sock0.close() 497sock1.close() 498 499threadBridge.join(timeout=5) 500 501=bridge and sniff setup vcan0 and vcan1 package change in both directions 502 503 504sock0 = CANSocket(channel='vcan0', can_filters=[{'can_id': 0x10010000, 'can_mask': 0x1fffffff}]) 505sock1 = CANSocket(channel='vcan1', can_filters=[{'can_id': 0x10010000, 'can_mask': 0x1fffffff}]) 506 507bridgeStarted = threading.Event() 508 509def bridgeWithPackageChangeBothDirections(): 510 global bridgeStarted 511 bSock0 = CANSocket(channel="vcan0") 512 bSock1 = CANSocket(channel="vcan1") 513 def pnr(pkt): 514 pkt.data = b'\x08\x07\x06\x05\x04\x03\x02\x01' 515 pkt.identifier = 0x10010000 516 return pkt 517 bridgeStarted.set() 518 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, xfrm21=pnr, timeout=0.2, verbose=False, count=10) 519 bSock0.close() 520 bSock1.close() 521 522threadBridge = threading.Thread(target=bridgeWithPackageChangeBothDirections) 523threadBridge.start() 524 525bridgeStarted.wait(timeout=5) 526sock0.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 527sock0.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 528sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 529sock0.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 530sock0.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 531sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 532sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 533sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 534sock1.send(CAN(flags='extended', identifier=0x10050000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 535sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 536 537packetsVCan0 = sock0.sniff(timeout=0.1, verbose=False, count=4) 538packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=6) 539assert len(packetsVCan0) == 4 540assert len(packetsVCan1) == 6 541 542sock0.close() 543sock1.close() 544 545threadBridge.join(timeout=5) 546 547=bridge and sniff setup vcan0 package remove 548 549 550sock0 = CANSocket(channel='vcan0') 551sock1 = CANSocket(channel='vcan1') 552 553bridgeStarted = threading.Event() 554 555def bridgeWithRemovePackageFromVCan0ToVCan1(): 556 global bridgeStarted 557 bSock0 = CANSocket(channel="vcan0") 558 bSock1 = CANSocket(channel="vcan1") 559 def pnr(pkt): 560 if(pkt.identifier == 0x10020000): 561 pkt = None 562 else: 563 pkt = pkt 564 return pkt 565 bridgeStarted.set() 566 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnr, timeout=0.2, verbose=False, count=6) 567 bSock0.close() 568 bSock1.close() 569 570threadBridge = threading.Thread(target=bridgeWithRemovePackageFromVCan0ToVCan1) 571threadBridge.start() 572bridgeStarted.wait(timeout=5) 573 574sock0.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 575sock0.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 576sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 577sock0.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 578sock0.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 579sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 580 581packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=5) 582assert len(packetsVCan1) == 5 583 584sock0.close() 585sock1.close() 586 587threadBridge.join(timeout=5) 588 589=bridge and sniff setup vcan1 package remove 590 591 592sock0 = CANSocket(channel='vcan0') 593sock1 = CANSocket(channel='vcan1') 594 595bridgeStarted = threading.Event() 596 597def bridgeWithRemovePackageFromVCan1ToVCan0(): 598 global bridgeStarted 599 bSock0 = CANSocket(channel="vcan0") 600 bSock1 = CANSocket(channel="vcan1") 601 def pnr(pkt): 602 if(pkt.identifier == 0x10050000): 603 pkt = None 604 else: 605 pkt = pkt 606 return pkt 607 bridgeStarted.set() 608 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm21=pnr, timeout=0.2, verbose=False, count=4) 609 bSock0.close() 610 bSock1.close() 611 612threadBridge = threading.Thread(target=bridgeWithRemovePackageFromVCan1ToVCan0) 613threadBridge.start() 614bridgeStarted.wait(timeout=5) 615 616sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 617sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 618sock1.send(CAN(flags='extended', identifier=0x10050000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 619sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 620 621packetsVCan0 = sock0.sniff(timeout=0.1, verbose=False, count=3) 622assert len(packetsVCan0) == 3 623 624sock0.close() 625sock1.close() 626 627threadBridge.join(timeout=5) 628 629=bridge and sniff setup vcan0 and vcan1 package remove both directions 630 631 632sock0 = CANSocket(channel="vcan0") 633sock1 = CANSocket(channel="vcan1") 634 635bridgeStarted = threading.Event() 636 637def bridgeWithRemovePackageInBothDirections(): 638 global bridgeStarted 639 bSock0 = CANSocket(channel="vcan0") 640 bSock1 = CANSocket(channel="vcan1") 641 def pnrA(pkt): 642 if(pkt.identifier == 0x10020000): 643 pkt = None 644 else: 645 pkt = pkt 646 return pkt 647 def pnrB(pkt): 648 if (pkt.identifier == 0x10050000): 649 pkt = None 650 else: 651 pkt = pkt 652 return pkt 653 bridgeStarted.set() 654 bridge_and_sniff(if1=bSock0, if2=bSock1, xfrm12=pnrA, xfrm21=pnrB, timeout=0.2, verbose=False, count=10) 655 bSock0.close() 656 bSock1.close() 657 658threadBridge = threading.Thread(target=bridgeWithRemovePackageInBothDirections) 659threadBridge.start() 660bridgeStarted.wait(timeout=5) 661 662sock0.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 663sock0.send(CAN(flags='extended', identifier=0x10020000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 664sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 665sock0.send(CAN(flags='extended', identifier=0x10030000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 666sock0.send(CAN(flags='extended', identifier=0x10040000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 667sock0.send(CAN(flags='extended', identifier=0x10000000, length=8, data=b'\x01\x02\x03\x04\x05\x06\x07\x08')) 668sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 669sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 670sock1.send(CAN(flags='extended', identifier=0x10050000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 671sock1.send(CAN(flags='extended', identifier=0x10010000, length=8, data=b'\x01\x02\x03\x04\x05\x04\x05\x06')) 672 673packetsVCan0 = sock0.sniff(timeout=0.1, verbose=False, count=3) 674packetsVCan1 = sock1.sniff(timeout=0.1, verbose=False, count=5) 675 676assert len(packetsVCan0) == 3 677assert len(packetsVCan1) == 5 678 679sock0.close() 680sock1.close() 681 682threadBridge.join(timeout=5) 683 684= Delete vcan interfaces 685 686if 0 != call(["sudo", "ip", "link", "delete", "vcan0"]): 687 raise Exception("vcan0 could not be deleted") 688 689if 0 != call(["sudo", "ip", "link", "delete", "vcan1"]): 690 raise Exception("vcan1 could not be deleted") 691