1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
4 import io.netty.buffer.ByteBuf;
6 import java.util.HashMap;
9 import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
10 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.TableModInput;
15 * @author timotej.kubas
16 * @author michal.polkorab
18 public class TableModInputMessageFactory implements OFSerializer<TableModInput> {
20 private static final byte MESSAGE_TYPE = 17;
21 private static final byte PADDING_IN_TABLE_MOD_MESSAGE = 3;
22 private static final int MESSAGE_LENGTH = 16;
23 private static TableModInputMessageFactory instance;
25 private TableModInputMessageFactory() {
30 * @return singleton factory
32 public static TableModInputMessageFactory getInstance() {
34 instance = new TableModInputMessageFactory();
40 public void messageToBuffer(short version, ByteBuf out, TableModInput message) {
42 ByteBufUtils.writeOFHeader(instance, message, out);
43 out.writeByte(message.getTableId().getValue().byteValue());
44 ByteBufUtils.padBuffer(PADDING_IN_TABLE_MOD_MESSAGE, out);
45 out.writeInt(createConfigBitmask(message.getConfig()));
49 public int computeLength() {
50 return MESSAGE_LENGTH;
54 public byte getMessageType() {
60 * @return port config bitmask
62 private static int createConfigBitmask(PortConfig config) {
63 int configBitmask = 0;
64 Map<Integer, Boolean> portConfigMap = new HashMap<>();
65 portConfigMap.put(0, config.isPortDown());
66 portConfigMap.put(2, config.isNoRecv());
67 portConfigMap.put(5, config.isNoFwd());
68 portConfigMap.put(6, config.isNoPacketIn());
70 configBitmask = ByteBufUtils.fillBitMaskFromMap(portConfigMap);