1# PIM Related regression tests 2# 3# Type the following command to launch start the tests: 4# $ test/run_tests -P "load_contrib('pim')" -t test/contrib/pim.uts 5 6+ pim 7 8= PIMv2 Hello - instantiation 9 10hello_data = b'\x01\x00^\x00\x00\r\x00\xd0\xcb\x00\xba\xe4\x08\x00E\xc0\x00BY\xf9\x00\x00\x01gTe\x15\x15\x15\x15\xe0\x00\x00\r \x00\xa55\x00\x01\x00\x02\x00i\x00\x13\x00\x04\x00\x00\x00\x00\x00\x02\x00\x04\x01\xf4\t\xc4\x00\x14\x00\x04\x00\x00\x00\x00' 11 12hello_pkt = Ether(hello_data) 13 14assert (hello_pkt[PIMv2Hdr].version == 2) 15assert (hello_pkt[PIMv2Hdr].type == 0) 16assert (len(hello_pkt[PIMv2Hello].option) == 4) 17assert (hello_pkt[PIMv2Hello].option[0][PIMv2HelloHoldtime].type == 1) 18assert (hello_pkt[PIMv2Hello].option[0][PIMv2HelloHoldtime].holdtime == 105) 19assert (hello_pkt[PIMv2Hello].option[1][PIMv2HelloDRPriority].type == 19) 20assert (hello_pkt[PIMv2Hello].option[1][PIMv2HelloDRPriority].dr_priority == 0) 21assert (hello_pkt[PIMv2Hello].option[2][PIMv2HelloLANPruneDelay].type == 2) 22assert (hello_pkt[PIMv2Hello].option[2][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].t == 0) 23assert (hello_pkt[PIMv2Hello].option[2][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].propagation_delay == 500) 24assert (hello_pkt[PIMv2Hello].option[2][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].override_interval == 2500) 25assert (hello_pkt[PIMv2Hello].option[3][PIMv2HelloGenerationID].type == 20) 26 27repr(PIMv2HelloLANPruneDelayValue(t=1)) 28 29= PIMv2 Join/Prune - instantiation 30 31jp_data = b'\x01\x00^\x00\x00\r\x00\xd0\xcb\x00\xba\xe4\x08\x00E\xc0\x00rY\xfb\x00\x00\x01gT3\x15\x15\x15\x15\xe0\x00\x00\r#\x00\x1b\x18\x01\x00\x15\x15\x15\x16\x00\x04\x00\xd2\x01\x00\x00 \xef\x01\x01\x0b\x00\x01\x00\x00\x01\x00\x07 \x16\x16\x16\x15\x01\x00\x00 \xef\x01\x01\x0c\x00\x01\x00\x00\x01\x00\x07 \x16\x16\x16\x15\x01\x00\x00 \xef\x01\x01\x0b\x00\x00\x00\x01\x01\x00\x07 \x16\x16\x16\x15\x01\x00\x00 \xef\x01\x01\x0c\x00\x00\x00\x01\x01\x00\x07 \x16\x16\x16\x15' 32 33jp_pkt = Ether(jp_data) 34 35assert (jp_pkt[PIMv2Hdr].version == 2) 36assert (jp_pkt[PIMv2Hdr].type == 3) 37assert (jp_pkt[PIMv2JoinPrune].up_addr_family == 1) 38assert (jp_pkt[PIMv2JoinPrune].up_encoding_type == 0) 39assert (jp_pkt[PIMv2JoinPrune].up_neighbor_ip == "21.21.21.22") 40assert (jp_pkt[PIMv2JoinPrune].reserved == 0) 41assert (jp_pkt[PIMv2JoinPrune].num_group == 4) 42assert (jp_pkt[PIMv2JoinPrune].holdtime == 210) 43assert (jp_pkt[PIMv2JoinPrune].num_group == len(jp_pkt[PIMv2JoinPrune].jp_ips)) 44assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].addr_family == 1) 45assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].encoding_type == 0) 46assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].bidirection == 0) 47assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].reserved == 0) 48assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].admin_scope_zone == 0) 49assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].mask_len == 32) 50assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].gaddr == "239.1.1.11") 51assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].num_joins == 1) 52assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].num_joins == len(jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips)) 53assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].addr_family == 1) 54assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].encoding_type == 0) 55assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].rsrvd == 0) 56assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].sparse == 1) 57assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].wildcard == 1) 58assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].rpt == 1) 59assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].mask_len == 32) 60assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].src_ip == "22.22.22.21") 61assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].num_prunes == 0) 62assert (jp_pkt[PIMv2JoinPrune].jp_ips[0].num_prunes == len(jp_pkt[PIMv2JoinPrune].jp_ips[0].prune_ips)) 63assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].addr_family == 1) 64assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].encoding_type == 0) 65assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].bidirection == 0) 66assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].reserved == 0) 67assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].admin_scope_zone == 0) 68assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].mask_len == 32) 69assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].gaddr == "239.1.1.11") 70assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].num_joins == 0) 71assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].num_joins == len(jp_pkt[PIMv2JoinPrune].jp_ips[2].join_ips)) 72assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].num_prunes == 1) 73assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].num_prunes == len(jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips)) 74assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].addr_family == 1) 75assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].encoding_type == 0) 76assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].rsrvd == 0) 77assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].sparse == 1) 78assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].wildcard == 1) 79assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].rpt == 1) 80assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].mask_len == 32) 81assert (jp_pkt[PIMv2JoinPrune].jp_ips[2].prune_ips[0][PIMv2PruneAddrs].src_ip == "22.22.22.21") 82 83= PIMv2 Hello - build 84 85hello_delay_pkt = Ether(dst="01:00:5e:00:00:0d", src="00:d0:cb:00:ba:e4")/IP(version=4, ihl=5, tos=0xc0, id=23037, ttl=1, proto=103, src="21.21.21.21", dst="224.0.0.13")/\ 86 PIMv2Hdr(version=2, type=0, reserved=0)/\ 87 PIMv2Hello(option=[PIMv2HelloHoldtime(type=1, holdtime=105), PIMv2HelloDRPriority(type=19, dr_priority=0), 88 PIMv2HelloLANPruneDelay(type=2, value=[PIMv2HelloLANPruneDelayValue(t=0, propagation_delay=500, override_interval=2500)]), 89 PIMv2HelloGenerationID(type=20, generation_id=459007194)]) 90 91assert raw(hello_delay_pkt) == b'\x01\x00^\x00\x00\r\x00\xd0\xcb\x00\xba\xe4\x08\x00E\xc0\x006Y\xfd\x00\x00\x01gTm\x15\x15\x15\x15\xe0\x00\x00\r \x00\xd3p\x00\x01\x00\x02\x00i\x00\x13\x00\x04\x00\x00\x00\x00\x00\x02\x00\x04\x01\xf4\t\xc4\x00\x14\x00\x04\x1b[\xe4\xda' 92 93hello_refresh_pkt = Ether(dst="01:00:5e:00:00:0d", src="c2:01:52:72:00:00")/IP(version=4, ihl=5, tos=0xc0, id=121, ttl=1, proto=103, src="10.0.0.1", dst="224.0.0.13")/\ 94 PIMv2Hdr(version=2, type=0, reserved=0)/\ 95 PIMv2Hello(option=[PIMv2HelloHoldtime(type=1, holdtime=105), PIMv2HelloGenerationID(type=20, generation_id=3613938422), 96 PIMv2HelloDRPriority(type=19, dr_priority=1), 97 PIMv2HelloStateRefresh(type=21, value=[PIMv2HelloStateRefreshValue(version=1, interval=0, reserved=0)])]) 98 99assert raw(hello_refresh_pkt) == b'\x01\x00^\x00\x00\r\xc2\x01Rr\x00\x00\x08\x00E\xc0\x006\x00y\x00\x00\x01g\xce\x1a\n\x00\x00\x01\xe0\x00\x00\r \x00\xb3\xeb\x00\x01\x00\x02\x00i\x00\x14\x00\x04\xd7hR\xf6\x00\x13\x00\x04\x00\x00\x00\x01\x00\x15\x00\x04\x01\x00\x00\x00' 100 101= PIMv2 Join/Prune - build 102 103join_pkt = Ether(dst="01:00:5e:00:00:0d", src="c2:02:3d:80:00:01")/IP(version=4, ihl=5, tos=0xc0, id=139, ttl=1, proto=103, src="10.0.0.14", dst="224.0.0.13")/\ 104 PIMv2Hdr(version=2, type=3, reserved=0)/\ 105 PIMv2JoinPrune(up_addr_family=1, up_encoding_type=0, up_neighbor_ip="10.0.0.13", reserved=0, num_group=1, holdtime=210, 106 jp_ips=[PIMv2GroupAddrs(addr_family=1, encoding_type=0, bidirection=0, reserved=0, admin_scope_zone=0, 107 mask_len=32, gaddr="239.123.123.123", 108 join_ips=[PIMv2JoinAddrs(addr_family=1, encoding_type=0, rsrvd=0, sparse=1, wildcard=1, 109 rpt=1, mask_len=32, src_ip="1.1.1.1")], 110 prune_ips=[]) 111 ] ) 112 113 114assert raw(join_pkt) == b'\x01\x00^\x00\x00\r\xc2\x02=\x80\x00\x01\x08\x00E\xc0\x006\x00\x8b\x00\x00\x01g\xcd\xfb\n\x00\x00\x0e\xe0\x00\x00\r#\x00Z\xe5\x01\x00\n\x00\x00\r\x00\x01\x00\xd2\x01\x00\x00 \xef{{{\x00\x01\x00\x00\x01\x00\x07 \x01\x01\x01\x01' 115 116 117 118prune_pkt = Ether(dst="01:00:5e:00:00:0d", src="c2:02:3d:80:00:01")/IP(version=4, ihl=5, tos=0xc0, id=139, ttl=1, proto=103, src="10.0.0.2", dst="224.0.0.13")/\ 119 PIMv2Hdr(version=2, type=3, reserved=0)/\ 120 PIMv2JoinPrune(up_addr_family=1, up_encoding_type=0, up_neighbor_ip="10.0.0.1", reserved=0, num_group=1, holdtime=210, 121 jp_ips=[PIMv2GroupAddrs(addr_family=1, encoding_type=0, bidirection=0, reserved=0, admin_scope_zone=0, 122 mask_len=32, gaddr="239.123.123.123", 123 prune_ips=[PIMv2PruneAddrs(addr_family=1, encoding_type=0, rsrvd=0, sparse=0, wildcard=0, rpt=0, 124 mask_len=32, src_ip="172.16.40.10")]) 125 ] 126 ) 127 128assert raw(prune_pkt) == b'\x01\x00^\x00\x00\r\xc2\x02=\x80\x00\x01\x08\x00E\xc0\x006\x00\x8b\x00\x00\x01g\xce\x07\n\x00\x00\x02\xe0\x00\x00\r#\x00\x8f\xd8\x01\x00\n\x00\x00\x01\x00\x01\x00\xd2\x01\x00\x00 \xef{{{\x00\x00\x00\x01\x01\x00\x00 \xac\x10(\n' 129 130 131 132 133 134#################################################################################### 135# IPv6 added 136#################################################################################### 137 138 139= IPv6 PIMv2 Hello - instantiation 140 141hello_data6 = b'33\x00\x00\x00\r\x02\x00\x00\x00\x00\x01\x86\xddk\x80\x00\x00\x008g\x01\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r \x00\xe4G\x00\x01\x00\x02\x00i\x00\x02\x00\x04\x01\xf4\t\xc4\x00\x13\x00\x04\x00\x00\x00\x01\x00\x14\x00\x04:I\x8b\xa3\x00\x18\x00\x12\x02\x00 \x01\xa7\xff@\n"\t\x00\x00\x00\x00\x00\x00\x00\x02' 142 143hello_pkt6 = Ether(hello_data6) 144 145assert (hello_pkt6[PIMv2Hdr].version == 2) 146assert (hello_pkt6[PIMv2Hdr].type == 0) 147assert (len(hello_pkt6[PIMv2Hello].option) == 5) 148assert (hello_pkt6[PIMv2Hello].option[0][PIMv2HelloHoldtime].type == 1) 149assert (hello_pkt6[PIMv2Hello].option[0][PIMv2HelloHoldtime].holdtime == 105) 150assert (hello_pkt6[PIMv2Hello].option[1][PIMv2HelloLANPruneDelay].type == 2) 151assert (hello_pkt6[PIMv2Hello].option[1][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].t == 0) 152assert (hello_pkt6[PIMv2Hello].option[1][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].propagation_delay == 500) 153assert (hello_pkt6[PIMv2Hello].option[1][PIMv2HelloLANPruneDelay].value[0][PIMv2HelloLANPruneDelayValue].override_interval == 2500) 154assert (hello_pkt6[PIMv2Hello].option[2][PIMv2HelloDRPriority].type == 19) 155assert (hello_pkt6[PIMv2Hello].option[2][PIMv2HelloDRPriority].dr_priority == 1) 156assert (hello_pkt6[PIMv2Hello].option[3][PIMv2HelloGenerationID].type == 20) 157 158repr(PIMv2HelloLANPruneDelayValue(t=1)) 159 160= IPv6 PIMv2 Join/Prune - instantiation 161 162jp_data6join = b'33\x00\x00\x00\r\x02\x00\x00\x00\x00\x01\x86\xddk\x80\x00\x00\x00Fg\x01\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r#\x00\xc6X\x02\x00\xfe\x80\x00\x00\x00\x00\x00\x00\xfc\x87\xff\xff\xfe\x00\x01A\x00\x01\x00\xd2\x02\x00\x00\x80\xff>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x01\x00\x01\x00\x00\x02\x00\x04\x80$\x04\x80\x00\x00\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x01' 163 164jp_pkt6 = Ether(jp_data6join) 165 166assert (jp_pkt6[PIMv2Hdr].version == 2) 167assert (jp_pkt6[PIMv2Hdr].type == 3) 168assert (jp_pkt6[PIMv2JoinPrune].up_addr_family == 2) 169assert (jp_pkt6[PIMv2JoinPrune].up_encoding_type == 0) 170assert (jp_pkt6[PIMv2JoinPrune].up_neighbor_ip == 'fe80::fc87:ffff:fe00:141') 171assert (jp_pkt6[PIMv2JoinPrune].reserved == 0) 172assert (jp_pkt6[PIMv2JoinPrune].num_group == 1) 173assert (jp_pkt6[PIMv2JoinPrune].holdtime == 210) 174assert (jp_pkt6[PIMv2JoinPrune].num_group == len(jp_pkt6[PIMv2JoinPrune].jp_ips)) 175assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].addr_family == 2) 176assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].encoding_type == 0) 177assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].bidirection == 0) 178assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].reserved == 0) 179assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].admin_scope_zone == 0) 180assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].mask_len == 128) 181assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].gaddr == 'ff3e::8000:1') 182assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_joins == 1) 183assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_joins == len(jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips)) 184assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].addr_family == 2) 185assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].encoding_type == 0) 186assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].rsrvd == 0) 187assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].sparse == 1) 188assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].wildcard == 0) 189assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].rpt == 0) 190assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].mask_len == 128) 191assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips[0][PIMv2JoinAddrs].src_ip == '2404:8000:1:f001::1') 192assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_prunes == 0) 193assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_prunes == len(jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips)) 194 195 196 197jp_data6prune = b'33\x00\x00\x00\r\x02\x00\x00\x00\x00\x01\x86\xddk\x80\x00\x00\x00Fg\x01\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe\x00\x00\x01\xff\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\r#\x00\xc6X\x02\x00\xfe\x80\x00\x00\x00\x00\x00\x00\xfc\x87\xff\xff\xfe\x00\x01A\x00\x01\x00\xd2\x02\x00\x00\x80\xff>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x01\x00\x00\x00\x01\x02\x00\x04\x80$\x04\x80\x00\x00\x01\xf0\x01\x00\x00\x00\x00\x00\x00\x00\x01' 198 199jp_pkt6 = Ether(jp_data6prune) 200 201assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].addr_family == 2) 202assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].encoding_type == 0) 203assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].bidirection == 0) 204assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].reserved == 0) 205assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].admin_scope_zone == 0) 206assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].mask_len == 128) 207assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].gaddr == 'ff3e::8000:1') 208assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_joins == 0) 209assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_joins == len(jp_pkt6[PIMv2JoinPrune].jp_ips[0].join_ips)) 210assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_prunes == 1) 211assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].num_prunes == len(jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips)) 212assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].addr_family == 2) 213assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].encoding_type == 0) 214assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].rsrvd == 0) 215assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].sparse == 1) 216assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].wildcard == 0) 217assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].rpt == 0) 218assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].mask_len == 128) 219assert (jp_pkt6[PIMv2JoinPrune].jp_ips[0].prune_ips[0][PIMv2PruneAddrs].src_ip == '2404:8000:1:f001::1') 220 221 222 223 224= IPv6 PIMv2 Hello - build 225 226hello_delay_pkt6 = Ether(dst='33:33:00:00:00:0d', src='02:00:00:00:00:01')/ \ 227 IPv6(tc=0xb8, nh=103, hlim=1, src='fe80::ff:fe00:1', dst='ff02::d')/ \ 228 PIMv2Hdr()/ \ 229 PIMv2Hello(option=[ \ 230 PIMv2HelloHoldtime(holdtime=105), 231 PIMv2HelloLANPruneDelay(value=[PIMv2HelloLANPruneDelayValue(propagation_delay=500, override_interval=2500)]), 232 PIMv2HelloDRPriority(dr_priority=1), 233 PIMv2HelloGenerationID(generation_id=977898403), 234 PIMv2HelloAddrList(value=[PIMv2HelloAddrListValue(addr_family=2,prefix='2001:a7ff:400a:2209::2')]), 235 ]) 236 237 238assert raw(hello_delay_pkt6) == hello_data6 239 240 241 242 243 244= IPv6 PIMv2 Join/Prune - build 245 246 247join_pkt6 = Ether(dst='33:33:00:00:00:0d', src='02:00:00:00:00:01')/\ 248 IPv6(tc=184, nh=103, hlim=1, src='fe80::ff:fe00:1', dst='ff02::d')/ \ 249 PIMv2Hdr(version=2, type=3, reserved=0)/ \ 250 PIMv2JoinPrune(jp_ips=[ \ 251 PIMv2GroupAddrs(join_ips=[ 252 PIMv2JoinAddrs(addr_family=2, sparse=1, wildcard=0, rpt=0, mask_len=128, src_ip='2404:8000:1:f001::1')], 253 addr_family=2, admin_scope_zone=0, mask_len=128, gaddr='ff3e::8000:1', 254 num_joins=1, num_prunes=0)], 255 up_addr_family=2, up_neighbor_ip='fe80::fc87:ffff:fe00:141', num_group=1, holdtime=210) 256 257 258assert raw(join_pkt6) == jp_data6join 259 260 261 262prune_pkt6 = Ether(dst='33:33:00:00:00:0d', src='02:00:00:00:00:01')/ \ 263 IPv6(tc=184, nh=103, hlim=1, src='fe80::ff:fe00:1', dst='ff02::d')/ \ 264 PIMv2Hdr()/ \ 265 PIMv2JoinPrune(jp_ips=[ \ 266 PIMv2GroupAddrs(prune_ips=[ \ 267 PIMv2PruneAddrs(addr_family=2, sparse=1, wildcard=0, rpt=0, mask_len=128, src_ip='2404:8000:1:f001::1')], 268 addr_family=2, mask_len=128, gaddr='ff3e::8000:1', 269 num_joins=0, num_prunes=1)], 270 up_addr_family=2, up_neighbor_ip='fe80::fc87:ffff:fe00:141', num_group=1, holdtime=210) 271 272 273assert raw(prune_pkt6) == jp_data6prune 274 275 276