Committed by
Gerrit Code Review
[ONOS-3551] Add implementation of resubmit and resubmit-table to
drivers Change-Id: Ib96f7f3197968f7e6642cf2368040f340763cef2
Showing
3 changed files
with
90 additions
and
28 deletions
| ... | @@ -96,13 +96,17 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou | ... | @@ -96,13 +96,17 @@ public class NiciraExtensionTreatmentInterpreter extends AbstractHandlerBehaviou |
| 96 | IPv4Address.of(tunnelDst.tunnelDst().toInt()))); | 96 | IPv4Address.of(tunnelDst.tunnelDst().toInt()))); |
| 97 | } | 97 | } |
| 98 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type())) { | 98 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type())) { |
| 99 | - // TODO this will be implemented later | 99 | + NiciraResubmit resubmit = (NiciraResubmit) extensionTreatment; |
| 100 | + return factory.actions().niciraResubmit((int) resubmit.inPort().toLong(), | ||
| 101 | + resubmit.table()); | ||
| 100 | } | 102 | } |
| 101 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type())) { | 103 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SPI.type())) { |
| 102 | // TODO this will be implemented later | 104 | // TODO this will be implemented later |
| 103 | } | 105 | } |
| 104 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT_TABLE.type())) { | 106 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT_TABLE.type())) { |
| 105 | - // TODO this will be implemented later | 107 | + NiciraResubmitTable resubmitTable = (NiciraResubmitTable) extensionTreatment; |
| 108 | + return factory.actions().niciraResubmitTable((int) resubmitTable.inPort().toLong(), | ||
| 109 | + resubmitTable.table()); | ||
| 106 | } | 110 | } |
| 107 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SI.type())) { | 111 | if (type.equals(ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_SET_NSH_SI.type())) { |
| 108 | // TODO this will be implemented later | 112 | // TODO this will be implemented later | ... | ... |
| ... | @@ -17,6 +17,8 @@ | ... | @@ -17,6 +17,8 @@ |
| 17 | package org.onosproject.driver.extensions; | 17 | package org.onosproject.driver.extensions; |
| 18 | 18 | ||
| 19 | import com.google.common.base.MoreObjects; | 19 | import com.google.common.base.MoreObjects; |
| 20 | +import com.google.common.collect.Maps; | ||
| 21 | + | ||
| 20 | import org.onlab.util.KryoNamespace; | 22 | import org.onlab.util.KryoNamespace; |
| 21 | import org.onosproject.net.PortNumber; | 23 | import org.onosproject.net.PortNumber; |
| 22 | import org.onosproject.net.flow.AbstractExtension; | 24 | import org.onosproject.net.flow.AbstractExtension; |
| ... | @@ -24,6 +26,8 @@ import org.onosproject.net.flow.instructions.ExtensionTreatment; | ... | @@ -24,6 +26,8 @@ import org.onosproject.net.flow.instructions.ExtensionTreatment; |
| 24 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType; | 26 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType; |
| 25 | import org.onosproject.store.serializers.PortNumberSerializer; | 27 | import org.onosproject.store.serializers.PortNumberSerializer; |
| 26 | 28 | ||
| 29 | +import java.util.HashMap; | ||
| 30 | +import java.util.Map; | ||
| 27 | import java.util.Objects; | 31 | import java.util.Objects; |
| 28 | 32 | ||
| 29 | import static com.google.common.base.Preconditions.checkNotNull; | 33 | import static com.google.common.base.Preconditions.checkNotNull; |
| ... | @@ -33,10 +37,14 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -33,10 +37,14 @@ import static com.google.common.base.Preconditions.checkNotNull; |
| 33 | */ | 37 | */ |
| 34 | public class NiciraResubmit extends AbstractExtension implements ExtensionTreatment { | 38 | public class NiciraResubmit extends AbstractExtension implements ExtensionTreatment { |
| 35 | 39 | ||
| 40 | + private static final short DEFAULT_TABLE_ID = 0; | ||
| 41 | + | ||
| 36 | private PortNumber inPort; | 42 | private PortNumber inPort; |
| 43 | + private short table; | ||
| 37 | 44 | ||
| 38 | private final KryoNamespace appKryo = new KryoNamespace.Builder() | 45 | private final KryoNamespace appKryo = new KryoNamespace.Builder() |
| 39 | .register(new PortNumberSerializer(), PortNumber.class) | 46 | .register(new PortNumberSerializer(), PortNumber.class) |
| 47 | + .register(Map.class).register(HashMap.class) | ||
| 40 | .register(byte[].class) | 48 | .register(byte[].class) |
| 41 | .build(); | 49 | .build(); |
| 42 | 50 | ||
| ... | @@ -45,6 +53,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -45,6 +53,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 45 | */ | 53 | */ |
| 46 | NiciraResubmit() { | 54 | NiciraResubmit() { |
| 47 | inPort = null; | 55 | inPort = null; |
| 56 | + table = DEFAULT_TABLE_ID; | ||
| 48 | } | 57 | } |
| 49 | 58 | ||
| 50 | /** | 59 | /** |
| ... | @@ -55,6 +64,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -55,6 +64,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 55 | public NiciraResubmit(PortNumber inPort) { | 64 | public NiciraResubmit(PortNumber inPort) { |
| 56 | checkNotNull(inPort); | 65 | checkNotNull(inPort); |
| 57 | this.inPort = inPort; | 66 | this.inPort = inPort; |
| 67 | + this.table = DEFAULT_TABLE_ID; | ||
| 58 | } | 68 | } |
| 59 | 69 | ||
| 60 | /** | 70 | /** |
| ... | @@ -66,6 +76,15 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -66,6 +76,15 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 66 | return inPort; | 76 | return inPort; |
| 67 | } | 77 | } |
| 68 | 78 | ||
| 79 | + /** | ||
| 80 | + * Gets the table. | ||
| 81 | + * | ||
| 82 | + * @return table | ||
| 83 | + */ | ||
| 84 | + public short table() { | ||
| 85 | + return table; | ||
| 86 | + } | ||
| 87 | + | ||
| 69 | @Override | 88 | @Override |
| 70 | public ExtensionTreatmentType type() { | 89 | public ExtensionTreatmentType type() { |
| 71 | return ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type(); | 90 | return ExtensionTreatmentType.ExtensionTreatmentTypes.NICIRA_RESUBMIT.type(); |
| ... | @@ -73,17 +92,22 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -73,17 +92,22 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 73 | 92 | ||
| 74 | @Override | 93 | @Override |
| 75 | public void deserialize(byte[] data) { | 94 | public void deserialize(byte[] data) { |
| 76 | - inPort = appKryo.deserialize(data); | 95 | + Map<String, Object> values = appKryo.deserialize(data); |
| 96 | + inPort = (PortNumber) values.get("inPort"); | ||
| 97 | + table = (short) values.get("table"); | ||
| 77 | } | 98 | } |
| 78 | 99 | ||
| 79 | @Override | 100 | @Override |
| 80 | public byte[] serialize() { | 101 | public byte[] serialize() { |
| 81 | - return appKryo.serialize(inPort); | 102 | + Map<String, Object> values = Maps.newHashMap(); |
| 103 | + values.put("inPort", inPort); | ||
| 104 | + values.put("table", table); | ||
| 105 | + return appKryo.serialize(values); | ||
| 82 | } | 106 | } |
| 83 | 107 | ||
| 84 | @Override | 108 | @Override |
| 85 | public int hashCode() { | 109 | public int hashCode() { |
| 86 | - return Objects.hash(inPort); | 110 | + return Objects.hash(inPort, table); |
| 87 | } | 111 | } |
| 88 | 112 | ||
| 89 | @Override | 113 | @Override |
| ... | @@ -93,8 +117,8 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -93,8 +117,8 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 93 | } | 117 | } |
| 94 | if (obj instanceof NiciraResubmit) { | 118 | if (obj instanceof NiciraResubmit) { |
| 95 | NiciraResubmit that = (NiciraResubmit) obj; | 119 | NiciraResubmit that = (NiciraResubmit) obj; |
| 96 | - return Objects.equals(inPort, that.inPort); | 120 | + return Objects.equals(inPort, that.inPort) |
| 97 | - | 121 | + && (table == that.table()); |
| 98 | } | 122 | } |
| 99 | return false; | 123 | return false; |
| 100 | } | 124 | } |
| ... | @@ -103,6 +127,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm | ... | @@ -103,6 +127,7 @@ public class NiciraResubmit extends AbstractExtension implements ExtensionTreatm |
| 103 | public String toString() { | 127 | public String toString() { |
| 104 | return MoreObjects.toStringHelper(getClass()) | 128 | return MoreObjects.toStringHelper(getClass()) |
| 105 | .add("inPort", inPort) | 129 | .add("inPort", inPort) |
| 130 | + .add("table", table) | ||
| 106 | .toString(); | 131 | .toString(); |
| 107 | } | 132 | } |
| 108 | } | 133 | } | ... | ... |
| ... | @@ -17,6 +17,7 @@ | ... | @@ -17,6 +17,7 @@ |
| 17 | package org.onosproject.driver.extensions; | 17 | package org.onosproject.driver.extensions; |
| 18 | 18 | ||
| 19 | import com.google.common.base.MoreObjects; | 19 | import com.google.common.base.MoreObjects; |
| 20 | +import com.google.common.collect.Maps; | ||
| 20 | 21 | ||
| 21 | import org.onlab.util.KryoNamespace; | 22 | import org.onlab.util.KryoNamespace; |
| 22 | import org.onosproject.net.PortNumber; | 23 | import org.onosproject.net.PortNumber; |
| ... | @@ -25,8 +26,8 @@ import org.onosproject.net.flow.instructions.ExtensionTreatment; | ... | @@ -25,8 +26,8 @@ import org.onosproject.net.flow.instructions.ExtensionTreatment; |
| 25 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType; | 26 | import org.onosproject.net.flow.instructions.ExtensionTreatmentType; |
| 26 | import org.onosproject.store.serializers.PortNumberSerializer; | 27 | import org.onosproject.store.serializers.PortNumberSerializer; |
| 27 | 28 | ||
| 28 | -import java.util.ArrayList; | 29 | +import java.util.HashMap; |
| 29 | -import java.util.List; | 30 | +import java.util.Map; |
| 30 | import java.util.Objects; | 31 | import java.util.Objects; |
| 31 | 32 | ||
| 32 | import static com.google.common.base.Preconditions.checkNotNull; | 33 | import static com.google.common.base.Preconditions.checkNotNull; |
| ... | @@ -37,13 +38,14 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -37,13 +38,14 @@ import static com.google.common.base.Preconditions.checkNotNull; |
| 37 | public class NiciraResubmitTable extends AbstractExtension implements | 38 | public class NiciraResubmitTable extends AbstractExtension implements |
| 38 | ExtensionTreatment { | 39 | ExtensionTreatment { |
| 39 | 40 | ||
| 40 | - //the list of the in port number(PortNumber) and the table(short) | 41 | + private static final PortNumber DEFAULT_IN_PORT = PortNumber.portNumber(65528); |
| 41 | - private List<Object> inPortAndTable = new ArrayList<Object>(); | 42 | + |
| 43 | + private PortNumber inPort; | ||
| 44 | + private short table; | ||
| 42 | 45 | ||
| 43 | private final KryoNamespace appKryo = new KryoNamespace.Builder() | 46 | private final KryoNamespace appKryo = new KryoNamespace.Builder() |
| 44 | - .register(ArrayList.class) | ||
| 45 | .register(new PortNumberSerializer(), PortNumber.class) | 47 | .register(new PortNumberSerializer(), PortNumber.class) |
| 46 | - .register(short.class) | 48 | + .register(Map.class).register(HashMap.class) |
| 47 | .register(byte[].class) | 49 | .register(byte[].class) |
| 48 | .build(); | 50 | .build(); |
| 49 | 51 | ||
| ... | @@ -51,26 +53,50 @@ public class NiciraResubmitTable extends AbstractExtension implements | ... | @@ -51,26 +53,50 @@ public class NiciraResubmitTable extends AbstractExtension implements |
| 51 | * Creates a new resubmit-table instruction. | 53 | * Creates a new resubmit-table instruction. |
| 52 | */ | 54 | */ |
| 53 | NiciraResubmitTable() { | 55 | NiciraResubmitTable() { |
| 54 | - inPortAndTable = null; | 56 | + inPort = DEFAULT_IN_PORT; |
| 57 | + table = -1; | ||
| 55 | } | 58 | } |
| 56 | 59 | ||
| 57 | /** | 60 | /** |
| 58 | * Creates a new resubmit-table instruction with a particular inPort and table. | 61 | * Creates a new resubmit-table instruction with a particular inPort and table. |
| 59 | * | 62 | * |
| 60 | - * @param inPortAndTable the list of in port number and table | 63 | + * @param inPort the in port number |
| 64 | + * @param table table | ||
| 65 | + */ | ||
| 66 | + public NiciraResubmitTable(PortNumber inPort, short table) { | ||
| 67 | + checkNotNull(inPort); | ||
| 68 | + checkNotNull(table); | ||
| 69 | + this.inPort = inPort; | ||
| 70 | + this.table = table; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * Creates a new resubmit-table instruction with a particular table. | ||
| 75 | + * | ||
| 76 | + * @param table table | ||
| 61 | */ | 77 | */ |
| 62 | - public NiciraResubmitTable(List<Object> inPortAndTable) { | 78 | + public NiciraResubmitTable(short table) { |
| 63 | - checkNotNull(inPortAndTable); | 79 | + checkNotNull(table); |
| 64 | - this.inPortAndTable = inPortAndTable; | 80 | + this.inPort = DEFAULT_IN_PORT; |
| 81 | + this.table = table; | ||
| 65 | } | 82 | } |
| 66 | 83 | ||
| 67 | /** | 84 | /** |
| 68 | - * Gets the inPortAndTable. | 85 | + * Gets the inPort. |
| 69 | * | 86 | * |
| 70 | - * @return inPortAndTable | 87 | + * @return inPort |
| 71 | */ | 88 | */ |
| 72 | - public List<Object> inPortAndTable() { | 89 | + public PortNumber inPort() { |
| 73 | - return inPortAndTable; | 90 | + return inPort; |
| 91 | + } | ||
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * Gets the table. | ||
| 95 | + * | ||
| 96 | + * @return table | ||
| 97 | + */ | ||
| 98 | + public short table() { | ||
| 99 | + return table; | ||
| 74 | } | 100 | } |
| 75 | 101 | ||
| 76 | @Override | 102 | @Override |
| ... | @@ -80,17 +106,22 @@ public class NiciraResubmitTable extends AbstractExtension implements | ... | @@ -80,17 +106,22 @@ public class NiciraResubmitTable extends AbstractExtension implements |
| 80 | 106 | ||
| 81 | @Override | 107 | @Override |
| 82 | public void deserialize(byte[] data) { | 108 | public void deserialize(byte[] data) { |
| 83 | - inPortAndTable = appKryo.deserialize(data); | 109 | + Map<String, Object> values = appKryo.deserialize(data); |
| 110 | + inPort = (PortNumber) values.get("inPort"); | ||
| 111 | + table = (short) values.get("table"); | ||
| 84 | } | 112 | } |
| 85 | 113 | ||
| 86 | @Override | 114 | @Override |
| 87 | public byte[] serialize() { | 115 | public byte[] serialize() { |
| 88 | - return appKryo.serialize(inPortAndTable); | 116 | + Map<String, Object> values = Maps.newHashMap(); |
| 117 | + values.put("inPort", inPort); | ||
| 118 | + values.put("table", table); | ||
| 119 | + return appKryo.serialize(values); | ||
| 89 | } | 120 | } |
| 90 | 121 | ||
| 91 | @Override | 122 | @Override |
| 92 | public int hashCode() { | 123 | public int hashCode() { |
| 93 | - return Objects.hash(inPortAndTable); | 124 | + return Objects.hash(inPort, table); |
| 94 | } | 125 | } |
| 95 | 126 | ||
| 96 | @Override | 127 | @Override |
| ... | @@ -100,8 +131,8 @@ public class NiciraResubmitTable extends AbstractExtension implements | ... | @@ -100,8 +131,8 @@ public class NiciraResubmitTable extends AbstractExtension implements |
| 100 | } | 131 | } |
| 101 | if (obj instanceof NiciraResubmitTable) { | 132 | if (obj instanceof NiciraResubmitTable) { |
| 102 | NiciraResubmitTable that = (NiciraResubmitTable) obj; | 133 | NiciraResubmitTable that = (NiciraResubmitTable) obj; |
| 103 | - return Objects.equals(inPortAndTable, that.inPortAndTable); | 134 | + return Objects.equals(inPort, that.inPort) |
| 104 | - | 135 | + && (table == that.table); |
| 105 | } | 136 | } |
| 106 | return false; | 137 | return false; |
| 107 | } | 138 | } |
| ... | @@ -109,6 +140,8 @@ public class NiciraResubmitTable extends AbstractExtension implements | ... | @@ -109,6 +140,8 @@ public class NiciraResubmitTable extends AbstractExtension implements |
| 109 | @Override | 140 | @Override |
| 110 | public String toString() { | 141 | public String toString() { |
| 111 | return MoreObjects.toStringHelper(getClass()) | 142 | return MoreObjects.toStringHelper(getClass()) |
| 112 | - .add("inPortAndTable", inPortAndTable).toString(); | 143 | + .add("inPort", inPort) |
| 144 | + .add("table", table) | ||
| 145 | + .toString(); | ||
| 113 | } | 146 | } |
| 114 | } | 147 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment