1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
\r
4 import io.netty.buffer.ByteBuf;
\r
6 import java.util.HashMap;
\r
7 import java.util.Map;
\r
9 import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
\r
10 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
\r
11 import org.opendaylight.openflowjava.protocol.impl.util.OF10ActionsSerializer;
\r
12 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchSerializer;
\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlagsV10;
\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInput;
\r
17 * @author michal.polkorab
\r
20 public class OF10FlowModInputMessageFactory implements OFSerializer<FlowModInput> {
\r
22 private static final byte MESSAGE_TYPE = 14;
\r
23 private static final int MESSAGE_LENGTH = 72;
\r
25 private static OF10FlowModInputMessageFactory instance;
\r
27 private OF10FlowModInputMessageFactory() {
\r
32 * @return singleton factory
\r
34 public static synchronized OF10FlowModInputMessageFactory getInstance() {
\r
35 if(instance == null) {
\r
36 instance = new OF10FlowModInputMessageFactory();
\r
42 public void messageToBuffer(short version, ByteBuf out, FlowModInput message) {
\r
43 ByteBufUtils.writeOFHeader(instance, message, out);
\r
44 OF10MatchSerializer.encodeMatchV10(out, message.getMatchV10());
\r
45 out.writeLong(message.getCookie().longValue());
\r
46 out.writeShort(message.getCommand().getIntValue());
\r
47 out.writeShort(message.getIdleTimeout().intValue());
\r
48 out.writeShort(message.getHardTimeout().intValue());
\r
49 out.writeShort(message.getPriority());
\r
50 out.writeInt(message.getBufferId().intValue());
\r
51 out.writeShort(message.getOutPort().getValue().intValue());
\r
52 out.writeShort(createFlowModFlagsBitmask(message.getFlagsV10()));
\r
53 OF10ActionsSerializer.encodeActionsV10(out, message.getActionsList());
\r
57 public int computeLength(FlowModInput message) {
\r
58 return MESSAGE_LENGTH + OF10ActionsSerializer.computeActionsLength(message.getActionsList());
\r
62 public byte getMessageType() {
\r
63 return MESSAGE_TYPE;
\r
66 private static int createFlowModFlagsBitmask(FlowModFlagsV10 flags) {
\r
67 int flowModFlagBitmask = 0;
\r
68 Map<Integer, Boolean> flowModFlagsMap = new HashMap<>();
\r
69 flowModFlagsMap.put(0, flags.isOFPFFSENDFLOWREM());
\r
70 flowModFlagsMap.put(1, flags.isOFPFFCHECKOVERLAP());
\r
71 flowModFlagsMap.put(2, flags.isOFPFFEMERG());
\r
72 flowModFlagBitmask = ByteBufUtils.fillBitMaskFromMap(flowModFlagsMap);
\r
73 return flowModFlagBitmask;
\r