+
+RUN apt-get update && apt-get install -y \
+ stgit \
+ gperf \
+ gawk \
+ automake \
+ libexpat1-dev \
+ libtool-bin \
+ xorriso
+
+#
+# Docker shell and other container tools.
+#
+COPY docker_shell /bin/docker_shell
+COPY container-id /bin/container-id
diff --git a/docker/images/builder8/1.4/Makefile b/docker/images/builder8/1.4/Makefile
new file mode 100644
index 00000000..994063cf
--- /dev/null
+++ b/docker/images/builder8/1.4/Makefile
@@ -0,0 +1,19 @@
+VERSION=1.4
+USER=opennetworklinux
+REPO=builder8
+
+TOOLS=../../../tools/docker_shell ../../../tools/container-id
+
+build: check_version
+ cp $(TOOLS) .
+ docker build -t $(USER)/$(REPO):$(VERSION) .
+ rm -rf $(notdir $(TOOLS))
+
+#
+# Todo: Query remote repository to see if the request version already exists to avoid accidental overwrites
+# when a new image is built but the VERSION variable is not updated.
+#
+check_version:
+
+push:
+ docker push $(USER)/$(REPO):$(VERSION)
diff --git a/docs/SupportedHardware.md b/docs/SupportedHardware.md
index b3b14899..d8fa0b41 100644
--- a/docs/SupportedHardware.md
+++ b/docs/SupportedHardware.md
@@ -31,7 +31,7 @@ Accton/Edge-Core
| Accton AS5610-52X | 48x10G + 4x40G | FreeScale P2020 | Broadcom BCM56846 (Trident+) | Yes | Yes | Yes | No | No | No |
| Accton AS5710-54X | 48x10G + 6x40G | FreeScale P2041 | Broadcom BCM56854 (Trident2) | Yes | Yes | Yes | Yes*** | Yes*** | No |
| Accton AS6700-32X | 32x40G | FreeScale P2041 | Broadcom BCM56850 (Trident2) | Yes | Yes | Yes | No | No | No |
- | Accton AS5512-54X | 48x10G + 6x40G | Intel Rangeley C2538 x86 | MediaTek MT3257 | No | No | No | No | No | No |
+ | Accton AS5512-54X | 48x10G + 6x40G | Intel Rangeley C2538 x86 | MediaTek/Nephos MT3258 | No | No | No | No | No | No |
| Accton AS5712-54X | 48x10G + 6x40G | Intel Rangeley C2538 x86 | Broadcom BCM56854 (Trident2) | Yes | Yes | Yes | Yes*** | Yes*** | No |
| Accton AS6712-32X | 32x40G | Intel Rangeley C2538 x86 | Broadcom BCM56850 (Trident2) | Yes | Yes | Yes | Yes*** | Yes*** | No |
| Accton AS5812-54T | 48x10G + 6x40G | Intel Rangeley C2538 x86 | Broadcom BCM56864 (Trident2+) | Yes | Yes | No | No | No | No |
@@ -40,6 +40,7 @@ Accton/Edge-Core
| Accton AS7712-32X | 32x100G | Intel Rangeley C2538 x86 | Broadcom BCM56960 (Tomahawk) | Yes | Yes | Yes | Yes*** | Yes*** | No |
| Accton AS7716-32X | 32x100G | Intel Xeon D-1518 x86 | Broadcom BCM56960 (Tomahawk) | Yes | Yes | No | Yes*** | Yes*** | No |
| Accton Wedge-16X | 16x40G | Intel Rangeley C2550 x86 | Broadcom BCM56864 (Trident2+) | Work In Progress** | Yes | No | No | Yes | No |
+ | Accton (FB) Wedge 100 | 32x100G | Intel Bay Trail E3845 x86 | Broadcom BCM56960 (Tomahawk) | Work In Progress** | Yes | No | No | Yes | No |
DNI/Agema
diff --git a/make/config.mk b/make/config.mk
index cd957fba..0e8c23aa 100644
--- a/make/config.mk
+++ b/make/config.mk
@@ -27,7 +27,7 @@ export ONL_DEBIAN_SUITE_$(ONL_DEBIAN_SUITE)=1
export BUILD_DIR_BASE=BUILD/$(ONL_DEBIAN_SUITE)
# Generate manifest if necessary
-export MODULEMANIFEST := $(shell $(BUILDER)/tools/mmg.py --dirs $(ONL) $(ONLPM_OPTION_PACKAGEDIRS) --out $(ONL)/make/module-manifest.mk --only-if-missing make)
+export MODULEMANIFEST := $(shell $(BUILDER)/tools/mmg.py $(ONL)/make/mmg.yml $(ONL) --only-if-missing)
# Generate versions if necessary.
$(shell $(ONL)/tools/make-versions.py --import-file=$(ONL)/tools/onlvi --class-name=OnlVersionImplementation --output-dir $(ONL)/make/versions)
diff --git a/make/kbuild.mk b/make/kbuild.mk
index 78f3b978..7bfa8117 100644
--- a/make/kbuild.mk
+++ b/make/kbuild.mk
@@ -153,7 +153,8 @@ endif
endif
-MODSYNCLIST := .config Module.symvers Makefile include scripts arch/x86/include arch/x86/Makefile arch/powerpc/include arch/powerpc/Makefile arch/powerpc/lib
+MODSYNCLIST_DEFAULT := .config Module.symvers Makefile include scripts arch/x86/include arch/x86/Makefile arch/powerpc/include arch/powerpc/Makefile arch/powerpc/lib arch/arm/include arch/arm/Makefile arch/arm/lib
+MODSYNCLIST := $(MODSYNCLIST_DEFAULT) $(MODSYNCLIST_EXTRA)
mbuild: build
rm -rf $(K_MBUILD_DIR)
diff --git a/make/mmg.yml b/make/mmg.yml
new file mode 100644
index 00000000..e6c9626e
--- /dev/null
+++ b/make/mmg.yml
@@ -0,0 +1,9 @@
+directories:
+ - .
+
+manifest: make/module-manifest.mk
+
+
+
+
+
diff --git a/make/rfs.mk b/make/rfs.mk
index 1c8e0d52..f137e411 100644
--- a/make/rfs.mk
+++ b/make/rfs.mk
@@ -28,10 +28,14 @@ ifdef RFS_SQUASH
RFS_COMMAND += --squash $(RFS_SQUASH)
endif
+ifndef RFS_MANIFEST
+RFS_MANIFEST := etc/onl/rootfs/manifest.json
+endif
+
RFS:
$(ONL_V_at) rm -rf manifest.json
$(ONL_V_at) $(RFS_COMMAND)
- $(ONL_V_at) [ -f $(RFS_DIR)/etc/onl/rootfs/manifest.json ] && cp $(RFS_DIR)/etc/onl/rootfs/manifest.json .
+ $(ONL_V_at) [ -f $(RFS_DIR)/$(RFS_MANIFEST) ] && cp $(RFS_DIR)/$(RFS_MANIFEST) .
clean:
$(ONL_V_at) sudo rm -rf $(RFS_DIR)
diff --git a/packages/base/all/boot.d/src/50.initmounts b/packages/base/all/boot.d/src/50.initmounts
index 8aa7ca5b..71f7410f 100755
--- a/packages/base/all/boot.d/src/50.initmounts
+++ b/packages/base/all/boot.d/src/50.initmounts
@@ -2,5 +2,5 @@
. /lib/lsb/init-functions
log_action_begin_msg "Mounting filesystems..."
-initmounts -q
+onl-mounts -q mount all
log_action_end_msg 0
diff --git a/packages/base/all/boot.d/src/51.pki b/packages/base/all/boot.d/src/51.pki
index 5752d4e9..fb153d5d 100755
--- a/packages/base/all/boot.d/src/51.pki
+++ b/packages/base/all/boot.d/src/51.pki
@@ -1,6 +1,6 @@
#!/bin/sh
-if [ -f /usr/bin/pki ]; then
- /usr/bin/pki --init
+if [ -f /usr/bin/onl-pki ]; then
+ /usr/bin/onl-pki --init
fi
diff --git a/packages/base/all/boot.d/src/52.rc.boot b/packages/base/all/boot.d/src/52.rc.boot
new file mode 100755
index 00000000..ffb8dc89
--- /dev/null
+++ b/packages/base/all/boot.d/src/52.rc.boot
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+############################################################
+#
+# If any rc.boot scripts are present in any mounted
+# partition they will be executed at boot time.
+#
+############################################################
+for dir in boot config images data; do
+ script=/mnt/onl/$dir/rc.boot
+ if [ -x "$script" ]; then
+ echo "Executing $script..."
+ $script
+ fi
+done
diff --git a/packages/base/all/boot.d/src/53.install-debs b/packages/base/all/boot.d/src/53.install-debs
new file mode 100755
index 00000000..e31d382d
--- /dev/null
+++ b/packages/base/all/boot.d/src/53.install-debs
@@ -0,0 +1,16 @@
+#!/bin/sh
+############################################################
+PACKAGE_DIR=/mnt/onl/data/install-debs
+PACKAGE_LIST="$PACKAGE_DIR/list"
+
+if [ -e "$PACKAGE_LIST" ]; then
+ for package in $(cat $PACKAGE_LIST); do
+ echo "Installing packages $package..."
+ if ! dpkg -i "$PACKAGE_DIR/$package"; then
+ echo "Failed."
+ exit 1
+ fi
+ done
+fi
+
+
diff --git a/packages/base/all/initrds/loader-initrd-files/src/bin/swiprep b/packages/base/all/initrds/loader-initrd-files/src/bin/swiprep
index 0753957c..59ca494e 100755
--- a/packages/base/all/initrds/loader-initrd-files/src/bin/swiprep
+++ b/packages/base/all/initrds/loader-initrd-files/src/bin/swiprep
@@ -193,7 +193,12 @@ if test "${mode_install}${mode_overlay}"; then
mkdir -p "$destdir/etc/onl"
- cp -R /etc/onl/* "$destdir/etc/onl/."
+ for thing in /etc/onl/*; do
+ if test $thing != "sysconfig"; then
+ cp -R $thing "$destdir/etc/onl/."
+ fi
+ done
+
if [ -f /etc/fw_env.config ]; then
cat /etc/fw_env.config > "$destdir/etc/fw_env.config"
fi
diff --git a/packages/base/all/initrds/loader-initrd-files/src/bin/sysinit b/packages/base/all/initrds/loader-initrd-files/src/bin/sysinit
index 08500c6f..81d327e0 100755
--- a/packages/base/all/initrds/loader-initrd-files/src/bin/sysinit
+++ b/packages/base/all/initrds/loader-initrd-files/src/bin/sysinit
@@ -69,8 +69,11 @@ if [ ! -f /etc/onl/abort ]; then
# Initialize net devices
( cd /sys/class/net; for d in *; do initnetdev $d add; done )
- # Initialize platform mounts
- initmounts -q
+ # FS Checks
+ onl-mounts fsck all
+
+ # Mounts
+ onl-mounts -q mount all
# Initialize U-Boot environment
if [ -s /proc/device-tree/model ]; then
@@ -100,8 +103,8 @@ fi
#
# Initialize PKI
#
-if [ -f /sbin/pki ]; then
- /sbin/pki --init
+if [ -f /sbin/onl-pki ]; then
+ /sbin/onl-pki --init
fi
diff --git a/packages/base/all/initrds/loader-initrd-files/src/etc/mtab.yml b/packages/base/all/initrds/loader-initrd-files/src/etc/mtab.yml
index 8026f979..cb7635b1 100644
--- a/packages/base/all/initrds/loader-initrd-files/src/etc/mtab.yml
+++ b/packages/base/all/initrds/loader-initrd-files/src/etc/mtab.yml
@@ -1,19 +1,20 @@
mounts:
ONL-IMAGES:
- mount: w
+ mount: rw
dir: /mnt/onl/images
fsck: true
ONL-DATA:
- mount: w
+ mount: rw
dir: /mnt/onl/data
+ fsck: true
ONL-CONFIG:
- mount: false
+ mount: ro
dir: /mnt/onl/config
fsck: true
ONL-BOOT:
- mount: w
+ mount: rw
dir: /mnt/onl/boot
- fsck: false
+ fsck: true
diff --git a/packages/base/all/initrds/loader-initrd-files/src/etc/onl/config/csr.yml b/packages/base/all/initrds/loader-initrd-files/src/etc/onl/config/csr.yml
deleted file mode 100644
index c64b4847..00000000
--- a/packages/base/all/initrds/loader-initrd-files/src/etc/onl/config/csr.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-C: US
-ST: CA
-O: Open Compute Project
-localityName: Santa Clara
-commonName: Networking
-organizationalUnitName: Open Network Linux
-emailAddress: support@bigswitch.com
diff --git a/packages/base/all/vendor-config-onl/PKG.yml b/packages/base/all/vendor-config-onl/PKG.yml
index a1fecbf9..4c641ae4 100644
--- a/packages/base/all/vendor-config-onl/PKG.yml
+++ b/packages/base/all/vendor-config-onl/PKG.yml
@@ -8,19 +8,13 @@ packages:
summary: ONL Base Configuration Package
files:
- src/python/onl : $PY_INSTALL/onl
- src/boot.d : /etc/boot.d
- src/bin/initubootenv: /sbin/initubootenv
- src/bin/initmounts: /sbin/initmounts
- src/bin/initnetdev: /sbin/initnetdev
- src/bin/pki : /sbin/pki
- src/bin/loader-shell: /usr/bin/loader-shell
- src/bin/onie-shell: /usr/bin/onie-shell
- src/bin/onl-platform-show: /usr/bin/onl-platform-show
- src/bin/onl-install: /usr/bin/onl-install
- src/bin/onl-recover: /usr/bin/onl-recover
- src/bin/pyfit: /usr/bin/pyfit
- src/lib : /lib/vendor-config/onl
+ - src/python/onl : $PY_INSTALL/onl
+ - $ONL/tools/onlyaml.py : $PY_INSTALL/onl/onlyaml/__init__.py
+ - src/etc : /etc
+ - src/boot.d : /etc/boot.d
+ - src/bin : /usr/bin
+ - src/lib : /lib/vendor-config/onl
+
changelog: Changes
@@ -33,10 +27,12 @@ packages:
summary: ONL Base Configuration Package (Loader)
files:
- src/python/onl : $PY_INSTALL/onl
- src/bin/initmounts : /bin/initmounts
- src/bin/initubootenv : /bin/initubootenv
- src/bin/initnetdev : /bin/initnetdev
- src/bin/pki : /sbin/pki
+ - src/python/onl : $PY_INSTALL/onl
+ - $ONL/tools/onlyaml.py : $PY_INSTALL/onl/onlyaml/__init__.py
+ - src/etc : /etc
+ - src/bin/onl-mounts : /bin/onl-mounts
+ - src/bin/initubootenv : /bin/initubootenv
+ - src/bin/initnetdev : /bin/initnetdev
+ - src/bin/onl-pki : /sbin/onl-pki
changelog: Changes
diff --git a/packages/base/all/vendor-config-onl/src/bin/initmounts b/packages/base/all/vendor-config-onl/src/bin/onl-mounts
similarity index 61%
rename from packages/base/all/vendor-config-onl/src/bin/initmounts
rename to packages/base/all/vendor-config-onl/src/bin/onl-mounts
index a2ccaecd..dca2046b 100755
--- a/packages/base/all/vendor-config-onl/src/bin/initmounts
+++ b/packages/base/all/vendor-config-onl/src/bin/onl-mounts
@@ -1,3 +1,3 @@
#!/usr/bin/python
from onl.mounts import OnlMountManager
-OnlMountManager.main()
+OnlMountManager.main('onl-mounts')
diff --git a/packages/base/all/vendor-config-onl/src/bin/onl-pki b/packages/base/all/vendor-config-onl/src/bin/onl-pki
new file mode 100755
index 00000000..bd8463ff
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/bin/onl-pki
@@ -0,0 +1,3 @@
+#!/usr/bin/python
+from onl.pki import OnlPki
+OnlPki.main()
diff --git a/packages/base/all/vendor-config-onl/src/bin/onl-sysconfig b/packages/base/all/vendor-config-onl/src/bin/onl-sysconfig
new file mode 100755
index 00000000..3b651d5a
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/bin/onl-sysconfig
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+import os
+import sys
+from onl.sysconfig import sysconfig
+import yaml
+
+if len(sys.argv) == 2:
+ try:
+ print yaml.dump((eval("sysconfig.%s" % sys.argv[1])), default_flow_style=False)
+ except AttributeError, e:
+ print "Path %s is not in the config." % sys.argv[1]
+else:
+ print sysconfig['OnlSystemConfig'].dump()
+
diff --git a/packages/base/all/vendor-config-onl/src/bin/pki b/packages/base/all/vendor-config-onl/src/bin/pki
deleted file mode 100755
index eb5105a8..00000000
--- a/packages/base/all/vendor-config-onl/src/bin/pki
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/python
-from onl.pki import OnlPKI
-OnlPKI.main()
diff --git a/packages/base/all/vendor-config-onl/src/boot.d/62.upgrade-loader b/packages/base/all/vendor-config-onl/src/boot.d/62.upgrade-loader
index 12b2716a..bf9459a4 100755
--- a/packages/base/all/vendor-config-onl/src/boot.d/62.upgrade-loader
+++ b/packages/base/all/vendor-config-onl/src/boot.d/62.upgrade-loader
@@ -8,6 +8,8 @@ import os
import sys
import fnmatch
from onl.upgrade import ubase
+from onl.sysconfig import sysconfig
+from onl.mounts import OnlMountManager, OnlMountContextReadOnly, OnlMountContextReadWrite
class Loader_Upgrade(ubase.BaseUpgrade):
name="loader"
@@ -18,15 +20,20 @@ class Loader_Upgrade(ubase.BaseUpgrade):
current_version_key="Current Loader Version"
next_version_key="Next Loader Version"
+ def auto_upgrade_default(self):
+ return sysconfig.upgrade.loader.auto
+
def init_versions(self):
+
#
# Current Loader version file.
# If this file doesn't exist then in-place upgrade is not supported.
#
- ETC_LOADER_VERSIONS_JSON = "/etc/onl/loader/versions.json"
+ ETC_LOADER_VERSIONS_JSON = sysconfig.upgrade.loader.versions
# Upgrade Loader Version file.
- NEXT_LOADER_VERSIONS_JSON = "/etc/onl/upgrade/%s/manifest.json" % self.parch
+ NEXT_LOADER_VERSIONS_JSON = os.path.join(sysconfig.upgrade.loader.package.dir, "manifest.json")
+
self.current_version = self.load_json(ETC_LOADER_VERSIONS_JSON,
"RELEASE_ID",
@@ -51,55 +58,18 @@ class Loader_Upgrade_FIT(Loader_Upgrade):
def do_upgrade(self, forced=False):
- FIT_UPGRADE_IMAGE_PLATFORM="/etc/onl/upgrade/%s/%s.itb" % (self.parch, self.platform.platform())
- FIT_UPGRADE_IMAGE_ALL="/etc/onl/upgrade/%s/onl-loader-fit.itb" % (self.parch)
- FIT_LOADER_IMAGE_NAME="%s.itb" % self.platform.platform()
-
fit_image = None
+ for f in sysconfig.upgrade.loader.package.fit_images:
+ fp = os.path.join(sysconfig.upgrade.loader.package.dir, f)
+ if os.path.exists(fp):
+ fit_image = fp;
+ break
- if os.path.exists(FIT_UPGRADE_IMAGE_PLATFORM):
- fit_image = FIT_UPGRADE_IMAGE_PLATFORM
- elif os.path.exists(FIT_UPGRADE_IMAGE_ALL):
- fit_image = FIT_UPGRADE_IMAGE_ALL
- else:
+ if fit_image is None:
self.abort("The FIT upgrade image is missing. Upgrade cannot continue.")
- #
- # The platform configuration file will describe which partition
- # and which format should be used to store the FIT image.
- #
- partition = None
- raw = False
- pc = self.platform.platform_config
-
- if pc:
- if 'loader' in pc and pc['loader']:
- if 'partition' in pc['loader']:
- partition = pc['loader']['partition']
- else:
- self.abort("No partition listed in the loader section of the platform configuration.")
- raw = pc['loader'].get('raw', False)
- else:
- self.abort("No loader section listed in the platform configuration.")
- else:
- self.abort("No platform configuration.")
-
- if raw:
- #
- # The loader file is written raw to the given partition.
- #
- print "Writing %s to %s..." % (fit_image, partition)
- if os.system("dd of=%s if=%s" % (partition, fit_image)) != 0:
- self.abort("Failure writing loader data to partition %s." % (partition))
-
- else:
- #
- # Mount the loader partition and rewrite the loader image.
- #
- mdir="/mnt/upgrade/loader"
- self.mount(mdir, partition=partition)
- self.copyfile(fit_image, os.path.join(mdir, FIT_LOADER_IMAGE_NAME))
- self.umount(mdir)
+ with OnlMountContextReadWrite("ONL-BOOT", self.logger) as d:
+ self.copyfile(fit_image, os.path.join(d.directory, "%s.itb" % (self.platform.platform())))
self.reboot()
@@ -108,32 +78,26 @@ class Loader_Upgrade_x86_64(Loader_Upgrade):
def do_upgrade(self, forced=False):
- X86_64_UPGRADE_DIR="/etc/onl/upgrade/%s/" % (self.parch)
- X86_64_UPGRADE_PATTERNS = [ "kernel-*", "initrd-*" ]
+ X86_64_UPGRADE_DIR=sysconfig.upgrade.loader.package.dir
+ X86_64_UPGRADE_PATTERNS = [ "kernel-*", "*initrd*" ]
- #
- # Mount the ONL-BOOT partition
- #
- mdir="/mnt/onl-boot"
- self.mount(mdir, label="ONL-BOOT")
+ with OnlMountContextReadWrite("ONL-BOOT", self.logger) as d:
+ for f in os.listdir(X86_64_UPGRADE_DIR):
+ for pattern in X86_64_UPGRADE_PATTERNS:
+ if fnmatch.fnmatch(f, pattern):
+ self.copyfile(os.path.join(X86_64_UPGRADE_DIR, f), os.path.join(d.directory, f))
- for f in os.listdir(X86_64_UPGRADE_DIR):
- for pattern in X86_64_UPGRADE_PATTERNS:
- if fnmatch.fnmatch(f, pattern):
- self.copyfile(os.path.join(X86_64_UPGRADE_DIR, f), os.path.join(mdir, f))
+ # Disabled until it can be resolved with the new installer.
+ #src = "/lib/platform-config/current/onl/boot/grub.cfg"
+ #dst = os.path.join(d.directory, "grub/grub.cfg")
+ #if os.path.exists(src):
+ # self.copyfile(src, dst)
- src = "/lib/platform-config/current/onl/boot/grub.cfg"
- dst = os.path.join(mdir, "grub/grub.cfg")
- if os.path.exists(src):
- self.copyfile(src, dst)
-
- self.umount(mdir)
self.reboot()
-
if __name__ == '__main__':
import platform
diff --git a/packages/base/all/vendor-config-onl/src/etc/onl/sysconfig/00-defaults.yml b/packages/base/all/vendor-config-onl/src/etc/onl/sysconfig/00-defaults.yml
new file mode 100644
index 00000000..a4fe5b85
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/etc/onl/sysconfig/00-defaults.yml
@@ -0,0 +1,39 @@
+############################################################
+#
+# ONL Default System Configuration.
+#
+# These provide the base default values for all sysconfig keys.
+#
+############################################################
+installer:
+ menu_name: "\"Open Network Linux\""
+ os_name: Open Network Linux
+
+upgrade:
+ onie:
+ auto: advisory
+ loader:
+ auto: advisory
+ versions: /etc/onl/loader/versions.json
+ package:
+ dir: /etc/onl/upgrade/$PARCH
+ fit_images:
+ - $PLATFORM.itb
+ - onl-loader-fit.itb
+
+pki:
+ key:
+ name: key.pem
+ len: 2048
+ cert:
+ name: certificate
+ csr:
+ fields:
+ C: US
+ ST: CA
+ O: Open Compute Project
+ localityName: Santa Clara
+ commonName: Networking
+ organizationalUnitName: Open Network Linux
+ emailAddress: support@bigswitch.com
+ cdays: 3600
diff --git a/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml b/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml
index c3f416bf..fb897b59 100644
--- a/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml
+++ b/packages/base/all/vendor-config-onl/src/lib/platform-config-defaults-x86-64.yml
@@ -19,17 +19,10 @@ default:
# this is mostly to *reject* invalid disk labels,
# since we will never create our own
- initrd-amd64: &initrd-amd64
- =: onl-loader-initrd-amd64.cpio.gz
- package: onl-loader-initrd:amd64
-
- initrd:
- <<: *initrd-amd64
-
kernel-3.2: &kernel-3-2
=: kernel-3.2-deb7-x86_64-all
package: onl-kernel-3.2-deb7-x86-64-all:amd64
-
+
kernel-3.9.6: &kernel-3-9-6
=: kernel-3.9.6-x86-64-all
package: onl-kernel-3.9.6-x86-64-all:amd64
@@ -39,7 +32,7 @@ default:
package: onl-kernel-3.18-x86-64-all:amd64
# pick one of the above kernels
- kernel:
+ kernel:
<<: *kernel-3-2
# GRUB command line arguments for 'serial' declaration
@@ -70,10 +63,10 @@ default:
##args: >-
## nopat
## console=ttyS0,115200n8
-
+
##device: /dev/vda
### install to a specific block device
-
+
device: ONIE-BOOT
# install to the device that contains the ONIE-BOOT partition
# (query using parted and/or blkid)
@@ -103,7 +96,7 @@ default:
##- ONL-CONFIG: 128MiB
##- ONL-IMAGES: 384MiB
##- ONL-DATA: 100%
-
+
network:
# remap interface names on boot (loader only)
@@ -114,7 +107,7 @@ default:
# this should work for most systems
ma1:
name: eth0
-
+
# for other wierd corner cases
##ma1:
## name: ~
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/install/BaseInstall.py b/packages/base/all/vendor-config-onl/src/python/onl/install/BaseInstall.py
index 274268f9..f18cd649 100644
--- a/packages/base/all/vendor-config-onl/src/python/onl/install/BaseInstall.py
+++ b/packages/base/all/vendor-config-onl/src/python/onl/install/BaseInstall.py
@@ -19,6 +19,7 @@ from InstallUtils import MountContext, BlkidParser, PartedParser
from InstallUtils import ProcMountsParser
import onl.YamlUtils
+from onl.sysconfig import sysconfig
class Base:
@@ -363,9 +364,9 @@ terminal_input serial
terminal_output serial
set timeout=5
-menuentry OpenNetworkLinux {
+menuentry %(boot_menu_entry)s {
search --no-floppy --label --set=root ONL-BOOT
- echo 'Loading Open Network Linux ...'
+ echo 'Loading %(boot_loading_name)s ...'
insmod gzio
insmod part_msdos
linux /%(kernel)s %(args)s onl_platform=%(platform)s
@@ -476,22 +477,26 @@ class GrubInstaller(SubprocessMixin, Base):
kernel = self.im.platformConf['grub']['kernel']
ctx['kernel'] = kernel['='] if type(kernel) == dict else kernel
-
- initrd = self.im.platformConf['grub']['initrd']
- ctx['initrd'] = initrd['='] if type(initrd) == dict else initrd
-
ctx['args'] = self.im.platformConf['grub']['args']
ctx['platform'] = self.im.installerConf.installer_platform
ctx['serial'] = self.im.platformConf['grub']['serial']
+ ctx['boot_menu_entry'] = sysconfig.installer.menu_name
+ ctx['boot_loading_name'] = sysconfig.installer.os_name
+
+ files = []
+ for f in set(os.listdir(self.im.installerConf.installer_dir) + self.zf.namelist()):
+ if 'initrd' in f and 'cpio' in f:
+ ctx['initrd'] = f
+ files.append(f)
+ if 'kernel' in f:
+ files.append(f)
+
cf = GRUB_TPL % ctx
self.log.info("Installing kernel")
dev = self.blkidParts['ONL-BOOT']
- files = set(os.listdir(self.im.installerConf.installer_dir) + self.zf.namelist())
- files = [b for b in files if b.startswith('kernel-') or b.startswith('onl-loader-initrd-')]
-
with MountContext(dev.device, log=self.log) as ctx:
def _cp(b):
dst = os.path.join(ctx.dir, b)
@@ -600,8 +605,7 @@ class UbootInstaller(SubprocessMixin, Base):
% self.platformConf['loader']['loadaddr'])
cmds.append("setenv onl_platform %s"
% self.installerConf.installer_platform)
- itb = self.platformConf['flat_image_tree']['itb']
- if type(itb) == dict: itb = itb['=']
+ itb = "%s.itb" % self.installerConf.installer_platform
cmds.append("setenv onl_itb %s" % itb)
for item in self.platformConf['loader']['setenv']:
k, v = list(item.items())[0]
@@ -695,7 +699,7 @@ class UbootInstaller(SubprocessMixin, Base):
self.log.info("Installing ONL loader %s --> %s:%s...",
loaderBasename, dev.device, loaderBasename)
with MountContext(dev.device, log=self.log) as ctx:
- dst = os.path.join(ctx.dir, loaderBasename)
+ dst = os.path.join(ctx.dir, "%s.itb" % self.im.installerConf.installer_platform)
self.installerCopy(loaderBasename, dst)
return 0
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/mounts/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/mounts/__init__.py
index 68eda495..ee72b0f6 100755
--- a/packages/base/all/vendor-config-onl/src/python/onl/mounts/__init__.py
+++ b/packages/base/all/vendor-config-onl/src/python/onl/mounts/__init__.py
@@ -10,54 +10,151 @@ import yaml
import tempfile
import shutil
-class OnlMountManager(object):
- def __init__(self, mdata, logger):
+class MountManager(object):
- if os.path.exists(mdata):
- mdata = yaml.load(open(mdata, "r"));
-
- self.mdata = mdata
+ def __init__(self, logger):
+ self.read_proc_mounts()
self.logger = logger
+ if self.logger is None:
+ self.logger = logging.getLogger('onl:mounts')
- # Needed to avoid ugly warnings from fsck
- if not os.path.exists('/etc/mtab'):
- open("/etc/mtab", 'w').close();
+ def read_proc_mounts(self):
+ self.mounts = {}
+ with open('/proc/mounts') as mounts:
+ for line in mounts.readlines():
+ (dev, dir_, type_, options, a, b) = line.split()
+ self.mounts[dir_] = dict(dev=dev, mode=options.split(',')[0])
+ def is_mounted(self, device, directory):
+ self.read_proc_mounts()
+ if directory in self.mounts and self.mounts[directory]['dev'] == device:
+ return self.mounts[directory]
+ return None
- def checkmount(self, directory):
- with open("/proc/mounts") as f:
- return directory in f.read()
-
- def checkroot(self, dev):
- pat = "%s / " % dev
- with open("/proc/mounts") as f:
- return pat in f.read()
+ def is_dev_mounted(self, device):
+ self.read_proc_mounts()
+ for (k, v) in self.mounts.iteritems():
+ if v['dev'] == device:
+ return True
+ return False
def mount(self, device, directory, mode='r', timeout=5):
- self.logger.debug("Mounting %s -> %s %s" % (device, directory, mode))
+
+ mountargs = [ str(mode) ]
+ current = self.is_mounted(device, directory)
+ if current:
+ if current['mode'] == mode:
+ # Already mounted as requested.
+ self.logger.debug("%s already mounted @ %s with mode %s. Doing nothing." % (device, directory, mode))
+ return True
+ elif device == current['dir']:
+ # Already mounted, at a different location (e.g. '/'), but not in the requested mode.
+ self.logger.debug("%s mounted @ %s (%s) with mode %s. It will be remounted %s.",
+ device, directory, current['dir'], current['mode'], mode)
+ mountargs.append('remount')
+ directory = current['dir']
+ else:
+ # Already mounted, but not in the requested mode.
+ self.logger.debug("%s mounted @ %s with mode %s. It will be remounted %s." % (device, directory, current['mode'], mode))
+ mountargs.append('remount')
+ else:
+ # Not mounted at all.
+ self.logger.debug("%s not mounted @ %s. It will be mounted %s" % (device, directory, mode))
+
try:
- subprocess.check_call("mount -%s %s %s" % (mode, device, directory), shell=True)
+ cmd = "mount -o %s %s %s" % (','.join(mountargs), device, directory)
+ self.logger.debug("+ %s" % cmd)
+ subprocess.check_call(cmd, shell=True)
except subprocess.CalledProcessError, e:
self.logger.error("Mount failed: '%s'" % e.output)
return False
# If requested, wait for the mount to complete.
while(timeout > 0):
- if self.checkmount(directory):
+ if self.is_mounted(device, directory):
break
time.sleep(1)
timeout-=1
- if self.checkmount(directory):
- self.logger.info("%s is now mounted @ %s" % (device, directory))
+ current = self.is_mounted(device, directory)
+ if current:
+ self.logger.debug("%s is now mounted @ %s %s" % (device, directory, current['mode']))
return True
else:
- self.logger.info("%s failed to report in /proc/mounts." % (directory))
+ self.logger.error("%s failed to report in /proc/mounts." % (directory))
+
+ def umount(self, device, directory):
+ current = self.is_mounted(device, directory)
+ if not current:
+ self.logger.error("umount: %s is not mounted @ %s" % (device, directory))
+ return False
+
+ try:
+ out = subprocess.check_output("umount %s" % directory, shell=True)
+ self.logger.debug("%s @ %s has been unmounted." % (device, directory))
+ self.read_proc_mounts()
+ return True
+
+ except subprocess.CalledProcessError,e:
+ self.logger.error("Could not unmount %s @ %s: %s" % (device, directory, e.output))
- def mountall(self, all_=False, fsck=None, timeout=5):
- for (k, v) in self.mdata['mounts'].iteritems():
+class MountContext(object):
+ def __init__(self, device, directory, mode, logger):
+ self.mm = MountManager(logger)
+ self.device = device
+ self.directory = directory
+ self.mode = mode
+
+ def __enter__(self):
+ self.status = self.mm.is_mounted(self.device, self.directory)
+ self.mm.mount(self.device, self.directory, self.mode)
+ return self
+
+ def __exit__(self, eType, eValue, eTrace):
+ if self.status:
+ self.mm.mount(self.device, self.directory, self.status['mode'])
+ else:
+ self.mm.umount(self.device, self.directory)
+
+
+class OnlMountManager(object):
+ def __init__(self, mdata="/etc/mtab.yml", logger=None):
+ self.mm = MountManager(logger)
+
+ if os.path.exists(mdata):
+ mdata = yaml.load(open(mdata, "r"));
+
+ self.mdata = mdata
+ self.logger = logger if logger else logging.getLogger(self.__class__.__name__)
+
+ # Needed to avoid ugly warnings from fsck
+ if not os.path.exists('/etc/mtab'):
+ os.system("ln -s /proc/mounts /etc/mtab")
+
+ self.missing = None
+
+ def init(self, timeout=5):
+ for(k, v) in self.mdata['mounts'].iteritems():
+ #
+ # Get the partition device for the given label.
+ # The timeout logic is here to handle waiting for the
+ # block devices to arrive at boot.
+ #
+ while timeout >= 0:
+ try:
+ v['device'] = subprocess.check_output("blkid -L %s" % k, shell=True).strip()
+ break
+ except subprocess.CalledProcessError:
+ self.logger.debug("Block label %s does not yet exist..." % k)
+ time.sleep(1)
+ timeout -= 1
+
+ if 'device' not in v:
+ self.logger.error("Timeout waiting for block label %s after %d seconds." % (k, timeout))
+ self.missing = k
+ return False
#
# Make the mount point for future use.
@@ -66,90 +163,164 @@ class OnlMountManager(object):
self.logger.debug("Make directory '%s'..." % v['dir'])
os.makedirs(v['dir'])
- #
- # Get the partition device.
- # The timeout logic is here to handle waiting for the
- # block devices to arrive at boot.
- #
- while timeout > 0:
- try:
- v['device'] = subprocess.check_output("blkid -L %s" % k, shell=True).strip()
- break
- except subprocess.CalledProcessError:
- self.logger.debug("Block label %s does not yet exist..." % k)
- time.sleep(1)
- timeout -= 1
-
- if 'device' not in v:
- self.logger.error("Timeout waiting for block label %s after %d seconds." % (k, timeout))
- continue;
-
self.logger.debug("%s @ %s" % (k, v['device']))
- isRoot = self.checkroot(v['device'])
- # if this device is current the root device,
- # ignore any umount/mount/fsck shenanigans
+ def __fsck(self, label, device):
+ self.logger.info("Running fsck on %s [ %s ]..." % (label, device))
+ cmd = "fsck.ext4 -p %s" % (device)
+ self.logger.debug(cmd)
+ try:
+ out = subprocess.check_output(cmd, shell=True)
+ self.logger.info("%s [ %s ] is clean." % (device, label))
+ return True
+ except subprocess.CalledProcessError, e:
+ self.logger.error("fsck failed: %s" % e.output)
+ return False
- #
- # If its currently mounted we should unmount first.
- #
- if not isRoot and self.checkmount(v['device']):
- self.logger.info("%s is currently mounted." % (k))
- try:
- out = subprocess.check_output("umount %s" % v['device'], shell=True)
- self.logger.info("%s now unmounted." % (k))
- except subprocess.CalledProcessError,e:
- self.logger.error("Could not unmount %s @ %s: %s" % (k, v['device'], e.output))
- continue
- #
- # FS Checks
- #
- if fsck is not None:
- # Override fsck setting with given value
- self.logger.debug("Overriding fsck settings for %s with %s" % (k, fsck))
- v['fsck'] = fsck
+ def __label_entry(self, label, emsg=True):
- if not isRoot and v.get('fsck', False):
- try:
- self.logger.info("Running fsck on %s [ %s ]..." % (k, v['device']))
- cmd = "fsck.ext4 -p %s" % (v['device'])
- self.logger.debug(cmd)
- try:
- out = subprocess.check_output(cmd, shell=True)
- self.logger.info("%s [ %s ] is clean." % (v['device'], k))
- except subprocess.CalledProcessError, e:
- self.logger.error("fsck failed: %s" % e.output)
- except subprocess.CalledProcessError, e:
- # Todo - recovery options
- raise
+ if label in self.mdata['mounts']:
+ return self.mdata['mounts'][label]
+ if emsg:
+ self.logger.error("Label %s does not exist." % label)
- if all_:
- v['mount'] = 'w'
+ return None
- mount = v.get('mount', None)
- if not isRoot and mount:
- if mount in ['r', 'w']:
- self.mount(v['device'], v['dir'], mode=mount, timeout=v.get('timeout', 5))
+ def validate_labels(self, labels):
+
+ if type(labels) is str:
+ labels = labels.split(',')
+ elif type(labels) is dict:
+ labels = [ labels.keys() ]
+ elif type(labels) is list:
+ pass
+ else:
+ raise ValueError("invalid labels argument.")
+
+ if 'all' in labels:
+ labels = filter(lambda l: l != 'all', labels) + self.mdata['mounts'].keys()
+
+ rv = []
+ for l in list(set(labels)):
+ if self.__label_entry("ONL-%s" % l.upper(), False):
+ rv.append("ONL-%s" % l.upper())
+ elif self.__label_entry(l.upper(), False):
+ rv.append(l.upper())
+ elif self.__label_entry(l):
+ rv.append(l)
+ else:
+ pass
+
+ return rv;
+
+ def fsck(self, labels, force=False):
+ labels = self.validate_labels(labels)
+ for label in labels:
+ m = self.__label_entry(label)
+ if force or m.get('fsck', False):
+ if not self.mm.is_dev_mounted(m['device']):
+ self.__fsck(label, m['device'])
else:
- self.logger("Mount %s has an invalid mount mode (%s)" % (k, mount))
+ self.logger.error("%s (%s) is mounted." % (label, m['device']))
+
+
+ def mount(self, labels, mode=None):
+ labels = self.validate_labels(labels)
+ for label in labels:
+ m = self.__label_entry(label)
+ mmode = mode
+ if mmode is None:
+ mmode = m.get('mount', False)
+ if mmode:
+ self.mm.mount(m['device'], m['dir'], mmode)
+
+
+
+ def umount(self, labels, all_=False):
+ labels = self.validate_labels(labels)
+ for label in labels:
+ m = self.__label_entry(label)
+ if self.mm.is_mounted(m['device'], m['dir']):
+ if all_ or m.get('mount', False) is False:
+ self.mm.umount(m['device'], m['dir'])
+
+
+
+ ############################################################
+ #
+ # CLI Support
+ #
+ ############################################################
+ @staticmethod
+ def cmdMount(args, register=False):
+ if register:
+ p = args.add_parser('mount')
+ p.add_argument("labels", nargs='+', metavar='LABEL')
+ p.add_argument("--rw", help='Ignore the mtab setting and mount all labels read/write.', action='store_true')
+ p.add_argument("--ro", help='Ignore the mtab setting and mount all labels read-only.', action='store_true')
+ p.set_defaults(func=OnlMountManager.cmdMount)
+ else:
+ if args.rw:
+ mode = 'rw'
+ elif args.ro:
+ mode = 'ro'
+ else:
+ mode = None
+
+ o = OnlMountManager(args.mtab, args.logger)
+ o.init()
+ o.mount(args.labels, mode=mode)
@staticmethod
- def main():
+ def cmdFsck(args, register=False):
+ if register:
+ p = args.add_parser('fsck')
+ p.add_argument("labels", nargs='+', metavar='LABEL')
+ p.add_argument("--force", help='Ignore the mtab setting and run fsck on given labels.', action='store_true')
+ p.set_defaults(func=OnlMountManager.cmdFsck)
+ else:
+ o = OnlMountManager(args.mtab, args.logger)
+ o.init()
+ o.fsck(args.labels, args.force)
+
+ @staticmethod
+ def cmdUnmount(args, register=False):
+ if register:
+ p = args.add_parser('unmount')
+ p.add_argument("labels", nargs='+', metavar='LABEL')
+ p.add_argument("--all", help="Ignore the mtab setting and unmount all labels.", action='store_true')
+ p.set_defaults(func=OnlMountManager.cmdUnmount)
+ else:
+ o = OnlMountManager(args.mtab, args.logger)
+ o.init()
+ o.umount(args.labels, args.all)
+
+ @staticmethod
+ def initCommands(parser):
+ sp = parser.add_subparsers()
+ for attr in dir(OnlMountManager):
+ if attr.startswith('cmd'):
+ getattr(OnlMountManager, attr)(sp, register=True)
+
+ @staticmethod
+ def main(name):
import argparse
logging.basicConfig()
+ logger = logging.getLogger(name)
- ap = argparse.ArgumentParser(description="ONL Mount Manager.");
+ ap = argparse.ArgumentParser(description="ONL Mount Manager.")
ap.add_argument("--mtab", default="/etc/mtab.yml")
- ap.add_argument("--rw", action='store_true')
- ap.add_argument("--verbose", "-v", action='store_true')
+ ap.add_argument("--verbose", "-m", action='store_true')
ap.add_argument("--quiet", "-q", action='store_true')
+ OnlMountManager.initCommands(ap)
+ ap.set_defaults(logger=logger)
+
ops = ap.parse_args();
- logger = logging.getLogger("initmounts")
if ops.verbose:
logger.setLevel(logging.DEBUG)
elif ops.quiet:
@@ -157,160 +328,29 @@ class OnlMountManager(object):
else:
logger.setLevel(logging.INFO)
- mm = OnlMountManager(ops.mtab, logger)
- if ops.rw:
- mm.mountall(all_=True, fsck=False)
- else:
- mm.mountall()
+ ops.func(ops)
-############################################################
-#
-# Fix this stuff
-#
-############################################################
-class ServiceMixin(object):
+class OnlMountContext(MountContext):
+ def __init__(self, label, mode, logger):
+ mm = OnlMountManager()
+ mm.init()
+ labels = mm.validate_labels(label)
+ if not labels:
+ raise ValueError("Label '%s' doesn't exist." % label)
+ MountContext.__init__(self,
+ mm.mdata['mounts'][labels[0]]['device'],
+ mm.mdata['mounts'][labels[0]]['dir'],
+ mode,
+ logger)
- def _execute(self, cmd, root=False, ex=True):
- self.logger.debug("Executing: %s" % cmd)
- if root is True and os.getuid() != 0:
- cmd = "sudo " + cmd
- try:
- subprocess.check_call(cmd, shell=True)
- except Exception, e:
- if ex:
- self.logger.error("Command failed: %s" % e)
- raise
- else:
- return e.returncode
-
- def _raise(self, msg, klass):
- self.logger.critical(msg)
- raise klass(msg)
-
-class DataMount(ServiceMixin):
-
- def __init__(self, partition, logger=None):
- self.partition = partition
- self.logger = logger
-
- self.mountpoint = None
- self.mounted = False
-
- if os.path.isabs(partition) and not os.path.exists(partition):
- # Implicitly a bind mount. It may not exist yet, so create it
- os.makedirs(partition)
-
- if os.path.exists(partition):
- # Bind mount
- self.device = None
- else:
- self.device = subprocess.check_output("blkid | grep %s | awk '{print $1}' | tr -d ':'" % self.partition, shell=True).strip()
- if self.device is None or len(self.device) is 0:
- self._raise("Data partition %s does not exist." % self.partition,
- RuntimeError)
- self.logger.debug("device is %s" % self.device)
-
- def _mount(self):
- if self.device:
- self._execute("mount %s %s" % (self.device, self.mountdir()), root=True)
- else:
- self._execute("mount --bind %s %s" % (self.partition,
- self.mountdir()), root=True)
- self.mounted = True
-
- def _umount(self):
- mounted, self.mounted = self.mounted, False
- if mounted:
- self._execute("umount %s" % self.mountpoint, root=True)
- mountpoint, self.mountpoint = self.mountpoint, None
- if mountpoint and os.path.exists(mountpoint):
- self.logger.debug("+ /bin/rmdir %s", mountpoint)
- os.rmdir(mountpoint)
-
- def __enter__(self):
- self._mount()
- return self
-
- def __exit__(self, type_, value, traceback):
- self._umount()
-
- def mountdir(self):
- if self.mountpoint is None:
- self.mountpoint = tempfile.mkdtemp(prefix="pki-", suffix=".d")
- self.logger.debug("mountpoint is %s" % self.mountpoint)
- return self.mountpoint
+class OnlMountContextReadOnly(OnlMountContext):
+ def __init__(self, label, logger):
+ OnlMountContext.__init__(self, label, "ro", logger)
-class OnlDataStore(ServiceMixin):
-
- # Data partition containing the persistant store
- DATA_PARTITION='ONL-CONFIG'
-
- # Persistant directory on DATA_PARTITION
- P_DIR=None
-
- # Runtime directory in the root filesystem
- R_DIR=None
-
- def __init__(self, logger=None):
-
- if logger is None:
- logging.basicConfig()
- logger = logging.getLogger(str(self.__class__))
- logger.setLevel(logging.WARN)
-
- self.logger = logger
-
- self.mount = DataMount(self.DATA_PARTITION, logger=self.logger)
-
- if self.P_DIR is None:
- raise AttributeError("P_DIR must be set in the derived class.")
-
- if self.R_DIR is None:
- raise ValueError("R_DIR must be set in the derived class.")
-
- # The R_DIR is accessed here
- self.r_dir = self.R_DIR
-
- self.logger.debug("persistant dir: %s" % self.p_dir)
- self.logger.debug(" runtime dir: %s" % self.r_dir)
-
- @property
- def p_dir(self):
- return os.path.join(self.mount.mountdir(), self.P_DIR)
-
- def _sync_dir(self, src, dst):
- self.logger.debug("Syncing store from %s -> %s" % (src, dst))
- if os.path.exists(dst):
- shutil.rmtree(dst)
-
- if not os.path.exists(src):
- os.makedirs(src)
-
- shutil.copytree(src, dst)
-
- def init_runtime(self):
- with self.mount:
- self._sync_dir(self.p_dir, self.r_dir)
-
- def commit_runtime(self):
- with self.mount:
- self._sync_dir(self.r_dir, self.p_dir)
-
- def diff(self):
- with self.mount:
- rv = self._execute("diff -rNq %s %s" % (self.p_dir, self.r_dir), ex=False)
- return rv == 0
-
- def ls(self):
- with self.mount:
- self._execute("cd %s && find ." % (self.p_dir))
-
- def rm(self, filename):
- with self.mount:
- os.unlink(os.path.join(self.p_dir, filename))
- os.unlink(os.path.join(r_dir, filename))
-
+class OnlMountContextReadWrite(OnlMountContext):
+ def __init__(self, label, logger):
+ OnlMountContext.__init__(self, label, "rw", logger)
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/pki/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/pki/__init__.py
index 2f8dd157..eec0f7fc 100755
--- a/packages/base/all/vendor-config-onl/src/python/onl/pki/__init__.py
+++ b/packages/base/all/vendor-config-onl/src/python/onl/pki/__init__.py
@@ -13,83 +13,85 @@ import shutil
import subprocess
import tempfile
import yaml
+from onl.mounts import OnlMountManager, OnlMountContextReadOnly, OnlMountContextReadWrite
+from onl.sysconfig import sysconfig
+from onl.util import *
-from onl.mounts import OnlDataStore
-class OnlPKI(OnlDataStore):
- P_DIR='private'
- R_DIR='/private'
- PRIVATE_KEY='key.pem'
- CERTIFICATE='certificate'
+class OnlPkiContextReadWrite(OnlMountContextReadWrite):
+ def __init__(self, logger):
+ OnlMountContextReadWrite.__init__(self, "ONL-CONFIG", logger)
- KLEN=2048
- CDAYS=3650
+class OnlPkiContextReadOnly(OnlMountContextReadOnly):
+ def __init__(self, logger):
+ OnlMountContextReadOnly.__init__(self, "ONL-CONFIG", logger)
- CSR_FILE='/etc/onl/config/csr.yml'
+
+class OnlPki(OnlServiceMixin):
+ """Initialize the ONL-CONFIG::PKI credentials."""
+
+ CONFIG_PKI_DIR="/mnt/onl/config/pki"
def __init__(self, logger=None):
- OnlDataStore.__init__(self, logger)
- self.kpath = os.path.join(self.R_DIR, self.PRIVATE_KEY)
- self.cpath = os.path.join(self.R_DIR, self.CERTIFICATE)
+ self.logger = logger
- def init_cert(self, force=False):
- if not os.path.exists(self.cpath) or force:
- self.logger.info("Generating self-signed certificate...")
+ if self.logger is None:
+ self.logger = logging.getLogger("ONL:PKI")
- #
- # The csr.yml file allows the system integrator to customize
- # the fields for the certificate.
- #
- fdict = {}
- try:
- fdict = yaml.load(open(self.CSR_FILE))
- except Exception, e:
- self.logger.error(e);
+ self.kpath = os.path.join(self.CONFIG_PKI_DIR,
+ sysconfig.pki.key.name)
- csr = tempfile.NamedTemporaryFile(prefix="pki-", suffix=".csr", delete=False)
- csr.close()
-
- fields = [ "%s=%s" % (k, v) for k,v in fdict.iteritems() ]
- subject = "/" + "/".join(fields)
- self.logger.debug("Subject: '%s'", subject)
- self.logger.debug("CSR: %s", csr.name)
- self._execute("""openssl req -new -batch -subj "%s" -key %s -out %s""" % (
- subject, self.kpath, csr.name))
- self._execute("""openssl x509 -req -days %s -in %s -signkey %s -out %s""" % (
- self.CDAYS,
- csr.name, self.kpath, self.cpath))
- os.unlink(csr.name)
- else:
- self.logger.info("Using existing certificate.")
-
- def init_key(self, force=False):
- if not os.path.exists(self.kpath) or force:
- self.logger.info("Generating private key...")
- cmd = "openssl genrsa -out %s %s" % (self.kpath, self.KLEN)
- self._execute(cmd)
- self.init_cert(force=True)
- else:
- self.logger.info("Using existing private key.")
+ self.cpath = os.path.join(self.CONFIG_PKI_DIR,
+ sysconfig.pki.cert.name)
def init(self, force=False):
self.init_key(force=force)
self.init_cert(force=force)
- self.commit_runtime()
+ def init_key(self, force=False):
+ with OnlPkiContextReadOnly(self.logger):
+ if not os.path.exists(self.kpath) or force:
+ self.logger.info("Generating private key...")
+ cmd = "openssl genrsa -out %s %s" % (self.kpath, sysconfig.pki.key.len)
+ with OnlPkiContextReadWrite(self.logger):
+ if not os.path.isdir(self.CONFIG_PKI_DIR):
+ os.makedirs(self.CONFIG_PKI_DIR)
+ self._execute(cmd)
+ self.init_cert(force=True)
+ else:
+ self.logger.info("Using existing private key.")
+
+ def init_cert(self, force=False):
+ with OnlPkiContextReadOnly(self.logger):
+ if not os.path.exists(self.cpath) or force:
+ self.logger.info("Generating self-signed certificate...")
+ csr = tempfile.NamedTemporaryFile(prefix="pki-", suffix=".csr", delete=False)
+ csr.close()
+ fields = [ "%s=%s" % (k, v) for k,v in sysconfig.pki.cert.csr.fields.iteritems() ]
+ subject = "/" + "/".join(fields)
+ self.logger.debug("Subject: '%s'", subject)
+ self.logger.debug("CSR: %s", csr.name)
+ with OnlPkiContextReadWrite(self.logger):
+ if not os.path.isdir(self.CONFIG_PKI_DIR):
+ os.makedirs(self.CONFIG_PKI_DIR)
+ self._execute("""openssl req -new -batch -subj "%s" -key %s -out %s""" % (
+ subject, self.kpath, csr.name))
+ self._execute("""openssl x509 -req -days %s -sha256 -in %s -signkey %s -out %s""" % (
+ sysconfig.pki.cert.csr.cdays,
+ csr.name, self.kpath, self.cpath))
+ os.unlink(csr.name)
+ else:
+ self.logger.info("Using existing certificate.")
@staticmethod
def main():
ap = argparse.ArgumentParser(description="ONL PKI Management")
- ap.add_argument("--init", action='store_true', help="Initialize /private and PKI files if necessary.")
+ ap.add_argument("--init", action='store_true', help="Initialize PKI files (if necessary)")
ap.add_argument("--regen-cert", action='store_true', help="Regenerate certificate.")
ap.add_argument("--force", "-f", action='store_true', help="Force regeneration of the key and certificate during initialization (--init)")
- ap.add_argument("--commit", action='store_true', help="Commit the runtime /private directory to the persistant storage.")
- ap.add_argument("--ls", action='store_true', help="List contents of the peristant directory.")
ap.add_argument("--quiet", "-q", action='store_true', help="Quiet output.")
ap.add_argument("--verbose", "-v", action='store_true', help="Verbose output.")
- ap.add_argument("--part", help='Override Data Partition (testing only).')
- ap.add_argument("--rd", help='Override /private runtime directory (testing only)')
ops = ap.parse_args()
@@ -103,27 +105,10 @@ class OnlPKI(OnlDataStore):
else:
logger.setLevel(logging.INFO)
- if ops.part:
- OnlPKI.DATA_PARTITION=ops.part
-
- if ops.rd:
- OnlPKI.R_DIR=ops.rd
-
- pki = OnlPKI(logger)
+ pki = OnlPki(logger)
if ops.init:
- pki.init_runtime()
pki.init_key(force=ops.force)
pki.init_cert(force=ops.force)
- pki.commit_runtime()
-
elif ops.regen_cert:
pki.init_cert(force=True)
- pki.commit_runtime()
-
- elif ops.commit:
- pki.commit_runtime()
- elif ops.ls:
- pki.ls()
- else:
- pki.diff()
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py b/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py
index 874782a4..1457f23c 100644
--- a/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py
+++ b/packages/base/all/vendor-config-onl/src/python/onl/platform/base.py
@@ -13,9 +13,9 @@ import pprint
import json
import os
import re
-
import yaml
import onl.YamlUtils
+import subprocess
class OnlInfoObject(object):
DEFAULT_INDENT=" "
@@ -173,14 +173,8 @@ class OnlPlatformBase(object):
def baseconfig(self):
return True
- def manufacturer(self):
- raise Exception("Manufacturer is not set.")
-
- def model(self):
- raise Exception("Model is not set.")
-
def platform(self):
- raise Exception("Platform is not set.")
+ return self.PLATFORM
def baseplatform(self):
p = self.platform()
@@ -188,8 +182,7 @@ class OnlPlatformBase(object):
return p
def description(self):
- return "%s %s (%s)" % (self.manufacturer(), self.model(),
- self.platform())
+ return "%s %s" % (self.MANUFACTURER, self.MODEL)
def serialnumber(self):
return self.onie_info.SERIAL_NUMBER
@@ -200,31 +193,26 @@ class OnlPlatformBase(object):
# ONL Platform Information Tree
- def opit_oid(self):
- return "1.3.6.1.4.1.37538.2.1000"
+ def platform_info_oid(self):
+ return "1.3.6.1.4.1.42623.1.1"
# ONL Platform Information General Tree
- def opitg_oid(self):
- return self.opit_oid() + ".1"
+ def platform_info_general_oid(self):
+ return self.platform_info_oid() + ".1"
# ONL Platform Information General Sys Tree
- def opitg_sys_oid(self):
- return self.opitg_oid() + ".1"
+ def platform_info_general_sys_oid(self):
+ return self.platform_info_general_oid() + ".1"
# ONL Platform Information Vendor Tree
- def opitv_oid(self):
- return self.opit_oid() + ".2"
-
- def sys_oid_vendor(self):
- return ".37538"
+ def platform_info_vendor_oid(self):
+ return self.platform_info_oid() + ".2"
def sys_oid_platform(self):
raise Exception("sys_oid_platform() is not set.")
def sys_object_id(self):
- return ( self.opitv_oid() +
- self.sys_oid_vendor() +
- self.sys_oid_platform());
+ return "%s.%s%s" % (self.platform_info_vendor_oid(), self.PRIVATE_ENTERPRISE_NUMBER, self.SYS_OBJECT_ID)
def onie_version(self):
return self.onie_info.ONIE_VERSION
@@ -269,20 +257,24 @@ class OnlPlatformBase(object):
# is ma1 and lo
return 2
+ def environment(self):
+ yamlstr = subprocess.check_output(['/bin/onlpd', '-r', '-y'])
+ data = yaml.load(yamlstr);
+ return data
+
def __str__(self):
- s = """Manufacturer: %s
-Model: %s
-Platform: %s
-Description: %s
+ s = """Model: %s
+Manufacturer: %s
+Ports: %s (%s)
System Object Id: %s
System Information:
%s
%s
""" % (
- self.manufacturer(),
- self.model(),
- self.platform(),
- self.description(),
+ self.MODEL,
+ self.MANUFACTURER,
+ self.PORT_COUNT,
+ self.PORT_CONFIG,
self.sys_object_id(),
str(self.onie_info),
str(self.platform_info),
@@ -298,7 +290,22 @@ Warning: %s
return s
+class OnlPlatformPortConfig_48x1_4x10(object):
+ PORT_COUNT=52
+ PORT_CONFIG="48x1 + 4x10"
+class OnlPlatformPortConfig_48x10_4x40(object):
+ PORT_COUNT=52
+ PORT_CONFIG="48x10 + 4x40"
+class OnlPlatformPortConfig_48x10_6x40(object):
+ PORT_COUNT=54
+ PORT_CONFIG="48x10 + 6x40"
+class OnlPlatformPortConfig_32x40(object):
+ PORT_COUNT=32
+ PORT_CONFIG="32x40"
+class OnlPlatformPortConfig_32x100(object):
+ PORT_COUNT=32
+ PORT_CONFIG="32x100"
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/sysconfig/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/sysconfig/__init__.py
new file mode 100644
index 00000000..856755b3
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/python/onl/sysconfig/__init__.py
@@ -0,0 +1,59 @@
+############################################################
+#
+# ONL System Configuration
+#
+############################################################
+import os
+import sys
+import yaml
+import types
+import onl.onlyaml
+import onl.util
+import platform as pp
+from onl.platform.current import OnlPlatform
+
+class DotDict(dict):
+ """ Access keys in a nested dictionary using dot notation """
+
+ def __getattr__(self, attr):
+ item = self.get(attr, None)
+
+ if item is None:
+ raise AttributeError("'%s' object has no attribute '%s'" % (type(self), attr))
+
+ if type(item) == types.DictType:
+ item = DotDict(item)
+
+ return item
+
+ __setattr__= dict.__setitem__
+ __delattr__= dict.__delitem__
+
+
+class OnlSystemConfig(object):
+ SYSTEM_CONFIG_DIR = '/etc/onl/sysconfig'
+
+ def __init__(self):
+
+ platform = OnlPlatform()
+ self.variables = {}
+ self.variables['PLATFORM'] = platform.platform()
+ self.variables['ARCH'] = pp.machine()
+ self.variables['PARCH'] = dict(ppc='powerpc',
+ x86_64='amd64',
+ armv7l='armel')[pp.machine()]
+
+ self.config = {}
+ for f in sorted(os.listdir(self.SYSTEM_CONFIG_DIR)):
+ if f.endswith('.yml'):
+ d = onl.onlyaml.loadf(os.path.join(self.SYSTEM_CONFIG_DIR, f), self.variables)
+ self.config = onl.util.dmerge(self.config, d)
+
+ self.config['pc'] = platform.platform_config
+
+ def dump(self):
+ return yaml.dump(self.config, default_flow_style=False)
+
+x = OnlSystemConfig()
+sysconfig = DotDict(x.config)
+sysconfig['OnlSystemConfig'] = x
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py
index aacffaa8..52b39708 100644
--- a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py
+++ b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py
@@ -13,6 +13,7 @@ import shutil
import json
import string
import argparse
+import yaml
from time import sleep
from onl.platform.current import OnlPlatform
@@ -36,32 +37,11 @@ class BaseUpgrade(object):
self.arch = pp.machine()
self.parch = dict(ppc='powerpc', x86_64='amd64', armv7l='armel')[self.arch]
self.platform = OnlPlatform()
+ self.init()
+
+ def init(self):
+ pass
- #
- # TODO.
- #
- # DEFAULT_CONFIG = {
- # "auto-upgrade" : "advisory",
- # }
- #
- # CONFIG_FILES = [
- # "/etc/boot.d/upgrade/.upgrade-config.json",
- # "/mnt/flash/override-upgrade-config.json"
- # ]
- #
- # def load_config(self):
- # self.config = self.DEFAULT_CONFIG
- # for f in self.CONFIG_FILES:
- # if os.path.exists(f):
- # self.config.update(json.load(file(f)))
- #
- # self.logger.debug("Loaded Configuration:\n%s\n" % (json.dumps(self.config, indent=2)))
- #
- # if self.name in self.config:
- # self.config = self.config['name']
- #
- # self.logger.debug("Final Configuration:\n%s\n" % (json.dumps(self.config, indent=2)))
- #
def load_config(self):
pass
@@ -78,13 +58,17 @@ class BaseUpgrade(object):
if os.getenv("DEBUG"):
self.logger.setLevel(logging.DEBUG)
+
+ def auto_upgrade_default(self):
+ return "advisory"
+
def init_argparser(self):
self.ap = argparse.ArgumentParser("%s-upgrade" % self.name)
self.ap.add_argument("--enable", action='store_true', help="Enable updates.")
self.ap.add_argument("--force", action='store_true', help="Force update.")
self.ap.add_argument("--no-reboot", action='store_true', help="Don't reboot.")
self.ap.add_argument("--check", action='store_true', help="Check only.")
- self.ap.add_argument("--auto-upgrade", help="Override auto-upgrade mode.", default='advisory')
+ self.ap.add_argument("--auto-upgrade", help="Override auto-upgrade mode.", default=self.auto_upgrade_default())
self.ap.add_argument("--summarize", action='store_true', help="Summarize only, no upgrades.")
def banner(self):
@@ -173,7 +157,7 @@ class BaseUpgrade(object):
return default
- UPGRADE_STATUS_JSON = "/lib/platform-config/current/upgrade.json"
+ UPGRADE_STATUS_JSON = "/lib/platform-config/current/onl/upgrade.json"
def update_upgrade_status(self, key, value):
data = {}
@@ -184,7 +168,6 @@ class BaseUpgrade(object):
with open(self.UPGRADE_STATUS_JSON, "w") as f:
json.dump(data, f)
-
#
# Initialize self.current_version, self.next_Version
# and anything required for summarize()
@@ -425,3 +408,13 @@ class BaseOnieUpgrade(BaseUpgrade):
if os.path.exists(self.ONIE_UPDATER_PATH):
self.logger.info("Removing previous onie-updater.")
os.remove(self.ONIE_UPDATER_PATH)
+
+
+
+def upgrade_status():
+ data = {}
+ if os.path.exists(BaseUpgrade.UPGRADE_STATUS_JSON):
+ with open(BaseUpgrade.UPGRADE_STATUS_JSON) as f:
+ data = json.load(f)
+ return data
+
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/util/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/util/__init__.py
new file mode 100644
index 00000000..c085b3f2
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/python/onl/util/__init__.py
@@ -0,0 +1,91 @@
+import subprocess
+
+class OnlServiceMixin(object):
+ def _execute(self, cmd, root=False, ex=True):
+ self.logger.debug("Executing: %s" % cmd)
+ if root is True and os.getuid() != 0:
+ cmd = "sudo " + cmd
+ try:
+ subprocess.check_call(cmd, shell=True)
+ except Exception, e:
+ if ex:
+ self.logger.error("Command failed: %s" % e)
+ raise
+ else:
+ return e.returncode
+
+ def _raise(self, msg, klass):
+ self.logger.critical(msg)
+ raise klass(msg)
+
+
+def dmerge(d1, d2):
+ """
+ dictionary merge.
+
+ d1 is the default source. Leaf values from d2 will override.
+
+ d1 is the 'default' source; leaf values from d2 will override.
+ Returns the merged tree.
+
+ Set a leaf in d2 to None to create a tombstone (discard any key
+ from d1).
+
+ if a (sub) key in d1, d2 differ in type (dict vs. non-dict) then
+ the merge will proceed with the non-dict promoted to a dict using
+ the default-key schema ('='). Consumers of this function should be
+ prepared to handle such keys.
+ """
+ merged = {}
+ q = [(d1, d2, merged)]
+ while True:
+ if not q: break
+ c1, c2, c3 = q.pop(0)
+ # add in non-overlapping keys
+ # 'None' keys from p2 are tombstones
+ s1 = set(c1.keys())
+ s2 = set(c2.keys())
+
+ for k in s1.difference(s2):
+ v = c1[k]
+ if type(v) == dict:
+ c3.setdefault(k, {})
+ q.append((v, {}, c3[k],))
+ else:
+ c3.setdefault(k, v)
+
+ for k in s2.difference(s1):
+ v = c2[k]
+ if v is None: continue
+ if type(v) == dict:
+ c3.setdefault(k, {})
+ q.append(({}, v, c3[k],))
+ else:
+ c3.setdefault(k, v)
+
+ # handle overlapping keys
+ for k in s1.intersection(s2):
+ v1 = c1[k]
+ v2 = c2[k]
+
+ if v2 is None: continue
+
+ # two dicts, key-by-key reconciliation required
+ if type(v1) == dict and type(v2) == dict:
+ c3.setdefault(k, {})
+ q.append((v1, v2, c3[k],))
+ continue
+
+ # two non-dicts, p2 wins
+ if type(v1) != dict and type(v2) != dict:
+ c3[k] = v2
+ continue
+
+ if type(v1) != dict:
+ v1 = { '=' : v1, }
+ if type(v2) != dict:
+ v2 = { '=' : v2, }
+ c3.setdefault(k, {})
+ q.append((v1, v2, c3[k],))
+
+ return merged
diff --git a/packages/base/all/vendor-config-onl/src/python/onl/versions/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/versions/__init__.py
new file mode 100644
index 00000000..08faa806
--- /dev/null
+++ b/packages/base/all/vendor-config-onl/src/python/onl/versions/__init__.py
@@ -0,0 +1,37 @@
+import json
+
+class OnlVersionManifest(object):
+ def __init__(self, manifest):
+ self.version = json.load(open(manifest))
+
+ if 'version' in self.version:
+ self.version = self.version['version']
+
+ def __getattr__(self, name):
+ if name in self.version:
+ return self.version[name]
+ else:
+ raise AttributeError("version key '%s' does not exist." % name)
+
+class OnlVersionBase(OnlVersionManifest):
+ def __init__(self):
+ OnlVersionManifest.__init__(self, self.MANIFEST)
+
+class OnlRootfsVersion(OnlVersionBase):
+ MANIFEST='/etc/onl/rootfs/manifest.json'
+
+class OnlLoaderVersion(OnlVersionBase):
+ MANIFEST='/etc/onl/loader/manifest.json'
+
+#
+# Expected usage:
+#
+# import onl.versions
+#
+# print onl.versions.rootfs.BUILD_TIMESTAMP
+#
+
+rootfs = OnlRootfsVersion()
+loader = OnlLoaderVersion()
+
+
diff --git a/packages/base/amd64/upgrade/builds/Makefile b/packages/base/amd64/upgrade/builds/Makefile
index b95deb4a..0aa20caa 100644
--- a/packages/base/amd64/upgrade/builds/Makefile
+++ b/packages/base/amd64/upgrade/builds/Makefile
@@ -12,7 +12,7 @@ MANIFEST := $(shell $(ONLPM) --find-file onl-loader-initrd:amd64 manifest.json)
all:
mkdir -p files
cp $(KERNELS) files
- cp $(INITRD) files/initrd-amd64
+ cp $(INITRD) files
cp $(MANIFEST) files
diff --git a/packages/base/any/faultd/src/.module b/packages/base/any/faultd/src/.module
new file mode 100644
index 00000000..7c16ebc0
--- /dev/null
+++ b/packages/base/any/faultd/src/.module
@@ -0,0 +1 @@
+name: faultd
diff --git a/packages/base/any/initrds/buildroot/builds/Makefile b/packages/base/any/initrds/buildroot/builds/Makefile
index 609e382d..57b5ed0c 100644
--- a/packages/base/any/initrds/buildroot/builds/Makefile
+++ b/packages/base/any/initrds/buildroot/builds/Makefile
@@ -31,6 +31,8 @@ clean:
setup: setup-pyroute2 setup-dnspython setup-libyaml setup-pyyaml setup-jq setup-pyparted
cp $(wildcard patches/busybox*.patch) $(BUILDROOT_SOURCE)/package/busybox/
cp $(wildcard patches/kexec*.patch) $(BUILDROOT_SOURCE)/package/kexec/
+ cp $(wildcard patches/openssl*.patch) $(BUILDROOT_SOURCE)/package/openssl/
+ rm $(BUILDROOT_SOURCE)/package/openssl/openssl-do-not-build-docs.patch
sed -i 's%^DOSFSTOOLS_SITE =.*%DOSFSTOOLS_SITE = http://downloads.openwrt.org/sources%' $(BUILDROOT_SOURCE)/package/dosfstools/dosfstools.mk
sed -i 's%^UEMACS_SITE =.*%UEMACS_SITE = http://www.kernel.org/pub/linux/kernel/uemacs%;s%^UEMACS_SOURCE =.*%UEMACS_SOURCE = em-$$(UEMACS_VERSION).tar.gz%' $(BUILDROOT_SOURCE)/package/uemacs/uemacs.mk
mkdir -p $(BUILDROOT_ARCHDIRS)
diff --git a/packages/base/any/initrds/buildroot/builds/patches/openssl-1.0.1-parallel-build.patch b/packages/base/any/initrds/buildroot/builds/patches/openssl-1.0.1-parallel-build.patch
new file mode 100644
index 00000000..8c0fc1b7
--- /dev/null
+++ b/packages/base/any/initrds/buildroot/builds/patches/openssl-1.0.1-parallel-build.patch
@@ -0,0 +1,354 @@
+http://rt.openssl.org/Ticket/Display.html?id=2084
+
+--- a/Makefile.org
++++ b/Makefile.org
+@@ -247,17 +247,17 @@
+ build_libs: build_crypto build_ssl build_engines
+
+ build_crypto:
+- @dir=crypto; target=all; $(BUILD_ONE_CMD)
++ +@dir=crypto; target=all; $(BUILD_ONE_CMD)
+-build_ssl:
++build_ssl: build_crypto
+- @dir=ssl; target=all; $(BUILD_ONE_CMD)
++ +@dir=ssl; target=all; $(BUILD_ONE_CMD)
+-build_engines:
++build_engines: build_crypto
+- @dir=engines; target=all; $(BUILD_ONE_CMD)
++ +@dir=engines; target=all; $(BUILD_ONE_CMD)
+-build_apps:
++build_apps: build_libs
+- @dir=apps; target=all; $(BUILD_ONE_CMD)
++ +@dir=apps; target=all; $(BUILD_ONE_CMD)
+-build_tests:
++build_tests: build_libs
+- @dir=test; target=all; $(BUILD_ONE_CMD)
++ +@dir=test; target=all; $(BUILD_ONE_CMD)
+-build_tools:
++build_tools: build_libs
+- @dir=tools; target=all; $(BUILD_ONE_CMD)
++ +@dir=tools; target=all; $(BUILD_ONE_CMD)
+
+ all_testapps: build_libs build_testapps
+ build_testapps:
+@@ -497,9 +497,9 @@
+ dist_pem_h:
+ (cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
+
+-install: all install_docs install_sw
++install: install_sw
+
+-install_sw:
++install_dirs:
+ @$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR) \
+ $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines \
+@@ -508,6 +508,13 @@
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/misc \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/certs \
+ $(INSTALL_PREFIX)$(OPENSSLDIR)/private
++ @$(PERL) $(TOP)/util/mkdir-p.pl \
++ $(INSTALL_PREFIX)$(MANDIR)/man1 \
++ $(INSTALL_PREFIX)$(MANDIR)/man3 \
++ $(INSTALL_PREFIX)$(MANDIR)/man5 \
++ $(INSTALL_PREFIX)$(MANDIR)/man7
++
++install_sw: install_dirs
+ @set -e; headerlist="$(EXHEADER)"; for i in $$headerlist;\
+ do \
+ (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+@@ -511,7 +511,7 @@
+ (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
+ done;
+- @set -e; target=install; $(RECURSIVE_BUILD_CMD)
++ +@set -e; target=install; $(RECURSIVE_BUILD_CMD)
+ @set -e; liblist="$(LIBS)"; for i in $$liblist ;\
+ do \
+ if [ -f "$$i" ]; then \
+@@ -593,12 +600,7 @@
+ done; \
+ done
+
+-install_docs:
+- @$(PERL) $(TOP)/util/mkdir-p.pl \
+- $(INSTALL_PREFIX)$(MANDIR)/man1 \
+- $(INSTALL_PREFIX)$(MANDIR)/man3 \
+- $(INSTALL_PREFIX)$(MANDIR)/man5 \
+- $(INSTALL_PREFIX)$(MANDIR)/man7
++install_docs: install_dirs
+ @pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
+ here="`pwd`"; \
+ filecase=; \
+--- a/Makefile.shared
++++ b/Makefile.shared
+@@ -105,6 +105,7 @@ LINK_SO= \
+ SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
+ LIBPATH=`for x in $$LIBDEPS; do echo $$x; done | sed -e 's/^ *-L//;t' -e d | uniq`; \
+ LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
++ [ -e $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX ] && exit 0; \
+ LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
+ $${SHAREDCMD} $${SHAREDFLAGS} \
+ -o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
+@@ -122,6 +124,7 @@ SYMLINK_SO= \
+ done; \
+ fi; \
+ if [ -n "$$SHLIB_SOVER" ]; then \
++ [ -e "$$SHLIB$$SHLIB_SUFFIX" ] || \
+ ( $(SET_X); rm -f $$SHLIB$$SHLIB_SUFFIX; \
+ ln -s $$prev $$SHLIB$$SHLIB_SUFFIX ); \
+ fi; \
+--- a/crypto/Makefile
++++ b/crypto/Makefile
+@@ -85,11 +85,11 @@
+ @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
+
+ subdirs:
+- @target=all; $(RECURSIVE_MAKE)
++ +@target=all; $(RECURSIVE_MAKE)
+
+ files:
+ $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+- @target=files; $(RECURSIVE_MAKE)
++ +@target=files; $(RECURSIVE_MAKE)
+
+ links:
+ @$(PERL) $(TOP)/util/mklink.pl ../include/openssl $(EXHEADER)
+@@ -100,7 +100,7 @@
+ # lib: $(LIB): are splitted to avoid end-less loop
+ lib: $(LIB)
+ @touch lib
+-$(LIB): $(LIBOBJ)
++$(LIB): $(LIBOBJ) | subdirs
+ $(AR) $(LIB) $(LIBOBJ)
+ $(RANLIB) $(LIB) || echo Never mind.
+
+@@ -110,7 +110,7 @@
+ fi
+
+ libs:
+- @target=lib; $(RECURSIVE_MAKE)
++ +@target=lib; $(RECURSIVE_MAKE)
+
+ install:
+ @[ -n "$(INSTALLTOP)" ] # should be set by top Makefile...
+@@ -119,7 +119,7 @@
+ (cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i; \
+ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/include/openssl/$$i ); \
+ done;
+- @target=install; $(RECURSIVE_MAKE)
++ +@target=install; $(RECURSIVE_MAKE)
+
+ lint:
+ @target=lint; $(RECURSIVE_MAKE)
+--- a/engines/Makefile
++++ b/engines/Makefile
+@@ -72,7 +72,7 @@
+
+ all: lib subdirs
+
+-lib: $(LIBOBJ)
++lib: $(LIBOBJ) | subdirs
+ @if [ -n "$(SHARED_LIBS)" ]; then \
+ set -e; \
+ for l in $(LIBNAMES); do \
+@@ -89,7 +89,7 @@
+
+ subdirs:
+ echo $(EDIRS)
+- @target=all; $(RECURSIVE_MAKE)
++ +@target=all; $(RECURSIVE_MAKE)
+
+ files:
+ $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+@@ -128,7 +128,7 @@
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
+ done; \
+ fi
+- @target=install; $(RECURSIVE_MAKE)
++ +@target=install; $(RECURSIVE_MAKE)
+
+ tags:
+ ctags $(SRC)
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -123,7 +123,7 @@
+ tags:
+ ctags $(SRC)
+
+-tests: exe apps $(TESTS)
++tests: exe $(TESTS)
+
+ apps:
+ @(cd ..; $(MAKE) DIRS=apps all)
+@@ -365,109 +365,109 @@
+ link_app.$${shlib_target}
+
+ $(RSATEST)$(EXE_EXT): $(RSATEST).o $(DLIBCRYPTO)
+- @target=$(RSATEST); $(BUILD_CMD)
++ +@target=$(RSATEST); $(BUILD_CMD)
+
+ $(BNTEST)$(EXE_EXT): $(BNTEST).o $(DLIBCRYPTO)
+- @target=$(BNTEST); $(BUILD_CMD)
++ +@target=$(BNTEST); $(BUILD_CMD)
+
+ $(ECTEST)$(EXE_EXT): $(ECTEST).o $(DLIBCRYPTO)
+- @target=$(ECTEST); $(BUILD_CMD)
++ +@target=$(ECTEST); $(BUILD_CMD)
+
+ $(EXPTEST)$(EXE_EXT): $(EXPTEST).o $(DLIBCRYPTO)
+- @target=$(EXPTEST); $(BUILD_CMD)
++ +@target=$(EXPTEST); $(BUILD_CMD)
+
+ $(IDEATEST)$(EXE_EXT): $(IDEATEST).o $(DLIBCRYPTO)
+- @target=$(IDEATEST); $(BUILD_CMD)
++ +@target=$(IDEATEST); $(BUILD_CMD)
+
+ $(MD2TEST)$(EXE_EXT): $(MD2TEST).o $(DLIBCRYPTO)
+- @target=$(MD2TEST); $(BUILD_CMD)
++ +@target=$(MD2TEST); $(BUILD_CMD)
+
+ $(SHATEST)$(EXE_EXT): $(SHATEST).o $(DLIBCRYPTO)
+- @target=$(SHATEST); $(BUILD_CMD)
++ +@target=$(SHATEST); $(BUILD_CMD)
+
+ $(SHA1TEST)$(EXE_EXT): $(SHA1TEST).o $(DLIBCRYPTO)
+- @target=$(SHA1TEST); $(BUILD_CMD)
++ +@target=$(SHA1TEST); $(BUILD_CMD)
+
+ $(SHA256TEST)$(EXE_EXT): $(SHA256TEST).o $(DLIBCRYPTO)
+- @target=$(SHA256TEST); $(BUILD_CMD)
++ +@target=$(SHA256TEST); $(BUILD_CMD)
+
+ $(SHA512TEST)$(EXE_EXT): $(SHA512TEST).o $(DLIBCRYPTO)
+- @target=$(SHA512TEST); $(BUILD_CMD)
++ +@target=$(SHA512TEST); $(BUILD_CMD)
+
+ $(RMDTEST)$(EXE_EXT): $(RMDTEST).o $(DLIBCRYPTO)
+- @target=$(RMDTEST); $(BUILD_CMD)
++ +@target=$(RMDTEST); $(BUILD_CMD)
+
+ $(MDC2TEST)$(EXE_EXT): $(MDC2TEST).o $(DLIBCRYPTO)
+- @target=$(MDC2TEST); $(BUILD_CMD)
++ +@target=$(MDC2TEST); $(BUILD_CMD)
+
+ $(MD4TEST)$(EXE_EXT): $(MD4TEST).o $(DLIBCRYPTO)
+- @target=$(MD4TEST); $(BUILD_CMD)
++ +@target=$(MD4TEST); $(BUILD_CMD)
+
+ $(MD5TEST)$(EXE_EXT): $(MD5TEST).o $(DLIBCRYPTO)
+- @target=$(MD5TEST); $(BUILD_CMD)
++ +@target=$(MD5TEST); $(BUILD_CMD)
+
+ $(HMACTEST)$(EXE_EXT): $(HMACTEST).o $(DLIBCRYPTO)
+- @target=$(HMACTEST); $(BUILD_CMD)
++ +@target=$(HMACTEST); $(BUILD_CMD)
+
+ $(WPTEST)$(EXE_EXT): $(WPTEST).o $(DLIBCRYPTO)
+- @target=$(WPTEST); $(BUILD_CMD)
++ +@target=$(WPTEST); $(BUILD_CMD)
+
+ $(RC2TEST)$(EXE_EXT): $(RC2TEST).o $(DLIBCRYPTO)
+- @target=$(RC2TEST); $(BUILD_CMD)
++ +@target=$(RC2TEST); $(BUILD_CMD)
+
+ $(BFTEST)$(EXE_EXT): $(BFTEST).o $(DLIBCRYPTO)
+- @target=$(BFTEST); $(BUILD_CMD)
++ +@target=$(BFTEST); $(BUILD_CMD)
+
+ $(CASTTEST)$(EXE_EXT): $(CASTTEST).o $(DLIBCRYPTO)
+- @target=$(CASTTEST); $(BUILD_CMD)
++ +@target=$(CASTTEST); $(BUILD_CMD)
+
+ $(RC4TEST)$(EXE_EXT): $(RC4TEST).o $(DLIBCRYPTO)
+- @target=$(RC4TEST); $(BUILD_CMD)
++ +@target=$(RC4TEST); $(BUILD_CMD)
+
+ $(RC5TEST)$(EXE_EXT): $(RC5TEST).o $(DLIBCRYPTO)
+- @target=$(RC5TEST); $(BUILD_CMD)
++ +@target=$(RC5TEST); $(BUILD_CMD)
+
+ $(DESTEST)$(EXE_EXT): $(DESTEST).o $(DLIBCRYPTO)
+- @target=$(DESTEST); $(BUILD_CMD)
++ +@target=$(DESTEST); $(BUILD_CMD)
+
+ $(RANDTEST)$(EXE_EXT): $(RANDTEST).o $(DLIBCRYPTO)
+- @target=$(RANDTEST); $(BUILD_CMD)
++ +@target=$(RANDTEST); $(BUILD_CMD)
+
+ $(DHTEST)$(EXE_EXT): $(DHTEST).o $(DLIBCRYPTO)
+- @target=$(DHTEST); $(BUILD_CMD)
++ +@target=$(DHTEST); $(BUILD_CMD)
+
+ $(DSATEST)$(EXE_EXT): $(DSATEST).o $(DLIBCRYPTO)
+- @target=$(DSATEST); $(BUILD_CMD)
++ +@target=$(DSATEST); $(BUILD_CMD)
+
+ $(METHTEST)$(EXE_EXT): $(METHTEST).o $(DLIBCRYPTO)
+- @target=$(METHTEST); $(BUILD_CMD)
++ +@target=$(METHTEST); $(BUILD_CMD)
+
+ $(SSLTEST)$(EXE_EXT): $(SSLTEST).o $(DLIBSSL) $(DLIBCRYPTO)
+- @target=$(SSLTEST); $(FIPS_BUILD_CMD)
++ +@target=$(SSLTEST); $(FIPS_BUILD_CMD)
+
+ $(ENGINETEST)$(EXE_EXT): $(ENGINETEST).o $(DLIBCRYPTO)
+- @target=$(ENGINETEST); $(BUILD_CMD)
++ +@target=$(ENGINETEST); $(BUILD_CMD)
+
+ $(EVPTEST)$(EXE_EXT): $(EVPTEST).o $(DLIBCRYPTO)
+- @target=$(EVPTEST); $(BUILD_CMD)
++ +@target=$(EVPTEST); $(BUILD_CMD)
+
+ $(ECDSATEST)$(EXE_EXT): $(ECDSATEST).o $(DLIBCRYPTO)
+- @target=$(ECDSATEST); $(BUILD_CMD)
++ +@target=$(ECDSATEST); $(BUILD_CMD)
+
+ $(ECDHTEST)$(EXE_EXT): $(ECDHTEST).o $(DLIBCRYPTO)
+- @target=$(ECDHTEST); $(BUILD_CMD)
++ +@target=$(ECDHTEST); $(BUILD_CMD)
+
+ $(IGETEST)$(EXE_EXT): $(IGETEST).o $(DLIBCRYPTO)
+- @target=$(IGETEST); $(BUILD_CMD)
++ +@target=$(IGETEST); $(BUILD_CMD)
+
+ $(JPAKETEST)$(EXE_EXT): $(JPAKETEST).o $(DLIBCRYPTO)
+- @target=$(JPAKETEST); $(BUILD_CMD)
++ +@target=$(JPAKETEST); $(BUILD_CMD)
+
+ $(ASN1TEST)$(EXE_EXT): $(ASN1TEST).o $(DLIBCRYPTO)
+- @target=$(ASN1TEST); $(BUILD_CMD)
++ +@target=$(ASN1TEST); $(BUILD_CMD)
+
+ $(SRPTEST)$(EXE_EXT): $(SRPTEST).o $(DLIBCRYPTO)
+- @target=$(SRPTEST); $(BUILD_CMD)
++ +@target=$(SRPTEST); $(BUILD_CMD)
+
+ #$(AESTEST).o: $(AESTEST).c
+ # $(CC) -c $(CFLAGS) -DINTERMEDIATE_VALUE_KAT -DTRACE_KAT_MCT $(AESTEST).c
+@@ -480,7 +480,7 @@
+ # fi
+
+ dummytest$(EXE_EXT): dummytest.o $(DLIBCRYPTO)
+- @target=dummytest; $(BUILD_CMD)
++ +@target=dummytest; $(BUILD_CMD)
+
+ # DO NOT DELETE THIS LINE -- make depend depends on it.
+
+--- a/crypto/objects/Makefile
++++ b/crypto/objects/Makefile
+@@ -44,11 +44,11 @@ obj_dat.h: obj_dat.pl obj_mac.h
+ # objects.pl both reads and writes obj_mac.num
+ obj_mac.h: objects.pl objects.txt obj_mac.num
+ $(PERL) objects.pl objects.txt obj_mac.num obj_mac.h
+- @sleep 1; touch obj_mac.h; sleep 1
+
+-obj_xref.h: objxref.pl obj_xref.txt obj_mac.num
++# This doesn't really need obj_mac.h, but since that rule reads & writes
++# obj_mac.num, we can't run in parallel with it.
++obj_xref.h: objxref.pl obj_xref.txt obj_mac.num obj_mac.h
+ $(PERL) objxref.pl obj_mac.num obj_xref.txt > obj_xref.h
+- @sleep 1; touch obj_xref.h; sleep 1
+
+ files:
+ $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
diff --git a/packages/base/any/kernels/3.18.25/patches/driver-support-intel-igb-bcm54616-phy.patch b/packages/base/any/kernels/3.18.25/patches/driver-support-intel-igb-bcm54616-phy.patch
new file mode 100644
index 00000000..c83708ac
--- /dev/null
+++ b/packages/base/any/kernels/3.18.25/patches/driver-support-intel-igb-bcm54616-phy.patch
@@ -0,0 +1,67 @@
+diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
+index 051ea94..2a04baa 100644
+--- a/drivers/net/ethernet/intel/igb/e1000_82575.c
++++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
+@@ -286,6 +286,9 @@ static s32 igb_init_phy_params_82575(struct e1000_hw *hw)
+ phy->ops.set_d3_lplu_state = igb_set_d3_lplu_state_82580;
+ phy->ops.force_speed_duplex = igb_phy_force_speed_duplex_m88;
+ break;
++ case BCM54616_E_PHY_ID:
++ phy->type = e1000_phy_bcm54616;
++ break;
+ default:
+ ret_val = -E1000_ERR_PHY;
+ goto out;
+@@ -1550,6 +1553,7 @@ static s32 igb_setup_copper_link_82575(struct e1000_hw *hw)
+ case e1000_i350:
+ case e1000_i210:
+ case e1000_i211:
++ case e1000_i354:
+ phpm_reg = rd32(E1000_82580_PHY_POWER_MGMT);
+ phpm_reg &= ~E1000_82580_PM_GO_LINKD;
+ wr32(E1000_82580_PHY_POWER_MGMT, phpm_reg);
+@@ -1593,6 +1597,8 @@ static s32 igb_setup_copper_link_82575(struct e1000_hw *hw)
+ case e1000_phy_82580:
+ ret_val = igb_copper_link_setup_82580(hw);
+ break;
++ case e1000_phy_bcm54616:
++ break;
+ default:
+ ret_val = -E1000_ERR_PHY;
+ break;
+diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
+index 217f813..5322fbf 100644
+--- a/drivers/net/ethernet/intel/igb/e1000_defines.h
++++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
+@@ -860,6 +860,7 @@
+ #define M88_VENDOR 0x0141
+ #define I210_I_PHY_ID 0x01410C00
+ #define M88E1543_E_PHY_ID 0x01410EA0
++#define BCM54616_E_PHY_ID 0x3625D10
+
+ /* M88E1000 Specific Registers */
+ #define M88E1000_PHY_SPEC_CTRL 0x10 /* PHY Specific Control Register */
+diff --git a/drivers/net/ethernet/intel/igb/e1000_hw.h b/drivers/net/ethernet/intel/igb/e1000_hw.h
+index 2003b37..d82c96b 100644
+--- a/drivers/net/ethernet/intel/igb/e1000_hw.h
++++ b/drivers/net/ethernet/intel/igb/e1000_hw.h
+@@ -128,6 +128,7 @@ enum e1000_phy_type {
+ e1000_phy_ife,
+ e1000_phy_82580,
+ e1000_phy_i210,
++ e1000_phy_bcm54616,
+ };
+
+ enum e1000_bus_type {
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index e0f3664..013c1f1 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -108,6 +108,7 @@ static const struct pci_device_id igb_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_COPPER), board_82575 },
+ { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575EB_FIBER_SERDES), board_82575 },
+ { PCI_VDEVICE(INTEL, E1000_DEV_ID_82575GB_QUAD_COPPER), board_82575 },
++ { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_SGMII), board_82575 },
+ /* required last entry */
+ {0, }
+ };
diff --git a/packages/base/any/kernels/3.18.25/patches/series b/packages/base/any/kernels/3.18.25/patches/series
index f6b71ff1..661d5eac 100644
--- a/packages/base/any/kernels/3.18.25/patches/series
+++ b/packages/base/any/kernels/3.18.25/patches/series
@@ -1 +1,2 @@
aufs.patch
+driver-support-intel-igb-bcm54616-phy.patch
diff --git a/packages/base/any/onlp-snmpd/builds/src/onlp_snmp/.module b/packages/base/any/onlp-snmpd/builds/src/onlp_snmp/.module
new file mode 100644
index 00000000..d299f1b9
--- /dev/null
+++ b/packages/base/any/onlp-snmpd/builds/src/onlp_snmp/.module
@@ -0,0 +1 @@
+name: onlp_snmp
diff --git a/packages/base/any/onlp/src/onlp/.module b/packages/base/any/onlp/src/onlp/.module
new file mode 100644
index 00000000..7e44ab77
--- /dev/null
+++ b/packages/base/any/onlp/src/onlp/.module
@@ -0,0 +1 @@
+name: onlp
diff --git a/packages/base/any/onlp/src/onlp_platform_defaults/.module b/packages/base/any/onlp/src/onlp_platform_defaults/.module
new file mode 100644
index 00000000..170382ab
--- /dev/null
+++ b/packages/base/any/onlp/src/onlp_platform_defaults/.module
@@ -0,0 +1 @@
+name: onlp_platform_defaults
diff --git a/packages/base/any/onlp/src/onlpie/.module b/packages/base/any/onlp/src/onlpie/.module
new file mode 100644
index 00000000..ae83c4af
--- /dev/null
+++ b/packages/base/any/onlp/src/onlpie/.module
@@ -0,0 +1 @@
+name: onlpie
diff --git a/packages/base/any/onlp/src/onlplib/.module b/packages/base/any/onlp/src/onlplib/.module
new file mode 100644
index 00000000..215a822f
--- /dev/null
+++ b/packages/base/any/onlp/src/onlplib/.module
@@ -0,0 +1 @@
+name: onlplib
diff --git a/packages/base/any/onlp/src/onlplib/module/src/i2c.c b/packages/base/any/onlp/src/onlplib/module/src/i2c.c
index 3890a072..4340a6ea 100644
--- a/packages/base/any/onlp/src/onlplib/module/src/i2c.c
+++ b/packages/base/any/onlp/src/onlplib/module/src/i2c.c
@@ -142,7 +142,7 @@ onlp_i2c_read(int bus, uint8_t addr, uint8_t offset, int size,
}
for(i = 0; i < size; i++) {
- uint32_t rv = i2c_smbus_read_byte_data(fd, offset+i);
+ int rv = i2c_smbus_read_byte_data(fd, offset+i);
if(rv < 0) {
AIM_LOG_ERROR("i2c-%d: reading address 0x%x, offset %d failed: %{errno}",
bus, addr, offset+i, errno);
@@ -175,7 +175,7 @@ onlp_i2c_write(int bus, uint8_t addr, uint8_t offset, int size,
}
for(i = 0; i < size; i++) {
- uint32_t rv = i2c_smbus_write_byte_data(fd, offset+i, data[i]);
+ int rv = i2c_smbus_write_byte_data(fd, offset+i, data[i]);
if(rv < 0) {
AIM_LOG_ERROR("i2c-%d: writing address 0x%x, offset %d failed: %{errno}",
bus, addr, offset+i, errno);
diff --git a/packages/base/any/onlp/src/sff/.module b/packages/base/any/onlp/src/sff/.module
new file mode 100644
index 00000000..05da7c63
--- /dev/null
+++ b/packages/base/any/onlp/src/sff/.module
@@ -0,0 +1 @@
+name: sff
diff --git a/packages/base/any/oom-shim/src/.module b/packages/base/any/oom-shim/src/.module
new file mode 100644
index 00000000..4375dfb7
--- /dev/null
+++ b/packages/base/any/oom-shim/src/.module
@@ -0,0 +1 @@
+name: oom_shim
diff --git a/packages/base/armel/kernels/kernel-3.2-deb7-arm-iproc-all/builds/Makefile b/packages/base/armel/kernels/kernel-3.2-deb7-arm-iproc-all/builds/Makefile
index c4b59fec..67655667 100644
--- a/packages/base/armel/kernels/kernel-3.2-deb7-arm-iproc-all/builds/Makefile
+++ b/packages/base/armel/kernels/kernel-3.2-deb7-arm-iproc-all/builds/Makefile
@@ -12,6 +12,8 @@ THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
include $(ONL)/make/config.mk
+export MODSYNCLIST_EXTRA := arch/arm/plat-iproc/include
+
kernel:
$(MAKE) -C $(ONL)/packages/base/any/kernels/3.2.71-1+deb7/configs/arm-iproc-all K_TARGET_DIR=$(THIS_DIR) $(ONL_MAKE_PARALLEL)
diff --git a/packages/platforms-closed b/packages/platforms-closed
index 5628d2f2..2292f628 160000
--- a/packages/platforms-closed
+++ b/packages/platforms-closed
@@ -1 +1 @@
-Subproject commit 5628d2f2e43a78b9faa33428575e8e322899d3c7
+Subproject commit 2292f6285fafac230cbf0b1e9bc49321bc2a0b96
diff --git a/packages/platforms/accton/armel/arm-accton-as4610-54/onlp/builds/src/arm_accton_as4610_54/.module b/packages/platforms/accton/armel/arm-accton-as4610-54/onlp/builds/src/arm_accton_as4610_54/.module
new file mode 100644
index 00000000..5d4aa1c0
--- /dev/null
+++ b/packages/platforms/accton/armel/arm-accton-as4610-54/onlp/builds/src/arm_accton_as4610_54/.module
@@ -0,0 +1 @@
+name: arm_accton_as4610_54
diff --git a/packages/platforms/accton/armel/arm-accton-as4610-54/platform-config/r0/src/python/arm_accton_as4610_54_r0/__init__.py b/packages/platforms/accton/armel/arm-accton-as4610-54/platform-config/r0/src/python/arm_accton_as4610_54_r0/__init__.py
index 94190515..f2a47419 100644
--- a/packages/platforms/accton/armel/arm-accton-as4610-54/platform-config/r0/src/python/arm_accton_as4610_54_r0/__init__.py
+++ b/packages/platforms/accton/armel/arm-accton-as4610-54/platform-config/r0/src/python/arm_accton_as4610_54_r0/__init__.py
@@ -1,16 +1,8 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_arm_accton_as4610_54_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS4610-54"
-
- def platform(self):
- return "arm-accton-as4610-54-r0"
-
- def sys_oid_platform(self):
- return ".4610"
-
- def baseconfig(self):
- return True
+class OnlPlatform_arm_accton_as4610_54_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x1_4x10):
+ PLATFORM='arm-accton-as4610-54-r0'
+ MODEL="AS4610-54"
+ SYS_OBJECT_ID=".4610"
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/onlp/builds/src/.module b/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/onlp/builds/src/.module
new file mode 100644
index 00000000..d0bb8fce
--- /dev/null
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_accton_as4600_54t
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/platform-config/r0/src/python/powerpc_accton_as4600_54t_r0/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/platform-config/r0/src/python/powerpc_accton_as4600_54t_r0/__init__.py
index b0f245e8..c5993ffb 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/platform-config/r0/src/python/powerpc_accton_as4600_54t_r0/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as4600-54t/platform-config/r0/src/python/powerpc_accton_as4600_54t_r0/__init__.py
@@ -1,20 +1,11 @@
#!/usr/bin/python
-############################################################
-#
-#
-#
-############################################################
+
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as4600_54t_r0(OnlPlatformAccton):
-
- def model(self):
- return 'AS4600-54T'
-
- def platform(self):
- return 'powerpc-accton-as4600-54t-r0'
-
- def sys_oid_platform(self):
- return ".4600.54"
+class OnlPlatform_powerpc_accton_as4600_54t_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x1_4x10):
+ PLATFORM='powerpc-accton-as4600-54t-r0'
+ MODEL='AS4600-54T'
+ SYS_OBJECT_ID='.4600.54'
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/onlp/builds/src/.module b/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/onlp/builds/src/.module
new file mode 100644
index 00000000..0473ac44
--- /dev/null
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_accton_as5610_52x
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/platform-config/r0/src/python/powerpc_accton_as5610_52x_r0/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/platform-config/r0/src/python/powerpc_accton_as5610_52x_r0/__init__.py
index f609f450..233179ab 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/platform-config/r0/src/python/powerpc_accton_as5610_52x_r0/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as5610-52x/platform-config/r0/src/python/powerpc_accton_as5610_52x_r0/__init__.py
@@ -1,23 +1,12 @@
#!/usr/bin/python
-############################################################
-#
-#
-#
-############################################################
+
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as5610_52x_r0(OnlPlatformAccton):
-
- onie_base_address = "0xeff70000"
-
- def model(self):
- return "AS5610-52X"
-
- def platform(self):
- return 'powerpc-accton-as5610-52x-r0'
-
- def sys_oid_platform(self):
- return ".5610.52"
+class OnlPlatform_powerpc_accton_as5610_52x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_4x40):
+ PLATFORM='powerpc-accton-as5610-52x-r0'
+ MODEL='AS5610-52X'
+ SYS_OBJECT_ID='.5610.52'
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/onlp/builds/src/.module b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/onlp/builds/src/.module
new file mode 100644
index 00000000..995be2d9
--- /dev/null
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_accton_as5710_54x
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0/src/python/powerpc_accton_as5710_54x_r0/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0/src/python/powerpc_accton_as5710_54x_r0/__init__.py
index aa528a4c..931b0330 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0/src/python/powerpc_accton_as5710_54x_r0/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0/src/python/powerpc_accton_as5710_54x_r0/__init__.py
@@ -1,22 +1,13 @@
#!/usr/bin/python
-############################################################
-#
-#
-#
-############################################################
+
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as5710_54x_r0(OnlPlatformAccton):
+class OnlPlatform_powerpc_accton_as5710_54x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='powerpc-accton-as5710-54x-r0'
+ MODEL='AS5710-54X'
+ SYS_OBJECT_ID='.5710.54'
- CPLDVERSION="cpldversion"
- def model(self):
- return "AS5710-54X"
-
- def platform(self):
- return 'powerpc-accton-as5710-54x-r0'
-
- def sys_oid_platform(self):
- return ".5710.54"
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0b/src/python/powerpc_accton_as5710_54x_r0b/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0b/src/python/powerpc_accton_as5710_54x_r0b/__init__.py
index bd9f9834..866b67b6 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0b/src/python/powerpc_accton_as5710_54x_r0b/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as5710-54x/platform-config/r0b/src/python/powerpc_accton_as5710_54x_r0b/__init__.py
@@ -6,16 +6,9 @@ import os
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as5710_54x_r0b(OnlPlatformAccton):
-
- CPLDVERSION="cpldversion"
-
- def model(self):
- return "AS5710-54X (R0B)"
-
- def platform(self):
- return 'powerpc-accton-as5710-54x-r0b'
-
- def sys_oid_platform(self):
- return ".5710.54"
+class OnlPlatform_powerpc_accton_as5710_54x_r0b(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='powerpc-accton-as5710-54x-r0b'
+ MODEL='AS5710-54X (R0B)'
+ SYS_OBJECT_ID='.5710.54'
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/onlp/builds/src/.module b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..d67e500e
--- /dev/null
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_accton_as6700_32x
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r0/src/python/powerpc_accton_as6700_32x_r0/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r0/src/python/powerpc_accton_as6700_32x_r0/__init__.py
index 5b719ea0..e278c5a4 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r0/src/python/powerpc_accton_as6700_32x_r0/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r0/src/python/powerpc_accton_as6700_32x_r0/__init__.py
@@ -5,19 +5,16 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as6700_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS6700-32X"
-
- def platform(self):
- return 'powerpc-accton-as6700-32x-r0'
+class OnlPlatform_powerpc_accton_as6700_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x40):
+ PLATFORM='powerpc-accton-as6700-32x-r0'
+ MODEL="AS6700-32X"
+ SYS_OBJECT_ID=".6700.32"
def baseconfig(self):
with open("/etc/default/watchdog", 'a') as f:
f.write("run_watchdog=0\n");
return True
- def sys_oid_platform(self):
- return ".6700.32"
+
diff --git a/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r1/src/python/powerpc_accton_as6700_32x_r1/__init__.py b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r1/src/python/powerpc_accton_as6700_32x_r1/__init__.py
index 3098e3b5..614f4f45 100644
--- a/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r1/src/python/powerpc_accton_as6700_32x_r1/__init__.py
+++ b/packages/platforms/accton/powerpc/powerpc-accton-as6700-32x/platform-config/r1/src/python/powerpc_accton_as6700_32x_r1/__init__.py
@@ -1,24 +1,17 @@
#!/usr/bin/python
-############################################################
-#
-#
-#
-############################################################
+
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_powerpc_accton_as6700_32x_r1(OnlPlatformAccton):
-
- def model(self):
- return "AS6700-32X"
-
- def platform(self):
- return 'powerpc-accton-as6700-32x-r1'
+class OnlPlatform_powerpc_accton_as6700_32x_r1(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x40):
+ PLATFORM='powerpc-accton-as6700-32x-r1'
+ MODEL='AS6700-32X'
+ SYS_OBJECT_ID='.6700.32'
def baseconfig(self):
with open("/etc/default/watchdog", 'a') as f:
f.write("run_watchdog=0\n");
return True
- def sys_oid_platform(self):
- return ".6700.32"
+
diff --git a/packages/platforms/accton/vendor-config/src/python/accton/__init__.py b/packages/platforms/accton/vendor-config/src/python/accton/__init__.py
index 0dbb90fb..cd90d20b 100644
--- a/packages/platforms/accton/vendor-config/src/python/accton/__init__.py
+++ b/packages/platforms/accton/vendor-config/src/python/accton/__init__.py
@@ -1,22 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for Accton platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformAccton(OnlPlatformBase):
- def manufacturer(self):
- return "Accton"
-
- def sys_oid_vendor(self):
- return ".259"
+ MANUFACTURER='Accton'
+ PRIVATE_ENTERPRISE_NUMBER=259
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/onlp/builds/src/.module
new file mode 100644
index 00000000..a0ea32d6
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as5512_54x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/lib/x86-64-accton-as5512-54x-r0.yml b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/lib/x86-64-accton-as5512-54x-r0.yml
index 2c31c65a..218d540c 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/lib/x86-64-accton-as5512-54x-r0.yml
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/lib/x86-64-accton-as5512-54x-r0.yml
@@ -18,7 +18,7 @@ x86-64-accton-as5512-54x-r0:
--stop=1
kernel:
- <<: *kernel-3-2
+ <<: *kernel-3-18
args: >-
nopat
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/python/x86_64_accton_as5512_54x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/python/x86_64_accton_as5512_54x_r0/__init__.py
index de3685dd..972a3b28 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/python/x86_64_accton_as5512_54x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5512-54x/platform-config/r0/src/python/x86_64_accton_as5512_54x_r0/__init__.py
@@ -1,20 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as5512_54x_r0(OnlPlatformAccton):
-
-
- def model(self):
- return "AS5512-54X"
-
- def platform(self):
- return "x86-64-accton-as5512-54x-r0"
-
- def sys_init(self):
- pass
-
- def sys_oid_platform(self):
- return ".5512.54.1"
+class OnlPlatform_x86_64_accton_as5512_54x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='x86-64-accton-as5512-54x-r0'
+ MODEL="AS5512-54X"
+ SYS_OBJECT_ID=".5512.54.1"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/.module
new file mode 100644
index 00000000..640b7bc3
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as5712_54x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py
index c323c6e9..0fc60af9 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5712-54x/platform-config/r0/src/python/x86_64_accton_as5712_54x_r0/__init__.py
@@ -1,16 +1,12 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as5712_54x_r0(OnlPlatformAccton):
+class OnlPlatform_x86_64_accton_as5712_54x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
- def model(self):
- return "AS5712-54X"
-
- def platform(self):
- return "x86-64-accton-as5712-54x-r0"
-
- def sys_oid_platform(self):
- return ".5712.54"
+ PLATFORM='x86-64-accton-as5712-54x-r0'
+ MODEL="AS5712-54X"
+ SYS_OBJECT_ID=".5712.54"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/onlp/builds/src/.module
new file mode 100644
index 00000000..c4ba62ca
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as5812_54t
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/platform-config/r0/src/python/x86_64_accton_as5812_54t_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/platform-config/r0/src/python/x86_64_accton_as5812_54t_r0/__init__.py
index bd554c23..106910fa 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/platform-config/r0/src/python/x86_64_accton_as5812_54t_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54t/platform-config/r0/src/python/x86_64_accton_as5812_54t_r0/__init__.py
@@ -1,20 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as5812_54t_r0(OnlPlatformAccton):
-
-
- def model(self):
- return "AS5812-54T"
-
- def platform(self):
- return "x86-64-accton-as5812-54t-r0"
-
- def sys_init(self):
- pass
-
- def sys_oid_platform(self):
- return ".5812.54.2"
+class OnlPlatform_x86_64_accton_as5812_54t_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='x86-64-accton-as5812-54t-r0'
+ MODEL="AS5812-54T"
+ SYS_OBJECT_ID=".5812.54.2"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/.module
new file mode 100644
index 00000000..ffe27dc2
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as5812_54x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py
index 9b3750e9..536b1879 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as5812-54x/platform-config/r0/src/python/x86_64_accton_as5812_54x_r0/__init__.py
@@ -1,20 +1,12 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as5812_54x_r0(OnlPlatformAccton):
+class OnlPlatform_x86_64_accton_as5812_54x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_48x10_6x40):
-
- def model(self):
- return "AS5812-54X"
-
- def platform(self):
- return "x86-64-accton-as5812-54x-r0"
-
- def sys_init(self):
- pass
-
- def sys_oid_platform(self):
- return ".5812.54.1"
+ PLATFORM='x86-64-accton-as5812-54x-r0'
+ MODEL="AS5812-54X"
+ SYS_OBJECT_ID=".5812.54.1"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..e6be11ba
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as6712_32x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py
index b96aba1f..d1779f7d 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as6712-32x/platform-config/r0/src/python/x86_64_accton_as6712_32x_r0/__init__.py
@@ -1,17 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as6712_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS6712-32X"
-
- def platform(self):
- return "x86-64-accton-as6712-32x-r0"
-
- def sys_oid_platform(self):
- return ".6712.32"
-
+class OnlPlatform_x86_64_accton_as6712_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x40):
+ PLATFORM='x86-64-accton-as6712-32x-r0'
+ MODEL="AS6712-32X"
+ SYS_OBJECT_ID=".6712.32"
def baseconfig(self):
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..fd83f048
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as6812_32x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py
index f366c160..b7abeda4 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as6812-32x/platform-config/r0/src/python/x86_64_accton_as6812_32x_r0/__init__.py
@@ -1,17 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as6812_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS6812-32X"
-
- def platform(self):
- return "x86-64-accton-as6812-32x-r0"
-
- def sys_oid_platform(self):
- return ".6812.32"
-
+class OnlPlatform_x86_64_accton_as6812_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x40):
+ PLATFORM='x86-64-accton-as6812-32x-r0'
+ MODEL="AS6812-32X"
+ SYS_OBJECT_ID=".6812.32"
def baseconfig(self):
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..74536d1b
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as7512_32x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/lib/x86-64-accton-as7512-32x-r0.yml b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/lib/x86-64-accton-as7512-32x-r0.yml
index 4f4c51ce..77b890a5 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/lib/x86-64-accton-as7512-32x-r0.yml
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/lib/x86-64-accton-as7512-32x-r0.yml
@@ -6,7 +6,7 @@
#
######################################################################
-x86-64-accton-as5712-32x-r0:
+x86-64-accton-as7512-32x-r0:
grub:
@@ -17,7 +17,7 @@ x86-64-accton-as5712-32x-r0:
--parity=no
--stop=1
- kernel:
+ kernel:
<<: *kernel-3-2
args: >-
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/python/x86_64_accton_as7512_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/python/x86_64_accton_as7512_32x_r0/__init__.py
index 8ff578c9..e8770bda 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/python/x86_64_accton_as7512_32x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7512-32x/platform-config/r0/src/python/x86_64_accton_as7512_32x_r0/__init__.py
@@ -1,16 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as7512_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS7512-32X"
-
- def platform(self):
- return "x86-64-accton-as7512-32x-r0"
-
- def sys_oid_platform(self):
- return ".7512.32"
+class OnlPlatform_x86_64_accton_as7512_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x100):
+ PLATFORM='x86-64-accton-as7512-32x-r0'
+ MODEL="AS7512-32X"
+ SYS_OBJECT_ID=".7512.32"
def baseconfig(self):
########### initialize I2C bus 0 ###########
@@ -70,6 +65,7 @@ class OnlPlatform_x86_64_accton_as7512_32x_r0(OnlPlatformAccton):
self.new_i2c_device('as7512_32x_sfp2', 0x50, 19)
self.new_i2c_device('as7512_32x_sfp3', 0x50, 20)
self.new_i2c_device('as7512_32x_sfp4', 0x50, 21)
+
self.new_i2c_device('as7512_32x_sfp5', 0x50, 22)
self.new_i2c_device('as7512_32x_sfp6', 0x50, 23)
self.new_i2c_device('as7512_32x_sfp7', 0x50, 24)
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..f49c1f82
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as7712_32x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/platform-config/r0/src/python/x86_64_accton_as7712_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/platform-config/r0/src/python/x86_64_accton_as7712_32x_r0/__init__.py
index c6013ede..06580f03 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/platform-config/r0/src/python/x86_64_accton_as7712_32x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7712-32x/platform-config/r0/src/python/x86_64_accton_as7712_32x_r0/__init__.py
@@ -1,16 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as7712_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS7712-32X"
-
- def platform(self):
- return "x86-64-accton-as7712-32x-r0"
-
- def sys_oid_platform(self):
- return ".7712.32"
+class OnlPlatform_x86_64_accton_as7712_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x100):
+ PLATFORM='x86-64-accton-as7712-32x-r0'
+ MODEL="AS7712-32X"
+ SYS_OBJECT_ID=".7712.32"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/.module b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/.module
new file mode 100644
index 00000000..1bc87a11
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: x86_64_accton_as7716_32x
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/platform-config/r0/src/python/x86_64_accton_as7716_32x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/platform-config/r0/src/python/x86_64_accton_as7716_32x_r0/__init__.py
index 69069792..76f0da9e 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/platform-config/r0/src/python/x86_64_accton_as7716_32x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-as7716-32x/platform-config/r0/src/python/x86_64_accton_as7716_32x_r0/__init__.py
@@ -1,16 +1,11 @@
from onl.platform.base import *
from onl.platform.accton import *
-class OnlPlatform_x86_64_accton_as7716_32x_r0(OnlPlatformAccton):
-
- def model(self):
- return "AS7716-32X"
-
- def platform(self):
- return "x86-64-accton-as7716-32x-r0"
-
- def sys_oid_platform(self):
- return ".7716.32"
+class OnlPlatform_x86_64_accton_as7716_32x_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x100):
+ PLATFORM='x86-64-accton-as7716-32x-r0'
+ MODEL="AS7716-32X"
+ SYS_OBJECT_ID=".7716.32"
def baseconfig(self):
########### initialize I2C bus 0 ###########
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/lib/x86-64-accton-wedge-16x-r0.yml b/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/lib/x86-64-accton-wedge-16x-r0.yml
index 1c42ce71..133874d1 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/lib/x86-64-accton-wedge-16x-r0.yml
+++ b/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/lib/x86-64-accton-wedge-16x-r0.yml
@@ -18,7 +18,7 @@ x86-64-accton-wedge-16x-r0:
--stop=1
kernel:
- <<: *kernel-3-2
+ <<: *kernel-3-18
args: >-
nopat
diff --git a/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/python/x86_64_accton_wedge_16x_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/python/x86_64_accton_wedge_16x_r0/__init__.py
index bfe7f195..f184516b 100644
--- a/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/python/x86_64_accton_wedge_16x_r0/__init__.py
+++ b/packages/platforms/accton/x86-64/x86-64-accton-wedge-16x/platform-config/r0/src/python/x86_64_accton_wedge_16x_r0/__init__.py
@@ -1,16 +1,13 @@
from onl.platform.base import *
from onl.vendor.accton import *
-class OnlPlatform_x86_64_accton_wedge_16x_r0(OpenNetworkPlatformAccton):
+class OnlPlatform_x86_64_accton_wedge_16x_r0(OnlPlatformAccton):
+ PLATFORM='x86-64-accton-wedge-16x-r0'
+ MODEL="Wedge-16X"
+ SYS_OBJECT_ID=".16.1"
- def model(self):
- return "Wedge-16X"
+ PORT_COUNT=16
+ PORT_CONFIG="16x40"
- def platform(self):
- return "x86-64-accton-wedge-16x-r0"
- def baseconfig(self):
- return True
- def sys_oid_platform(self):
- return ".16.1"
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/Makefile b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/Makefile
new file mode 100644
index 00000000..dc1e7b86
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/Makefile b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/Makefile
new file mode 100644
index 00000000..dc1e7b86
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/PKG.yml b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/PKG.yml
new file mode 100644
index 00000000..10caa7f6
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/onlp/PKG.yml
@@ -0,0 +1,15 @@
+variables:
+ platform: x86-64-facebook-wedge100-r0
+ install: /lib/platform-config/${platform}/onl
+
+common:
+ version: 1.0.0
+ arch: amd64
+ copyright: Copyright 2013, 2014, 2015 Big Switch Networks
+ maintainer: support@bigswitch.com
+ comment: dummy package for ONLP on Wedge
+packages:
+ - name: onlp-${platform}
+ summary: ONLP Package for the ${platform} platform.
+
+ changelog: initial version
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/Makefile b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/Makefile
new file mode 100644
index 00000000..dc1e7b86
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/Makefile b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/Makefile
new file mode 100644
index 00000000..dc1e7b86
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/PKG.yml b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/PKG.yml
new file mode 100644
index 00000000..41ac0a89
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/PKG.yml
@@ -0,0 +1 @@
+!include $ONL_TEMPLATES/platform-config-platform.yml ARCH=amd64 VENDOR=accton PLATFORM=x86-64-facebook-wedge100-r0
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/lib/x86-64-facebook-wedge100-r0.yml b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/lib/x86-64-facebook-wedge100-r0.yml
new file mode 100644
index 00000000..fdcbd263
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/lib/x86-64-facebook-wedge100-r0.yml
@@ -0,0 +1,34 @@
+---
+
+######################################################################
+#
+# platform-config for WEDGE
+#
+######################################################################
+
+x86-64-facebook-wedge100-r0:
+
+ grub:
+
+ serial: >-
+ --unit=0
+ --speed=57600
+ --word=8
+ --parity=0
+ --stop=1
+
+ kernel:
+ <<: *kernel-3-18
+
+ args: >-
+ nopat
+ console=ttyS0,57600n8
+ rd_NO_MD
+ rd_NO_LUKS
+ intel_iommu=off
+
+ ##network
+ ## interfaces:
+ ## ma1:
+ ## name: ~
+ ## syspath: pci0000:00/0000:00:14.0
diff --git a/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/python/x86_64_facebook_wedge100_r0/__init__.py b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/python/x86_64_facebook_wedge100_r0/__init__.py
new file mode 100644
index 00000000..5a948e2c
--- /dev/null
+++ b/packages/platforms/accton/x86-64/x86-64-facebook-wedge100/platform-config/r0/src/python/x86_64_facebook_wedge100_r0/__init__.py
@@ -0,0 +1,8 @@
+from onl.platform.base import *
+from onl.vendor.accton import *
+
+class OnlPlatform_x86_64_facebook_wedge_100_r0(OnlPlatformAccton,
+ OnlPlatformPortConfig_32x100):
+ MODEL="Wedge-100"
+ PLATFORM="x86-64-facebook-wedge100-r0"
+ SYS_OBJECT_ID=".100.1"
diff --git a/builds/amd64/installer/legacy/Makefile b/packages/platforms/alphanetworks/vendor-config/Makefile
similarity index 100%
rename from builds/amd64/installer/legacy/Makefile
rename to packages/platforms/alphanetworks/vendor-config/Makefile
diff --git a/packages/platforms/alphanetworks/vendor-config/PKG.yml b/packages/platforms/alphanetworks/vendor-config/PKG.yml
new file mode 100644
index 00000000..a34897ad
--- /dev/null
+++ b/packages/platforms/alphanetworks/vendor-config/PKG.yml
@@ -0,0 +1 @@
+!include $ONL_TEMPLATES/platform-config-vendor.yml VENDOR=alphanetworks Vendor=AlphaNetworks
diff --git a/packages/platforms/alphanetworks/vendor-config/src/python/alphanetworks/__init__.py b/packages/platforms/alphanetworks/vendor-config/src/python/alphanetworks/__init__.py
new file mode 100644
index 00000000..0aa964c8
--- /dev/null
+++ b/packages/platforms/alphanetworks/vendor-config/src/python/alphanetworks/__init__.py
@@ -0,0 +1,7 @@
+#!/usr/bin/python
+
+from onl.platform.base import *
+
+class OnlPlatformAlphaNetworks(OnlPlatformBase):
+ MANUFACTURER='AlphaNetworks'
+ PRIVATE_ENTERPRISE_NUMBER=31874
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/.gitignore b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/.gitignore
new file mode 100644
index 00000000..4d978b36
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/.gitignore
@@ -0,0 +1,2 @@
+*x86*64*cel*redstone*xp*.mk
+onlpdump.mk
diff --git a/builds/armel/installer/legacy/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/Makefile
similarity index 100%
rename from builds/armel/installer/legacy/Makefile
rename to packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/Makefile
diff --git a/builds/powerpc/installer/legacy/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/Makefile
similarity index 100%
rename from builds/powerpc/installer/legacy/Makefile
rename to packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/Makefile
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/PKG.yml b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/PKG.yml
new file mode 100644
index 00000000..9233aee8
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/PKG.yml
@@ -0,0 +1 @@
+!include $ONL_TEMPLATES/onlp-platform-any.yml PLATFORM=x86-64-alphanetworks-snx60a0-486f ARCH=amd64 TOOLCHAIN=x86_64-linux-gnu
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/Makefile
new file mode 100644
index 00000000..e7437cb2
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/Makefile
@@ -0,0 +1,2 @@
+FILTER=src
+include $(ONL)/make/subdirs.mk
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/Makefile
new file mode 100644
index 00000000..87ec8e0d
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/Makefile
@@ -0,0 +1,45 @@
+############################################################
+#
+#
+# Copyright 2014 BigSwitch Networks, Inc.
+#
+# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
+#
+# 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.
+#
+#
+############################################################
+#
+#
+############################################################
+include $(ONL)/make/config.amd64.mk
+
+MODULE := libonlp-x86-64-alphanetworks-snx60a0-486f
+include $(BUILDER)/standardinit.mk
+
+DEPENDMODULES := AIM IOF x86_64_alphanetworks_snx60a0_486f onlplib
+DEPENDMODULE_HEADERS := sff
+
+include $(BUILDER)/dependmodules.mk
+
+SHAREDLIB := libonlp-x86-64-alphanetworks-snx60a0-486f.so
+$(SHAREDLIB)_TARGETS := $(ALL_TARGETS)
+include $(BUILDER)/so.mk
+.DEFAULT_GOAL := $(SHAREDLIB)
+
+GLOBAL_CFLAGS += -I$(onlp_BASEDIR)/module/inc
+GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1
+GLOBAL_CFLAGS += -fPIC
+GLOBAL_LINK_LIBS += -lpthread
+
+include $(BUILDER)/targets.mk
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/libonlp-x86-64-alphanetworks-snx60a0-486f.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/libonlp-x86-64-alphanetworks-snx60a0-486f.mk
new file mode 100644
index 00000000..f1efdbb6
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/libonlp-x86-64-alphanetworks-snx60a0-486f.mk
@@ -0,0 +1,10 @@
+
+###############################################################################
+#
+# Inclusive Makefile for the libonlp-x86-64-alphanetworks-snx60a0-486f module.
+#
+# Autogenerated 2016-07-15 15:27:29.712643
+#
+###############################################################################
+libonlp-x86-64-alphanetworks-snx60a0-486f_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/x86_64_alphanetworks_snx60a0_486f.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/x86_64_alphanetworks_snx60a0_486f.mk
new file mode 100644
index 00000000..bebc6e98
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/lib/x86_64_alphanetworks_snx60a0_486f.mk
@@ -0,0 +1,10 @@
+
+###############################################################################
+#
+# Inclusive Makefile for the x86_64_alphanetworks_snx60a0_486f module.
+#
+# Autogenerated 2016-07-15 15:27:29.728794
+#
+###############################################################################
+x86_64_alphanetworks_snx60a0_486f_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/onlpdump/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/onlpdump/Makefile
new file mode 100644
index 00000000..7035ea16
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/onlpdump/Makefile
@@ -0,0 +1,46 @@
+############################################################
+#
+#
+# Copyright 2014 BigSwitch Networks, Inc.
+#
+# Licensed under the Eclipse Public License, Version 1.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.eclipse.org/legal/epl-v10.html
+#
+# 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.
+#
+#
+############################################################
+#
+#
+#
+############################################################
+include $(ONL)/make/config.amd64.mk
+
+.DEFAULT_GOAL := onlpdump
+
+MODULE := onlpdump
+include $(BUILDER)/standardinit.mk
+
+DEPENDMODULES := AIM IOF onlp x86_64_alphanetworks_snx60a0_486f onlplib onlp_platform_defaults sff cjson cjson_util timer_wheel OS
+
+include $(BUILDER)/dependmodules.mk
+
+BINARY := onlpdump
+$(BINARY)_LIBRARIES := $(LIBRARY_TARGETS)
+include $(BUILDER)/bin.mk
+
+GLOBAL_CFLAGS += -DAIM_CONFIG_AIM_MAIN_FUNCTION=onlpdump_main
+GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MODULES_INIT=1
+GLOBAL_CFLAGS += -DAIM_CONFIG_INCLUDE_MAIN=1
+GLOBAL_LINK_LIBS += -lpthread -lm
+
+include $(BUILDER)/targets.mk
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/.module b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/.module
new file mode 100644
index 00000000..a41d2cfe
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/.module
@@ -0,0 +1 @@
+name: x86_64_alphanetworks_snx60a0_486f
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/Makefile
new file mode 100644
index 00000000..6ae7adde
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/Makefile
@@ -0,0 +1,9 @@
+###############################################################################
+#
+#
+#
+###############################################################################
+include $(ONL)/make/config.mk
+MODULE := x86_64_alphanetworks_snx60a0_486f
+AUTOMODULE := x86_64_alphanetworks_snx60a0_486f
+include $(BUILDER)/definemodule.mk
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/README b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/README
new file mode 100644
index 00000000..3f2b66d3
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/README
@@ -0,0 +1,6 @@
+###############################################################################
+#
+# x86_64_alphanetworks_snx60a0_486f README
+#
+###############################################################################
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/make.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/make.mk
new file mode 100644
index 00000000..a6481dea
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/make.mk
@@ -0,0 +1,9 @@
+###############################################################################
+#
+# x86_64_alphanetworks_snx60a0_486f Autogeneration
+#
+###############################################################################
+x86_64_alphanetworks_snx60a0_486f_AUTO_DEFS := module/auto/x86_64_alphanetworks_snx60a0_486f.yml
+x86_64_alphanetworks_snx60a0_486f_AUTO_DIRS := module/inc/x86_64_alphanetworks_snx60a0_486f module/src
+include $(BUILDER)/auto.mk
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/x86_64_alphanetworks_snx60a0_486f.yml b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/x86_64_alphanetworks_snx60a0_486f.yml
new file mode 100644
index 00000000..5a43e702
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/auto/x86_64_alphanetworks_snx60a0_486f.yml
@@ -0,0 +1,47 @@
+###############################################################################
+#
+# x86_64_alphanetworks_snx60a0_486f Autogeneration Definitions.
+#
+###############################################################################
+
+cdefs: &cdefs
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING:
+ doc: "Include or exclude logging."
+ default: 1
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT:
+ doc: "Default enabled log options."
+ default: AIM_LOG_OPTIONS_DEFAULT
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT:
+ doc: "Default enabled log bits."
+ default: AIM_LOG_BITS_DEFAULT
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT:
+ doc: "Default enabled custom log bits."
+ default: 0
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB:
+ doc: "Default all porting macros to use the C standard libraries."
+ default: 1
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS:
+ doc: "Include standard library headers for stdlib porting macros."
+ default: X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB
+- X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI:
+ doc: "Include generic uCli support."
+ default: 0
+
+
+definitions:
+ cdefs:
+ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_HEADER:
+ defs: *cdefs
+ basename: x86_64_alphanetworks_snx60a0_486f_config
+
+ portingmacro:
+ X86_64_ALPHANETWORKS_SNX60A0_486F:
+ macros:
+ - malloc
+ - free
+ - memset
+ - memcpy
+ - strncpy
+ - vsnprintf
+ - snprintf
+ - strlen
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.x b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.x
new file mode 100644
index 00000000..9c9a5a00
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.x
@@ -0,0 +1,14 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+/* <--auto.start.xmacro(ALL).define> */
+/* */
+
+/* <--auto.start.xenum(ALL).define> */
+/* */
+
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_config.h b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_config.h
new file mode 100644
index 00000000..4e958ac0
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_config.h
@@ -0,0 +1,127 @@
+/**************************************************************************//**
+ *
+ * @file
+ * @brief x86_64_alphanetworks_snx60a0_486f Configuration Header
+ *
+ * @addtogroup x86_64_alphanetworks_snx60a0_486f-config
+ * @{
+ *
+ *****************************************************************************/
+#ifndef __X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_H__
+#define __X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_H__
+
+#ifdef GLOBAL_INCLUDE_CUSTOM_CONFIG
+#include
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_INCLUDE_CUSTOM_CONFIG
+#include
+#endif
+
+/* */
+#include
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING
+ *
+ * Include or exclude logging. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING 1
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT
+ *
+ * Default enabled log options. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT AIM_LOG_OPTIONS_DEFAULT
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT
+ *
+ * Default enabled log bits. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT AIM_LOG_BITS_DEFAULT
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT
+ *
+ * Default enabled custom log bits. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT 0
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB
+ *
+ * Default all porting macros to use the C standard libraries. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB 1
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS
+ *
+ * Include standard library headers for stdlib porting macros. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB
+#endif
+
+/**
+ * X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI
+ *
+ * Include generic uCli support. */
+
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI 0
+#endif
+
+
+
+/**
+ * All compile time options can be queried or displayed
+ */
+
+/** Configuration settings structure. */
+typedef struct x86_64_alphanetworks_snx60a0_486f_config_settings_s {
+ /** name */
+ const char* name;
+ /** value */
+ const char* value;
+} x86_64_alphanetworks_snx60a0_486f_config_settings_t;
+
+/** Configuration settings table. */
+/** x86_64_alphanetworks_snx60a0_486f_config_settings table. */
+extern x86_64_alphanetworks_snx60a0_486f_config_settings_t x86_64_alphanetworks_snx60a0_486f_config_settings[];
+
+/**
+ * @brief Lookup a configuration setting.
+ * @param setting The name of the configuration option to lookup.
+ */
+const char* x86_64_alphanetworks_snx60a0_486f_config_lookup(const char* setting);
+
+/**
+ * @brief Show the compile-time configuration.
+ * @param pvs The output stream.
+ */
+int x86_64_alphanetworks_snx60a0_486f_config_show(struct aim_pvs_s* pvs);
+
+/* */
+
+#include "x86_64_alphanetworks_snx60a0_486f_porting.h"
+
+#endif /* __X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_H__ */
+/* @} */
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_dox.h b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_dox.h
new file mode 100644
index 00000000..e4665cc6
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_dox.h
@@ -0,0 +1,26 @@
+/**************************************************************************//**
+ *
+ * x86_64_alphanetworks_snx60a0_486f Doxygen Header
+ *
+ *****************************************************************************/
+#ifndef __X86_64_ALPHANETWORKS_SNX60A0_486F_DOX_H__
+#define __X86_64_ALPHANETWORKS_SNX60A0_486F_DOX_H__
+
+/**
+ * @defgroup x86_64_alphanetworks_snx60a0_486f x86_64_alphanetworks_snx60a0_486f - x86_64_alphanetworks_snx60a0_486f Description
+ *
+
+The documentation overview for this module should go here.
+
+ *
+ * @{
+ *
+ * @defgroup x86_64_alphanetworks_snx60a0_486f-x86_64_alphanetworks_snx60a0_486f Public Interface
+ * @defgroup x86_64_alphanetworks_snx60a0_486f-config Compile Time Configuration
+ * @defgroup x86_64_alphanetworks_snx60a0_486f-porting Porting Macros
+ *
+ * @}
+ *
+ */
+
+#endif /* __X86_64_ALPHANETWORKS_SNX60A0_486F_DOX_H__ */
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_porting.h b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_porting.h
new file mode 100644
index 00000000..b54775c1
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/inc/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f_porting.h
@@ -0,0 +1,107 @@
+/**************************************************************************//**
+ *
+ * @file
+ * @brief x86_64_alphanetworks_snx60a0_486f Porting Macros.
+ *
+ * @addtogroup x86_64_alphanetworks_snx60a0_486f-porting
+ * @{
+ *
+ *****************************************************************************/
+#ifndef __X86_64_ALPHANETWORKS_SNX60A0_486F_PORTING_H__
+#define __X86_64_ALPHANETWORKS_SNX60A0_486F_PORTING_H__
+
+
+/* */
+#if X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS == 1
+#include
+#include
+#include
+#include
+#include
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_MALLOC
+ #if defined(GLOBAL_MALLOC)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MALLOC GLOBAL_MALLOC
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MALLOC malloc
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_MALLOC is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_FREE
+ #if defined(GLOBAL_FREE)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_FREE GLOBAL_FREE
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_FREE free
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_FREE is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_MEMSET
+ #if defined(GLOBAL_MEMSET)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MEMSET GLOBAL_MEMSET
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MEMSET memset
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_MEMSET is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_MEMCPY
+ #if defined(GLOBAL_MEMCPY)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MEMCPY GLOBAL_MEMCPY
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_MEMCPY memcpy
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_MEMCPY is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_STRNCPY
+ #if defined(GLOBAL_STRNCPY)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_STRNCPY GLOBAL_STRNCPY
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_STRNCPY strncpy
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_STRNCPY is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_VSNPRINTF
+ #if defined(GLOBAL_VSNPRINTF)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_VSNPRINTF GLOBAL_VSNPRINTF
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_VSNPRINTF vsnprintf
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_VSNPRINTF is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_SNPRINTF
+ #if defined(GLOBAL_SNPRINTF)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_SNPRINTF GLOBAL_SNPRINTF
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_SNPRINTF snprintf
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_SNPRINTF is required but cannot be defined.
+ #endif
+#endif
+
+#ifndef X86_64_ALPHANETWORKS_SNX60A0_486F_STRLEN
+ #if defined(GLOBAL_STRLEN)
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_STRLEN GLOBAL_STRLEN
+ #elif X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB == 1
+ #define X86_64_ALPHANETWORKS_SNX60A0_486F_STRLEN strlen
+ #else
+ #error The macro X86_64_ALPHANETWORKS_SNX60A0_486F_STRLEN is required but cannot be defined.
+ #endif
+#endif
+
+/* */
+
+
+#endif /* __X86_64_ALPHANETWORKS_SNX60A0_486F_PORTING_H__ */
+/* @} */
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/make.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/make.mk
new file mode 100644
index 00000000..f4e72b01
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/make.mk
@@ -0,0 +1,10 @@
+###############################################################################
+#
+#
+#
+###############################################################################
+THIS_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+x86_64_alphanetworks_snx60a0_486f_INCLUDES := -I $(THIS_DIR)inc
+x86_64_alphanetworks_snx60a0_486f_INTERNAL_INCLUDES := -I $(THIS_DIR)src
+x86_64_alphanetworks_snx60a0_486f_DEPENDMODULE_ENTRIES := init:x86_64_alphanetworks_snx60a0_486f ucli:x86_64_alphanetworks_snx60a0_486f
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/Makefile
new file mode 100644
index 00000000..c1b65e94
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/Makefile
@@ -0,0 +1,9 @@
+###############################################################################
+#
+# Local source generation targets.
+#
+###############################################################################
+
+ucli:
+ @../../../../tools/uclihandlers.py x86_64_alphanetworks_snx60a0_486f_ucli.c
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/make.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/make.mk
new file mode 100644
index 00000000..6f98ef96
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/make.mk
@@ -0,0 +1,9 @@
+###############################################################################
+#
+#
+#
+###############################################################################
+
+LIBRARY := x86_64_alphanetworks_snx60a0_486f
+$(LIBRARY)_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST)))
+include $(BUILDER)/lib.mk
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_config.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_config.c
new file mode 100644
index 00000000..9f172282
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_config.c
@@ -0,0 +1,76 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+/* */
+#define __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(_x) #_x
+#define __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(_x) __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(_x)
+x86_64_alphanetworks_snx60a0_486f_config_settings_t x86_64_alphanetworks_snx60a0_486f_config_settings[] =
+{
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_LOGGING(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_STDLIB(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_PORTING_INCLUDE_STDLIB_HEADERS(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+#ifdef X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI
+ { __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI), __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE(X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI) },
+#else
+{ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI(__x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME), "__undefined__" },
+#endif
+ { NULL, NULL }
+};
+#undef __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_VALUE
+#undef __x86_64_alphanetworks_snx60a0_486f_config_STRINGIFY_NAME
+
+const char*
+x86_64_alphanetworks_snx60a0_486f_config_lookup(const char* setting)
+{
+ int i;
+ for(i = 0; x86_64_alphanetworks_snx60a0_486f_config_settings[i].name; i++) {
+ if(strcmp(x86_64_alphanetworks_snx60a0_486f_config_settings[i].name, setting)) {
+ return x86_64_alphanetworks_snx60a0_486f_config_settings[i].value;
+ }
+ }
+ return NULL;
+}
+
+int
+x86_64_alphanetworks_snx60a0_486f_config_show(struct aim_pvs_s* pvs)
+{
+ int i;
+ for(i = 0; x86_64_alphanetworks_snx60a0_486f_config_settings[i].name; i++) {
+ aim_printf(pvs, "%s = %s\n", x86_64_alphanetworks_snx60a0_486f_config_settings[i].name, x86_64_alphanetworks_snx60a0_486f_config_settings[i].value);
+ }
+ return i;
+}
+
+/* */
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_enums.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_enums.c
new file mode 100644
index 00000000..db93b1c3
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_enums.c
@@ -0,0 +1,10 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+/* <--auto.start.enum(ALL).source> */
+/* */
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_int.h b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_int.h
new file mode 100644
index 00000000..6d28d252
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_int.h
@@ -0,0 +1,12 @@
+/**************************************************************************//**
+ *
+ * x86_64_alphanetworks_snx60a0_486f Internal Header
+ *
+ *****************************************************************************/
+#ifndef __X86_64_ALPHANETWORKS_SNX60A0_486F_INT_H__
+#define __X86_64_ALPHANETWORKS_SNX60A0_486F_INT_H__
+
+#include
+
+
+#endif /* __X86_64_ALPHANETWORKS_SNX60A0_486F_INT_H__ */
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.c
new file mode 100644
index 00000000..433dcf4a
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.c
@@ -0,0 +1,18 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+#include "x86_64_alphanetworks_snx60a0_486f_log.h"
+/*
+ * x86_64_alphanetworks_snx60a0_486f log struct.
+ */
+AIM_LOG_STRUCT_DEFINE(
+ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_OPTIONS_DEFAULT,
+ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_BITS_DEFAULT,
+ NULL, /* Custom log map */
+ X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_LOG_CUSTOM_BITS_DEFAULT
+ );
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.h b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.h
new file mode 100644
index 00000000..fff31fe5
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_log.h
@@ -0,0 +1,12 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#ifndef __X86_64_ALPHANETWORKS_SNX60A0_486F_LOG_H__
+#define __X86_64_ALPHANETWORKS_SNX60A0_486F_LOG_H__
+
+#define AIM_LOG_MODULE_NAME x86_64_alphanetworks_snx60a0_486f
+#include
+
+#endif /* __X86_64_ALPHANETWORKS_SNX60A0_486F_LOG_H__ */
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_module.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_module.c
new file mode 100644
index 00000000..aa08d3cc
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_module.c
@@ -0,0 +1,24 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+#include "x86_64_alphanetworks_snx60a0_486f_log.h"
+
+static int
+datatypes_init__(void)
+{
+#define X86_64_ALPHANETWORKS_SNX60A0_486F_ENUMERATION_ENTRY(_enum_name, _desc) AIM_DATATYPE_MAP_REGISTER(_enum_name, _enum_name##_map, _desc, AIM_LOG_INTERNAL);
+#include
+ return 0;
+}
+
+void __x86_64_alphanetworks_snx60a0_486f_module_init__(void)
+{
+ AIM_LOG_STRUCT_REGISTER();
+ datatypes_init__();
+}
+
+int __onlp_platform_version__ = 1;
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_ucli.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_ucli.c
new file mode 100644
index 00000000..a2327e08
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/module/src/x86_64_alphanetworks_snx60a0_486f_ucli.c
@@ -0,0 +1,50 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+#if X86_64_ALPHANETWORKS_SNX60A0_486F_CONFIG_INCLUDE_UCLI == 1
+
+#include
+#include
+#include
+
+static ucli_status_t
+x86_64_alphanetworks_snx60a0_486f_ucli_ucli__config__(ucli_context_t* uc)
+{
+ UCLI_HANDLER_MACRO_MODULE_CONFIG(x86_64_alphanetworks_snx60a0_486f)
+}
+
+/* */
+/* */
+
+static ucli_module_t
+x86_64_alphanetworks_snx60a0_486f_ucli_module__ =
+ {
+ "x86_64_alphanetworks_snx60a0_486f_ucli",
+ NULL,
+ x86_64_alphanetworks_snx60a0_486f_ucli_ucli_handlers__,
+ NULL,
+ NULL,
+ };
+
+ucli_node_t*
+x86_64_alphanetworks_snx60a0_486f_ucli_node_create(void)
+{
+ ucli_node_t* n;
+ ucli_module_init(&x86_64_alphanetworks_snx60a0_486f_ucli_module__);
+ n = ucli_node_create("x86_64_alphanetworks_snx60a0_486f", NULL, &x86_64_alphanetworks_snx60a0_486f_ucli_module__);
+ ucli_node_subnode_add(n, ucli_module_log_node_create("x86_64_alphanetworks_snx60a0_486f"));
+ return n;
+}
+
+#else
+void*
+x86_64_alphanetworks_snx60a0_486f_ucli_node_create(void)
+{
+ return NULL;
+}
+#endif
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/_make.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/_make.mk
new file mode 100644
index 00000000..1f9b2561
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/_make.mk
@@ -0,0 +1,8 @@
+###############################################################################
+#
+# x86_64_alphanetworks_snx60a0_486f Unit Test Makefile.
+#
+###############################################################################
+UMODULE := x86_64_alphanetworks_snx60a0_486f
+UMODULE_SUBDIR := $(dir $(lastword $(MAKEFILE_LIST)))
+include $(BUILDER)/utest.mk
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/main.c b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/main.c
new file mode 100644
index 00000000..e9fa4844
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/utest/main.c
@@ -0,0 +1,19 @@
+/**************************************************************************//**
+ *
+ *
+ *
+ *****************************************************************************/
+#include
+
+#include
+#include
+#include
+#include
+
+int aim_main(int argc, char* argv[])
+{
+ printf("x86_64_alphanetworks_snx60a0_486f Utest Is Empty\n");
+ x86_64_alphanetworks_snx60a0_486f_config_show(&aim_pvs_stdout);
+ return 0;
+}
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.doxy b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.doxy
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.mk b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.mk
new file mode 100644
index 00000000..5652d605
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/onlp/builds/src/x86_64_alphanetworks_snx60a0_486f/x86_64_alphanetworks_snx60a0_486f.mk
@@ -0,0 +1,14 @@
+
+###############################################################################
+#
+# Inclusive Makefile for the x86_64_alphanetworks_snx60a0_486f module.
+#
+# Autogenerated 2016-07-15 15:47:05.304474
+#
+###############################################################################
+x86_64_alphanetworks_snx60a0_486f_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+include $(x86_64_alphanetworks_snx60a0_486f_BASEDIR)module/make.mk
+include $(x86_64_alphanetworks_snx60a0_486f_BASEDIR)module/auto/make.mk
+include $(x86_64_alphanetworks_snx60a0_486f_BASEDIR)module/src/make.mk
+include $(x86_64_alphanetworks_snx60a0_486f_BASEDIR)utest/_make.mk
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/Makefile
new file mode 100644
index 00000000..003238cf
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
\ No newline at end of file
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/Makefile b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/Makefile
new file mode 100644
index 00000000..003238cf
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/Makefile
@@ -0,0 +1 @@
+include $(ONL)/make/pkg.mk
\ No newline at end of file
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/PKG.yml b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/PKG.yml
new file mode 100644
index 00000000..d3edd871
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/PKG.yml
@@ -0,0 +1,3 @@
+!include $ONL_TEMPLATES/platform-config-platform.yml ARCH=amd64 VENDOR=alphanetworks PLATFORM=x86-64-alphanetworks-snx60a0-486f-r0
+
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/lib/x86-64-alphanetworks-snx60a0-486f-r0.yml b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/lib/x86-64-alphanetworks-snx60a0-486f-r0.yml
new file mode 100644
index 00000000..d55b1cc0
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/lib/x86-64-alphanetworks-snx60a0-486f-r0.yml
@@ -0,0 +1,25 @@
+---
+
+######################################################################
+#
+# platform-config for SNX60A0-486F
+#
+######################################################################
+x86-64-alphanetworks-snx60a0-486f-r0:
+
+ grub:
+
+ serial: >-
+ --port=0x3f8
+ --speed=115200
+ --word=8
+ --parity=no
+ --stop=1
+
+ kernel:
+ <<: *kernel-3-2
+
+ args: >-
+ nopat
+ console=ttyS0,115200n8
+
diff --git a/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/python/x86_64_alphanetworks_snx60a0_486f_r0/__init__.py b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/python/x86_64_alphanetworks_snx60a0_486f_r0/__init__.py
new file mode 100644
index 00000000..f86ea0ce
--- /dev/null
+++ b/packages/platforms/alphanetworks/x86-64-alphanetworks-snx60a0-486f/platform-config/r0/src/python/x86_64_alphanetworks_snx60a0_486f_r0/__init__.py
@@ -0,0 +1,9 @@
+from onl.platform.base import *
+from onl.platform.alphanetworks import *
+
+class OnlPlatform_x86_64_alphanetworks_snx60a0_486f_r0(OnlPlatformAlphaNetworks,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='x86-64-alphanetworks-snx60a0-486f-r0'
+ MODEL="SNX-60A0-486F"
+ SYS_OBJECT_ID=".6000.486.1"
+
diff --git a/packages/platforms/celestica/vendor-config/src/python/celestica/__init__.py b/packages/platforms/celestica/vendor-config/src/python/celestica/__init__.py
index 722f43d9..08a5db35 100644
--- a/packages/platforms/celestica/vendor-config/src/python/celestica/__init__.py
+++ b/packages/platforms/celestica/vendor-config/src/python/celestica/__init__.py
@@ -1,23 +1,8 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for Celestica platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformCelestica(OnlPlatformBase):
- def manufacturer(self):
- return "Celestica"
-
- def sys_oid_vendor(self):
- return ".12290"
+ MANUFACTUTER='Celestica'
+ PRIVATE_ENTERPRISE_NUMBER=12290
diff --git a/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/onlp/builds/src/x86_64_cel_redstone_xp/.module b/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/onlp/builds/src/x86_64_cel_redstone_xp/.module
new file mode 100644
index 00000000..2aa1d02a
--- /dev/null
+++ b/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/onlp/builds/src/x86_64_cel_redstone_xp/.module
@@ -0,0 +1 @@
+name: x86_64_cel_redstone_xp
diff --git a/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/platform-config/r0/src/python/x86_64_cel_redstone_xp_r0/__init__.py b/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/platform-config/r0/src/python/x86_64_cel_redstone_xp_r0/__init__.py
index 0226ddd8..f3d6c214 100644
--- a/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/platform-config/r0/src/python/x86_64_cel_redstone_xp_r0/__init__.py
+++ b/packages/platforms/celestica/x86-64/x86-64-cel-redstone-xp/platform-config/r0/src/python/x86_64_cel_redstone_xp_r0/__init__.py
@@ -1,16 +1,9 @@
from onl.platform.base import *
from onl.platform.celestica import *
-class OnlPlatform_x86_64_cel_redstone_xp_r0(OnlPlatformCelestica):
+class OnlPlatform_x86_64_cel_redstone_xp_r0(OnlPlatformCelestica,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='x86-64-cel-redstone-xp-r0'
+ MODEL="Redstone XP"
+ SYS_OBJECT_ID=".2060.1"
- def model(self):
- return "Redstone XP"
-
- def platform(self):
- return "x86-64-cel-redstone-xp-r0"
-
- def sys_oid_platform(self):
- return ".2060.1"
-
- def baseconfig(self):
- return True
diff --git a/packages/platforms/dell/vendor-config/src/python/dell/__init__.py b/packages/platforms/dell/vendor-config/src/python/dell/__init__.py
index 8c2ee967..3b69223e 100644
--- a/packages/platforms/dell/vendor-config/src/python/dell/__init__.py
+++ b/packages/platforms/dell/vendor-config/src/python/dell/__init__.py
@@ -1,23 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for DELL platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformDell(OnlPlatformBase):
-
- def manufacturer(self):
- return "Dell"
-
- def sys_oid_vendor(self):
- return ".674"
+ MANUFACTURER='Dell'
+ PRIVATE_ENTERPRISE_NUMBER=674
diff --git a/packages/platforms/dni/vendor-config/src/python/dni/__init__.py b/packages/platforms/dni/vendor-config/src/python/dni/__init__.py
index 83562176..6878a215 100644
--- a/packages/platforms/dni/vendor-config/src/python/dni/__init__.py
+++ b/packages/platforms/dni/vendor-config/src/python/dni/__init__.py
@@ -1,22 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for DNI platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformDNI(OnlPlatformBase):
- def manufacturer(self):
- return "DNI"
-
- def sys_oid_vendor(self):
- return ".5324"
+ MANUFACTURER='DNI'
+ PRIVATE_ENTERPRISE_NUMBER=5324
diff --git a/packages/platforms/kvm/vendor-config/src/python/kvm/__init__.py b/packages/platforms/kvm/vendor-config/src/python/kvm/__init__.py
index 62338900..9ab43132 100644
--- a/packages/platforms/kvm/vendor-config/src/python/kvm/__init__.py
+++ b/packages/platforms/kvm/vendor-config/src/python/kvm/__init__.py
@@ -1,22 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for the KVM simulation platform.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformKVM(OnlPlatformBase):
- def manufacturer(self):
- return "KVM"
-
- def sys_oid_vendor(self):
- return ".42623"
+ MANUFACTURER='KVM'
+ PRIVATE_ENTERPRISE_NUMBER=42623
diff --git a/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/onlp/builds/src/x86_64_kvm_x86_64/.module b/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/onlp/builds/src/x86_64_kvm_x86_64/.module
new file mode 100644
index 00000000..b2f88a96
--- /dev/null
+++ b/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/onlp/builds/src/x86_64_kvm_x86_64/.module
@@ -0,0 +1 @@
+name: x86_64_kvm_x86_64
diff --git a/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/platform-config/r0/src/python/x86_64_kvm_x86_64_r0/__init__.py b/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/platform-config/r0/src/python/x86_64_kvm_x86_64_r0/__init__.py
index d4d79074..29d18aba 100644
--- a/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/platform-config/r0/src/python/x86_64_kvm_x86_64_r0/__init__.py
+++ b/packages/platforms/kvm/x86-64/x86-64-kvm-x86-64/platform-config/r0/src/python/x86_64_kvm_x86_64_r0/__init__.py
@@ -2,15 +2,8 @@ from onl.platform.base import *
from onl.platform.kvm import *
class OnlPlatform_x86_64_kvm_x86_64_r0(OnlPlatformKVM):
-
- def model(self):
- return "KVM X86_64"
-
- def platform(self):
- return "x86-64-kvm-x86-64-r0"
-
- def sys_oid_platform(self):
- return ".1"
-
- def baseconfig(self):
- return True
+ PLATFORM='x86-64-kvm-x86-64-r0'
+ MODEL="KVM X86_64"
+ SYS_OBJECT_ID=".1"
+ PORT_COUNT=0
+ PORT_CONFIG="None"
diff --git a/packages/platforms/qemu/arm/arm-qemu-armv7a/onlp/builds/src/arm_qemu_armv7a/.module b/packages/platforms/qemu/arm/arm-qemu-armv7a/onlp/builds/src/arm_qemu_armv7a/.module
new file mode 100644
index 00000000..731284a9
--- /dev/null
+++ b/packages/platforms/qemu/arm/arm-qemu-armv7a/onlp/builds/src/arm_qemu_armv7a/.module
@@ -0,0 +1 @@
+name: arm_qemu_armv7a
diff --git a/packages/platforms/qemu/arm/arm-qemu-armv7a/platform-config/r0/src/python/arm_qemu_armv7a_r0/__init__.py b/packages/platforms/qemu/arm/arm-qemu-armv7a/platform-config/r0/src/python/arm_qemu_armv7a_r0/__init__.py
index 91cf4771..8454c3c8 100644
--- a/packages/platforms/qemu/arm/arm-qemu-armv7a/platform-config/r0/src/python/arm_qemu_armv7a_r0/__init__.py
+++ b/packages/platforms/qemu/arm/arm-qemu-armv7a/platform-config/r0/src/python/arm_qemu_armv7a_r0/__init__.py
@@ -2,15 +2,8 @@ from onl.platform.base import *
from onl.platform.qemu import *
class OnlPlatform_arm_qemu_armv7a_r0(OnlPlatformQEMU):
-
- def model(self):
- return "QEMU ARMv7a"
-
- def platform(self):
- return "arm-qemu-armv7a-r0"
-
- def sys_oid_platform(self):
- return ".2"
-
- def baseconfig(self):
- return True
+ PLATFORM='arm-qemu-armv7a-r0'
+ MODEL="QEMU ARMv7a"
+ SYS_OBJECT_ID=".2"
+ PORT_COUNT=0
+ PORT_CONFIG=""
diff --git a/packages/platforms/qemu/vendor-config/src/python/qemu/__init__.py b/packages/platforms/qemu/vendor-config/src/python/qemu/__init__.py
index 82b0e38e..0557dc29 100644
--- a/packages/platforms/qemu/vendor-config/src/python/qemu/__init__.py
+++ b/packages/platforms/qemu/vendor-config/src/python/qemu/__init__.py
@@ -1,22 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for the KVM simulation platform.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformQEMU(OnlPlatformBase):
- def manufacturer(self):
- return "QEMU"
-
- def sys_oid_vendor(self):
- return ".42623"
+ MANUFACTURER='QEMU'
+ PRIVATE_ENTERPRISE_NUMBER=42623
diff --git a/packages/platforms/quanta/any/src/quanta_sys_eeprom/.module b/packages/platforms/quanta/any/src/quanta_sys_eeprom/.module
new file mode 100644
index 00000000..84e84b53
--- /dev/null
+++ b/packages/platforms/quanta/any/src/quanta_sys_eeprom/.module
@@ -0,0 +1 @@
+name: quanta_sys_eeprom
diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/onlp/builds/src/.module b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/onlp/builds/src/.module
new file mode 100644
index 00000000..f20123ae
--- /dev/null
+++ b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_quanta_lb9
diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py
index 61872744..abb2c5ac 100644
--- a/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py
+++ b/packages/platforms/quanta/powerpc/powerpc-quanta-lb9/platform-config/r0/src/python/powerpc_quanta_lb9_r0/__init__.py
@@ -1,27 +1,13 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# Platform Driver for the Quanta LB9
-#
-############################################################
+
from onl.platform.base import *
from onl.platform.quanta import *
-class OnlPlatform_powerpc_quanta_lb9_r0(OnlPlatformQuanta):
-
- def model(self):
- return "LB9"
-
- def platform(self):
- return "powerpc-quanta-lb9-r0"
+class OnlPlatform_powerpc_quanta_lb9_r0(OnlPlatformQuanta,
+ OnlPlatformPortConfig_48x1_4x10):
+ PLATFORM='powerpc-quanta-lb9-r0'
+ MODEL="LB9"
+ SYS_OBJECT_ID=".1048.1"
def baseconfig(self):
platform_fancontrol="%s/etc/fancontrol" % self.basedir_onl()
@@ -35,7 +21,5 @@ class OnlPlatform_powerpc_quanta_lb9_r0(OnlPlatformQuanta):
return True
- def sys_oid_platform(self):
- return ".1048.1"
diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/onlp/builds/src/.module b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/onlp/builds/src/.module
new file mode 100644
index 00000000..1c498acd
--- /dev/null
+++ b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/onlp/builds/src/.module
@@ -0,0 +1 @@
+name: powerpc_quanta_ly2
diff --git a/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py
index 79f42461..49319b5e 100644
--- a/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py
+++ b/packages/platforms/quanta/powerpc/powerpc-quanta-ly2/platform-config/r0/src/python/powerpc_quanta_ly2_r0/__init__.py
@@ -1,18 +1,14 @@
#!/usr/bin/python
-############################################################
-#
-############################################################
+
import subprocess
from onl.platform.base import *
from onl.platform.quanta import *
-class OnlPlatform_powerpc_quanta_ly2_r0(OnlPlatformQuanta):
-
- def model(self):
- return "LY2"
-
- def platform(self):
- return "powerpc-quanta-ly2-r0"
+class OnlPlatform_powerpc_quanta_ly2_r0(OnlPlatformQuanta,
+ OnlPlatformPortConfig_48x10_4x40):
+ PLATFORM='powerpc-quanta-ly2-r0'
+ MODEL="LY2"
+ SYS_OBJECT_ID=".3048.1"
def baseconfig(self):
subprocess.check_call("%s/sbin/gpio_init" % self.basedir_onl())
@@ -39,8 +35,7 @@ class OnlPlatform_powerpc_quanta_ly2_r0(OnlPlatformQuanta):
return True
- def sys_oid_platform(self):
- return ".3048.1"
+
diff --git a/packages/platforms/quanta/vendor-config/src/python/quanta/__init__.py b/packages/platforms/quanta/vendor-config/src/python/quanta/__init__.py
index 8d5adc04..44a2951b 100644
--- a/packages/platforms/quanta/vendor-config/src/python/quanta/__init__.py
+++ b/packages/platforms/quanta/vendor-config/src/python/quanta/__init__.py
@@ -1,23 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for Quanta platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformQuanta(OnlPlatformBase):
-
- def manufacturer(self):
- return "Quanta"
-
- def sys_oid_vendor(self):
- return ".7244"
+ MANUFACTURER='Quanta'
+ PRIVATE_ENTERPRISE_NUMBER=7244
diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/onlp/builds/src/x86_64_quanta_ly6_rangeley/.module b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/onlp/builds/src/x86_64_quanta_ly6_rangeley/.module
new file mode 100644
index 00000000..c8d72261
--- /dev/null
+++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/onlp/builds/src/x86_64_quanta_ly6_rangeley/.module
@@ -0,0 +1 @@
+name: x86_64_quanta_ly6_rangeley
diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py
index 8c7095e4..66694cb1 100644
--- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py
+++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly6-rangeley/platform-config/r0/src/python/x86_64_quanta_ly6_rangeley_r0/__init__.py
@@ -1,16 +1,11 @@
from onl.platform.base import *
from onl.platform.quanta import *
-class OnlPlatform_x86_64_quanta_ly6_rangeley_r0(OnlPlatformQuanta):
-
- def model(self):
- return "LY6"
-
- def platform(self):
- return "x86-64-quanta-ly6-rangeley-r0"
-
- def sys_oid_platform(self):
- return ".6.1"
+class OnlPlatform_x86_64_quanta_ly6_rangeley_r0(OnlPlatformQuanta,
+ OnlPlatformPortConfig_32x40):
+ PLATFORM='x86-64-quanta-ly6-rangeley-r0'
+ MODEL='LY6'
+ SYS_OBJECT_ID='.6.1'
def baseconfig(self):
# fixme
diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/onlp/builds/src/x86_64_quanta_ly8_rangeley/.module b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/onlp/builds/src/x86_64_quanta_ly8_rangeley/.module
new file mode 100644
index 00000000..d49ebd6d
--- /dev/null
+++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/onlp/builds/src/x86_64_quanta_ly8_rangeley/.module
@@ -0,0 +1 @@
+name: x86_64_quanta_ly8_rangeley
diff --git a/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py
index c86405b1..899e821c 100644
--- a/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py
+++ b/packages/platforms/quanta/x86-64/x86-64-quanta-ly8-rangeley/platform-config/r0/src/python/x86_64_quanta_ly8_rangeley_r0/__init__.py
@@ -1,16 +1,11 @@
from onl.platform.base import *
from onl.platform.quanta import *
-class OnlPlatform_x86_64_quanta_ly8_rangeley_r0(OnlPlatformQuanta):
-
- def model(self):
- return "LY8"
-
- def platform(self):
- return "x86-64-quanta-ly8-rangeley-r0"
-
- def sys_oid_platform(self):
- return ".8.1"
+class OnlPlatform_x86_64_quanta_ly8_rangeley_r0(OnlPlatformQuanta,
+ OnlPlatformPortConfig_48x10_6x40):
+ PLATFORM='x86-64-quanta-ly8-rangeley-r0'
+ MODEL="LY8"
+ SYS_OBJECT_ID=".8.1"
def baseconfig(self):
# fixme
diff --git a/packages/platforms/wnc/vendor-config/src/python/wnc/__init__.py b/packages/platforms/wnc/vendor-config/src/python/wnc/__init__.py
index 2002920a..1d5c41fa 100644
--- a/packages/platforms/wnc/vendor-config/src/python/wnc/__init__.py
+++ b/packages/platforms/wnc/vendor-config/src/python/wnc/__init__.py
@@ -1,22 +1,7 @@
#!/usr/bin/python
-############################################################
-#
-#
-# Copyright 2013, 2014 BigSwitch Networks, Inc.
-#
-#
-#
-#
-############################################################
-#
-# OnlPlatform support for WNC platforms.
-#
-############################################################
+
from onl.platform.base import *
class OnlPlatformWNC(OnlPlatformBase):
- def manufacturer(self):
- return "WNC"
-
- def sys_oid_vendor(self):
- return ".15756"
+ MANUFACTURER='WNC'
+ PRIVATE_ENTERPRISE_NUMBER=15756
diff --git a/setup.env b/setup.env
index 56d0ad37..7e6f7f33 100755
--- a/setup.env
+++ b/setup.env
@@ -44,3 +44,6 @@ export ONL_DEBIAN_SUITE=$(lsb_release -c -s)
if [ ! -f $ONL/.git/hooks/post-merge ] && [ -d $ONL/.git ]; then
cp $ONL/tools/scripts/post-merge.hook $ONL/.git/hooks/post-merge
fi
+
+# submodule post update scripts.
+export ONL_SUBMODULE_UPDATED_SCRIPTS="$ONL/tools/scripts/submodule-updated.sh"
\ No newline at end of file
diff --git a/sm/bigcode b/sm/bigcode
index a5e6bc1d..44249760 160000
--- a/sm/bigcode
+++ b/sm/bigcode
@@ -1 +1 @@
-Subproject commit a5e6bc1d768a40a527e853e6c789c5a9eaf5159d
+Subproject commit 442497608648ff26996716432e67c2196ec9b613
diff --git a/sm/infra b/sm/infra
index a7a62f56..e501832c 160000
--- a/sm/infra
+++ b/sm/infra
@@ -1 +1 @@
-Subproject commit a7a62f563a992eeefdb53c4f2b9fb634304fe860
+Subproject commit e501832cf585405ab8ba66fa0ee4a42d27ead088
diff --git a/tools/autobuild/install.sh b/tools/autobuild/install.sh
index dddc2bfa..9f904a76 100755
--- a/tools/autobuild/install.sh
+++ b/tools/autobuild/install.sh
@@ -48,7 +48,7 @@ done
if [ -z "$REMOTE_SERVER" ]; then
- echo "Remote instlallation requires a server (-s)"
+ echo "Remote installation requires a server (-s)"
exit 1
fi
diff --git a/tools/mkinstaller.py b/tools/mkinstaller.py
new file mode 100755
index 00000000..8b63dcb5
--- /dev/null
+++ b/tools/mkinstaller.py
@@ -0,0 +1,193 @@
+#!/usr/bin/python
+############################################################
+#
+# Build an ONL Installer
+#
+############################################################
+import os
+import sys
+import argparse
+import logging
+import tempfile
+import shutil
+import subprocess
+
+NAME="mkinstaller"
+logging.basicConfig()
+logger = logging.getLogger(NAME)
+logger.setLevel(logging.DEBUG)
+
+ONL = os.getenv('ONL')
+if ONL is None:
+ logger.error("$ONL is not set.")
+ sys.exit(1)
+
+class InstallerShar(object):
+ def __init__(self, arch, template=None, work_dir=None):
+ self.ONL = ONL
+
+ if template is None:
+ template = os.path.join(self.ONL, 'builds', 'any', 'installer', 'installer.sh.in')
+ if not os.path.exists(template):
+ self.abort("Template file '%s' is missing." % template)
+
+ with open(template) as f:
+ self.template = f.read()
+
+ if work_dir:
+ self.work_dir = work_dir
+ self.remove_work_dir = False
+ if os.path.exists(self.work_dir):
+ logger.info("Removing existing work tree @ %s" % self.work_dir)
+ shutil.rmtree(self.work_dir)
+
+ else:
+ self.work_dir = tempfile.mkdtemp()
+ self.remove_work_dir = True
+
+ if not os.path.isdir(self.work_dir):
+ os.makedirs(self.work_dir)
+
+ self.files = []
+ self.platforms = []
+ self.arch = arch
+
+ logger.info("Work Directory is %s" % self.work_dir)
+
+ if self.arch == 'amd64':
+ self.setvar("ARCH", 'x86_64')
+ else:
+ self.setvar("ARCH", self.arch)
+
+ def abort(self, msg):
+ logger.error(msg)
+ sys.exit(1)
+
+ def find_file(self, package, filename):
+ return subprocess.check_output("onlpm --find-file %s %s" % (package, filename), shell=True).strip()
+
+ def setvar(self, name, value):
+ self.template = self.template.replace("@%s@" % name, value)
+
+ def add_initrd(self, package, filename, add_platforms=True):
+ self.initrd = self.find_file(package, filename)
+ self.add_file(self.initrd)
+ if add_platforms:
+ for platform in subprocess.check_output("onlpm --platform-manifest %s" % (package), shell=True).split():
+ logger.info("Adding platform %s..." % platform)
+ kernel = subprocess.check_output([os.path.join(self.ONL, 'tools', 'onlplatform.py'),
+ platform,
+ self.arch,
+ 'kernel']).strip()
+
+ logger.info("Platform %s using kernel %s..." % (platform, os.path.basename(kernel)))
+ self.add_file(kernel)
+
+ self.setvar('INITRD_ARCHIVE', os.path.basename(self.initrd))
+ self.setvar('INITRD_OFFSET', '')
+ self.setvar('INITRD_SIZE', '')
+
+
+ def add_fit(self, package, filename, add_platforms=True):
+ self.fit = self.find_file(package, filename)
+ VONL=os.path.join(self.ONL, "packages", "base", "all", "vendor-config-onl")
+ offsets = subprocess.check_output("PYTHONPATH=%s/src/python %s/src/bin/pyfit -v offset %s --initrd" % (VONL, VONL, self.fit), shell=True).split()
+ self.setvar('INITRD_ARCHIVE', os.path.basename(self.fit))
+ self.setvar('INITRD_OFFSET', offsets[0])
+ self.setvar('INITRD_SIZE', str(int(offsets[1]) - int(offsets[0])))
+ self.add_file(self.fit)
+
+ def add_file(self, filename):
+ if not os.path.exists(filename):
+ self.abort("File %s does not exist." % filename)
+
+ logger.info("Adding file %s..." % os.path.basename(filename))
+ self.files.append(filename)
+ self.files = list(set(self.files))
+
+ def add_swi(self, package):
+ edir = os.path.join(self.work_dir, "swidir")
+ subprocess.check_output('onlpm --extract-dir %s %s' % (package, edir), shell=True)
+ for (root, dirs, files) in os.walk(edir):
+ for f in files:
+ if f.endswith(".swi"):
+ self.add_file(os.path.join(root, f))
+
+
+ def build(self, name):
+
+ for f in self.files:
+ shutil.copy(f, self.work_dir)
+
+ with open(os.path.join(self.work_dir, 'installer.sh'), "w") as f:
+ f.write(self.template)
+ f.write("PAYLOAD_FOLLOWS\n")
+
+ with open(os.path.join(self.work_dir, "autoperms.sh"), "w") as f:
+ f.write("#!/bin/sh\n")
+ f.write("set -e\n")
+ f.write("set -x\n")
+
+
+ cwd = os.getcwd()
+ os.chdir(self.work_dir)
+
+ mkshar = [ os.path.join(self.ONL, 'tools', 'mkshar'),
+ '--lazy',
+ '--unzip-pad',
+ '--fixup-perms', 'autoperms.sh',
+ name,
+ os.path.join(self.ONL, 'tools', 'scripts', 'sfx.sh.in'),
+ 'installer.sh',
+ ] + [ os.path.basename(f) for f in self.files ]
+
+ subprocess.check_call(mkshar)
+ os.chdir(cwd)
+
+
+
+
+if __name__ == '__main__':
+
+ ap = argparse.ArgumentParser(NAME)
+ ap.add_argument("--arch", help="Installer Architecture.", required=True,
+ choices = ['amd64', 'powerpc', 'armel' ])
+ ap.add_argument("--initrd", nargs=2, help="The system initrd.")
+ ap.add_argument("--fit", nargs=2, help="The system FIT image.")
+ ap.add_argument("--boot-config", help="The boot-config source.", required=True)
+ ap.add_argument("--swi", help="Include the given SWI in the installer.")
+ ap.add_argument("--work-dir", help="Set work directory and keep intermediates for debugging.")
+ ap.add_argument("--verbose", '-v', help="Verbose output.", action='store_true')
+ ap.add_argument("--out", help="Destination Filename")
+
+ ops = ap.parse_args()
+ installer = InstallerShar(ops.arch, ops.work_dir)
+
+ if ops.arch == 'amd64':
+ if ops.initrd is None:
+ logger.error("--initrd must be used with architecture %s" % ops.arch)
+ sys.exit(1)
+ if ops.fit:
+ logger.error("--fit cannot be used with architecture %s" % ops.arch)
+ sys.exit(1)
+ else:
+ if ops.fit is None:
+ logger.error("--fit must be used with architecture %s" % ops.arch)
+ sys.exit(1)
+ if ops.initrd:
+ logger.error("--initrd cannot be used with architecture %s" % ops.arch)
+ sys.exit(1)
+
+ if ops.initrd:
+ installer.add_initrd(*ops.initrd)
+ if ops.fit:
+ installer.add_fit(*ops.fit)
+
+ installer.add_file(ops.boot_config)
+
+ if ops.swi:
+ installer.add_swi(ops.swi)
+
+ iname = os.path.abspath(ops.out)
+ installer.build(iname)
+ logger.info("installer: %s" % iname)
diff --git a/tools/onlplatform.py b/tools/onlplatform.py
old mode 100644
new mode 100755
index 633bc722..119213d3
--- a/tools/onlplatform.py
+++ b/tools/onlplatform.py
@@ -8,6 +8,7 @@ the platform package metadata.
import sys, os
import itertools
+import argparse
toolsdir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(toolsdir)
@@ -23,9 +24,11 @@ from onlpm import *
pm = defaultPm()
-platform = sys.argv[1]
-arch = sys.argv[2]
-key = sys.argv[3]
+ap = argparse.ArgumentParser("ONL Platform Data Extractor.")
+ap.add_argument("platform", help="Platform name")
+ap.add_argument("arch", help="Architecture")
+ap.add_argument("key", help="Lookup key.")
+ops = ap.parse_args()
def extractKey(platform, arch, key):
@@ -71,12 +74,12 @@ def extractVendor(platform, arch):
l = [x for x in l if x.startswith('onl-vendor-config-')]
return "\n".join(l)
-if key in ('kernel', 'initrd', 'dtb', 'itb',):
- print extractKey(platform, arch, key)
+if ops.key in ('kernel', 'initrd', 'dtb', 'itb',):
+ print extractKey(ops.platform, ops.arch, ops.key)
sys.exit(0)
-if key == 'vendor':
- print extractVendor(platform, arch)
+if ops.key == 'vendor':
+ print extractVendor(ops.platform, ops.arch)
sys.exit(0)
-raise SystemExit("invalid key %s" % key)
+raise SystemExit("invalid key %s" % ops.key)
diff --git a/tools/onlrfs.py b/tools/onlrfs.py
index 3cac7a1b..11251413 100755
--- a/tools/onlrfs.py
+++ b/tools/onlrfs.py
@@ -61,12 +61,18 @@ class OnlRfsSystemAdmin(object):
onlu.execute("sudo chmod %s %s" % (mode, file_),
ex=OnlRfsError("Could not change permissions (%s) on file %s" % (mode, file_)))
- def userdel(self):
- pf = os.path.join(self.chroot, 'etc/password')
+ @staticmethod
+ def chown(file_, ownspec):
+ onlu.execute("sudo chown %s %s" % (ownspec, file_),
+ ex=OnlRfsError("Could not change ownership (%s) on file %s" % (ownspec, file_)))
+
+ def userdel(self, username):
+ pf = os.path.join(self.chroot, 'etc/passwd')
sf = os.path.join(self.chroot, 'etc/shadow')
- self.chmod("a+w", pf);
- self.chmod("a+w", sf);
+ self.chmod("a+rwx", os.path.dirname(pf))
+ self.chmod("a+rw", pf);
+ self.chmod("a+rw", sf);
# Can't use the userdel command because of potential uid 0 in-user problems while running ourselves
for line in fileinput.input(pf, inplace=True):
@@ -76,23 +82,40 @@ class OnlRfsSystemAdmin(object):
if not line.startswith('%s:' % username):
print line,
- self.chmod("go-w", pf);
- self.chmod("go-w", sf);
+ self.chmod("go-wx", pf);
+ self.chmod("go-wx", sf);
- def useradd(self, username, uid, password, shell, deleteFirst=True):
- args = [ 'useradd', '--non-unique', '--shell', shell, '--home-dir', '/root',
- '--uid', '0', '--gid', '0', '--group', 'root' ]
+ def useradd(self, username, uid=None, gid=None, password=None, shell='/bin/bash', home=None, groups=None, sudo=False, deleteFirst=True):
+ args = [ 'useradd', '--create-home' ]
- if deleteFirst:
- self.userdel(username)
+ if uid is not None:
+ args = args + [ '--non-unique', '--uid', str(uid) ]
+ if gid is not None:
+ args = args + [ '--gid', str(gid) ]
if password:
epassword=crypt.crypt(password, '$1$%s$' % self.gen_salt());
args = args + ['-p', epassword ]
+ if shell:
+ args = args + [ '--shell', shell ]
+
+ if gid:
+ args = args + [ '--gid', gid ]
+
+ if home:
+ args = args + [ '--home', home ]
+
+ if groups:
+ args = args + [ '--group', groups ]
+
+ if deleteFirst:
+ self.userdel(username)
+
args.append(username)
onlu.execute(args,
+ chroot=self.chroot,
ex=OnlRfsError("Adding user '%s' failed." % username))
if password is None:
@@ -102,6 +125,14 @@ class OnlRfsSystemAdmin(object):
logger.info("user %s password %s", username, password)
+ if sudo:
+ sudoer = os.path.join(self.chroot, 'etc/sudoers.d', username)
+ self.chmod("777", os.path.dirname(sudoer))
+ with open(sudoer, "w") as f:
+ f.write("%s ALL=(ALL:ALL) NOPASSWD:ALL\n" % username);
+ self.chmod("0440", sudoer)
+ self.chown(sudoer, "root:root")
+ self.chmod("755", os.path.dirname(sudoer))
def user_password_set(self, username, password):
logger.info("user %s password now %s", username, password)
@@ -347,13 +378,21 @@ rm -f /usr/sbin/policy-rc.d
for (user, values) in Configure.get('users', {}).iteritems():
ua = OnlRfsSystemAdmin(dir_)
- if 'password' in values:
- ua.user_password_set(user, values['password'])
+ if user == 'root':
+ if 'password' in values:
+ ua.user_password_set(user, values['password'])
+ else:
+ ua.useradd(username=user, **values)
options = Configure.get('options', {})
if options.get('clean', False):
logger.info("Cleaning Filesystem...")
+ onlu.execute('sudo chroot %s /usr/bin/apt-get clean' % dir_)
+ onlu.execute('sudo chroot %s /usr/sbin/localepurge' % dir_ )
+ onlu.execute('sudo chroot %s find /usr/share/doc -type f -delete' % dir_)
+ onlu.execute('sudo chroot %s find /usr/share/man -type f -delete' % dir_)
+
if not options.get('securetty', True):
f = os.path.join(dir_, 'etc/securetty')
@@ -387,23 +426,59 @@ rm -f /usr/sbin/policy-rc.d
ua.chmod('go-w', os.path.dirname(f))
- manifest = Configure.get('manifest', {})
- if manifest:
- mname = "%s/etc/onl/rootfs/manifest.json" % dir_
+ for (mf, fields) in Configure.get('manifests', {}).iteritems():
+ logger.info("Configuring manifest %s..." % mf)
+ if mf.startswith('/'):
+ mf = mf[1:]
+ mname = os.path.join(dir_, mf)
onlu.execute("sudo mkdir -p %s" % os.path.dirname(mname))
onlu.execute("sudo touch %s" % mname)
onlu.execute("sudo chmod a+w %s" % mname)
md = {}
- md['version'] = json.load(open(manifest['version']))
+ md['version'] = json.load(open(fields['version']))
md['arch'] = self.arch
- if os.path.exists(manifest['platforms']):
- md['platforms'] = yaml.load(open(manifest['platforms']))
+ if os.path.exists(fields['platforms']):
+ md['platforms'] = yaml.load(open(fields['platforms']))
else:
- md['platforms'] = manifest['platforms'].split(',')
+ md['platforms'] = fields['platforms'].split(',')
with open(mname, "w") as f:
json.dump(md, f, indent=2)
onlu.execute("sudo chmod a-w %s" % mname)
+ for (fname, v) in Configure.get('files', {}).get('add', {}).iteritems():
+ if fname.startswith('/'):
+ fname = fname[1:]
+ dst = os.path.join(dir_, fname)
+ onlu.execute("sudo mkdir -p %s" % os.path.dirname(dst))
+ onlu.execute("sudo touch %s" % dst)
+ onlu.execute("sudo chmod a+w %s" % dst)
+ if os.path.exists(v):
+ shutil.copy(v, dst)
+ else:
+ with open(dst, "w") as f:
+ f.write("%s\n" % v)
+
+ for fname in Configure.get('files', {}).get('remove', []):
+ if fname.startswith('/'):
+ fname = fname[1:]
+ f = os.path.join(dir_, fname)
+ if os.path.exists(f):
+ onlu.execute("sudo rm -rf %s" % f)
+
+ if Configure.get('issue'):
+ issue = Configure.get('issue')
+ fn = os.path.join(dir_, "etc/issue")
+ onlu.execute("sudo chmod a+w %s" % fn)
+ with open(fn, "w") as f:
+ f.write("%s\n\n" % issue)
+ onlu.execute("sudo chmod a-w %s" % fn)
+
+ fn = os.path.join(dir_, "etc/issue.net")
+ onlu.execute("sudo chmod a+w %s" % fn)
+ with open(fn, "w") as f:
+ f.write("%s" % issue)
+ onlu.execute("sudo chmod a-w %s" % fn)
+
finally:
onlu.execute("sudo umount -l %s %s" % (os.path.join(dir_, "dev"), os.path.join(dir_, "proc")))
diff --git a/tools/scripts/submodule-updated.sh b/tools/scripts/submodule-updated.sh
index f1e166ce..c3ff4608 100755
--- a/tools/scripts/submodule-updated.sh
+++ b/tools/scripts/submodule-updated.sh
@@ -13,7 +13,7 @@
############################################################
# Removing the manifest causes it to be regenerated.
-rm -rf $ONL/.manifest.mk
+rm -rf $ONL/make/module-manifest.mk
# Rebuild pkg cache
onlpm.py --rebuild-pkg-cache
diff --git a/tools/submodules.py b/tools/submodules.py
index 991178c4..9e8deba4 100755
--- a/tools/submodules.py
+++ b/tools/submodules.py
@@ -101,14 +101,13 @@ class OnlSubmoduleManager(object):
#
# Run any repository-specific post-submodule-init scripts.
#
- script = os.path.join(self.root, 'tools', 'scripts', 'submodule-updated.sh')
- if os.path.exists(script):
- try:
- check_call([script, path], cwd=self.root)
- except subprocess.CalledProcessError:
- # Target doesn't exists
- raise OnlSubmoduleError("The repository post-init script %s failed." % script)
-
+ for script in os.getenv("ONL_SUBMODULE_UPDATED_SCRIPTS", "").split(':'):
+ if os.path.exists(script):
+ try:
+ print "Calling %s..." % script
+ check_call([script, path], cwd=self.root)
+ except subprocess.CalledProcessError:
+ raise OnlSubmoduleError("The repository post-init script %s failed." % script)
def require(self, path, depth=None, recursive=False):
self.get_status()