2 * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.genius.arputil.test;
10 import java.math.BigInteger;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.SendToController;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.MatchBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
26 public final class ArpUtilTestUtil {
28 public static final BigInteger DPN_ID = BigInteger.ONE;
29 public static final BigInteger META_DATA = BigInteger.TEN;
30 public static final long PORT_NUMBER = 2;
31 public static final String URI = "2";
32 public static final String INTERFACE_NAME = "23701c04-7e58-4c65-9425-78a80d49a218";
33 private static final String[] OP_CODE = new String[]{"0 1", "0 2"}; //array to store opCodes
35 private ArpUtilTestUtil() {
38 public static PacketReceived createPayload(int oc) {
41 byte[] payload = bytePayload("1F 1F 1F 1F 1F 1F", // Destination MAC
42 "00 01 02 03 04 05", // Source MAC
43 "08 06", // Ethernet type
44 "0 1", // Hardware type
45 "8 0", // Protocol type
48 OP_CODE[oc], // Opcode
49 "00 01 02 03 04 05", // Sender MAC Address
50 "C0 A8 0 2", // Sender IP Address
51 "00 01 02 03 04 05", // Target MAC Address
52 "C0 A8 0 2" // Target IP Address
54 InstanceIdentifier<Node> iid = InstanceIdentifier.builder(Nodes.class)
55 .child(Node.class, new NodeKey(new NodeId("openflow:12345"))).build();
57 return new PacketReceivedBuilder().setPacketInReason(SendToController.class).setTableId(new TableId(ID))
58 .setPayload(payload).setIngress(new NodeConnectorRef(iid))
59 .setMatch(new MatchBuilder().setMetadata(new MetadataBuilder().setMetadata(META_DATA).build()).build())
63 private static byte[] bytePayload(String... contents) {
65 List<String[]> splitContents = new ArrayList<>();
67 for (String content : contents) {
68 String[] split = content.split(" ");
69 packetLength += split.length;
70 splitContents.add(split);
72 byte[] packet = new byte[packetLength];
74 for (String[] split : splitContents) {
75 for (String component : split) {
76 packet[index] = (byte) Integer.parseInt(component, 16);