From b731e2f1dd0972409b136aebc7b463dd72c9cfad Mon Sep 17 00:00:00 2001 From: CNlucius Date: Tue, 13 Sep 2016 11:40:12 +0800 Subject: ONOSFW-171 O/S-SFC-ONOS scenario documentation Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365 Signed-off-by: CNlucius --- .../onosproject/virtualbng/VirtualPublicHosts.java | 167 --------------------- 1 file changed, 167 deletions(-) delete mode 100644 framework/src/onos/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VirtualPublicHosts.java (limited to 'framework/src/onos/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VirtualPublicHosts.java') diff --git a/framework/src/onos/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VirtualPublicHosts.java b/framework/src/onos/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VirtualPublicHosts.java deleted file mode 100644 index 5ab650bc..00000000 --- a/framework/src/onos/apps/virtualbng/src/main/java/org/onosproject/virtualbng/VirtualPublicHosts.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.virtualbng; - -import static org.slf4j.LoggerFactory.getLogger; - -import java.nio.ByteBuffer; - -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.onlab.packet.ARP; -import org.onlab.packet.Ethernet; -import org.onlab.packet.Ip4Address; -import org.onlab.packet.MacAddress; -import org.onosproject.core.ApplicationId; -import org.onosproject.core.CoreService; -import org.onosproject.net.ConnectPoint; -import org.onosproject.net.flow.DefaultTrafficSelector; -import org.onosproject.net.flow.DefaultTrafficTreatment; -import org.onosproject.net.flow.TrafficSelector; -import org.onosproject.net.flow.TrafficTreatment; -import org.onosproject.net.packet.DefaultOutboundPacket; -import org.onosproject.net.packet.InboundPacket; -import org.onosproject.net.packet.PacketContext; -import org.onosproject.net.packet.PacketPriority; -import org.onosproject.net.packet.PacketProcessor; -import org.onosproject.net.packet.PacketService; -import org.slf4j.Logger; - -/** - * When the upstream gateway which is outside local SDN network wants to send - * packets to our local public IP addresses, it will send out ARP requests to - * get the MAC address of each public IP address. Actually, there are no hosts - * configured with those public IP addresses, so this class is to emulate the - * behavior of the non-existed hosts and return ARP replies. - *

- * Since we will rewrite the destination MAC address in the switch before - * traffic packets go to the destination, so the MAC address can be any number. - * We manually configured a random MAC address for this purpose in the vBNG - * configuration file. - *

- */ -@Component(immediate = true) -public class VirtualPublicHosts { - private final Logger log = getLogger(getClass()); - - private static final String APP_NAME = - "org.onosproject.virtualbng.VirtualPublicHosts"; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected CoreService coreService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected PacketService packetService; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected VbngConfigurationService vbngConfigService; - - private ApplicationId appId; - private ArpRequestProcessor processor = new ArpRequestProcessor(); - - @Activate - public void activate() { - appId = coreService.registerApplication(APP_NAME); - - packetService.addProcessor(processor, PacketProcessor.director(6)); - requestIntercepts(); - log.info("vBNG virtual public hosts started"); - } - - @Deactivate - public void deactivate() { - withdrawIntercepts(); - packetService.removeProcessor(processor); - processor = null; - log.info("vBNG virtual public hosts Stopped"); - } - - /** - * Request packet in via PacketService. - */ - private void requestIntercepts() { - TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); - // Only IPv4 is supported in current vBNG. - selector.matchEthType(Ethernet.TYPE_ARP); - packetService.requestPackets(selector.build(), - PacketPriority.REACTIVE, appId); - } - - /** - * Cancel request for packet in via PacketService. - */ - private void withdrawIntercepts() { - TrafficSelector.Builder selector = DefaultTrafficSelector.builder(); - // Only IPv4 is supported in current vBNG. - selector.matchEthType(Ethernet.TYPE_ARP); - packetService.cancelPackets(selector.build(), - PacketPriority.REACTIVE, appId); - } - - /** - * This class filters out the ARP request packets, generates the ARP - * reply packets, and emits those packets. - */ - private class ArpRequestProcessor implements PacketProcessor { - @Override - public void process(PacketContext context) { - - InboundPacket pkt = context.inPacket(); - Ethernet ethPkt = pkt.parsed(); - - // Only handle the ARP packets - if (ethPkt == null || ethPkt.getEtherType() != Ethernet.TYPE_ARP) { - return; - } - ARP arpPacket = (ARP) ethPkt.getPayload(); - // Only handle ARP request packets - if (arpPacket.getOpCode() != ARP.OP_REQUEST) { - return; - } - - Ip4Address targetIpAddress = Ip4Address - .valueOf(arpPacket.getTargetProtocolAddress()); - - // Only handle an ARP request when the target IP address inside is - // an assigned public IP address - if (!vbngConfigService.isAssignedPublicIpAddress(targetIpAddress)) { - return; - } - - MacAddress virtualHostMac = - vbngConfigService.getPublicFacingMac(); - if (virtualHostMac == null) { - return; - } - - ConnectPoint srcConnectPoint = pkt.receivedFrom(); - Ethernet eth = ARP.buildArpReply(targetIpAddress, - virtualHostMac, - ethPkt); - - TrafficTreatment.Builder builder = - DefaultTrafficTreatment.builder(); - builder.setOutput(srcConnectPoint.port()); - packetService.emit(new DefaultOutboundPacket( - srcConnectPoint.deviceId(), - builder.build(), - ByteBuffer.wrap(eth.serialize()))); - } - } -} -- cgit 1.2.3-korg