mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-01 00:31:01 +01:00
Implemented extended SONA pipeline /w splitting VNI from DHCP Table
Change-Id: I1644b486e85ea2d0af9b9f317fe9b4a333915480
This commit is contained in:
parent
99892e9332
commit
70a2c3f89f
@ -59,12 +59,13 @@ public final class Constants {
|
|||||||
public static final int PRIORITY_ARP_REQUEST_RULE = 40000;
|
public static final int PRIORITY_ARP_REQUEST_RULE = 40000;
|
||||||
|
|
||||||
public static final int DHCP_ARP_TABLE = 0;
|
public static final int DHCP_ARP_TABLE = 0;
|
||||||
public static final int SRC_VNI_TABLE = 0;
|
public static final int FLAT_TABLE = 1;
|
||||||
public static final int ACL_TABLE = 1;
|
public static final int VTAG_TABLE = 10;
|
||||||
public static final int CT_TABLE = 2;
|
public static final int ACL_TABLE = 20;
|
||||||
public static final int JUMP_TABLE = 3;
|
public static final int CT_TABLE = 21;
|
||||||
public static final int ROUTING_TABLE = 4;
|
public static final int JUMP_TABLE = 30;
|
||||||
public static final int FORWARDING_TABLE = 5;
|
public static final int ROUTING_TABLE = 40;
|
||||||
|
public static final int FORWARDING_TABLE = 50;
|
||||||
public static final int GW_COMMON_TABLE = 0;
|
public static final int GW_COMMON_TABLE = 0;
|
||||||
public static final int ERROR_TABLE = 10;
|
public static final int ERROR_TABLE = 100;
|
||||||
}
|
}
|
||||||
@ -143,7 +143,8 @@ public class OpenstackFlowRuleManager implements OpenstackFlowRuleService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void initializePipeline(DeviceId deviceId) {
|
private void initializePipeline(DeviceId deviceId) {
|
||||||
connectTables(deviceId, Constants.SRC_VNI_TABLE, Constants.ACL_TABLE);
|
connectTables(deviceId, Constants.DHCP_ARP_TABLE, Constants.VTAG_TABLE);
|
||||||
|
connectTables(deviceId, Constants.VTAG_TABLE, Constants.ACL_TABLE);
|
||||||
connectTables(deviceId, Constants.ACL_TABLE, Constants.JUMP_TABLE);
|
connectTables(deviceId, Constants.ACL_TABLE, Constants.JUMP_TABLE);
|
||||||
setupJumpTable(deviceId);
|
setupJumpTable(deviceId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -80,8 +80,8 @@ import static org.onlab.packet.DHCP.DHCPOptionCode.OptionCode_SubnetMask;
|
|||||||
import static org.onlab.packet.DHCP.MsgType.DHCPACK;
|
import static org.onlab.packet.DHCP.MsgType.DHCPACK;
|
||||||
import static org.onlab.packet.DHCP.MsgType.DHCPOFFER;
|
import static org.onlab.packet.DHCP.MsgType.DHCPOFFER;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.DEFAULT_GATEWAY_MAC_STR;
|
import static org.onosproject.openstacknetworking.api.Constants.DEFAULT_GATEWAY_MAC_STR;
|
||||||
|
import static org.onosproject.openstacknetworking.api.Constants.DHCP_ARP_TABLE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_DHCP_RULE;
|
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_DHCP_RULE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.SRC_VNI_TABLE;
|
|
||||||
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
|
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
|
||||||
import static org.slf4j.LoggerFactory.getLogger;
|
import static org.slf4j.LoggerFactory.getLogger;
|
||||||
|
|
||||||
@ -462,7 +462,7 @@ public class OpenstackSwitchingDhcpHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_DHCP_RULE,
|
PRIORITY_DHCP_RULE,
|
||||||
SRC_VNI_TABLE,
|
DHCP_ARP_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,13 +56,15 @@ import java.util.concurrent.ExecutorService;
|
|||||||
import static java.util.concurrent.Executors.newSingleThreadExecutor;
|
import static java.util.concurrent.Executors.newSingleThreadExecutor;
|
||||||
import static org.onlab.util.Tools.groupedThreads;
|
import static org.onlab.util.Tools.groupedThreads;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.ACL_TABLE;
|
import static org.onosproject.openstacknetworking.api.Constants.ACL_TABLE;
|
||||||
|
import static org.onosproject.openstacknetworking.api.Constants.DHCP_ARP_TABLE;
|
||||||
|
import static org.onosproject.openstacknetworking.api.Constants.FLAT_TABLE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.FORWARDING_TABLE;
|
import static org.onosproject.openstacknetworking.api.Constants.FORWARDING_TABLE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
|
import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_ADMIN_RULE;
|
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_ADMIN_RULE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_RULE;
|
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLAT_RULE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_SWITCHING_RULE;
|
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_SWITCHING_RULE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_TUNNEL_TAG_RULE;
|
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_TUNNEL_TAG_RULE;
|
||||||
import static org.onosproject.openstacknetworking.api.Constants.SRC_VNI_TABLE;
|
import static org.onosproject.openstacknetworking.api.Constants.VTAG_TABLE;
|
||||||
import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension;
|
import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension;
|
||||||
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
|
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
|
||||||
import static org.slf4j.LoggerFactory.getLogger;
|
import static org.slf4j.LoggerFactory.getLogger;
|
||||||
@ -146,6 +148,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
setForwardingRulesForVlan(instPort, install);
|
setForwardingRulesForVlan(instPort, install);
|
||||||
break;
|
break;
|
||||||
case FLAT:
|
case FLAT:
|
||||||
|
setFlatJumpRules(instPort, install);
|
||||||
setDownstreamRules(instPort, install);
|
setDownstreamRules(instPort, install);
|
||||||
setUpstreamRules(instPort, install);
|
setUpstreamRules(instPort, install);
|
||||||
break;
|
break;
|
||||||
@ -155,6 +158,50 @@ public final class OpenstackSwitchingHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setFlatJumpRules(InstancePort port, boolean install) {
|
||||||
|
TrafficSelector.Builder selector = DefaultTrafficSelector.builder();
|
||||||
|
selector.matchInPort(port.portNumber());
|
||||||
|
|
||||||
|
TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
|
||||||
|
treatment.transition(FLAT_TABLE);
|
||||||
|
|
||||||
|
osFlowRuleService.setRule(
|
||||||
|
appId,
|
||||||
|
port.deviceId(),
|
||||||
|
selector.build(),
|
||||||
|
treatment.build(),
|
||||||
|
PRIORITY_FLAT_RULE,
|
||||||
|
DHCP_ARP_TABLE,
|
||||||
|
install);
|
||||||
|
|
||||||
|
Network network = osNetworkService.network(port.networkId());
|
||||||
|
|
||||||
|
if (network == null) {
|
||||||
|
log.warn("The network does not exist");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PortNumber portNumber = osNodeService.node(port.deviceId())
|
||||||
|
.phyIntfPortNum(network.getProviderPhyNet());
|
||||||
|
|
||||||
|
if (portNumber == null) {
|
||||||
|
log.warn("The port number does not exist");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
selector = DefaultTrafficSelector.builder();
|
||||||
|
selector.matchInPort(portNumber);
|
||||||
|
|
||||||
|
osFlowRuleService.setRule(
|
||||||
|
appId,
|
||||||
|
port.deviceId(),
|
||||||
|
selector.build(),
|
||||||
|
treatment.build(),
|
||||||
|
PRIORITY_FLAT_RULE,
|
||||||
|
DHCP_ARP_TABLE,
|
||||||
|
install);
|
||||||
|
}
|
||||||
|
|
||||||
private void setDownstreamRules(InstancePort instPort, boolean install) {
|
private void setDownstreamRules(InstancePort instPort, boolean install) {
|
||||||
TrafficSelector selector = DefaultTrafficSelector.builder()
|
TrafficSelector selector = DefaultTrafficSelector.builder()
|
||||||
.matchEthType(Ethernet.TYPE_IPV4)
|
.matchEthType(Ethernet.TYPE_IPV4)
|
||||||
@ -170,7 +217,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_FLAT_RULE,
|
PRIORITY_FLAT_RULE,
|
||||||
SRC_VNI_TABLE,
|
FLAT_TABLE,
|
||||||
install);
|
install);
|
||||||
|
|
||||||
selector = DefaultTrafficSelector.builder()
|
selector = DefaultTrafficSelector.builder()
|
||||||
@ -184,7 +231,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_FLAT_RULE,
|
PRIORITY_FLAT_RULE,
|
||||||
SRC_VNI_TABLE,
|
FLAT_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +265,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_FLAT_RULE,
|
PRIORITY_FLAT_RULE,
|
||||||
SRC_VNI_TABLE,
|
FLAT_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +418,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
tb.build(),
|
tb.build(),
|
||||||
PRIORITY_TUNNEL_TAG_RULE,
|
PRIORITY_TUNNEL_TAG_RULE,
|
||||||
SRC_VNI_TABLE,
|
VTAG_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -402,7 +449,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_TUNNEL_TAG_RULE,
|
PRIORITY_TUNNEL_TAG_RULE,
|
||||||
SRC_VNI_TABLE,
|
VTAG_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -437,6 +484,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: need to be purged sooner or later
|
||||||
private void setPortAdminRules(Port port, boolean install) {
|
private void setPortAdminRules(Port port, boolean install) {
|
||||||
InstancePort instancePort =
|
InstancePort instancePort =
|
||||||
instancePortService.instancePort(MacAddress.valueOf(port.getMacAddress()));
|
instancePortService.instancePort(MacAddress.valueOf(port.getMacAddress()));
|
||||||
@ -454,7 +502,7 @@ public final class OpenstackSwitchingHandler {
|
|||||||
selector,
|
selector,
|
||||||
treatment,
|
treatment,
|
||||||
PRIORITY_ADMIN_RULE,
|
PRIORITY_ADMIN_RULE,
|
||||||
SRC_VNI_TABLE,
|
VTAG_TABLE,
|
||||||
install);
|
install);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user