* OF protocol versions: 1.3.
*/
public class GroupMessageSerializer extends AbstractMessageSerializer<GroupMessage> implements
- SerializerRegistryInjector {
+ SerializerRegistryInjector {
private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;
private static final byte PADDING_IN_BUCKET = 4;
+ private static final int OFPGC_ADD_OR_MOD = 32768;
+ private final boolean isGroupAddModEnabled;
private static final Comparator<Bucket> COMPARATOR = (bucket1, bucket2) -> {
if (bucket1.getBucketId() == null || bucket2.getBucketId() == null) {
private SerializerRegistry registry;
+ public GroupMessageSerializer(boolean isGroupAddModEnabled) {
+ this.isGroupAddModEnabled = isGroupAddModEnabled;
+ }
+
@Override
public void serialize(GroupMessage message, ByteBuf outBuffer) {
final int index = outBuffer.writerIndex();
super.serialize(message, outBuffer);
- outBuffer.writeShort(message.getCommand().getIntValue());
+ if (isGroupAddModEnabled) {
+ if (message.getCommand().equals(GroupModCommand.OFPGCADD)
+ || message.getCommand().equals(GroupModCommand.OFPGCMODIFY)) {
+ outBuffer.writeShort(OFPGC_ADD_OR_MOD);
+ } else {
+ outBuffer.writeShort(message.getCommand().getIntValue());
+ }
+ } else {
+ outBuffer.writeShort(message.getCommand().getIntValue());
+ }
outBuffer.writeByte(message.getGroupType().getIntValue());
outBuffer.writeZero(PADDING_IN_GROUP_MOD_MESSAGE);
outBuffer.writeInt(message.getGroupId().getValue().intValue());
outBuffer.setShort(bucketIndex, outBuffer.writerIndex() - bucketIndex);
}));
-
outBuffer.setShort(index + 2, outBuffer.writerIndex() - index);
}