Update to pom files and package organization of bng-app
Also, update maven repo to HTTPS.
Change-Id: I664f819b2a671a5e85dcfd3e87e333f1163366d5
diff --git a/app/src/main/java/org/opencord/bng/impl/SimpleAttachmentEventHandler.java b/app/src/main/java/org/opencord/bng/impl/SimpleAttachmentEventHandler.java
new file mode 100644
index 0000000..eb14ecb
--- /dev/null
+++ b/app/src/main/java/org/opencord/bng/impl/SimpleAttachmentEventHandler.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.opencord.bng.impl;
+
+import org.glassfish.jersey.internal.guava.Sets;
+import org.onlab.util.Tools;
+import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.store.service.StorageService;
+import org.opencord.bng.BngAttachment;
+import org.opencord.bng.BngService;
+import org.opencord.bng.PppoeBngAttachment;
+import org.opencord.bng.PppoeBngControlHandler;
+import org.opencord.bng.PppoeEvent;
+import org.opencord.bng.PppoeEventListener;
+import org.opencord.bng.PppoeEventSubject;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Dictionary;
+import java.util.Properties;
+import java.util.Set;
+
+import static org.opencord.bng.impl.OsgiPropertyConstants.ENABLE_LOCAL_EVENT_HANDLER;
+import static org.opencord.bng.impl.OsgiPropertyConstants.ENABLE_LOCAL_EVENT_HANDLER_DEFAULT;
+
+/**
+ * Service to intercept the PPPoE Handler events and trigger the creation of a
+ * new attachment in BNG service.
+ */
+@Component(immediate = true,
+ property = {
+ ENABLE_LOCAL_EVENT_HANDLER + ":Boolean=" + ENABLE_LOCAL_EVENT_HANDLER_DEFAULT,
+ }
+)
+public class SimpleAttachmentEventHandler {
+
+ private static final String ATTACHMENT_ID_GENERATOR_NAME = "SIMPLE_ATTACHMENT_EVENT_HANDLER_ATTACHMENT_ID";
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected ComponentConfigService componentConfigService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected PppoeBngControlHandler pppoEHandlerRelay;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected BngService bngService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected CoreService coreService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected StorageService storageService;
+
+ /**
+ * Whether to enable of not the local attachment event handler, for debugging/development.
+ */
+ private boolean enableLocalEventHandler = ENABLE_LOCAL_EVENT_HANDLER_DEFAULT;
+ private InternalPppoeEvent pppoeEventListener = new InternalPppoeEvent();
+
+ // Map to store the attachment that this component has submitted through the BNG Service
+ private Set<String> addedAttachmentKeys;
+
+ private ApplicationId appId;
+
+ @Activate
+ protected void activate() {
+ appId = coreService.getAppId(BngManager.BNG_APP);
+ addedAttachmentKeys = Sets.newHashSet();
+ componentConfigService.registerProperties(getClass());
+ pppoEHandlerRelay.addListener(pppoeEventListener);
+ log.info("Simple Attachment Event Handler STARTED");
+ }
+
+ @Modified
+ public void modified(ComponentContext context) {
+ Dictionary<?, ?> properties = context != null ? context.getProperties() : new Properties();
+
+ Boolean localEvent = Tools.isPropertyEnabled(properties, ENABLE_LOCAL_EVENT_HANDLER);
+ if (localEvent != null) {
+ enableLocalEventHandler = localEvent;
+ }
+ }
+
+ @Deactivate
+ protected void deactivate() {
+ pppoEHandlerRelay.removeListener(pppoeEventListener);
+ addedAttachmentKeys = null;
+ componentConfigService.unregisterProperties(getClass(), false);
+ log.info("Simple Attachment Event Handler STOPPED");
+ }
+
+ /**
+ * Listener for BNG Attachment event for PPPoE attachments.
+ */
+ class InternalPppoeEvent implements PppoeEventListener {
+ @Override
+ public void event(PppoeEvent event) {
+ PppoeEventSubject eventInfo = event.subject();
+ String attachmentKey = BngUtils.calculateBngAttachmentKey(eventInfo);
+ switch (event.type()) {
+ case IPCP_CONF_ACK:
+ log.debug("Received IPCP_CONF_ACK event, submit a new attachment");
+ log.debug(eventInfo.toString());
+ BngAttachment newAttachment = PppoeBngAttachment.builder()
+ .withPppoeSessionId(eventInfo.getSessionId())
+ .withApplicationId(appId)
+ .withCTag(eventInfo.getcTag())
+ .withSTag(eventInfo.getsTag())
+ .withIpAddress(eventInfo.getIpAddress())
+ .withMacAddress(eventInfo.getMacAddress())
+ .withOnuSerial(eventInfo.getOnuSerialNumber())
+ .withOltConnectPoint(eventInfo.getOltConnectPoint())
+ .lineActivated(true)
+ .build();
+ if (!addedAttachmentKeys.add(attachmentKey)) {
+ log.warn("Attachment ID already present. Re-submit the attachment");
+ }
+ bngService.setupAttachment(attachmentKey, newAttachment);
+ break;
+
+ case SESSION_TERMINATION:
+ attachmentKey = BngUtils.calculateBngAttachmentKey(eventInfo);
+ log.debug("Received SESSION_TERMINATION event, remove the attachment {}",
+ attachmentKey);
+ if (!addedAttachmentKeys.remove(attachmentKey)) {
+ log.debug("Received SESSION_TERMINATION event, for attachment {} " +
+ "but attachment not present in local store", attachmentKey);
+ } else {
+ log.debug("Received SESSION_TERMINATION event, remove the attachment {}",
+ attachmentKey);
+ bngService.removeAttachment(attachmentKey);
+ }
+ break;
+ case AUTH_FAILURE:
+ case AUTH_REQUEST:
+ case AUTH_SUCCESS:
+ case SESSION_INIT:
+ case IPCP_CONF_REQUEST:
+ case SESSION_CONFIRMATION:
+ log.debug("Received event {}, nothing to do here.", event.type().toString());
+ break;
+ default:
+ throw new IllegalStateException("Unexpected value: " + event.type() +
+ ", for attachment: " + attachmentKey);
+ }
+ }
+
+ @Override
+ public boolean isRelevant(PppoeEvent event) {
+ return enableLocalEventHandler &&
+ event.subject().getClass().equals(PppoeEventSubject.class);
+ }
+ }
+}