2 * Copyright (c) 2016 Pantheon Technologies s.r.o. 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.openflowplugin.impl.protocol.deserialization.messages;
10 import static org.opendaylight.yangtools.yang.common.netty.ByteBufUtils.readUint32;
12 import io.netty.buffer.ByteBuf;
13 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
14 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.AsyncConfigMessage;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.AsyncConfigMessageBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.FlowRemovedMask;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.PacketInMask;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.PortStatusMask;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.async.config.FlowRemovedMaskBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.async.config.PacketInMaskBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.async.config.service.rev170619.async.config.PortStatusMaskBuilder;
24 public class AsyncConfigMessageDeserializer implements OFDeserializer<AsyncConfigMessage> {
26 public AsyncConfigMessage deserialize(final ByteBuf message) {
27 return new AsyncConfigMessageBuilder()
28 .setVersion(EncodeConstants.OF_VERSION_1_3)
29 .setXid(readUint32(message))
30 .setPacketInMask(new PacketInMaskBuilder()
31 .setMasterMask(deserializePacketInMask(message))
32 .setSlaveMask(deserializePacketInMask(message))
34 .setPortStatusMask(new PortStatusMaskBuilder()
35 .setMasterMask(deserializePortStatusMask(message))
36 .setSlaveMask(deserializePortStatusMask(message))
38 .setFlowRemovedMask(new FlowRemovedMaskBuilder()
39 .setMasterMask(deserializeFlowRemovedMask(message))
40 .setSlaveMask(deserializeFlowRemovedMask(message))
45 private static PacketInMask deserializePacketInMask(final ByteBuf byteBuf) {
46 final long mask = byteBuf.readUnsignedInt();
47 final boolean isNoMatch = (mask & 1) != 0;
48 final boolean isAction = (mask & 1 << 1) != 0;
49 final boolean isInvalidTtl = (mask & 1 << 2) != 0;
50 return new PacketInMask(isAction, isInvalidTtl, isNoMatch);
53 private static PortStatusMask deserializePortStatusMask(final ByteBuf byteBuf) {
54 final long mask = byteBuf.readUnsignedInt();
55 final boolean isAdd = (mask & 1) != 0;
56 final boolean isDelete = (mask & 1 << 1) != 0;
57 final boolean isModify = (mask & 1 << 2) != 0;
58 return new PortStatusMask(isAdd, isDelete, isModify);
61 private static FlowRemovedMask deserializeFlowRemovedMask(final ByteBuf byteBuf) {
62 final long mask = byteBuf.readUnsignedInt();
63 final boolean isIdleTimeout = (mask & 1) != 0;
64 final boolean isHardTimeout = (mask & 1 << 1) != 0;
65 final boolean isDelete = (mask & 1 << 2) != 0;
66 final boolean isGroupDelete = (mask & 1 << 3) != 0;
67 return new FlowRemovedMask(isDelete, isGroupDelete, isHardTimeout, isIdleTimeout);