protected abstract <T extends N> String toString(final List<T> list);
@Override
- protected final NumericOperand create(final Set<String> opValues) {
- return new NumericOperand(opValues.contains(AND_BIT_VALUE), opValues.contains(END_OF_LIST_VALUE), opValues.contains(EQUALS_VALUE), opValues.contains(GREATER_THAN_VALUE), opValues.contains(LESS_THAN_VALUE));
+ protected final NumericOperand create(final Set<String> operandValues) {
+ return new NumericOperand(operandValues.contains(AND_BIT_VALUE), operandValues.contains(END_OF_LIST_VALUE), operandValues.contains(EQUALS_VALUE), operandValues.contains(GREATER_THAN_VALUE), operandValues.contains(LESS_THAN_VALUE));
}
@Override
- public final void serialize(final NumericOperand op, final int length, final ByteBuf buffer) {
- final BitArray bs = new BitArray(OPERAND_LENGTH);
- bs.set(END_OF_LIST, op.isEndOfList());
- bs.set(AND_BIT, op.isAndBit());
- bs.set(LESS_THAN, op.isLessThan());
- bs.set(GREATER_THAN, op.isGreaterThan());
- bs.set(EQUAL, op.isEquals());
- final byte len = (byte) (Integer.numberOfTrailingZeros(length) << LENGTH_SHIFT);
- buffer.writeByte(bs.toByte() | len);
+ public final void serialize(final NumericOperand operand, final int length, final ByteBuf buffer) {
+ final BitArray operandValues = new BitArray(OPERAND_LENGTH);
+ operandValues.set(END_OF_LIST, operand.isEndOfList());
+ operandValues.set(AND_BIT, operand.isAndBit());
+ operandValues.set(LESS_THAN, operand.isLessThan());
+ operandValues.set(GREATER_THAN, operand.isGreaterThan());
+ operandValues.set(EQUAL, operand.isEquals());
+ final byte byteLength = (byte) (Integer.numberOfTrailingZeros(length) << LENGTH_SHIFT);
+ buffer.writeByte(operandValues.toByte() | byteLength);
}
@Override
- protected final NumericOperand parse(final byte op) {
- final BitArray bs = BitArray.valueOf(op);
- return new NumericOperand(bs.get(AND_BIT), bs.get(END_OF_LIST), bs.get(EQUAL), bs.get(GREATER_THAN), bs.get(LESS_THAN));
+ protected final NumericOperand parse(final byte operand) {
+ final BitArray operandValues = BitArray.valueOf(operand);
+ return new NumericOperand(operandValues.get(AND_BIT), operandValues.get(END_OF_LIST), operandValues.get(EQUAL), operandValues.get(GREATER_THAN), operandValues.get(LESS_THAN));
}
@Override
- protected String toString(final NumericOperand op, final boolean isFirst) {
+ protected String toString(final NumericOperand operand, final boolean isFirst) {
final StringBuilder buffer = new StringBuilder();
- if (!op.isAndBit() && !isFirst) {
- buffer.append("or ");
- }
- if (op.isAndBit()) {
+ if (operand.isAndBit()) {
buffer.append("and ");
+ } else if (!isFirst) {
+ buffer.append("or ");
}
- if (op.isLessThan() && op.isEquals()) {
- buffer.append("is less than or equal to ");
+ if (operand.isLessThan()) {
+ buffer.append("is less than ");
+ if (operand.isEquals()) {
+ buffer.append("or equals to ");
+ }
return buffer.toString();
- } else if (op.isGreaterThan() && op.isEquals()) {
- buffer.append("is greater than or equal to ");
+ }
+ if (operand.isGreaterThan()) {
+ buffer.append("is greater than ");
+ if (operand.isEquals()) {
+ buffer.append("or equals to ");
+ }
return buffer.toString();
}
- if (op.isEquals()) {
+ if (operand.isEquals()) {
buffer.append("equals to ");
}
- if (op.isLessThan()) {
- buffer.append("is less than ");
- }
- if (op.isGreaterThan()) {
- buffer.append("is greater than ");
- }
return buffer.toString();
}
}
private static final byte[] UNREACHED_NLRI = new byte[] { 0x1B,
07, 4, 2, (byte) 0x84, 3,
- 0x08, 06, 04, (byte) 0x80, 05,
+ 0x08, 4, 04, (byte) 0x80, 05,
0x09, 0x12, 04, 01, (byte) 0x91, 0x56, (byte) 0xb1,
- 0x0a, (byte) 0x96, (byte) 0xde, (byte) 0xad,
- 0x0b, (byte) 0x86, 0x2a,
+ 0x0a, (byte) 0x94, (byte) 0xde, (byte) 0xad,
+ 0x0b, (byte) 0x82, 0x2a,
0x0c, (byte) 0x81, (byte) 0x0e};
private static final FSIpv4NlriParser FS_PARSER = new FSIpv4NlriParser();
assertEquals("all packets to 10.0.1.0/32", FS_PARSER.stringNlri(flows.get(0)));
assertEquals("all packets from 1.2.3.4/32", FS_PARSER.stringNlri(flows.get(1)));
assertEquals("all packets where IP protocol equals to 6 ", FS_PARSER.stringNlri(flows.get(2)));
- assertEquals("all packets where port is greater than or equal to 137 and is less than or equal to 139 or equals to 8080 ", FS_PARSER.stringNlri(flows.get(3)));
+ assertEquals("all packets where port is greater than or equals to 137 and is less than or equals to 139 or equals to 8080 ", FS_PARSER.stringNlri(flows.get(3)));
assertEquals("all packets where destination port is greater than 4089 or equals to 179 ", FS_PARSER.stringNlri(flows.get(4)));
assertEquals("all packets where source port equals to 8080 ", FS_PARSER.stringNlri(flows.get(5)));
}
builder.setFlowspecType(icmpType);
fs.add(builder.build());
- final List<Codes> codes = Lists.newArrayList(new CodesBuilder().setOp(new NumericOperand(false, false, false, true, true)).setValue((short) 4).build(),
+ final List<Codes> codes = Lists.newArrayList(new CodesBuilder().setOp(new NumericOperand(false, false, false, false, true)).setValue((short) 4).build(),
new CodesBuilder().setOp(new NumericOperand(false, true, false, false, false)).setValue((short) 5).build());
final IcmpCodeCase icmpCode = new IcmpCodeCaseBuilder().setCodes(codes).build();
builder.setFlowspecType(icmpCode);
builder.setFlowspecType(tcp);
fs.add(builder.build());
- final List<PacketLengths> packets = Lists.newArrayList(new PacketLengthsBuilder().setOp(new NumericOperand(false, true, false, true, true)).setValue(57005).build());
+ final List<PacketLengths> packets = Lists.newArrayList(new PacketLengthsBuilder().setOp(new NumericOperand(false, true, false, false, true)).setValue(57005).build());
final PacketLengthCase packet = new PacketLengthCaseBuilder().setPacketLengths(packets).build();
builder.setFlowspecType(packet);
fs.add(builder.build());
- final List<Dscps> dscps = Lists.newArrayList(new DscpsBuilder().setOp(new NumericOperand(false, true, false, true, true)).setValue(new Dscp((short) 42)).build());
+ final List<Dscps> dscps = Lists.newArrayList(new DscpsBuilder().setOp(new NumericOperand(false, true, false, true, false)).setValue(new Dscp((short) 42)).build());
final DscpCase dscp = new DscpCaseBuilder().setDscps(dscps).build();
builder.setFlowspecType(dscp);
fs.add(builder.build());
assertArrayEquals(UNREACHED_NLRI, ByteArray.readAllBytes(buffer));
assertEquals("all packets where ICMP type is less than 2 or is less than 3 ", FS_PARSER.stringNlri(flows.get(0)));
- assertEquals("all packets where ICMP code is less than is greater than 4 or 5 ", FS_PARSER.stringNlri(flows.get(1)));
+ assertEquals("all packets where ICMP code is less than 4 or 5 ", FS_PARSER.stringNlri(flows.get(1)));
assertEquals("all packets where TCP flags is not 1025 or does match 22193 ", FS_PARSER.stringNlri(flows.get(2)));
- assertEquals("all packets where packet length is less than is greater than 57005 ", FS_PARSER.stringNlri(flows.get(3)));
- assertEquals("all packets where DSCP is less than is greater than 42 ", FS_PARSER.stringNlri(flows.get(4)));
+ assertEquals("all packets where packet length is less than 57005 ", FS_PARSER.stringNlri(flows.get(3)));
+ assertEquals("all packets where DSCP is greater than 42 ", FS_PARSER.stringNlri(flows.get(4)));
assertEquals("all packets where fragment does match 'IS FIRST' 'IS LAST' 'IS A' ", FS_PARSER.stringNlri(flows.get(5)));
}