Committed by
Gerrit Code Review
[ONOS-3832] Sfc manager register with packet subsystem
Change-Id: I8eeaadd22c82647bfb87f682306b50b7fa5926a5
Showing
1 changed file
with
53 additions
and
6 deletions
| ... | @@ -15,17 +15,31 @@ | ... | @@ -15,17 +15,31 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.sfc.manager.impl; | 16 | package org.onosproject.sfc.manager.impl; |
| 17 | 17 | ||
| 18 | +import static org.slf4j.LoggerFactory.getLogger; | ||
| 19 | + | ||
| 20 | +import java.util.concurrent.ConcurrentHashMap; | ||
| 21 | +import java.util.concurrent.ConcurrentMap; | ||
| 22 | + | ||
| 18 | import org.apache.felix.scr.annotations.Activate; | 23 | import org.apache.felix.scr.annotations.Activate; |
| 19 | import org.apache.felix.scr.annotations.Component; | 24 | import org.apache.felix.scr.annotations.Component; |
| 20 | import org.apache.felix.scr.annotations.Deactivate; | 25 | import org.apache.felix.scr.annotations.Deactivate; |
| 21 | import org.apache.felix.scr.annotations.Reference; | 26 | import org.apache.felix.scr.annotations.Reference; |
| 22 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 27 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
| 23 | import org.apache.felix.scr.annotations.Service; | 28 | import org.apache.felix.scr.annotations.Service; |
| 29 | +import org.onlab.packet.Ethernet; | ||
| 30 | +import org.onlab.packet.IPv4; | ||
| 31 | +import org.onlab.packet.IPv6; | ||
| 32 | +import org.onlab.packet.IpAddress; | ||
| 33 | +import org.onlab.packet.MacAddress; | ||
| 34 | +import org.onlab.packet.VlanId; | ||
| 24 | import org.onlab.util.ItemNotFoundException; | 35 | import org.onlab.util.ItemNotFoundException; |
| 25 | import org.onlab.util.KryoNamespace; | 36 | import org.onlab.util.KryoNamespace; |
| 26 | import org.onosproject.core.ApplicationId; | 37 | import org.onosproject.core.ApplicationId; |
| 27 | import org.onosproject.core.CoreService; | 38 | import org.onosproject.core.CoreService; |
| 28 | import org.onosproject.net.NshServicePathId; | 39 | import org.onosproject.net.NshServicePathId; |
| 40 | +import org.onosproject.net.packet.PacketContext; | ||
| 41 | +import org.onosproject.net.packet.PacketProcessor; | ||
| 42 | +import org.onosproject.net.packet.PacketService; | ||
| 29 | import org.onosproject.sfc.forwarder.ServiceFunctionForwarderService; | 43 | import org.onosproject.sfc.forwarder.ServiceFunctionForwarderService; |
| 30 | import org.onosproject.sfc.forwarder.impl.ServiceFunctionForwarderImpl; | 44 | import org.onosproject.sfc.forwarder.impl.ServiceFunctionForwarderImpl; |
| 31 | import org.onosproject.sfc.installer.FlowClassifierInstallerService; | 45 | import org.onosproject.sfc.installer.FlowClassifierInstallerService; |
| ... | @@ -47,11 +61,6 @@ import org.onosproject.vtnrsc.event.VtnRscListener; | ... | @@ -47,11 +61,6 @@ import org.onosproject.vtnrsc.event.VtnRscListener; |
| 47 | import org.onosproject.vtnrsc.service.VtnRscService; | 61 | import org.onosproject.vtnrsc.service.VtnRscService; |
| 48 | import org.slf4j.Logger; | 62 | import org.slf4j.Logger; |
| 49 | 63 | ||
| 50 | -import java.util.concurrent.ConcurrentHashMap; | ||
| 51 | -import java.util.concurrent.ConcurrentMap; | ||
| 52 | - | ||
| 53 | -import static org.slf4j.LoggerFactory.getLogger; | ||
| 54 | - | ||
| 55 | /** | 64 | /** |
| 56 | * Provides implementation of SFC Service. | 65 | * Provides implementation of SFC Service. |
| 57 | */ | 66 | */ |
| ... | @@ -61,6 +70,7 @@ public class SfcManager implements SfcService { | ... | @@ -61,6 +70,7 @@ public class SfcManager implements SfcService { |
| 61 | 70 | ||
| 62 | private final Logger log = getLogger(getClass()); | 71 | private final Logger log = getLogger(getClass()); |
| 63 | private static final String APP_ID = "org.onosproject.app.vtn"; | 72 | private static final String APP_ID = "org.onosproject.app.vtn"; |
| 73 | + private static final int SFC_PRIORITY = 1000; | ||
| 64 | 74 | ||
| 65 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 75 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 66 | protected VtnRscService vtnRscService; | 76 | protected VtnRscService vtnRscService; |
| ... | @@ -68,6 +78,11 @@ public class SfcManager implements SfcService { | ... | @@ -68,6 +78,11 @@ public class SfcManager implements SfcService { |
| 68 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 78 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
| 69 | protected CoreService coreService; | 79 | protected CoreService coreService; |
| 70 | 80 | ||
| 81 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 82 | + protected PacketService packetService; | ||
| 83 | + | ||
| 84 | + private SfcPacketProcessor processor = new SfcPacketProcessor(); | ||
| 85 | + | ||
| 71 | protected ApplicationId appId; | 86 | protected ApplicationId appId; |
| 72 | private ServiceFunctionForwarderService serviceFunctionForwarderService; | 87 | private ServiceFunctionForwarderService serviceFunctionForwarderService; |
| 73 | private FlowClassifierInstallerService flowClassifierInstallerService; | 88 | private FlowClassifierInstallerService flowClassifierInstallerService; |
| ... | @@ -91,13 +106,14 @@ public class SfcManager implements SfcService { | ... | @@ -91,13 +106,14 @@ public class SfcManager implements SfcService { |
| 91 | .register(FlowClassifierId.class) | 106 | .register(FlowClassifierId.class) |
| 92 | .register(PortChainId.class); | 107 | .register(PortChainId.class); |
| 93 | 108 | ||
| 109 | + packetService.addProcessor(processor, PacketProcessor.director(SFC_PRIORITY)); | ||
| 94 | log.info("Started"); | 110 | log.info("Started"); |
| 95 | } | 111 | } |
| 96 | 112 | ||
| 97 | @Deactivate | 113 | @Deactivate |
| 98 | public void deactivate() { | 114 | public void deactivate() { |
| 99 | vtnRscService.removeListener(vtnRscListener); | 115 | vtnRscService.removeListener(vtnRscListener); |
| 100 | - | 116 | + packetService.removeProcessor(processor); |
| 101 | log.info("Stopped"); | 117 | log.info("Stopped"); |
| 102 | } | 118 | } |
| 103 | 119 | ||
| ... | @@ -219,4 +235,35 @@ public class SfcManager implements SfcService { | ... | @@ -219,4 +235,35 @@ public class SfcManager implements SfcService { |
| 219 | // remove SPI. No longer it will be used. | 235 | // remove SPI. No longer it will be used. |
| 220 | nshSpiPortChainMap.remove(nshSpi); | 236 | nshSpiPortChainMap.remove(nshSpi); |
| 221 | } | 237 | } |
| 238 | + | ||
| 239 | + private class SfcPacketProcessor implements PacketProcessor { | ||
| 240 | + | ||
| 241 | + @Override | ||
| 242 | + public void process(PacketContext context) { | ||
| 243 | + Ethernet packet = context.inPacket().parsed(); | ||
| 244 | + if (packet == null) { | ||
| 245 | + return; | ||
| 246 | + } | ||
| 247 | + // get the five tupple parameters for the packet | ||
| 248 | + short ethType = packet.getEtherType(); | ||
| 249 | + VlanId vlanId = VlanId.vlanId(packet.getVlanID()); | ||
| 250 | + MacAddress srcMac = packet.getSourceMAC(); | ||
| 251 | + MacAddress dstMac = packet.getDestinationMAC(); | ||
| 252 | + IpAddress ipSrc; | ||
| 253 | + IpAddress ipDst; | ||
| 254 | + | ||
| 255 | + if (ethType == Ethernet.TYPE_IPV4) { | ||
| 256 | + IPv4 ipv4Packet = (IPv4) packet.getPayload(); | ||
| 257 | + ipSrc = IpAddress.valueOf(ipv4Packet.getSourceAddress()); | ||
| 258 | + ipDst = IpAddress.valueOf(ipv4Packet.getDestinationAddress()); | ||
| 259 | + } else if (ethType == Ethernet.TYPE_IPV6) { | ||
| 260 | + IPv6 ipv6Packet = (IPv6) packet.getPayload(); | ||
| 261 | + ipSrc = IpAddress.valueOf(ipv6Packet.getSourceAddress().toString()); | ||
| 262 | + ipDst = IpAddress.valueOf(ipv6Packet.getDestinationAddress().toString()); | ||
| 263 | + } | ||
| 264 | + | ||
| 265 | + //todo | ||
| 266 | + //identify the port chain to which the packet belongs | ||
| 267 | + } | ||
| 268 | + } | ||
| 222 | } | 269 | } | ... | ... |
-
Please register or login to post a comment