blob: dc231cef5122f8e6c216080a7faf999dacea80a2 [file] [log] [blame]
alshabibc274c902014-10-03 14:58:27 -07001package org.onlab.onos.proxyarp;
2
3import static org.slf4j.LoggerFactory.getLogger;
4
5import org.apache.felix.scr.annotations.Activate;
6import org.apache.felix.scr.annotations.Component;
7import org.apache.felix.scr.annotations.Deactivate;
8import org.apache.felix.scr.annotations.Reference;
9import org.apache.felix.scr.annotations.ReferenceCardinality;
10import org.onlab.onos.ApplicationId;
alshabib92c65ad2014-10-08 21:56:05 -070011import org.onlab.onos.CoreService;
alshabibc274c902014-10-03 14:58:27 -070012import org.onlab.onos.net.packet.PacketContext;
13import org.onlab.onos.net.packet.PacketProcessor;
14import org.onlab.onos.net.packet.PacketService;
15import org.onlab.onos.net.proxyarp.ProxyArpService;
16import org.slf4j.Logger;
17
18/**
19 * Sample reactive proxy arp application.
20 */
21@Component(immediate = true)
22public class ProxyArp {
23
24
25 private final Logger log = getLogger(getClass());
26
27 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
28 protected PacketService packetService;
29
30 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
31 protected ProxyArpService proxyArpService;
32
33 private ProxyArpProcessor processor = new ProxyArpProcessor();
34
alshabib92c65ad2014-10-08 21:56:05 -070035 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
36 protected CoreService coreService;
37
alshabibc274c902014-10-03 14:58:27 -070038 private ApplicationId appId;
39
40 @Activate
41 public void activate() {
alshabib92c65ad2014-10-08 21:56:05 -070042 appId = coreService.registerApplication("org.onlab.onos.proxyarp");
alshabibc274c902014-10-03 14:58:27 -070043 packetService.addProcessor(processor, PacketProcessor.ADVISOR_MAX + 1);
44 log.info("Started with Application ID {}", appId.id());
45 }
46
47 @Deactivate
48 public void deactivate() {
49 packetService.removeProcessor(processor);
50 processor = null;
51 log.info("Stopped");
52 }
53
54
55 /**
56 * Packet processor responsible for forwarding packets along their paths.
57 */
58 private class ProxyArpProcessor implements PacketProcessor {
59
60 @Override
61 public void process(PacketContext context) {
62 // Stop processing if the packet has been handled, since we
63 // can't do any more to it.
64 if (context.isHandled()) {
65 return;
66 }
67
68 //handle the arp packet.
69 proxyArpService.handleArp(context);
70 }
71 }
72}
73
74