\r
import io.netty.buffer.ByteBuf;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
\r
private static Augmentation<Action> createNwAddressAugmentationAndPad(final ByteBuf input) {\r
IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();\r
- List<String> groups = new ArrayList<>();\r
- for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {\r
- groups.add(Short.toString(input.readUnsignedByte()));\r
- }\r
- ipBuilder.setIpAddress(new Ipv4Address(ByteBufUtils.DOT_JOINER.join(groups)));\r
+ ipBuilder.setIpAddress(new Ipv4Address(ByteBufUtils.readIpv4Address(input)));\r
return ipBuilder.build();\r
}\r
\r
\r
import io.netty.buffer.ByteBuf;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
\r
private static void addIpv4AddressAugmentation(final MatchEntriesBuilder builder, final ByteBuf input) {\r
Ipv4AddressMatchEntryBuilder ipv4AddressBuilder = new Ipv4AddressMatchEntryBuilder();\r
- List<String> groups = new ArrayList<>();\r
- for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {\r
- groups.add(Short.toString(input.readUnsignedByte()));\r
- }\r
- ipv4AddressBuilder.setIpv4Address(new Ipv4Address(ByteBufUtils.DOT_JOINER.join(groups)));\r
+ ipv4AddressBuilder.setIpv4Address(new Ipv4Address(ByteBufUtils.readIpv4Address(input)));\r
builder.addAugmentation(Ipv4AddressMatchEntry.class, ipv4AddressBuilder.build());\r
}\r
}\r
\r
import io.netty.buffer.ByteBuf;\r
\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
\r
private static void addIpv6AddressAugmentation(final MatchEntriesBuilder builder, final ByteBuf input) {\r
Ipv6AddressMatchEntryBuilder ipv6AddressBuilder = new Ipv6AddressMatchEntryBuilder();\r
- List<String> groups = new ArrayList<>();\r
- for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV6_ADDRESS; i++) {\r
- groups.add(String.format("%04X", input.readUnsignedShort()));\r
- }\r
- ipv6AddressBuilder.setIpv6Address(new Ipv6Address(ByteBufUtils.COLON_JOINER.join(groups)));\r
+ ipv6AddressBuilder.setIpv6Address(new Ipv6Address(ByteBufUtils.readIpv6Address(input)));\r
builder.addAugmentation(Ipv6AddressMatchEntry.class, ipv6AddressBuilder.build());\r
}\r
}\r
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import com.google.common.base.Joiner;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
*/
public abstract class ByteBufUtils {
public static final Splitter DOT_SPLITTER = Splitter.on('.');
- public static final Joiner DOT_JOINER = Joiner.on(".");
public static final Splitter COLON_SPLITTER = Splitter.on(':');
- public static final Joiner COLON_JOINER = Joiner.on(":");
private static final char[] HEX_CHARS = "0123456789ABCDEF".toCharArray();
/**
return result;
}
- private static final void appendByte(final StringBuilder sb, final byte b) {
+ private static final void appendHexByte(final StringBuilder sb, final byte b) {
final int v = UnsignedBytes.toInt(b);
sb.append(HEX_CHARS[v >> 4]);
sb.append(HEX_CHARS[v & 15]);
}
+ private static void appendHexUnsignedShort(final StringBuilder sb, final int val) {
+ sb.append(ByteBufUtils.HEX_CHARS[(val >> 12) & 15]);
+ sb.append(ByteBufUtils.HEX_CHARS[(val >> 8) & 15]);
+ sb.append(ByteBufUtils.HEX_CHARS[(val >> 4) & 15]);
+ sb.append(ByteBufUtils.HEX_CHARS[ val & 15]);
+ }
+
/**
* Converts a MAC address represented in bytes to String
* @param address
final StringBuilder sb = new StringBuilder(17);
- appendByte(sb, address[0]);
+ appendHexByte(sb, address[0]);
for (int i = 1; i < EncodeConstants.MAC_ADDRESS_LENGTH; i++) {
sb.append(':');
- appendByte(sb, address[i]);
+ appendHexByte(sb, address[i]);
}
return sb.toString();
return new String(name).trim();
}
+ /**
+ * Read an IPv4 address from a buffer and format it into dotted-quad string.
+ *
+ * @param buf Input buffer
+ * @return Dotted-quad string
+ */
+ public static String readIpv4Address(final ByteBuf buf) {
+ final StringBuilder sb = new StringBuilder(EncodeConstants.GROUPS_IN_IPV4_ADDRESS * 4 - 1);
+
+ sb.append(buf.readUnsignedByte());
+ for (int i = 1; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
+ sb.append('.');
+ sb.append(buf.readUnsignedByte());
+ }
+
+ return sb.toString();
+ }
+
+ /**
+ * Read an IPv6 address from a buffer and format it into a string of eight groups of four
+ * hexadecimal digits separated by colons.
+ *
+ * @param buf Input buffer
+ * @return IPv6 address in string format
+ */
+ public static String readIpv6Address(final ByteBuf buf) {
+ final StringBuilder sb = new StringBuilder(EncodeConstants.GROUPS_IN_IPV6_ADDRESS * 5 - 1);
+
+ appendHexUnsignedShort(sb, buf.readUnsignedShort());
+ for (int i = 1; i < EncodeConstants.GROUPS_IN_IPV6_ADDRESS; i++) {
+ sb.append(':');
+ appendHexUnsignedShort(sb, buf.readUnsignedShort());
+ }
+
+ return sb.toString();
+ }
}
import io.netty.buffer.ByteBuf;
-import java.util.ArrayList;
-import java.util.List;
-
import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
builder.setNwTos(input.readUnsignedByte());
builder.setNwProto(input.readUnsignedByte());
input.skipBytes(PADDING_IN_MATCH_2);
- List<String> srcGroups = new ArrayList<>();
- for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
- srcGroups.add(Short.toString(input.readUnsignedByte()));
- }
- builder.setNwSrc(new Ipv4Address(ByteBufUtils.DOT_JOINER.join(srcGroups)));
- List<String> dstGroups = new ArrayList<>();
- for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {
- dstGroups.add(Short.toString(input.readUnsignedByte()));
- }
- builder.setNwDst(new Ipv4Address(ByteBufUtils.DOT_JOINER.join(dstGroups)));
+ builder.setNwSrc(new Ipv4Address(ByteBufUtils.readIpv4Address(input)));
+ builder.setNwDst(new Ipv4Address(ByteBufUtils.readIpv4Address(input)));
builder.setTpSrc(input.readUnsignedShort());
builder.setTpDst(input.readUnsignedShort());
return builder.build();