diff --git a/LICENSES/LicenseRef-ONF-Member-1.0.txt b/LICENSES/LicenseRef-ONF-Member-1.0.txt
new file mode 100644
index 0000000..3625ce5
--- /dev/null
+++ b/LICENSES/LicenseRef-ONF-Member-1.0.txt
@@ -0,0 +1,295 @@
+NF Member-Only Software License
+Version 1.0
+June 2020
+
+This ONF Member-Only Software License (this "License") is entered into by and
+between Open Networking Foundation ("ONF") and you and/or the entity on whose
+behalf you are accessing the Works (as defined in Section 1 below) ("you").
+This License forms a legally binding contract between you and ONF in relation
+to your access to and use of the Works. You may not access or use the Works if
+you do not accept this License.
+
+By accessing or using the Works, you hereby agree to the terms of this License.
+You may not use the Works and may not accept this License if you are a person
+barred from receiving the Works under the laws of the United States or other
+countries, including the country from which you access or use the Works. If you
+are agreeing to be bound by this License on behalf of your employer or other
+entity, you represent and warrant that you have full legal authority to bind
+your employer or such entity to this License. If you do not have the requisite
+authority, you may not accept this License or access or use the Works on behalf
+of your employer or any other entity.  You and ONF acknowledge and agree as
+follows:
+
+1. DEFINITIONS.
+
+"Source" form shall mean the preferred form for making modifications, including
+but not limited to software source code, documentation source, and
+configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or
+translation of a Source form, including but not limited to compiled object
+code, generated documentation, and conversions to other media types.
+
+"Works" shall mean the works of authorship, whether in Source or Object form,
+made available under this License, as indicated by a copyright notice/header
+file that is included in or attached to the Works.
+
+2. BACKGROUND.
+
+The purpose of this License is to provide ONF member companies in good standing
+("Members") with early access to software projects currently in development by
+ONF prior to their public release, to allow Members to review and test the
+Works internally for the purpose of making further contributions to the
+applicable project.  Members who are Partner-level Members at the time they
+first access the Works are additionally permitted under this License to use the
+Works internally for the purpose of building and developing products and
+services for commercial purposes as defined in Section 4.  However, this
+License does not permit any Member, regardless of Member level, to redistribute
+all or any portion of the Works, except as part of a contribution back to the
+applicable project, in accordance with Section 8 below, or in binary form as
+provided for Partner-level Members in Section 4 below.  You understand and
+agree that ONF has the sole right to sublicense and distribute a public version
+of the final code base for the applicable project to third parties under the
+2.0 version of the Apache License, or other permissive license terms selected
+by ONF in its sole discretion.
+
+The Purpose of this License is to incubate the development of new software
+projects by providing a framework for ONF Members to access and contribute to
+the projects while minimizing the potential for forking or misuse of the
+projects.  Nothing in this Background paragraph, however, shall require ONF to
+take any particular course of action regarding any Works covered by this
+License.
+
+3. LIMITED LICENSE TO ALL MEMBERS IN GOOD STANDING.
+
+Subject to your complete and ongoing compliance with all the terms and
+conditions set forth in this License, including without limitation all license
+limitations and restrictions set forth herein, ONF grants you the following
+limited, non-exclusive, non-transferable, non-sublicensable, revocable license
+to use, and (where applicable) authorize your employees and contractors
+performing work on your behalf (but only if such contractors are themselves
+Members of ONF and accept the terms of this License) to use the Works
+internally solely in connection with (a) reviewing, testing, modifying and
+creating derivatives of the Works for the sole purpose of making contributions
+by you to the code repository for the applicable project maintained by ONF; and
+(b) building, developing and testing your own applications or components that
+may interoperate with or incorporate the Works ("Applications") for the
+purposes of internal evaluation only.
+
+4. ADDITIONAL LICENSE TO PARTNER-LEVEL MEMBERS IN GOOD STANDING.
+
+Each project subject to this License shall be declared by ONF to be in one of
+two phases:  a) Incubation Phase, or b) Partner Commercialization Phase.  Each
+project shall start in the Incubation Phase, and ONF, at its sole discretion,
+shall determine when each project moves into the Partner Commercialization
+Phase.   Each project shall be documented to be in one of these two phases in
+the Project's README documentation and can be confirmed by contacting ONF.
+
+Once any project moves into the Partner Commercialization Phase, if you are a
+Partner-level ONF Member in good standing at the time you first access the
+Works and for the entire period during which you access and use the Works, in
+addition to the rights granted in Section 3, and subject to your complete and
+ongoing compliance with all the terms and conditions set forth in this License,
+including without limitation all license limitations and restrictions set forth
+herein, ONF grants you the limited, non-exclusive, non-transferable,
+non-sublicensable, revocable license to use, and (where applicable) authorize
+your employees and contractors performing work on your behalf (but only if such
+contractors are themselves Members of ONF and accept the terms of this License)
+to use, test, modify and create derivatives of the Works internally for the
+purpose of building, developing, testing, marketing, offering for sale and
+selling commercial products and services to third parties.  Wherever possible,
+you will take reasonable precautions to ensure Works remain accessible only to
+ONF Members, and any commercial product or service requiring redistribution of
+the Works, of modifications of the Works or of derivatives of the Works must be
+made solely in binary machine code form where possible to further this aim.
+
+Partners-level Members gaining additional insights as a result of accessing and
+using the Works for commercial products and services are expected to provide
+feedback to and to make contributions to the project for the benefit of both
+the project and the general membership.
+
+You may verify your company's Partner-level membership status on the ONF
+website at: https://www.opennetworking.org/member-listing/.
+
+4.1 GRACE PERIOD FOR NON-PARTNER-LEVEL MEMBERS
+
+If you are not a Partner-level Member and you wish to benefit from the rights
+granted to ONF Partners in Section 4, you have a 90-day grace period from the
+day you first access the Works to upgrade to a Partner-Level ONF Membership.
+Should you upgrade within this grace period, you will be recognized as if you
+had been a Partner on the day you first accessed the Works for the purpose of
+interpreting your rights under Section 4.
+
+5. RESTRICTIONS.
+
+By accessing or using the Works, you represent, warrant, and covenant that you
+and/or the entity on whose behalf you are accessing the Works is a Member in
+good standing of ONF.
+
+You acknowledge that, except for the limited rights expressly set forth above,
+the foregoing licenses do not include any right to, and you agree not to (i)
+redistribute, sell, lease, license, modify or otherwise create any derivative
+works of any portion of the Works, or (ii) distribute, deploy, or otherwise
+utilize the Works or Applications for any public, production, commercial, or
+other similar purpose other than internal use for evaluation and development of
+contributions to the code repository for the applicable project maintained by
+ONF and non-public, experimental Applications.
+
+Except as expressly provided herein, you may not (w) reproduce, distribute,
+publicly display, or publicly perform any part of the Works, (x) decompile,
+reverse engineer, or otherwise access or attempt to access source code not made
+available to you in source code form, (y) make or attempt to make any
+modification to, or otherwise create any derivative works of, the Works; or (z)
+remove, obscure, interfere with or circumvent any feature of the Works,
+including without limitation any copyright or other intellectual property
+notices, security, or access control mechanism. You agree that you will not use
+the Works to do anything illegal, including facilitating, promoting, or
+otherwise encouraging any illegal activities.
+
+You represent and warrant that the Works will not be shipped, transferred or
+exported into any country or used in any manner prohibited by the United States
+Export Administration Act or any other export laws, restrictions or regulations
+(collectively the "Export Laws"). In addition, if the Works are identified as
+an export controlled item under the Export Laws, you represent and warrant that
+you are not a citizen, or otherwise located within, an embargoed nation
+(including without limitation Crimea, Cuba, Iran, North Korea, Sudan, or Syria)
+and that you are not otherwise prohibited under the Export Laws from receiving
+the Works.
+
+ANY USE IN VIOLATION OF THE FOREGOING LIMITATIONS AND RESTRICTIONS IS STRICTLY
+PROHIBITED, AND UNLICENSED.
+
+6. RESERVATION OF RIGHTS.
+
+The Works are owned by ONF and/or its licensors, and are licensed, not sold, to
+you. The Works are protected by copyright, trade dress, patent, and trademark
+laws of the United States and other jurisdictions, international conventions,
+and all other relevant intellectual property and proprietary rights, and
+applicable laws (collectively, the "Intellectual Property Rights"). You agree
+that ONF or its subsidiaries or affiliated companies and/or its licensors own
+all legal right, title and interest in and to the Works, including any and all
+Intellectual Property Rights. ONF reserves all rights not expressly granted in
+this License. You do not acquire any right, title or interest to the Works,
+whether by implication, estoppel, or otherwise, except for the limited rights
+set forth in this License.
+
+You agree that the form and nature of the Works that ONF provides may change
+without prior notice to you and that future versions of the Works may be
+incompatible with applications developed using previous versions of the Works.
+You agree that ONF may stop (permanently or temporarily) providing the Works
+(or any features within the Works) to you or to users generally at ONF's sole
+discretion, without prior notice to you. Nothing in this License gives you a
+right to use any of ONF's trade names, trademarks, service marks, logos, domain
+names, or other distinctive brand features.
+
+7. PURPOSE AND USE.
+
+You agree that you will not engage in any activity with the Works, including
+the development or distribution of an Application that interferes with,
+disrupts, damages, or accesses in an unauthorized manner the servers, networks,
+or other properties or services of any third party. You agree that you are
+solely responsible for (and that ONF has no responsibility to you or to any
+third party for) any data, content, or resources that you create, transmit or
+display. You agree that you are solely responsible for (and that ONF has no
+responsibility to you or to any third party for) any breach of your obligations
+under this License, any applicable third party contract or terms of service, or
+any applicable law or regulation, and for the consequences (including any loss
+or damage which ONF or any third party may suffer) of any such breach.
+
+8. FEEDBACK; CONTRIBUTIONS.
+
+If you provide ONF with any comments, bug reports, feedback, enhancements, or
+modifications proposed or suggested by you for the Works ("Feedback"), such
+Feedback will be submitted as a Contribution to the applicable project
+maintained by ONF under the terms and conditions of a Contributor License
+Agreement between you and ONF, is provided on a non-confidential basis
+(notwithstanding any notice to the contrary you may include in any accompanying
+communication), and ONF shall have the right to use such Feedback at its
+discretion, including, but not limited to the incorporation of such Feedback
+into the Works and any final code base that may be derived from the Works.
+
+9. TERMINATION OF THIS LICENSE.
+
+This License will continue to apply until terminated by either you or ONF as
+set out below. If you want to terminate this License, you may do so by ceasing
+your use of the Works. If you cease being a Member in good standing of ONF,
+this License will terminate automatically and without further notice to you.
+ONF may at any time terminate this License: (a) if you have breached any
+provision of this License; or (b) at ONF's convenience.  When this License
+comes to an end, except as otherwise set forth in this paragraph 9, all of the
+legal rights, obligations and liabilities that you and ONF have benefited from,
+been subject to (or which have accrued over time while this License has been in
+force) or which are expressed to continue indefinitely, shall be unaffected by
+this cessation, and paragraphs 1, 2 and 5 through 14 shall continue to apply to
+such rights, obligations and liabilities indefinitely.  In addition, unless
+this License is terminated by ONF as a result of your breach of any provision
+of this License, Partner-level Members entitled to the benefits of Section 4 of
+this License shall also retain all rights granted by Section 4 so as long as
+you remain a Partner-level Member in good standing.
+
+10. DISCLAIMER OF WARRANTIES.
+
+YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE WORKS IS AT YOUR SOLE
+RISK AND THAT THE WORKS ARE PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT
+WARRANTY OF ANY KIND FROM ONF. YOUR USE OF THE WORKS IS AT YOUR OWN DISCRETION
+AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM
+OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. ONF FURTHER
+EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. ONF
+EXPRESSLY DISCLAIMS ANY WARRANTIES OF ANY KIND WITH RESPECT TO THE ACCURACY OR
+FUNCTIONALITY OF THE WORKS, AND WITH RESPECT TO THE ACCURACY, VALIDITY, OR
+COMPLETENESS OF ANY INFORMATION OR FEATURES AVAILABLE THROUGH THE WORKS, OR THE
+QUALITY OR CONSISTENCY OF THE WORKS OR RESULTS OBTAINED THROUGH THEIR USE.
+
+11. LIMITATION OF LIABILITY.
+
+YOU EXPRESSLY UNDERSTAND AND AGREE THAT ONF, ITS SUBSIDIARIES AND AFFILIATES,
+AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES
+THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT ONF OR
+ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE
+POSSIBILITY OF ANY SUCH LOSSES. IN NO EVENT WILL ONF'S AGGREGATE LIABILITY FOR
+DAMAGES ARISING OUT OF THIS LICENSE OR YOUR USE OF THE WORKS EXCEED THE GREATER
+OF AMOUNTS PAID BY YOU FOR THE WORKS, IF ANY.
+
+12. INDEMNIFICATION.
+
+To the maximum extent permitted by law, you agree to defend, indemnify and hold
+harmless ONF, its affiliates and their respective directors, officers,
+employees and agents from and against any and all claims, actions, suits or
+proceedings, as well as any and all losses, liabilities, damages, costs and
+expenses (including reasonable attorneys' fees) arising out of or accruing from
+(a) your use of the Works, (b) any Application or (for Partner-level Members)
+commercial product or service you develop using the Works that infringes any
+copyright, trademark, trade secret, trade dress, patent or other intellectual
+property right of any person, and (c) any non-compliance by you with this
+License or any applicable law or regulation.
+
+13. CHANGES TO THIS LICENSE.
+
+ONF may make changes to this License as it distributes new versions of the
+Works. When these changes are made, ONF will make a new version of this License
+available on the ONF website.
+
+14. MISCELLANEOUS TERMS.
+
+This License constitutes the entire legal agreement between you and ONF with
+regard to your access and use of the Works, and governs your access and use of
+the Works and completely supersedes any prior agreements between you and ONF in
+relation to the Works, except for any Contributor License Agreement you may
+have executed with ONF. You agree that if ONF does not exercise or enforce any
+legal right or remedy which is contained in this License (or which ONF has the
+benefit of under any applicable law), this will not be taken to be a formal
+waiver of ONF's rights and that those rights or remedies will still be
+available to ONF. If any court of law, having the jurisdiction to decide on
+this matter, rules that any provision of this License is invalid, then that
+provision will be removed from this License without affecting the rest of this
+License. The remaining provisions of this License will continue to be valid and
+enforceable so long as this License, as so modified, does not substantially
+impair the respective expectations or reciprocal obligations of the parties.
+The rights granted in this License may not be assigned or transferred by you
+without the prior written approval of ONF. You shall not be permitted to
+delegate your responsibilities or obligations under this License without the
+Prior written approval of ONF.
+
