Example #1
0
 @Override
 public String toString() {
   return toStringHelper(getClass())
       .add("hardwareType", Short.toString(hardwareType))
       .add("protocolType", Short.toString(protocolType))
       .add("hardwareAddressLength", Byte.toString(hardwareAddressLength))
       .add("protocolAddressLength", Byte.toString(protocolAddressLength))
       .add("opCode", Short.toString(opCode))
       .add("senderHardwareAddress", MacAddress.valueOf(senderHardwareAddress))
       .add("senderProtocolAddress", Ip4Address.valueOf(senderProtocolAddress))
       .add("targetHardwareAddress", MacAddress.valueOf(targetHardwareAddress))
       .add("targetProtocolAddress", Ip4Address.valueOf(targetProtocolAddress))
       .toString();
 }
Example #2
0
  /**
   * Converts a CIDR (slash) notation string (e.g., "10.1.0.0/16") into an IPv4 prefix.
   *
   * @param address an IP prefix in string form (e.g., "10.1.0.0/16")
   * @return an IPv4 prefix
   * @throws IllegalArgumentException if the arguments are invalid
   */
  public static Ip4Prefix valueOf(String address) {
    final String[] parts = address.split("/");
    if (parts.length != 2) {
      String msg =
          "Malformed IPv4 prefix string: " + address + "." + "Address must take form \"x.x.x.x/y\"";
      throw new IllegalArgumentException(msg);
    }
    Ip4Address ipAddress = Ip4Address.valueOf(parts[0]);
    int prefixLength = Integer.parseInt(parts[1]);

    return new Ip4Prefix(ipAddress, prefixLength);
  }
Example #3
0
  /**
   * Builds an ARP reply based on a request.
   *
   * @param srcIp the IP address to use as the reply source
   * @param srcMac the MAC address to use as the reply source
   * @param request the ARP request we got
   * @return an Ethernet frame containing the ARP reply
   */
  public static Ethernet buildArpReply(Ip4Address srcIp, MacAddress srcMac, Ethernet request) {

    Ethernet eth = new Ethernet();
    eth.setDestinationMACAddress(request.getSourceMAC());
    eth.setSourceMACAddress(srcMac);
    eth.setEtherType(Ethernet.TYPE_ARP);
    eth.setVlanID(request.getVlanID());

    ARP arp = new ARP();
    arp.setOpCode(ARP.OP_REPLY);
    arp.setProtocolType(ARP.PROTO_TYPE_IP);
    arp.setHardwareType(ARP.HW_TYPE_ETHERNET);

    arp.setProtocolAddressLength((byte) Ip4Address.BYTE_LENGTH);
    arp.setHardwareAddressLength((byte) Ethernet.DATALAYER_ADDRESS_LENGTH);
    arp.setSenderHardwareAddress(srcMac.toBytes());
    arp.setTargetHardwareAddress(request.getSourceMACAddress());

    arp.setTargetProtocolAddress(((ARP) request.getPayload()).getSenderProtocolAddress());
    arp.setSenderProtocolAddress(srcIp.toInt());

    eth.setPayload(arp);
    return eth;
  }
Example #4
0
 /**
  * Converts a byte array and a prefix length into an IPv4 prefix.
  *
  * @param address the IPv4 address value stored in network byte order
  * @param prefixLength the prefix length
  * @return an IPv4 prefix
  * @throws IllegalArgumentException if the prefix length value is invalid
  */
 public static Ip4Prefix valueOf(byte[] address, int prefixLength) {
   return new Ip4Prefix(Ip4Address.valueOf(address), prefixLength);
 }