1# GXRP unit tests 2# 3# Type the following command to launch start the tests: 4# $ test/run_tests -P "load_contrib('gxrp')" -t test/contrib/gxrp.uts 5 6+ GVRP test 7 8= Construction test 9 10pkt = GVRP(vlan=2) 11assert pkt.vlan == 2 12assert pkt == GVRP(raw(pkt)) 13 14+ GMRP test 15 16= GMRP_GROUP Construction test 17 18pkt = GMRP_GROUP(addr="01:23:45:67:89:00") 19assert pkt.addr == "01:23:45:67:89:00" 20assert pkt == GMRP_GROUP(raw(pkt)) 21 22= GMRP_SERVICE Construction test 23 24pkt = GMRP_SERVICE(event="All Groups") 25assert pkt.event == 0 26pkt = GMRP_SERVICE(event="All Unregistered Groups") 27assert pkt.event == 1 28assert pkt == GMRP_SERVICE(raw(pkt)) 29 30+ GARP Attribute test 31 32= GMRP_GROUP Construction test 33 34pkt = GARP_ATTRIBUTE(event='LeaveAll') 35assert pkt.event == 0 36assert GARP_ATTRIBUTE(pkt.build()).len == 2 37assert len(pkt.build()) == 2 38pkt = GARP_ATTRIBUTE(event='JoinEmpty')/GVRP() 39assert pkt.event == 1 40assert GARP_ATTRIBUTE(pkt.build()).len == 4 41assert len(pkt.build()) == 4 42pkt = GARP_ATTRIBUTE(event='JoinIn')/GVRP() 43assert pkt.event == 2 44assert GARP_ATTRIBUTE(pkt.build()).len == 4 45assert len(pkt.build()) == 4 46pkt = GARP_ATTRIBUTE(event='LeaveEmpty')/GVRP() 47assert pkt.event == 3 48assert GARP_ATTRIBUTE(pkt.build()).len == 4 49assert len(pkt.build()) == 4 50pkt = GARP_ATTRIBUTE(event='LeaveIn')/GVRP() 51assert pkt.event == 4 52assert GARP_ATTRIBUTE(pkt.build()).len == 4 53assert len(pkt.build()) == 4 54pkt = GARP_ATTRIBUTE(event='Empty')/GVRP() 55assert pkt.event == 5 56assert GARP_ATTRIBUTE(pkt.build()).len == 4 57assert len(pkt.build()) == 4 58pkt = GARP_ATTRIBUTE(event='JoinEmpty')/GVRP() 59del pkt.payload 60assert pkt == GARP_ATTRIBUTE(event='JoinEmpty') 61assert GARP_ATTRIBUTE(raw(pkt)) == GARP_ATTRIBUTE(raw(GARP_ATTRIBUTE(event='JoinEmpty'))) 62assert len(pkt.build()) == 2 63 64= GVRP Stacking test 65 66pkt = Dot3(dst="01:80:c2:00:00:21")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP( 67 msgs=[GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=1), 68 GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=2)]), 69 GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=3), 70 GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=4)])]) 71assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 1 72assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 2 73assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 3 74assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 4 75pkt = Dot3(pkt.build()) 76assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 1 77assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 2 78assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GVRP].vlan == 3 79assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GVRP].vlan == 4 80 81= GMRP Stacking test 82 83pkt = Dot3(dst="01:80:c2:00:00:20")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP( 84 msgs=[GARP_MESSAGE(type = 1, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:01"), 85 GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:02")]), 86 GARP_MESSAGE(type = 2, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Groups"), 87 GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Unregistered Groups")])]) 88assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GMRP_GROUP].addr == "00:00:00:00:00:01" 89assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GMRP_GROUP].addr == "00:00:00:00:00:02" 90assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GMRP_SERVICE].event == 0 91assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GMRP_SERVICE].event == 1 92pkt = Dot3(pkt.build()) 93assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 1)[GMRP_GROUP].addr == "00:00:00:00:00:01" 94assert pkt.getlayer(GARP_MESSAGE, 1).getlayer(GARP_ATTRIBUTE, 2)[GMRP_GROUP].addr == "00:00:00:00:00:02" 95assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 1)[GMRP_SERVICE].event == 0 96assert pkt.getlayer(GARP_MESSAGE, 2).getlayer(GARP_ATTRIBUTE, 2)[GMRP_SERVICE].event == 1 97 98= GARP from pcap 99 100pkts = rdpcap(scapy_path("test/pcaps/gvrp.pcapng.gz")) 101for p in pkts: 102 if len(p[GARP_ATTRIBUTE].payload) > 0: 103 assert p[GVRP] is not None 104 105= GARP tshark check 106~ tshark 107 108import tempfile, os 109pkt = Dot3(dst="01:80:c2:00:00:21")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP( 110 msgs=[GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=1), 111 GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=2)]), 112 GARP_MESSAGE(attrs=[GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=3), 113 GARP_ATTRIBUTE(event='JoinIn')/GVRP(vlan=4)])]) 114 115fd, pcapfilename = tempfile.mkstemp() 116wrpcap(pcapfilename, pkt) 117rv = tcpdump(pcapfilename, prog=conf.prog.tshark, getfd=True, args=['-Y', 'gvrp'], dump=True, wait=True) 118assert rv != b"" 119os.close(fd) 120os.unlink(pcapfilename) 121 122= GARP tshark check 123~ tshark 124 125import tempfile, os 126pkt = Dot3(dst="01:80:c2:00:00:20")/LLC_GARP(dsap=0x42, ssap=0x42, ctrl=3)/GARP( 127 msgs=[GARP_MESSAGE(type = 1, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:01"), 128 GARP_ATTRIBUTE(event='JoinIn')/GMRP_GROUP(addr="00:00:00:00:00:02")]), 129 GARP_MESSAGE(type = 2, attrs=[GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Groups"), 130 GARP_ATTRIBUTE(event='JoinIn')/GMRP_SERVICE(event="All Unregistered Groups")])]) 131 132fd, pcapfilename = tempfile.mkstemp() 133wrpcap(pcapfilename, pkt) 134rv = tcpdump(pcapfilename, prog=conf.prog.tshark, getfd=True, args=['-Y', 'gmrp'], dump=True, wait=True) 135assert rv != b"" 136os.close(fd) 137os.unlink(pcapfilename) 138