From 3bf047e64a1121208719e7603bf91c69d532ecf8 Mon Sep 17 00:00:00 2001
From: Marco Platania <platania@research.att.com>
Date: Mon, 21 Jan 2019 12:12:39 -0500
Subject: Squashed commit of the following:

commit 1b4af2baa406841631ef7c3bf6917be654f793e1
Author: Marco Platania <platania@research.att.com>
Date:   Mon Jan 21 11:21:08 2019 -0500

    Correct style issues

    Change-Id: Icadd241369437b6c1e868285f79b31be2d730871
    Issue-ID: INT-824
    Signed-off-by: Marco Platania <platania@research.att.com>

commit 1b019bf2fcdddeae852f465e56255bb00c5c19d7
Author: Marco Platania <platania@research.att.com>
Date:   Mon Jan 21 10:36:52 2019 -0500

    Correct path to POM files

    Change-Id: Ie98617eaab6ae65c982bb15e71f72b090f45e553
    Issue-ID: INT-824
    Signed-off-by: Marco Platania <platania@research.att.com>

commit e51da00e8208fad91ca3be8808b0e7b590d64627
Author: Marco Platania <platania@research.att.com>
Date:   Mon Jan 21 10:24:19 2019 -0500

    Add new API to vPacketGen

    - Add new API to modify the number of active streams
    - Change POM structure accordingly

    Change-Id: Iba45ce2ff5fa9fb418e3dd0dffb75c785dc20f70
    Issue-ID: INT-824
    Signed-off-by: Marco Platania <platania@research.att.com>

Change-Id: Iefbfce87b4f98a35b81585c2346975256ae988a4
Signed-off-by: Marco Platania <platania@research.att.com>
---
 vnfs/honeycomb_plugin/parent-pom/pom.xml           | 257 +++++++++++++++++++++
 vnfs/honeycomb_plugin/sample-distribution/pom.xml  | 102 ++++++++
 .../main/java/io/fd/honeycomb/tutorial/Main.java   |  46 ++++
 .../sample_plugin/parent-pom/pom.xml               | 255 --------------------
 .../sample_plugin/sample-distribution/pom.xml      |  97 --------
 .../main/java/io/fd/honeycomb/tutorial/Main.java   |  41 ----
 vnfs/honeycomb_plugin/stream-count/pom.xml         |  57 +++++
 .../stream-count/stream-count-api/pom.xml          |  74 ++++++
 .../src/main/yang/stream-count.yang                |  67 ++++++
 .../stream-count/stream-count-impl/Readme.adoc     |   3 +
 .../stream-count/stream-count-impl/pom.xml         |  87 +++++++
 .../java/io/fd/honeycomb/lcmapi/CrudService.java   |  64 +++++
 .../io/fd/honeycomb/lcmapi/ElementCrudService.java | 103 +++++++++
 .../main/java/io/fd/honeycomb/lcmapi/Module.java   |  70 ++++++
 .../fd/honeycomb/lcmapi/ModuleConfiguration.java   |  46 ++++
 .../lcmapi/init/ConfigDataInitializer.java         |  54 +++++
 .../honeycomb/lcmapi/write/ElementCustomizer.java  | 100 ++++++++
 .../lcmapi/write/ModuleWriterFactory.java          |  57 +++++
 vnfs/vFW/scripts/run_traffic_fw_demo.sh            |  10 +-
 vnfs/vFW/scripts/update_running_streams.sh         |  18 ++
 20 files changed, 1208 insertions(+), 400 deletions(-)
 create mode 100644 vnfs/honeycomb_plugin/parent-pom/pom.xml
 create mode 100755 vnfs/honeycomb_plugin/sample-distribution/pom.xml
 create mode 100755 vnfs/honeycomb_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
 delete mode 100644 vnfs/honeycomb_plugin/sample_plugin/parent-pom/pom.xml
 delete mode 100755 vnfs/honeycomb_plugin/sample_plugin/sample-distribution/pom.xml
 delete mode 100755 vnfs/honeycomb_plugin/sample_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/pom.xml
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-api/src/main/yang/stream-count.yang
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java
 create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java
 create mode 100644 vnfs/vFW/scripts/update_running_streams.sh

(limited to 'vnfs')

