Skip to content

Commit e55d8cf

Browse files
Merge pull request #99 from cisco-system-traffic-generator/ipv6ns
send more IPv6NS packets
2 parents 3f319e9 + ae61fde commit e55d8cf

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/main/java/com/cisco/trex/stateless/IPv6NeighborDiscoveryService.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,14 @@
5353
import org.pcap4j.packet.namednumber.IpVersion;
5454
import org.pcap4j.util.ByteArrays;
5555
import org.pcap4j.util.MacAddress;
56+
import org.slf4j.Logger;
57+
import org.slf4j.LoggerFactory;
5658

5759
public class IPv6NeighborDiscoveryService {
5860

5961
private static final EtherType QInQ =
6062
new EtherType((short) 0x88a8, "802.1Q Provider Bridge (Q-in-Q)");
61-
private static final int L3LENGTH = 40;
62-
private static final int L2LENGTH = 14;
63+
private static final Logger LOGGER = LoggerFactory.getLogger(IPv6NeighborDiscoveryService.class);
6364
private TRexClient tRexClient;
6465

6566
public IPv6NeighborDiscoveryService(TRexClient tRexClient) {
@@ -212,11 +213,10 @@ public EthernetPacket sendNeighborSolicitation(
212213
String dstIp) {
213214
long endTs = System.currentTimeMillis() + timeout * 1000;
214215

215-
if (dstMac == null) {
216-
dstMac = multicastMacFromIPv6(dstIp).toString();
217-
}
216+
final String multicastMac = dstMac != null ? dstMac : multicastMacFromIPv6(dstIp).toString();
218217

219-
Packet icmpv6NSPkt = buildICMPV6NSPkt(vlan, srcMac, dstMac, dstIp, srcIp);
218+
Packet icmpv6NSPkt = buildICMPV6NSPkt(vlan, srcMac, multicastMac, dstIp, srcIp);
219+
LOGGER.trace("Sending IPv6 Neighbor Solicitation packet:\n{}", icmpv6NSPkt);
220220
tRexClient.startStreamsIntermediate(portIdx, Arrays.asList(buildStream(icmpv6NSPkt)));
221221

222222
Predicate<EthernetPacket> ipV6NAPktFilter =
@@ -360,8 +360,8 @@ private static com.cisco.trex.stateless.model.Stream buildStream(
360360
0,
361361
0.0,
362362
new StreamMode(
363-
2,
364-
2,
363+
10,
364+
10,
365365
5,
366366
1.0,
367367
new StreamModeRate(StreamModeRate.Type.percentage, 100.0),
@@ -375,7 +375,7 @@ private static com.cisco.trex.stateless.model.Stream buildStream(
375375
null);
376376
}
377377

378-
private static Packet buildICMPV6NSPkt(
378+
static Packet buildICMPV6NSPkt(
379379
PortVlan vlan, String srcMac, String dstMac, String dstIp, String srcIp) {
380380
EthernetPacket.Builder ethBuilder = new EthernetPacket.Builder();
381381
try {

src/test/java/com/cisco/trex/stateless/IPv6NeighborDiscoveryServiceTest.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.cisco.trex.stateless;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertTrue;
45

6+
import com.cisco.trex.stateless.model.port.PortVlan;
7+
import java.util.ArrayList;
8+
import java.util.List;
59
import org.junit.Test;
10+
import org.pcap4j.packet.Packet;
611
import org.pcap4j.util.MacAddress;
712

813
public class IPv6NeighborDiscoveryServiceTest {
@@ -16,7 +21,25 @@ public void generateIPv6AddrFromMACTest() {
1621
@Test
1722
public void generateMulticastMacFromIPv6Test() {
1823
MacAddress multicastMac =
19-
IPv6NeighborDiscoveryService.multicastMacFromIPv6("fe80::4a5d:60ff:fee8:658f");
20-
assertEquals("33:33:ff:e8:65:8f", multicastMac.toString());
24+
IPv6NeighborDiscoveryService.multicastMacFromIPv6("fe80::4a5d:60ff:fee8:8f");
25+
assertEquals("33:33:ff:e8:00:8f", multicastMac.toString());
26+
multicastMac =
27+
IPv6NeighborDiscoveryService.multicastMacFromIPv6(
28+
"2001:FF00:0099:0000:0000:0010:EEEE:0011");
29+
assertEquals("33:33:ff:ee:00:11", multicastMac.toString());
30+
}
31+
32+
@Test
33+
public void buildICMPV6NSPktTest() {
34+
PortVlan vlan = new PortVlan();
35+
List<Integer> vlans = new ArrayList<>();
36+
vlans.add(10);
37+
vlan.setTags(vlans);
38+
String srcMac = "00:01:44:ff:01:01";
39+
String dstIp = "2001:FF00:0099:0000:0000:0010:EEEE:0011";
40+
String srcIp = "2001:FF00:0099:0000:0000:0010:EEEE:0010";
41+
final String dstMac = IPv6NeighborDiscoveryService.multicastMacFromIPv6(dstIp).toString();
42+
Packet pkt = IPv6NeighborDiscoveryService.buildICMPV6NSPkt(vlan, srcMac, dstMac, dstIp, srcIp);
43+
assertTrue(pkt.toString().contains("Checksum: 0x154a"));
2144
}
2245
}

0 commit comments

Comments
 (0)