diff --git a/vnfs/honeycomb_plugin/parent-pom/pom.xml b/vnfs/honeycomb_plugin/parent-pom/pom.xml
new file mode 100644
index 00000000..eb841042
--- /dev/null
+++ b/vnfs/honeycomb_plugin/parent-pom/pom.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright (c) 2016 Cisco and/or its affiliates.
+  ~
+  ~ 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.
+  -->
+
+<!--
+    Modifications copyright © 2017 AT&T Intellectual Property
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+
+<parent>
+    <groupId>org.onap.demo.vnf</groupId>
+    <artifactId>demo-aggregator</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+    <relativePath>../../../pom.xml</relativePath>
+</parent>
+
+    <properties>
+        <nexusproxy>http://nexus.fd.io/content</nexusproxy>
+        <start.script.template>
+#!/bin/sh -
+STATUS=100
+
+while [ $STATUS -eq 100 ]
+do
+  %s
+  STATUS=$?
+  echo "Honeycomb exited with status: $STATUS"
+  if [ $STATUS -eq 100 ]
+  then
+    echo "Restarting..."
+  fi
+done
+        </start.script.template>
+        <exec.parameters>-Xms32m -Xmx128m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=128m</exec.parameters>
+        <exec.parameters.minimal>-client -Xms20m -Xmx32m -XX:MetaspaceSize=5m -XX:MaxMetaspaceSize=32m -XX:MaxMetaspaceExpansion=1m -Xss512k -XX:+UseSerialGC -Djava.compiler=NONE -Xverify:none -noverify</exec.parameters.minimal>
+        <debug.parameters>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</debug.parameters>
+        <guice.version>4.1.0</guice.version>
+        <guice.config.version>1.2.0</guice.config.version>
+        <restconf.version>1.3.2-Beryllium-SR2</restconf.version>
+        <netconf.version>1.0.2-Beryllium-SR2</netconf.version>
+        <jersey.version>1.19.1</jersey.version>
+        <jetty.version>9.3.11.v20160721</jetty.version>
+        <servlet.version>3.1.0</servlet.version>
+        <yangtools.version>0.8.2-Beryllium-SR2</yangtools.version>
+        <mdsal.version>1.3.2-Beryllium-SR2</mdsal.version>
+        <!-- Used by mdsal as provided/runtime dependency-->
+        <osgi.core.version>5.0.0</osgi.core.version>
+    </properties>
+
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>hc-onap</artifactId>
+    <packaging>pom</packaging>
+
+    <!-- Generate executable shell script -->
+  <modules>
+    <module>../sample_plugin/sample-plugin-api</module>
+    <module>../sample_plugin/sample-plugin-impl</module>
+    <module>../stream-count/stream-count-api</module>
+    <module>../stream-count/stream-count-impl</module>
+    <module>../sample-distribution</module>
+  </modules>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <version>3.3</version>
+                    <configuration>
+                        <!-- Use google's error-prone static analysis-->
+                        <compilerId>javac-with-errorprone</compilerId>
+                        <forceJavacCompilerUse>true</forceJavacCompilerUse>
+                        <showWarnings>true</showWarnings>
+                        <source>1.8</source>
+                        <target>1.8</target>
+                    </configuration>
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.codehaus.plexus</groupId>
+                            <artifactId>plexus-compiler-javac-errorprone</artifactId>
+                            <version>2.5</version>
+                        </dependency>
+                        <!-- override plexus-compiler-javac-errorprone's dependency on
+                             Error Prone with the latest version -->
+                        <dependency>
+                            <groupId>com.google.errorprone</groupId>
+                            <artifactId>error_prone_core</artifactId>
+                            <version>2.0.9</version>
+                        </dependency>
+                    </dependencies>
+                </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-jar-plugin</artifactId>
+                    <version>2.6</version>
+                    <configuration>
+                        <archive>
+                            <manifest>
+                                <mainClass>${main.class}</mainClass>
+                                <addClasspath>true</addClasspath>
+                                <classpathPrefix>lib/</classpathPrefix>
+                                <useUniqueVersions>false</useUniqueVersions>
+                                <classpathMavenRepositoryLayout>true</classpathMavenRepositoryLayout>
+                            </manifest>
+                            <manifestEntries>
+                                <Class-Path>config/ cert/</Class-Path>
+                            </manifestEntries>
+                        </archive>
+                    </configuration>
+                </plugin>
+
+                <!-- Copy all dependencies -->
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <version>2.10</version>
+                    <executions>
+                        <execution>
+                            <id>copy-dependencies</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>copy-dependencies</goal>
+                            </goals>
+                            <configuration>
+                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                                <useBaseVersion>true</useBaseVersion>
+                                <useRepositoryLayout>true</useRepositoryLayout>
+                                <excludeArtifactIds>yang-jmx-generator</excludeArtifactIds>
+                            </configuration>
+                        </execution>
+                        <execution>
+                            <id>unpack-configuration</id>
+                            <phase>prepare-package</phase>
+                            <goals>
+                                <goal>unpack-dependencies</goal>
+                            </goals>
+                            <configuration>
+                                <includes>**/honeycomb-minimal-resources/</includes>
+                                <outputDirectory>${project.build.outputDirectory}/</outputDirectory>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <!-- Generate shell script -->
+                <plugin>
+                    <groupId>org.codehaus.gmaven</groupId>
+                    <artifactId>groovy-maven-plugin</artifactId>
+                    <version>2.0</version>
+                    <executions>
+                        <execution>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>execute</goal>
+                            </goals>
+                            <configuration>
+                                <!-- TODO add remote debug option -->
+                                <!-- TODO add clean option -->
+                                <!-- TODO add shutdown script -->
+                                <!-- TODO add restart script -->
+                                <!-- TODO pass options to JVM? -->
+                                <source>
+                                    import java.nio.file.Paths
+
+                                    log.info "Generating shell exec script"
+                                    def scriptTemplate = properties.getOrDefault("start.script.template", "")
+                                    def args = properties.getOrDefault("exec.parameters", "")
+                                    log.debug "Additional shell exec script properties: ${args}"
+                                    def javaArgs = "${args} -jar \$(dirname \$0)/${project.artifactId}-${project.version}.jar"
+                                    def scriptParent = Paths.get(project.build.outputDirectory, "honeycomb-minimal-resources")
+                                    scriptParent.toFile().mkdirs()
+                                    def scriptContent = "java " + javaArgs
+                                    log.info "Generating shell exec script as ${scriptContent}"
+                                    def scriptPath = Paths.get(scriptParent.toString(), "honeycomb")
+                                    log.info "Writing shell exec script to ${scriptPath}"
+                                    scriptPath.toFile().text = String.format(scriptTemplate, scriptContent)
+                                    scriptPath.toFile().setExecutable(true)
+
+                                    scriptPath = Paths.get(scriptParent.toString(), "honeycomb-start")
+                                    log.info "Writing shell exec script to ${scriptPath}"
+                                    scriptPath.toFile().text = "\$(dirname \$0)/honeycomb &amp;"
+                                    scriptPath.toFile().setExecutable(true)
+
+                                    def debug_args = properties.getOrDefault("debug.parameters", "")
+                                    def debugScriptContent = "java" + " ${debug_args} " + javaArgs
+                                    log.info "Generating shell debug script as ${debugScriptContent}"
+                                    scriptPath = Paths.get(scriptParent.toString(), "honeycomb-debug")
+                                    log.info "Writing shell debug script to ${scriptPath}"
+                                    scriptPath.toFile().text = String.format(scriptTemplate, debugScriptContent)
+                                    scriptPath.toFile().setExecutable(true)
+                                </source>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <!-- Build archives -->
+                <plugin>
+                    <artifactId>maven-assembly-plugin</artifactId>
+                    <version>2.5.3</version>
+                    <dependencies>
+                        <dependency>
+                            <groupId>io.fd.honeycomb.common</groupId>
+                            <artifactId>minimal-assembly-descriptor</artifactId>
+                            <version>1.16.9</version>
+                        </dependency>
+                    </dependencies>
+                    <executions>
+                        <execution>
+                            <id>create-archive</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>single</goal>
+                            </goals>
+                            <configuration>
+                                <descriptorRefs>
+                                    <descriptorRef>honeycomb-minimal</descriptorRef>
+                                </descriptorRefs>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>exec-maven-plugin</artifactId>
+                    <executions>
+                        <execution>
+                            <phase>none</phase>
+                        </execution>
+                    </executions>
+                    <configuration>
+                        <skip>true</skip>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+</project>
diff --git a/vnfs/honeycomb_plugin/sample-distribution/pom.xml b/vnfs/honeycomb_plugin/sample-distribution/pom.xml
new file mode 100755
index 00000000..02dd1ace
--- /dev/null
+++ b/vnfs/honeycomb_plugin/sample-distribution/pom.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+    Modifications copyright © 2017 AT&T Intellectual Property
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+<parent>
+    <groupId>org.onap.demo.vnf</groupId>
+    <artifactId>hc-onap</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+    <relativePath>../parent-pom/pom.xml</relativePath>
+</parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>sample-distribution</artifactId>
+
+  <properties>
+      <main.class>io.fd.honeycomb.vpp.integration.distro.Main</main.class>
+      <v3po.version>1.16.9</v3po.version>
+      <lisp.version>1.16.9</lisp.version>
+      <vpp.common.min.distro.version>1.16.9</vpp.common.min.distro.version>
+      <vppnsh.version>1.16.9</vppnsh.version>
+      <honeycomb.infra.version>1.16.9</honeycomb.infra.version>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>groovy-maven-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+      </plugin>
+
+<plugin>
+  <groupId>org.apache.maven.plugins</groupId>
+  <artifactId>maven-deploy-plugin</artifactId>
+  <configuration>
+    <skip>false</skip>
+  </configuration>
+</plugin>
+
+<plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-install-plugin</artifactId>
+        <configuration>
+          <skip>false</skip>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.fd.honeycomb.vpp</groupId>
+      <artifactId>minimal-distribution</artifactId>
+      <version>${vpp.common.min.distro.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.v3po</groupId>
+      <artifactId>v3po2vpp</artifactId>
+      <version>${v3po.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.lisp</groupId>
+      <artifactId>lisp2vpp</artifactId>
+      <version>${lisp.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.vppnsh</groupId>
+      <artifactId>vppnsh-impl</artifactId>
+      <version>${vppnsh.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.common</groupId>
+      <artifactId>sample-plugin-impl</artifactId>
+      <version>${honeycomb.infra.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.lcmapi</groupId>
+      <artifactId>stream-count-impl</artifactId>
+      <version>${honeycomb.infra.version}</version>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/vnfs/honeycomb_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java b/vnfs/honeycomb_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
new file mode 100755
index 00000000..fbcaab89
--- /dev/null
+++ b/vnfs/honeycomb_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.vpp.integration.distro;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Module;
+import io.fd.honeycomb.lisp.LispModule;
+import io.fd.honeycomb.translate.v3po.V3poModule;
+import io.fd.honeycomb.vpp.distro.VppCommonModule;
+import io.fd.honeycomb.vppnsh.impl.VppNshModule;
+import java.util.List;
+
+public class Main {
+
+    public static void main(String[] args) {
+        final List<Module> sampleModules = Lists.newArrayList(io.fd.honeycomb.infra.distro.Main.BASE_MODULES);
+
+        // All the plugins should be listed here
+        sampleModules.add(new VppCommonModule());
+        sampleModules.add(new V3poModule());
+        sampleModules.add(new LispModule());
+        sampleModules.add(new VppNshModule());
+        sampleModules.add(new io.fd.honeycomb.tutorial.Module());
+        sampleModules.add(new io.fd.honeycomb.lcmapi.Module());
+
+        io.fd.honeycomb.infra.distro.Main.init(sampleModules);
+    }
+}
diff --git a/vnfs/honeycomb_plugin/sample_plugin/parent-pom/pom.xml b/vnfs/honeycomb_plugin/sample_plugin/parent-pom/pom.xml
deleted file mode 100644
index bd1d2ac7..00000000
--- a/vnfs/honeycomb_plugin/sample_plugin/parent-pom/pom.xml
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright (c) 2016 Cisco and/or its affiliates.
-  ~
-  ~ 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.
-  -->
-
-<!--
-    Modifications copyright © 2017 AT&T Intellectual Property
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-
-<parent>
-    <groupId>org.onap.demo.vnf</groupId>
-    <artifactId>demo-aggregator</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
-    <relativePath>../../../../pom.xml</relativePath>
-</parent>
-
-    <properties>
-        <nexusproxy>http://nexus.fd.io/content</nexusproxy>
-        <start.script.template>
-#!/bin/sh -
-STATUS=100
-
-while [ $STATUS -eq 100 ]
-do
-  %s
-  STATUS=$?
-  echo "Honeycomb exited with status: $STATUS"
-  if [ $STATUS -eq 100 ]
-  then
-    echo "Restarting..."
-  fi
-done
-        </start.script.template>
-        <exec.parameters>-Xms32m -Xmx128m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=128m</exec.parameters>
-        <exec.parameters.minimal>-client -Xms20m -Xmx32m -XX:MetaspaceSize=5m -XX:MaxMetaspaceSize=32m -XX:MaxMetaspaceExpansion=1m -Xss512k -XX:+UseSerialGC -Djava.compiler=NONE -Xverify:none -noverify</exec.parameters.minimal>
-        <debug.parameters>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005</debug.parameters>
-        <guice.version>4.1.0</guice.version>
-        <guice.config.version>1.2.0</guice.config.version>
-        <restconf.version>1.3.2-Beryllium-SR2</restconf.version>
-        <netconf.version>1.0.2-Beryllium-SR2</netconf.version>
-        <jersey.version>1.19.1</jersey.version>
-        <jetty.version>9.3.11.v20160721</jetty.version>
-        <servlet.version>3.1.0</servlet.version>
-        <yangtools.version>0.8.2-Beryllium-SR2</yangtools.version>
-        <mdsal.version>1.3.2-Beryllium-SR2</mdsal.version>
-        <!-- Used by mdsal as provided/runtime dependency-->
-        <osgi.core.version>5.0.0</osgi.core.version>
-    </properties>
-
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>hc-onap</artifactId>
-    <packaging>pom</packaging>
-
-    <!-- Generate executable shell script -->
-  <modules>
-    <module>../sample-plugin-api</module>
-    <module>../sample-plugin-impl</module>
-    <module>../sample-distribution</module>
-  </modules>
-
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.3</version>
-                    <configuration>
-                        <!-- Use google's error-prone static analysis-->
-                        <compilerId>javac-with-errorprone</compilerId>
-                        <forceJavacCompilerUse>true</forceJavacCompilerUse>
-                        <showWarnings>true</showWarnings>
-                        <source>1.8</source>
-                        <target>1.8</target>
-                    </configuration>
-                    <dependencies>
-                        <dependency>
-                            <groupId>org.codehaus.plexus</groupId>
-                            <artifactId>plexus-compiler-javac-errorprone</artifactId>
-                            <version>2.5</version>
-                        </dependency>
-                        <!-- override plexus-compiler-javac-errorprone's dependency on
-                             Error Prone with the latest version -->
-                        <dependency>
-                            <groupId>com.google.errorprone</groupId>
-                            <artifactId>error_prone_core</artifactId>
-                            <version>2.0.9</version>
-                        </dependency>
-                    </dependencies>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-jar-plugin</artifactId>
-                    <version>2.6</version>
-                    <configuration>
-                        <archive>
-                            <manifest>
-                                <mainClass>${main.class}</mainClass>
-                                <addClasspath>true</addClasspath>
-                                <classpathPrefix>lib/</classpathPrefix>
-                                <useUniqueVersions>false</useUniqueVersions>
-                                <classpathMavenRepositoryLayout>true</classpathMavenRepositoryLayout>
-                            </manifest>
-                            <manifestEntries>
-                                <Class-Path>config/ cert/</Class-Path>
-                            </manifestEntries>
-                        </archive>
-                    </configuration>
-                </plugin>
-
-                <!-- Copy all dependencies -->
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <version>2.10</version>
-                    <executions>
-                        <execution>
-                            <id>copy-dependencies</id>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>copy-dependencies</goal>
-                            </goals>
-                            <configuration>
-                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                                <useBaseVersion>true</useBaseVersion>
-                                <useRepositoryLayout>true</useRepositoryLayout>
-                                <excludeArtifactIds>yang-jmx-generator</excludeArtifactIds>
-                            </configuration>
-                        </execution>
-                        <execution>
-                            <id>unpack-configuration</id>
-                            <phase>prepare-package</phase>
-                            <goals>
-                                <goal>unpack-dependencies</goal>
-                            </goals>
-                            <configuration>
-                                <includes>**/honeycomb-minimal-resources/</includes>
-                                <outputDirectory>${project.build.outputDirectory}/</outputDirectory>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-
-                <!-- Generate shell script -->
-                <plugin>
-                    <groupId>org.codehaus.gmaven</groupId>
-                    <artifactId>groovy-maven-plugin</artifactId>
-                    <version>2.0</version>
-                    <executions>
-                        <execution>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>execute</goal>
-                            </goals>
-                            <configuration>
-                                <!-- TODO add remote debug option -->
-                                <!-- TODO add clean option -->
-                                <!-- TODO add shutdown script -->
-                                <!-- TODO add restart script -->
-                                <!-- TODO pass options to JVM? -->
-                                <source>
-                                    import java.nio.file.Paths
-
-                                    log.info "Generating shell exec script"
-                                    def scriptTemplate = properties.getOrDefault("start.script.template", "")
-                                    def args = properties.getOrDefault("exec.parameters", "")
-                                    log.debug "Additional shell exec script properties: ${args}"
-                                    def javaArgs = "${args} -jar \$(dirname \$0)/${project.artifactId}-${project.version}.jar"
-                                    def scriptParent = Paths.get(project.build.outputDirectory, "honeycomb-minimal-resources")
-                                    scriptParent.toFile().mkdirs()
-                                    def scriptContent = "java " + javaArgs
-                                    log.info "Generating shell exec script as ${scriptContent}"
-                                    def scriptPath = Paths.get(scriptParent.toString(), "honeycomb")
-                                    log.info "Writing shell exec script to ${scriptPath}"
-                                    scriptPath.toFile().text = String.format(scriptTemplate, scriptContent)
-                                    scriptPath.toFile().setExecutable(true)
-
-                                    scriptPath = Paths.get(scriptParent.toString(), "honeycomb-start")
-                                    log.info "Writing shell exec script to ${scriptPath}"
-                                    scriptPath.toFile().text = "\$(dirname \$0)/honeycomb &amp;"
-                                    scriptPath.toFile().setExecutable(true)
-
-                                    def debug_args = properties.getOrDefault("debug.parameters", "")
-                                    def debugScriptContent = "java" + " ${debug_args} " + javaArgs
-                                    log.info "Generating shell debug script as ${debugScriptContent}"
-                                    scriptPath = Paths.get(scriptParent.toString(), "honeycomb-debug")
-                                    log.info "Writing shell debug script to ${scriptPath}"
-                                    scriptPath.toFile().text = String.format(scriptTemplate, debugScriptContent)
-                                    scriptPath.toFile().setExecutable(true)
-                                </source>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-
-                <!-- Build archives -->
-                <plugin>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.5.3</version>
-                    <dependencies>
-                        <dependency>
-                            <groupId>io.fd.honeycomb.common</groupId>
-                            <artifactId>minimal-assembly-descriptor</artifactId>
-                            <version>1.16.9</version>
-                        </dependency>
-                    </dependencies>
-                    <executions>
-                        <execution>
-                            <id>create-archive</id>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>single</goal>
-                            </goals>
-                            <configuration>
-                                <descriptorRefs>
-                                    <descriptorRef>honeycomb-minimal</descriptorRef>
-                                </descriptorRefs>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-
-                <plugin>
-                    <groupId>org.codehaus.mojo</groupId>
-                    <artifactId>exec-maven-plugin</artifactId>
-                    <executions>
-                        <execution>
-                            <phase>none</phase>
-                        </execution>
-                    </executions>
-                    <configuration>
-                        <skip>true</skip>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
-
-</project>
diff --git a/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/pom.xml b/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/pom.xml
deleted file mode 100755
index fa79f4cb..00000000
--- a/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/pom.xml
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
-    Modifications copyright © 2017 AT&T Intellectual Property
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-<parent>
-    <groupId>org.onap.demo.vnf</groupId>
-    <artifactId>hc-onap</artifactId>
-    <version>1.4.0-SNAPSHOT</version>
-    <relativePath>../parent-pom/pom.xml</relativePath>
-</parent>
-
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>sample-distribution</artifactId>
-
-  <properties>
-      <main.class>io.fd.honeycomb.vpp.integration.distro.Main</main.class>
-      <v3po.version>1.16.9</v3po.version>
-      <lisp.version>1.16.9</lisp.version>
-      <vpp.common.min.distro.version>1.16.9</vpp.common.min.distro.version>
-      <vppnsh.version>1.16.9</vppnsh.version>
-      <honeycomb.infra.version>1.16.9</honeycomb.infra.version>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-compiler-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.gmaven</groupId>
-        <artifactId>groovy-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-      </plugin>
-
-<plugin>
-  <groupId>org.apache.maven.plugins</groupId>
-  <artifactId>maven-deploy-plugin</artifactId>
-  <configuration>
-    <skip>false</skip>
-  </configuration>
-</plugin>
-
-<plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-install-plugin</artifactId>
-        <configuration>
-          <skip>false</skip>
-        </configuration>
-      </plugin>
-
-    </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>io.fd.honeycomb.vpp</groupId>
-      <artifactId>minimal-distribution</artifactId>
-      <version>${vpp.common.min.distro.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>io.fd.honeycomb.v3po</groupId>
-      <artifactId>v3po2vpp</artifactId>
-      <version>${v3po.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>io.fd.honeycomb.lisp</groupId>
-      <artifactId>lisp2vpp</artifactId>
-      <version>${lisp.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>io.fd.honeycomb.vppnsh</groupId>
-      <artifactId>vppnsh-impl</artifactId>
-      <version>${vppnsh.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>io.fd.honeycomb.common</groupId>
-      <artifactId>sample-plugin-impl</artifactId>
-      <version>${honeycomb.infra.version}</version>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java b/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
deleted file mode 100755
index d16c4221..00000000
--- a/vnfs/honeycomb_plugin/sample_plugin/sample-distribution/src/main/java/io/fd/honeycomb/tutorial/Main.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco and/or its affiliates.
- *
- * 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 io.fd.honeycomb.vpp.integration.distro;
-
-import com.google.common.collect.Lists;
-import com.google.inject.Module;
-import io.fd.honeycomb.lisp.LispModule;
-import io.fd.honeycomb.translate.v3po.V3poModule;
-import io.fd.honeycomb.vpp.distro.VppCommonModule;
-import io.fd.honeycomb.vppnsh.impl.VppNshModule;
-import java.util.List;
-
-public class Main {
-
-    public static void main(String[] args) {
-        final List<Module> sampleModules = Lists.newArrayList(io.fd.honeycomb.infra.distro.Main.BASE_MODULES);
-
-        // All the plugins should be listed here
-        sampleModules.add(new VppCommonModule());
-        sampleModules.add(new V3poModule());
-        sampleModules.add(new LispModule());
-        sampleModules.add(new VppNshModule());
-        sampleModules.add(new io.fd.honeycomb.tutorial.Module());
-
-        io.fd.honeycomb.infra.distro.Main.init(sampleModules);
-    }
-}
diff --git a/vnfs/honeycomb_plugin/stream-count/pom.xml b/vnfs/honeycomb_plugin/stream-count/pom.xml
new file mode 100644
index 00000000..e8bdcb9c
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Cisco and/or its affiliates.
+ 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.
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <parent>
+    <groupId>org.opendaylight.odlparent</groupId>
+    <artifactId>odlparent</artifactId>
+    <version>1.6.2-Beryllium-SR2</version>
+  </parent>
+
+  <groupId>io.fd.honeycomb.lcmapi</groupId>
+  <artifactId>stream-count-aggregator</artifactId>
+  <version>1.16.9-SNAPSHOT</version>
+  <name>stream-count-aggregator</name>
+  <packaging>pom</packaging>
+  <modelVersion>4.0.0</modelVersion>
+  <prerequisites>
+    <maven>3.1.1</maven>
+  </prerequisites>
+
+  <modules>
+    <module>stream-count-api</module>
+    <module>stream-count-impl</module>
+  </modules>
+
+  <!-- DO NOT install or deploy the repo root pom as it's only needed to initiate a build -->
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-install-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml b/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml
new file mode 100644
index 00000000..3bc79adc
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Cisco and/or its affiliates.
+ 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.
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>io.fd.honeycomb.common</groupId>
+    <artifactId>api-parent</artifactId>
+    <version>1.16.9</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>io.fd.honeycomb.lcmapi</groupId>
+  <artifactId>stream-count-api</artifactId>
+  <version>1.16.9</version>
+  <packaging>bundle</packaging>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.opendaylight.mdsal.model</groupId>
+        <artifactId>mdsal-model-artifacts</artifactId>
+        <version>0.8.2-Beryllium-SR2</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>iana-if-type-2014-05-08</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>ietf-yang-types-20130715</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>ietf-interfaces</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>ietf-inet-types-2013-07-15</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.mdsal.model</groupId>
+      <artifactId>yang-ext</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-api/src/main/yang/stream-count.yang b/vnfs/honeycomb_plugin/stream-count/stream-count-api/src/main/yang/stream-count.yang
new file mode 100644
index 00000000..bf472d45
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-api/src/main/yang/stream-count.yang
@@ -0,0 +1,67 @@
+//*************************************************************//
+//
+// Copyright © 2019 AT&T Intellectual Property. All rights reserved.
+//
+// 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.
+//
+//******************************************************************
+
+module stream-count {
+
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:stream-count";
+    prefix "stream-count";
+
+    description
+        "This YANG module defines the generic configuration and
+        operational data for stream-count in vPacketGen to be
+    	operated by ONAP controllers";
+
+    revision "2019-01-18" {
+        description "Initial revision of stream-count model";
+    }
+
+    typedef streamNum {
+        type uint32 {
+            range 1..10;
+        }
+    }
+
+    container stream-count {
+        uses stream-count-params;
+        description "Configuration data of stream-count in Honeycomb";
+
+        // READ
+        // curl -u admin:admin http://localhost:8181/restconf/config/stream-count:stream-count
+
+        // WRITE
+        // curl http://localhost:8181/restconf/operational/stream-count:stream-count
+
+    }
+
+    container stream-count-state {
+        config false;
+        uses stream-count-params;
+        description "Operational data of stream-count persisted in Honeycomb";
+
+        // READ
+        // curl -u admin:admin  http://localhost:8181/restconf/operational/stream-count:stream-count-state
+    }
+
+    grouping stream-count-params {
+    	container streams {
+            leaf active-streams {
+                type streamNum;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc
new file mode 100644
index 00000000..5e347d27
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc
@@ -0,0 +1,3 @@
+--Documentation for stream-count --
+
+TODO Replace with general description whats the purpose of stream-count and how it works
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml
new file mode 100644
index 00000000..25d6d765
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Cisco and/or its affiliates.
+ 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.
+--><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>io.fd.honeycomb.common</groupId>
+        <artifactId>impl-parent</artifactId>
+        <version>1.16.9</version>
+    </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>io.fd.honeycomb.lcmapi</groupId>
+    <artifactId>stream-count-impl</artifactId>
+    <version>1.16.9</version>
+    <packaging>bundle</packaging>
+
+    <properties>
+        <honeycomb.infra.version>1.16.9</honeycomb.infra.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>stream-count-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <!-- Honeycomb infrastructure-->
+        <dependency>
+            <groupId>io.fd.honeycomb</groupId>
+            <artifactId>translate-api</artifactId>
+            <version>${honeycomb.infra.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.fd.honeycomb</groupId>
+            <artifactId>translate-spi</artifactId>
+            <version>${honeycomb.infra.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>io.fd.honeycomb</groupId>
+            <artifactId>cfg-init</artifactId>
+            <version>${honeycomb.infra.version}</version>
+        </dependency>
+
+        <!-- DI -->
+        <dependency>
+            <groupId>com.google.inject</groupId>
+            <artifactId>guice</artifactId>
+            <version>${guice.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>net.jmob</groupId>
+            <artifactId>guice.conf</artifactId>
+            <version>${guice.config.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.inject.extensions</groupId>
+            <artifactId>guice-multibindings</artifactId>
+            <version>${guice.version}</version>
+        </dependency>
+    </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-deploy-plugin</artifactId>
+        <configuration>
+          <skip>true</skip>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java
new file mode 100644
index 00000000..b9d7f1bb
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.lcmapi;
+
+import io.fd.honeycomb.translate.read.ReadFailedException;
+import io.fd.honeycomb.translate.write.WriteFailedException;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Example of an aggregated access interface.
+ * <p/>
+ * Shared by all the customizers hiding the ugly details of our data management.
+ *
+ * TODO update javadoc
+ */
+public interface CrudService<T extends DataObject> {
+
+    /**
+     * Perform write of provided data.
+     */
+    void writeData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T data)
+            throws WriteFailedException;
+
+
+    /**
+     * Perform delete of existing data.
+     */
+    void deleteData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T data)
+            throws WriteFailedException;
+
+    /**
+     * Perform update of existing data.
+     */
+    void updateData(@Nonnull final InstanceIdentifier<T> identifier, @Nonnull final T dataOld,
+                           @Nonnull final T dataNew)
+            throws WriteFailedException;
+
+    /**
+     * Read data identified by provided identifier.
+     */
+    T readSpecific(@Nonnull final InstanceIdentifier<T> identifier) throws ReadFailedException;
+
+    /**
+     * Read all nodes of type {@link T}.
+     */
+    List<T> readAll() throws ReadFailedException;
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java
new file mode 100644
index 00000000..fa6a31d5
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.lcmapi;
+
+import io.fd.honeycomb.translate.read.ReadFailedException;
+import io.fd.honeycomb.translate.write.WriteFailedException;
+import java.util.Collections;
+import java.util.List;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.StreamsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamNum;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Simple example of class handling Crud operations for plugin.
+ * <p/>
+ * No real handling, serves just as an illustration.
+ *
+ * TODO update javadoc
+ */
+final class ElementCrudService implements CrudService<Streams> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ElementCrudService.class);
+
+    @Override
+    public void writeData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams data)
+            throws WriteFailedException {
+        if (data != null) {
+
+            // Performs any logic needed for persisting such data
+            LOG.info("Writing path[{}] / data [{}]", identifier, data);
+        } else {
+            throw new WriteFailedException.CreateFailedException(identifier, data,
+                    new NullPointerException("Provided data are null"));
+        }
+    }
+
+    @Override
+    public void deleteData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams data)
+            throws WriteFailedException {
+        if (data != null) {
+
+            // Performs any logic needed for persisting such data
+            LOG.info("Removing path[{}] / data [{}]", identifier, data);
+        } else {
+            throw new WriteFailedException.DeleteFailedException(identifier,
+                    new NullPointerException("Provided data are null"));
+        }
+    }
+
+    @Override
+    public void updateData(@Nonnull final InstanceIdentifier<Streams> identifier, @Nonnull final Streams dataOld,
+                           @Nonnull final Streams dataNew) throws WriteFailedException {
+        if (dataOld != null && dataNew != null) {
+
+            // Performs any logic needed for persisting such data
+            LOG.info("Update path[{}] from [{}] to [{}]", identifier, dataOld, dataNew);
+        } else {
+            throw new WriteFailedException.DeleteFailedException(identifier,
+                    new NullPointerException("Provided data are null"));
+        }
+    }
+
+    @Override
+    public Streams readSpecific(@Nonnull final InstanceIdentifier<Streams> identifier) throws ReadFailedException {
+
+        // load data by this key
+        // *Key class will always contain key of entity, in this case long value
+
+        return new StreamsBuilder()
+                .setActiveStreams(new StreamNum(1L))
+                .build();
+    }
+
+    @Override
+    public List<Streams> readAll() throws ReadFailedException {
+        // read all data under parent node,in this case {@link ModuleState}
+        return Collections.singletonList(
+                readSpecific(InstanceIdentifier.create(StreamCountState.class).child(Streams.class)));
+    }
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java
new file mode 100644
index 00000000..05109db3
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.lcmapi;
+
+import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
+import com.google.inject.name.Names;
+import io.fd.honeycomb.lcmapi.init.ConfigDataInitializer;
+import io.fd.honeycomb.lcmapi.write.ModuleWriterFactory;
+import io.fd.honeycomb.data.init.DataTreeInitializer;
+import io.fd.honeycomb.translate.write.WriterFactory;
+import net.jmob.guice.conf.core.ConfigurationModule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams;
+
+/**
+ * Module class instantiating stream-count plugin components.
+ */
+public final class Module extends AbstractModule {
+
+    // TODO This initiates all the plugin components, but it still needs to be registered/wired into an integration
+    // module producing runnable distributions. There is one such distribution in honeycomb project:
+    // vpp-integration/minimal-distribution
+    // In order to integrate this plugin with the distribution:
+    // 1. Add a dependency on this maven module to the the distribution's pom.xml
+    // 2. Add an instance of this module into the distribution in its Main class
+
+    @Override
+    protected void configure() {
+        // requests injection of properties
+        install(ConfigurationModule.create());
+        requestInjection(ModuleConfiguration.class);
+
+        // creates binding for interface implementation by name
+        bind(new TypeLiteral<CrudService<Streams>>(){})
+                .annotatedWith(Names.named(ELEMENT_SERVICE_NAME))
+                .to(ElementCrudService.class);
+
+        // create writer factory binding
+        // can hold multiple binding for separate yang modules
+        final Multibinder<WriterFactory> writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class);
+        writerFactoryBinder.addBinding().to(ModuleWriterFactory.class);
+
+        // create initializer binding
+        // can hold multiple binding for separate yang modules
+        final Multibinder<DataTreeInitializer> initializerBinder =
+                Multibinder.newSetBinder(binder(), DataTreeInitializer.class);
+        initializerBinder.addBinding().to(ConfigDataInitializer.class);
+    }
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java
new file mode 100644
index 00000000..c574b3ef
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.lcmapi;
+
+import net.jmob.guice.conf.core.BindConfig;
+import net.jmob.guice.conf.core.InjectConfig;
+import net.jmob.guice.conf.core.Syntax;
+
+/**
+ * Class containing static configuration for stream-count module,<br>
+ * either loaded from property file stream-count.json from classpath.
+ * <p/>
+ * Further documentation for the configuration injection can be found at:
+ * https://github.com/yyvess/gconf
+ */
+@BindConfig(value = "stream-count", syntax = Syntax.JSON)
+public final class ModuleConfiguration {
+
+    // TODO change the sample property to real plugin configuration
+    // If there is no such configuration, remove this, stream-count.json resource and its wiring from Module class
+
+    /**
+     * Sample property that's injected from external json configuration file.
+     */
+    @InjectConfig("sample-prop")
+    public String sampleProp;
+
+    /**
+     * Constant name used to identify stream-count plugin specific components during dependency injection.
+     */
+    public static final String ELEMENT_SERVICE_NAME = "element-service";
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java
new file mode 100644
index 00000000..16edd1bc
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.lcmapi.init;
+
+import io.fd.honeycomb.data.init.AbstractDataTreeConverter;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import javax.annotation.Nonnull;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Initialize configuration data based on operational data.
+ * <p/>
+ * Very useful when a plugin is initiated but the underlying layer already contains some operation state.
+ * Deriving the configuration from existing operational state enables reconciliation in case when Honeycomb's persistence
+ * is not available to do the work for us.
+ */
+public final class ConfigDataInitializer extends AbstractDataTreeConverter<StreamCountState, StreamCount> {
+
+    @Inject
+    public ConfigDataInitializer(@Named("honeycomb-initializer") @Nonnull final DataBroker bindingDataBroker) {
+        super(bindingDataBroker, InstanceIdentifier.create(StreamCountState.class), InstanceIdentifier.create(StreamCount.class));
+    }
+
+    @Override
+    public StreamCount convert(final StreamCountState operationalData) {
+        // Transfer all the operational data into configuration
+        return new StreamCountBuilder()
+                .setStreams(operationalData.getStreams())
+                .build();
+    }
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java
new file mode 100644
index 00000000..740ffdf7
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.lcmapi.write;
+
+import io.fd.honeycomb.lcmapi.CrudService;
+import io.fd.honeycomb.translate.spi.write.WriterCustomizer;
+import io.fd.honeycomb.translate.write.WriteContext;
+import io.fd.honeycomb.translate.write.WriteFailedException;
+
+import java.io.IOException;
+
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Writer for {@link Element} list node from our YANG model.
+ */
+
+public final class ElementCustomizer implements WriterCustomizer<Streams> {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ElementCustomizer.class);
+
+    private final CrudService<Streams> crudService;
+
+    public ElementCustomizer(@Nonnull final CrudService<Streams> crudService) {
+        this.crudService = crudService;
+    }
+
+    @Override
+    public void writeCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id, @Nonnull final Streams dataAfter,
+                                       @Nonnull final WriteContext writeContext) throws WriteFailedException {
+        //perform write of data,or throw exception
+        //invoked by PUT operation,if provided data doesn't exist in Config data
+        crudService.writeData(id, dataAfter);
+        try {
+            runScript(dataAfter.getActiveStreams().getValue());
+        }
+        catch (IOException e) {
+            String message = "Write operation failed " + e;
+            LOG.error(message);
+        }
+    }
+
+    @Override
+    public void updateCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id,
+                                        @Nonnull final Streams dataBefore,
+                                        @Nonnull final Streams dataAfter, @Nonnull final WriteContext writeContext)
+            throws WriteFailedException {
+        //invoked by PUT operation,if provided data does exist in Config data
+        crudService.updateData(id, dataBefore, dataAfter);
+        try {
+            runScript(dataAfter.getActiveStreams().getValue());
+        }
+        catch (IOException e) {
+            String message = "Write operation failed " + e;
+            LOG.error(message);
+        }
+    }
+
+    @Override
+    public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier<Streams> id,
+                                        @Nonnull final Streams dataBefore,
+                                        @Nonnull final WriteContext writeContext) throws WriteFailedException {
+        //perform delete of data,or throw exception
+        // Not supported, throw exception
+        throw new WriteFailedException.DeleteFailedException(id,
+                new UnsupportedOperationException("Delete operation not supported"));
+    }
+
+    //Update the number of running streams running a custom script that uses the old vPacketGen REST APIs
+    private void runScript(long streams) throws IOException {
+
+        String script = new String("bash /opt/update_running_streams.sh " + streams);
+        Runtime.getRuntime().exec(script);
+        String message = "Number of running streams updated to " + streams;
+        LOG.info(message);
+    }
+}
diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java
new file mode 100644
index 00000000..1de39761
--- /dev/null
+++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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.
+ */
+
+/*
+ * Modifications copyright (c) 2019 AT&T Intellectual Property
+ */
+
+package io.fd.honeycomb.lcmapi.write;
+
+import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import io.fd.honeycomb.lcmapi.CrudService;
+import io.fd.honeycomb.translate.impl.write.GenericWriter;
+import io.fd.honeycomb.translate.write.WriterFactory;
+import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Factory producing writers for stream-count plugin's data.
+ */
+public final class ModuleWriterFactory implements WriterFactory {
+
+    private static final InstanceIdentifier<StreamCount> ROOT_CONTAINER_ID = InstanceIdentifier.create(StreamCount.class);
+
+    /**
+     * Injected crud service to be passed to customizers instantiated in this factory.
+     */
+    @Inject
+    @Named(ELEMENT_SERVICE_NAME)
+    private CrudService<Streams> crudService;
+
+    @Override
+    public void init(@Nonnull final ModifiableWriterRegistryBuilder registry) {
+
+        //adds writer for child node
+        //no need to add writers for empty nodes
+        registry.add(new GenericWriter<>(ROOT_CONTAINER_ID.child(Streams.class), new ElementCustomizer(crudService)));
+    }
+}
diff --git a/vnfs/vFW/scripts/run_traffic_fw_demo.sh b/vnfs/vFW/scripts/run_traffic_fw_demo.sh
index f927097e..e8f1bcf2 100755
--- a/vnfs/vFW/scripts/run_traffic_fw_demo.sh
+++ b/vnfs/vFW/scripts/run_traffic_fw_demo.sh
@@ -1,13 +1,9 @@
 #!/bin/bash
 
-#curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d '{"pg-streams":{"pg-stream": [{"id":"fw_udp1", "is-enabled":"true"},{"id":"fw_udp2", "is-enabled":"true"},{"id":"fw_udp3", "is-enabled":"true"},{"id":"fw_udp4", "is-enabled":"true"},{"id":"fw_udp5", "is-enabled":"true"}]}}' "http://localhost:8183/restconf/config/sample-plugin:sample-plugin/pg-streams"
-
-#sleep 300
-
 while [ 1 ] 
 do
-curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d '{"pg-streams":{"pg-stream": [{"id":"fw_udp1", "is-enabled":"true"},{"id":"fw_udp2", "is-enabled":"true"},{"id":"fw_udp3", "is-enabled":"true"},{"id":"fw_udp4", "is-enabled":"true"},{"id":"fw_udp5", "is-enabled":"true"},{"id":"fw_udp6", "is-enabled":"true"},{"id":"fw_udp7", "is-enabled":"true"},{"id":"fw_udp8", "is-enabled":"true"},{"id":"fw_udp9", "is-enabled":"true"},{"id":"fw_udp10", "is-enabled":"true"}]}}' "http://localhost:8183/restconf/config/sample-plugin:sample-plugin/pg-streams"
+curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d '{"streams": {"active-streams": 10}}' http://localhost:8183/restconf/config/stream-count:stream-count/streams
 sleep 300
-curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d '{"pg-streams":{"pg-stream": [{"id":"fw_udp1", "is-enabled":"true"}]}}' "http://localhost:8183/restconf/config/sample-plugin:sample-plugin/pg-streams"
+curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d '{"streams": {"active-streams": 1}}' http://localhost:8183/restconf/config/stream-count:stream-count/streams
 sleep 300
-done
+done
\ No newline at end of file
diff --git a/vnfs/vFW/scripts/update_running_streams.sh b/vnfs/vFW/scripts/update_running_streams.sh
new file mode 100644
index 00000000..6ba0b9d5
--- /dev/null
+++ b/vnfs/vFW/scripts/update_running_streams.sh
@@ -0,0 +1,18 @@
+#/bin/bash
+
+if [ ! "$#" -eq 1 ]
+then
+  echo "Usage: ./update_running_streams.sh [number of active streams]"
+  exit
+fi
+
+STREAMS=$1
+BODY=""
+
+for((i=1; $i<= $STREAMS; i++)); do
+  BODY+="{\"id\":\"fw_udp$i\", \"is-enabled\":\"true\"},"
+done
+
+BODY='{"pg-streams":{"pg-stream": ['${BODY%?}']}}'
+
+curl -X PUT -H "Authorization: Basic YWRtaW46YWRtaW4=" -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 9005870c-900b-2e2e-0902-ef2009bb0ff7" -d "$BODY" "http://localhost:8183/restconf/config/sample-plugin:sample-plugin/pg-streams"
\ No newline at end of file
-- 
cgit