summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYING.MIT17
-rw-r--r--LICENSE9
-rw-r--r--README38
-rw-r--r--classes/mlinux-image.bbclass33
-rw-r--r--classes/mlinux_metadata_scm.bbclass14
-rw-r--r--conf/distro/java.inc9
-rw-r--r--conf/distro/mlinux.conf62
-rw-r--r--conf/layer.conf10
-rw-r--r--contrib/env-oe.sh16
-rw-r--r--contrib/local.conf51
-rw-r--r--contrib/user-layer.conf10
-rw-r--r--recipes-connectivity/hostapd/hostap-daemon-1.0/default2
-rw-r--r--recipes-connectivity/hostapd/hostap-daemon-1.0/init43
-rw-r--r--recipes-connectivity/hostapd/hostap-daemon_1.0.bbappend8
-rw-r--r--recipes-connectivity/openssh/openssh/ssh.default2
-rw-r--r--recipes-connectivity/openssh/openssh_6.5p1.bbappend21
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/0001-ppp-Fix-compilation-errors-in-Makefile.patch75
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/08setupdns12
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/92removedns5
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/cifdefroute.patch292
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/copts.patch21
-rwxr-xr-xrecipes-connectivity/ppp/ppp-2.4.7/init50
-rwxr-xr-xrecipes-connectivity/ppp/ppp-2.4.7/ip-down43
-rwxr-xr-xrecipes-connectivity/ppp/ppp-2.4.7/ip-up44
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/makefile-remove-hard-usr-reference.patch37
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/makefile.patch95
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/pap22
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/poff26
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/pon9
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/ppp_on_boot21
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/pppd-resolv-varrun.patch45
-rw-r--r--recipes-connectivity/ppp/ppp-2.4.7/provider35
-rw-r--r--recipes-connectivity/ppp/ppp_2.4.7.bb88
-rwxr-xr-xrecipes-connectivity/usb-gadget-mode/files/usb-gadget69
-rw-r--r--recipes-connectivity/usb-gadget-mode/files/usb-gadget.conf3
-rwxr-xr-xrecipes-connectivity/usb-gadget-mode/files/usb-gadget.init16
-rw-r--r--recipes-connectivity/usb-gadget-mode/usb-gadget-mode.bb42
-rw-r--r--recipes-core/base-files/base-files/mlinux/issue7
-rw-r--r--recipes-core/base-files/base-files/mlinux/issue.net7
-rw-r--r--recipes-core/base-files/base-files/mtcdt/fstab12
-rw-r--r--recipes-core/base-files/base-files_3.0.14.bbappend4
-rw-r--r--recipes-core/busybox/busybox-1.22.1/defconfig1020
-rw-r--r--recipes-core/busybox/busybox_1.22.1.bbappend8
-rw-r--r--recipes-core/busybox/files/udhcpd.conf.example6
-rw-r--r--recipes-core/images/mlinux-base-image.bb57
-rw-r--r--recipes-core/images/mlinux-factory-image.bb61
-rw-r--r--recipes-core/images/mlinux-minimal-image.bb40
-rw-r--r--recipes-core/images/mlinux-mono-image.bb3
-rw-r--r--recipes-core/initscripts/initscripts-1.0/umountfs158
-rw-r--r--recipes-core/initscripts/initscripts_1.0.bbappend4
-rw-r--r--recipes-core/multitech/config/config.init105
-rw-r--r--recipes-core/multitech/config/network/interfaces29
-rw-r--r--recipes-core/multitech/config/ppp/chap-secrets3
-rw-r--r--recipes-core/multitech/config/ppp/options22
-rw-r--r--recipes-core/multitech/config/ppp/pap-secrets3
-rw-r--r--recipes-core/multitech/config/ppp/peers/cdma9
-rw-r--r--recipes-core/multitech/config/ppp/peers/cdma_chat18
-rw-r--r--recipes-core/multitech/config/ppp/peers/gsm11
-rw-r--r--recipes-core/multitech/config/ppp/peers/gsm_chat26
-rw-r--r--recipes-core/multitech/config_1.0.bb40
-rw-r--r--recipes-core/multitech/mlinux-version.bb22
-rw-r--r--recipes-core/multitech/reset-handler/reset-handler.default2
-rw-r--r--recipes-core/multitech/reset-handler/reset-handler.init30
-rwxr-xr-xrecipes-core/multitech/reset-handler/reset-handler.sh72
-rw-r--r--recipes-core/multitech/reset-handler_1.0.bb29
-rw-r--r--recipes-core/multitech/upgrade-reboot_1.0.0.bb17
-rw-r--r--recipes-core/ocg-scripts/ocg-scripts-1.0.inc18
-rwxr-xr-xrecipes-core/ocg-scripts/ocg-scripts-1.0/ocg-cell-router147
-rwxr-xr-xrecipes-core/ocg-scripts/ocg-scripts-1.0/ocg-dhcpd65
-rwxr-xr-xrecipes-core/ocg-scripts/ocg-scripts-1.0/ocg-set-apn40
-rwxr-xr-xrecipes-core/ocg-scripts/ocg-scripts-1.0/ocg-wifi-ap165
-rw-r--r--recipes-core/ocg-scripts/ocg-scripts_1.0.bb7
-rw-r--r--recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bbappend2
-rw-r--r--recipes-core/udev/udev-182/cellular_radios.rules47
-rw-r--r--recipes-core/udev/udev-182/init138
-rw-r--r--recipes-core/udev/udev-182/mtcdt/mtcdt.rules12
-rw-r--r--recipes-core/udev/udev-extraconf/automount.rules24
-rw-r--r--recipes-core/udev/udev-extraconf_1.0.bbappend2
-rw-r--r--recipes-core/udev/udev_182.bbappend11
-rw-r--r--recipes-devtools/mtd/mtd-utils-static_git.bb17
-rw-r--r--recipes-devtools/nodejs/nodejs/0001-gcc-has-a-builtin-define-to-denote-hard-abi-when-in-.patch60
-rw-r--r--recipes-devtools/nodejs/nodejs_0.8.27.bb56
-rw-r--r--recipes-examples/multitech/helloworld-autotools_1.0.0.bb14
-rw-r--r--recipes-extended/autossh/autossh_1.4c.bb21
-rw-r--r--recipes-extended/bash/bash-4.2/build-tests.patch48
-rw-r--r--recipes-extended/bash/bash-4.2/execute_cmd.patch17
-rw-r--r--recipes-extended/bash/bash-4.2/mkbuiltins_have_stringize.patch26
-rw-r--r--recipes-extended/bash/bash-4.2/run-ptest2
-rw-r--r--recipes-extended/bash/bash-4.2/test-output.patch25
-rw-r--r--recipes-extended/bash/bash.inc50
-rw-r--r--recipes-extended/bash/bash_4.2.bb173
-rw-r--r--recipes-extended/lighttpd/lighttpd_1.4.33.bbappend5
-rw-r--r--recipes-extended/mii-diag/mii-diag-2.11/libmii.c630
-rw-r--r--recipes-extended/mii-diag/mii-diag-2.11/mii-diag.c648
-rw-r--r--recipes-extended/mii-diag/mii-diag_2.11.bb25
-rw-r--r--recipes-extended/multitech/sms-utils.inc22
-rw-r--r--recipes-extended/multitech/sms-utils_0.0.5.bb3
-rw-r--r--recipes-extended/multitech/venus-gps_0.1.0.bb14
-rw-r--r--recipes-extended/stressapptest/stressapptest_svn.bb13
-rw-r--r--recipes-extended/uvccapture/files/makefile.patch29
-rw-r--r--recipes-extended/uvccapture/files/uvccapture_use_videodev2.patch24
-rw-r--r--recipes-extended/uvccapture/uvccapture_0.5.bb15
-rw-r--r--recipes-java/openjdk/openjdk-7/jvm.cfg43
-rw-r--r--recipes-java/openjdk/openjdk-7_25b30-2.3.12.bbappend6
-rw-r--r--recipes-java/v4l4j/v4l4j-0.9.1/makefile.patch13
-rw-r--r--recipes-java/v4l4j/v4l4j_0.9.1.bb38
-rw-r--r--recipes-ruby/ruby-serialport/ruby-serialport_1.1.0.bb31
-rw-r--r--recipes-ruby/ruby-sqlite3/ruby-sqlite3_1.3.7.bb28
-rw-r--r--recipes-ruby/ruby/ruby_1.9.3-p429.bbappend4
-rw-r--r--recipes-support/jsoncpp/jsoncpp-0.5.0/Makefile46
-rw-r--r--recipes-support/jsoncpp/jsoncpp-0.5.0/jsoncpp-0.5.0-p1.patch13
-rw-r--r--recipes-support/jsoncpp/jsoncpp_0.5.0.bb32
-rw-r--r--recipes-support/libesmtp/libesmtp_1.0.6.bb25
113 files changed, 6114 insertions, 0 deletions
diff --git a/COPYING.MIT b/COPYING.MIT
new file mode 100644
index 0000000..fb950dc
--- /dev/null
+++ b/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5caf3b6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,9 @@
+All MultiTech-copyrighted software contained in mLinux is covered by
+GPL (GNU General Public License) version 2, unless provided under a different license.
+
+All bitbake metadata is MIT licensed unless otherwise stated. Source code
+included in tree for individual recipes is under the LICENSE stated in
+the associated recipe (.bb file) unless otherwise stated.
+
+License information for any other files is either explicitly stated
+or defaults to GPL version 2.
diff --git a/README b/README
new file mode 100644
index 0000000..3753058
--- /dev/null
+++ b/README
@@ -0,0 +1,38 @@
+MultiTech mLinux distribution OpenEmbedded layer
+
+This layer depends on:
+
+URI: git://git.openembedded.org/openembedded-core
+branch: daisy
+revision: HEAD
+
+Numerous layers in:
+URI: git://git.openembedded.org/meta-openembedded
+branch: daisy
+revision: HEAD
+
+MultiTech hardware layer:
+URI: git://git.multitech.net/meta-multitech
+branch: daisy
+revision: HEAD
+
+URI: git://github.com/woglinde/meta-java.git
+branch: master
+revision: f4c4649
+
+URI: git://git.yoctoproject.org/meta-mono
+branch: daisy
+revision: HEAD
+
+URI: git://github.com/imyller/meta-nodejs.git
+branch: master
+revision: HEAD
+
+------------
+ BUILDING
+------------
+
+mLinux should be built using the mlinux integration repo at git://git.multitech.net/mlinux
+or using the downloadable tarball. See http://www.multitech.net for instructions and
+downloads.
+
diff --git a/classes/mlinux-image.bbclass b/classes/mlinux-image.bbclass
new file mode 100644
index 0000000..8da5e97
--- /dev/null
+++ b/classes/mlinux-image.bbclass
@@ -0,0 +1,33 @@
+# set specified root password in image using ROOT_PASSWORD_HASH
+mlinux_set_root_password () {
+ if [ -e ${IMAGE_ROOTFS}/etc/shadow ]; then
+ sed -i "s%^root:[^:]*:%root:${ROOT_PASSWORD_HASH}:%" ${IMAGE_ROOTFS}/etc/shadow
+ elif [ -e ${IMAGE_ROOTFS}/etc/passwd ]; then
+ sed -i "s%^root:[^:]*:%root:${ROOT_PASSWORD_HASH}:%" ${IMAGE_ROOTFS}/etc/passwd
+ fi
+}
+ROOTFS_POSTPROCESS_COMMAND += "mlinux_set_root_password;"
+
+# make links to images in TFTPBOOT_DIR for ease of development
+do_tftpboot_links() {
+ TFTPBOOT_CLEAN="oe_bootstrap.bin oe_bootstrap_pmecc_padded.bin \
+ oe_u-boot.bin oe_uImage.bin oe_rootfs.jffs2 oe_images"
+
+ if [ -n "${TFTPBOOT_DIR}" ]; then
+ install -d ${DEPLOY_DIR_IMAGE}
+
+ for f in ${TFTPBOOT_CLEAN}; do
+ rm -f ${TFTPBOOT_DIR}/$f
+ done
+
+ ln -nfs ${DEPLOY_DIR_IMAGE}/at91bootstrap.bin ${TFTPBOOT_DIR}/oe_bootstrap.bin
+ if [ -f ${DEPLOY_DIR_IMAGE}/at91bootstrap_pmecc_padded.bin ]; then
+ ln -nfs ${DEPLOY_DIR_IMAGE}/at91bootstrap_pmecc_padded.bin ${TFTPBOOT_DIR}/oe_bootstrap_pmecc_padded.bin
+ fi
+ ln -nfs ${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.bin ${TFTPBOOT_DIR}/oe_u-boot.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE}/uImage-${MACHINE}.bin ${TFTPBOOT_DIR}/oe_uImage.bin
+ ln -nfs ${DEPLOY_DIR_IMAGE}/${IMAGE_BASENAME}-${MACHINE}.jffs2 ${TFTPBOOT_DIR}/oe_rootfs.jffs2
+ ln -nfs ${DEPLOY_DIR_IMAGE} ${TFTPBOOT_DIR}/oe_images
+ fi
+}
+addtask tftpboot_links after do_rootfs before do_build
diff --git a/classes/mlinux_metadata_scm.bbclass b/classes/mlinux_metadata_scm.bbclass
new file mode 100644
index 0000000..e394910
--- /dev/null
+++ b/classes/mlinux_metadata_scm.bbclass
@@ -0,0 +1,14 @@
+MLINUX_METADATA_REVISION = "${@base_get_metadata_git_revision("${OETREE}",None)}"
+MLINUX_METADATA_BRANCH = "${@base_get_metadata_git_branch("${OETREE}",None).strip()}"
+MLINUX_LAYERS = "${@mlinux_layers(bb,d)}"
+
+def mlinux_layers(bb, d):
+ layers = (bb.data.getVar("BBLAYERS", d, 1) or "").split()
+ layer_revs = ""
+
+ for layer in layers:
+ branch = base_get_metadata_git_branch(layer, d).strip()
+ rev = base_get_metadata_git_revision(layer, d)
+ layer_revs += "%-20s = %s:%s\n" % (os.path.basename(layer), branch, rev)
+
+ return layer_revs
diff --git a/conf/distro/java.inc b/conf/distro/java.inc
new file mode 100644
index 0000000..ff620d8
--- /dev/null
+++ b/conf/distro/java.inc
@@ -0,0 +1,9 @@
+PREFERRED_PROVIDER_virtual/java-initial = "cacao-initial"
+
+PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
+PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
+
+PREFERRED_VERSION_openjdk-7-jre = "25b30-2.3.12"
+PREFERRED_VERSION_icedtea7-native = "2.1.3"
+
+PREFERRED_PROVIDER_openjdk-7-jre = "openjdk-7-jre"
diff --git a/conf/distro/mlinux.conf b/conf/distro/mlinux.conf
new file mode 100644
index 0000000..0b1c18e
--- /dev/null
+++ b/conf/distro/mlinux.conf
@@ -0,0 +1,62 @@
+DISTRO = "mlinux"
+DISTRO_NAME = "mLinux"
+DISTRO_VERSION = "3.0"
+DISTRO_CODENAME = ""
+SDK_VENDOR = "-mlinux"
+SDK_VERSION := "${@'${DISTRO_VERSION}'.replace('snapshot-${DATE}','snapshot')}"
+SDK_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-${IMAGE_BASENAME}-${TUNE_PKGARCH}"
+SDKPATH = "/opt/${DISTRO}/${SDK_VERSION}"
+
+MAINTAINER = "MultiTech Systems <oe-devel@multitech.net>"
+
+TARGET_VENDOR = "-mlinux"
+
+LOCALCONF_VERSION = "1"
+LAYER_CONF_VERSION ?= "6"
+
+DISTRO_FEATURES_MLINUX = "argp largefile xattr \
+ ipv6 ipsec ppp \
+ bluetooth irda usbgadget usbhost wifi \
+ cramfs ext2 smbfs nfs \
+ libc-crypt pam \
+ sysvinit x11"
+DISTRO_FEATURES ?= "${DISTRO_FEATURES_LIBC} ${DISTRO_FEATURES_MLINUX}"
+
+# disable pulseaudio
+DISTRO_FEATURES_BACKFILL_CONSIDERED = "pulseaudio"
+
+# extra packages to add to images
+DISTRO_EXTRA_RDEPENDS += "mlinux-version"
+
+EXTRAOPKGCONFIG = ""
+
+# don't append to tmpdir
+TCLIBCAPPEND = ""
+
+IPKG_VARIANT = "opkg"
+DEFAULT_TIMEZONE = "America/Chicago"
+
+# default root password
+ROOT_PASSWORD_HASH ?= "e97PZLy9l09O6"
+
+SANITY_TESTED_DISTROS ?= " \
+ Ubuntu-12.04 \n \
+ Ubuntu-13.10 \n \
+ Ubuntu-14.04 \n \
+ Fedora-19 \n \
+ Fedora-20 \n \
+ CentOS-6.4 \n \
+ CentOS-6.5 \n \
+ Debian-7.0 \n \
+ Debian-7.1 \n \
+ Debian-7.2 \n \
+ Debian-7.3 \n \
+ Debian-7.4 \n \
+ SUSE-LINUX-12.2 \n \
+ openSUSE-project-12.3 \n \
+ openSUSE-project-13.1 \n \
+ "
+
+PREFERRED_PROVIDER_jpeg = "jpeg"
+PREFERRED_PROVIDER_jpeg-native = "jpeg-native"
+require java.inc
diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644
index 0000000..719bdf9
--- /dev/null
+++ b/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "mlinux"
+BBFILE_PATTERN_mlinux = "^${LAYERDIR}/"
+BBFILE_PRIORITY_mlinux = "10"
diff --git a/contrib/env-oe.sh b/contrib/env-oe.sh
new file mode 100644
index 0000000..53a3297
--- /dev/null
+++ b/contrib/env-oe.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+export OETREE=$(pwd)
+
+OECORE="${OETREE}/layers/openembedded-core"
+
+if [[ ! "${PATH}" =~ ${OETREE}/bitbake/bin ]]; then
+ export PATH="${OECORE}/scripts:${OETREE}/bitbake/bin:${PATH}"
+fi
+
+# define if you wish to create soft links to the image in the tftpboot dir
+#export TFTPBOOT_DIR=/tftpboot
+
+export BUILDDIR="${OETREE}"
+export BBPATH="${OETREE}:${OECORE}/meta"
+export BB_ENV_EXTRAWHITE="MACHINE DISTRO OETREE TFTPBOOT_DIR TCLIBC TCMODE GIT_PROXY_COMMAND http_proxy ftp_proxy https_proxy all_proxy ALL_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY SDKMACHINE BB_NUMBER_THREADS"
diff --git a/contrib/local.conf b/contrib/local.conf
new file mode 100644
index 0000000..66a1312
--- /dev/null
+++ b/contrib/local.conf
@@ -0,0 +1,51 @@
+# CONF_VERSION is increased each time build/conf/ changes incompatibly
+CONF_VERSION = "1"
+
+# Use MultiTech mLinux distribution
+DISTRO = "mlinux"
+MACHINE ?= "mtcdt"
+
+# Where to store downloaded sources
+DL_DIR = "${TOPDIR}/downloads"
+
+# Where to save shared state
+SSTATE_DIR = "${TOPDIR}/build/sstate-cache"
+# bitbake cache location
+PERSISTENT_DIR = "${TOPDIR}/build/cache"
+# build output
+TMPDIR = "${TOPDIR}/build/tmp"
+
+# Which files do we want to parse:
+BBFILES ?= "${TOPDIR}/layers/openembedded-core/meta/recipes-*/*/*.bb"
+
+# Go through the Firewall
+#HTTP_PROXY = "http://:/"
+
+# Uncomment this to remove unpacked source and intermediate work
+# after successfully building a package.
+# Saves a LOT of disk space, but leaving work around is useful for debugging.
+INHERIT += "rm_work"
+
+# skip parsing of masked files
+BBMASK = ""
+
+# Make use of SMP:
+# PARALLEL_MAKE specifies how many concurrent compiler threads are spawned per bitbake process
+# BB_NUMBER_THREADS specifies how many concurrent bitbake tasks will be run
+PARALLEL_MAKE = "-j4"
+BB_NUMBER_THREADS = "4"
+
+# Don't generate the mirror tarball for SCM repos, the snapshot is enough
+BB_GENERATE_MIRROR_TARBALLS = "0"
+
+# Disable build time patch resolution. This would lauch a devshell
+# and wait for manual intervention. We disable it.
+PATCHRESOLVE = "noop"
+
+# enable local PR server
+PRSERV_HOST = "localhost:0"
+
+# enable buildhistory for images
+INHERIT += "buildhistory"
+BUILDHISTORY_COMMIT = "0"
+BUILDHISTORY_FEATURES = "image"
diff --git a/contrib/user-layer.conf b/contrib/user-layer.conf
new file mode 100644
index 0000000..609f95b
--- /dev/null
+++ b/contrib/user-layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "user"
+BBFILE_PATTERN_user = "^${LAYERDIR}/"
+BBFILE_PRIORITY_user = "99"
diff --git a/recipes-connectivity/hostapd/hostap-daemon-1.0/default b/recipes-connectivity/hostapd/hostap-daemon-1.0/default
new file mode 100644
index 0000000..0923a8c
--- /dev/null
+++ b/recipes-connectivity/hostapd/hostap-daemon-1.0/default
@@ -0,0 +1,2 @@
+# set to "yes" to start hostapd on boot
+START_ON_BOOT="no"
diff --git a/recipes-connectivity/hostapd/hostap-daemon-1.0/init b/recipes-connectivity/hostapd/hostap-daemon-1.0/init
new file mode 100644
index 0000000..a8d622f
--- /dev/null
+++ b/recipes-connectivity/hostapd/hostap-daemon-1.0/init
@@ -0,0 +1,43 @@
+#!/bin/sh
+DAEMON=/usr/sbin/hostapd
+NAME=hostapd
+DESC="HOSTAP Daemon"
+ARGS="/etc/hostapd.conf -B"
+
+test -f $DAEMON || exit 0
+
+[ -f /etc/default/$NAME ] && . /etc/default/$NAME
+
+if [ "$START_ON_BOOT" != "yes" ]; then
+ exit 0
+fi
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -x $DAEMON -- $ARGS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K -x $DAEMON
+ echo "$NAME."
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo -n "Reloading $DESC: "
+ killall -HUP $(basename ${DAEMON})
+ echo "$NAME."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes-connectivity/hostapd/hostap-daemon_1.0.bbappend b/recipes-connectivity/hostapd/hostap-daemon_1.0.bbappend
new file mode 100644
index 0000000..48af903
--- /dev/null
+++ b/recipes-connectivity/hostapd/hostap-daemon_1.0.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
+
+SRC_URI += "file://default"
+
+do_install_append() {
+ mkdir -p ${D}${sysconfdir}/default
+ install -m 644 ${WORKDIR}/default ${D}${sysconfdir}/default/hostapd
+}
diff --git a/recipes-connectivity/openssh/openssh/ssh.default b/recipes-connectivity/openssh/openssh/ssh.default
new file mode 100644
index 0000000..d5c0507
--- /dev/null
+++ b/recipes-connectivity/openssh/openssh/ssh.default
@@ -0,0 +1,2 @@
+# put keys here
+SYSCONFDIR=/var/config/ssh
diff --git a/recipes-connectivity/openssh/openssh_6.5p1.bbappend b/recipes-connectivity/openssh/openssh_6.5p1.bbappend
new file mode 100644
index 0000000..87891c8
--- /dev/null
+++ b/recipes-connectivity/openssh/openssh_6.5p1.bbappend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI += "file://ssh.default"
+
+KEYFILES = "ssh_host_dsa_key \
+ssh_host_dsa_key.pub \
+ssh_host_ecdsa_key \
+ssh_host_ecdsa_key.pub \
+ssh_host_rsa_key \
+ssh_host_rsa_key.pub \
+ssh_host_ed25519_key \
+ssh_host_ed25519_key.pub \
+"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/default
+ install -m 644 ${WORKDIR}/ssh.default ${D}${sysconfdir}/default/ssh
+ for f in ${KEYFILES}; do
+ ln -sf /var/config/ssh/$f ${D}${sysconfdir}/ssh/$f
+ done
+}
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/0001-ppp-Fix-compilation-errors-in-Makefile.patch b/recipes-connectivity/ppp/ppp-2.4.7/0001-ppp-Fix-compilation-errors-in-Makefile.patch
new file mode 100644
index 0000000..8aa2d2e
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/0001-ppp-Fix-compilation-errors-in-Makefile.patch
@@ -0,0 +1,75 @@
+From ba0f6058d1f25b2b60fc31ab2656bf12a71ffdab Mon Sep 17 00:00:00 2001
+From: Lu Chong <Chong.Lu@windriver.com>
+Date: Tue, 5 Nov 2013 17:32:56 +0800
+Subject: [PATCH] ppp: Fix compilation errors in Makefile
+
+This patch fixes below issues:
+
+1. Make can't exit while compilation error occurs in subdir for plugins building.
+
+2. If build ppp with newer kernel (3.10.10), it will pick 'if_pppox.h' from sysroot-dir and
+ 'if_pppol2tp.h' from its own source dir, this cause below build errors:
+
+ bitbake_build/tmp/sysroots/intel-x86-64/usr/include/linux/if_pppox.h:84:26:
+ error: field 'pppol2tp' has incomplete type
+ struct pppol2tpin6_addr pppol2tp;
+ ^
+ bitbake_build/tmp/sysroots/intel-x86-64/usr/include/linux/if_pppox.h:99:28:
+ error: field 'pppol2tp' has incomplete type
+ struct pppol2tpv3in6_addr pppol2tp;
+ ^
+
+The 'sysroot-dir/if_pppox.h' enabled ipv6 support but the 'source-dir/if_pppol2tp.h' lost
+related structure definitions, we should use both header files from sysroots to fix this
+build failure.
+
+Upstream-Status: Pending
+
+Signed-off-by: Lu Chong <Chong.Lu@windriver.com>
+---
+ pppd/plugins/Makefile.linux | 2 +-
+ pppd/plugins/pppol2tp/Makefile.linux | 2 +-
+ pppd/plugins/rp-pppoe/Makefile.linux | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/pppd/plugins/Makefile.linux b/pppd/plugins/Makefile.linux
+index 0a7ec7b..2a2c15a 100644
+--- a/pppd/plugins/Makefile.linux
++++ b/pppd/plugins/Makefile.linux
+@@ -20,7 +20,7 @@ include .depend
+ endif
+
+ all: $(PLUGINS)
+- for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d all; done
++ for d in $(SUBDIRS); do $(MAKE) $(MFLAGS) -C $$d all || exit 1; done
+
+ %.so: %.c
+ $(CC) -o $@ $(LDFLAGS) $(CFLAGS) $^
+diff --git a/pppd/plugins/pppol2tp/Makefile.linux b/pppd/plugins/pppol2tp/Makefile.linux
+index 19eff67..feb2f52 100644
+--- a/pppd/plugins/pppol2tp/Makefile.linux
++++ b/pppd/plugins/pppol2tp/Makefile.linux
+@@ -1,6 +1,6 @@
+ #CC = gcc
+ COPTS = -O2 -g
+-CFLAGS = $(COPTS) -I. -I../.. -I../../../include -fPIC
++CFLAGS = $(COPTS) -I. -I../.. -fPIC
+ LDFLAGS = -shared
+ INSTALL = install
+
+diff --git a/pppd/plugins/rp-pppoe/Makefile.linux b/pppd/plugins/rp-pppoe/Makefile.linux
+index f078991..15b9118 100644
+--- a/pppd/plugins/rp-pppoe/Makefile.linux
++++ b/pppd/plugins/rp-pppoe/Makefile.linux
+@@ -26,7 +26,7 @@ INSTALL = install
+ RP_VERSION=3.8p
+
+ COPTS=-O2 -g
+-CFLAGS=$(COPTS) -I../../../include '-DRP_VERSION="$(RP_VERSION)"'
++CFLAGS=$(COPTS) '-DRP_VERSION="$(RP_VERSION)"'
+ all: rp-pppoe.so pppoe-discovery
+
+ pppoe-discovery: pppoe-discovery.o debug.o
+--
+1.7.9.5
+
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/08setupdns b/recipes-connectivity/ppp/ppp-2.4.7/08setupdns
new file mode 100644
index 0000000..998219d
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/08setupdns
@@ -0,0 +1,12 @@
+#!/bin/sh
+ACTUALCONF=/var/run/resolv.conf
+PPPCONF=/var/run/ppp/resolv.conf
+if [ -f $PPPCONF ] ; then
+ if [ -f $ACTUALCONF ] ; then
+ if [ ! -h $ACTUALCONF -o ! "`readlink $ACTUALCONF 2>&1`" = "$PPPCONF" ] ; then
+ mv $ACTUALCONF $ACTUALCONF.ppporig
+ fi
+ fi
+
+ ln -sf $PPPCONF $ACTUALCONF
+fi
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/92removedns b/recipes-connectivity/ppp/ppp-2.4.7/92removedns
new file mode 100644
index 0000000..2eadec6
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/92removedns
@@ -0,0 +1,5 @@
+#!/bin/sh
+ACTUALCONF=/var/run/resolv.conf
+if [ -f $ACTUALCONF.ppporig ] ; then
+ mv $ACTUALCONF.ppporig $ACTUALCONF
+fi
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/cifdefroute.patch b/recipes-connectivity/ppp/ppp-2.4.7/cifdefroute.patch
new file mode 100644
index 0000000..db4dbc2
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/cifdefroute.patch
@@ -0,0 +1,292 @@
+This patch comes from OpenEmbedded.
+The original patch is from Debian / SuSE to implement replacedefaultroute
+Rebased it to fit ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Inappropriate [debian/suse patches]
+
+diff -urN ppp-2.4.5-orig/pppd/ipcp.c ppp-2.4.5/pppd/ipcp.c
+--- ppp-2.4.5-orig/pppd/ipcp.c 2010-06-30 15:51:12.050166398 +0800
++++ ppp-2.4.5/pppd/ipcp.c 2010-06-30 16:40:00.478716855 +0800
+@@ -198,6 +198,16 @@
+ "disable defaultroute option", OPT_ALIAS | OPT_A2CLR,
+ &ipcp_wantoptions[0].default_route },
+
++#ifdef __linux__
++ { "replacedefaultroute", o_bool,
++ &ipcp_wantoptions[0].replace_default_route,
++ "Replace default route", 1
++ },
++ { "noreplacedefaultroute", o_bool,
++ &ipcp_allowoptions[0].replace_default_route,
++ "Never replace default route", OPT_A2COPY,
++ &ipcp_wantoptions[0].replace_default_route },
++#endif
+ { "proxyarp", o_bool, &ipcp_wantoptions[0].proxy_arp,
+ "Add proxy ARP entry", OPT_ENABLE|1, &ipcp_allowoptions[0].proxy_arp },
+ { "noproxyarp", o_bool, &ipcp_allowoptions[0].proxy_arp,
+@@ -271,7 +281,7 @@
+ ip_active_pkt
+ };
+
+-static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t));
++static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t, bool));
+ static void ipcp_script __P((char *, int)); /* Run an up/down script */
+ static void ipcp_script_done __P((void *));
+
+@@ -1742,7 +1752,12 @@
+ if (!sifnpmode(u, PPP_IP, NPMODE_QUEUE))
+ return 0;
+ if (wo->default_route)
++#ifndef __linux__
+ if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr))
++#else
++ if (sifdefaultroute(u, wo->ouraddr, wo->hisaddr,
++ wo->replace_default_route))
++#endif
+ default_route_set[u] = 1;
+ if (wo->proxy_arp)
+ if (sifproxyarp(u, wo->hisaddr))
+@@ -1830,7 +1845,8 @@
+ */
+ if (demand) {
+ if (go->ouraddr != wo->ouraddr || ho->hisaddr != wo->hisaddr) {
+- ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr);
++ ipcp_clear_addrs(f->unit, wo->ouraddr, wo->hisaddr,
++ wo->replace_default_route);
+ if (go->ouraddr != wo->ouraddr) {
+ warn("Local IP address changed to %I", go->ouraddr);
+ script_setenv("OLDIPLOCAL", ip_ntoa(wo->ouraddr), 0);
+@@ -1855,7 +1871,12 @@
+
+ /* assign a default route through the interface if required */
+ if (ipcp_wantoptions[f->unit].default_route)
++#ifndef __linux__
+ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr))
++#else
++ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr,
++ wo->replace_default_route))
++#endif
+ default_route_set[f->unit] = 1;
+
+ /* Make a proxy ARP entry if requested. */
+@@ -1905,7 +1926,12 @@
+
+ /* assign a default route through the interface if required */
+ if (ipcp_wantoptions[f->unit].default_route)
++#ifndef __linux__
+ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr))
++#else
++ if (sifdefaultroute(f->unit, go->ouraddr, ho->hisaddr,
++ wo->replace_default_route))
++#endif
+ default_route_set[f->unit] = 1;
+
+ /* Make a proxy ARP entry if requested. */
+@@ -1983,7 +2009,7 @@
+ sifnpmode(f->unit, PPP_IP, NPMODE_DROP);
+ sifdown(f->unit);
+ ipcp_clear_addrs(f->unit, ipcp_gotoptions[f->unit].ouraddr,
+- ipcp_hisoptions[f->unit].hisaddr);
++ ipcp_hisoptions[f->unit].hisaddr, 0);
+ }
+
+ /* Execute the ip-down script */
+@@ -1999,12 +2025,21 @@
+ * proxy arp entries, etc.
+ */
+ static void
+-ipcp_clear_addrs(unit, ouraddr, hisaddr)
++ipcp_clear_addrs(unit, ouraddr, hisaddr, replacedefaultroute)
+ int unit;
+ u_int32_t ouraddr; /* local address */
+ u_int32_t hisaddr; /* remote address */
++ bool replacedefaultroute;
+ {
+- if (proxy_arp_set[unit]) {
++ /* If replacedefaultroute, sifdefaultroute will be called soon
++ * with replacedefaultroute set and that will overwrite the current
++ * default route. This is the case only when doing demand, otherwise
++ * during demand, this cifdefaultroute would restore the old default
++ * route which is not what we want in this case. In the non-demand
++ * case, we'll delete the default route and restore the old if there
++ * is one saved by an sifdefaultroute with replacedefaultroute.
++ */
++ if (!replacedefaultroute && default_route_set[unit]) {
+ cifproxyarp(unit, hisaddr);
+ proxy_arp_set[unit] = 0;
+ }
+diff -urN ppp-2.4.5-orig/pppd/ipcp.h ppp-2.4.5/pppd/ipcp.h
+--- ppp-2.4.5-orig/pppd/ipcp.h 2010-06-30 15:51:12.043682063 +0800
++++ ppp-2.4.5/pppd/ipcp.h 2010-06-30 16:40:49.586203129 +0800
+@@ -70,6 +70,7 @@
+ bool old_addrs; /* Use old (IP-Addresses) option? */
+ bool req_addr; /* Ask peer to send IP address? */
+ bool default_route; /* Assign default route through interface? */
++ bool replace_default_route; /* Replace default route through interface? */
+ bool proxy_arp; /* Make proxy ARP entry for peer? */
+ bool neg_vj; /* Van Jacobson Compression? */
+ bool old_vj; /* use old (short) form of VJ option? */
+diff -urN ppp-2.4.5-orig/pppd/pppd.8 ppp-2.4.5/pppd/pppd.8
+--- ppp-2.4.5-orig/pppd/pppd.8 2010-06-30 15:51:12.043682063 +0800
++++ ppp-2.4.5/pppd/pppd.8 2010-06-30 16:42:47.102413859 +0800
+@@ -121,6 +121,13 @@
+ This entry is removed when the PPP connection is broken. This option
+ is privileged if the \fInodefaultroute\fR option has been specified.
+ .TP
++.B replacedefaultroute
++This option is a flag to the defaultroute option. If defaultroute is
++set and this flag is also set, pppd replaces an existing default route
++with the new default route.
++
++
++.TP
+ .B disconnect \fIscript
+ Execute the command specified by \fIscript\fR, by passing it to a
+ shell, after
+@@ -717,7 +724,12 @@
+ .TP
+ .B nodefaultroute
+ Disable the \fIdefaultroute\fR option. The system administrator who
+-wishes to prevent users from creating default routes with pppd
++wishes to prevent users from adding a default route with pppd
++can do so by placing this option in the /etc/ppp/options file.
++.TP
++.B noreplacedefaultroute
++Disable the \fIreplacedefaultroute\fR option. The system administrator who
++wishes to prevent users from replacing a default route with pppd
+ can do so by placing this option in the /etc/ppp/options file.
+ .TP
+ .B nodeflate
+diff -urN ppp-2.4.5-orig/pppd/pppd.h ppp-2.4.5/pppd/pppd.h
+--- ppp-2.4.5-orig/pppd/pppd.h 2010-06-30 15:51:12.050166398 +0800
++++ ppp-2.4.5/pppd/pppd.h 2010-06-30 16:43:36.514148327 +0800
+@@ -643,7 +643,11 @@
+ int cif6addr __P((int, eui64_t, eui64_t));
+ /* Remove an IPv6 address from i/f */
+ #endif
++#ifndef __linux__
+ int sifdefaultroute __P((int, u_int32_t, u_int32_t));
++#else
++int sifdefaultroute __P((int, u_int32_t, u_int32_t, bool replace_default_rt));
++#endif
+ /* Create default route through i/f */
+ int cifdefaultroute __P((int, u_int32_t, u_int32_t));
+ /* Delete default route through i/f */
+diff -urN ppp-2.4.5-orig/pppd/sys-linux.c ppp-2.4.5/pppd/sys-linux.c
+--- ppp-2.4.5-orig/pppd/sys-linux.c 2010-06-30 15:51:12.050166398 +0800
++++ ppp-2.4.5/pppd/sys-linux.c 2010-06-30 16:54:00.362716231 +0800
+@@ -206,6 +206,8 @@
+
+ static int if_is_up; /* Interface has been marked up */
+ static int have_default_route; /* Gateway for default route added */
++static struct rtentry old_def_rt; /* Old default route */
++static int default_rt_repl_rest; /* replace and restore old default rt */
+ static u_int32_t proxy_arp_addr; /* Addr for proxy arp entry added */
+ static char proxy_arp_dev[16]; /* Device for proxy arp entry */
+ static u_int32_t our_old_addr; /* for detecting address changes */
+@@ -1537,6 +1539,9 @@
+ p = NULL;
+ }
+
++ SET_SA_FAMILY (rt->rt_dst, AF_INET);
++ SET_SA_FAMILY (rt->rt_gateway, AF_INET);
++
+ SIN_ADDR(rt->rt_dst) = strtoul(cols[route_dest_col], NULL, 16);
+ SIN_ADDR(rt->rt_gateway) = strtoul(cols[route_gw_col], NULL, 16);
+ SIN_ADDR(rt->rt_genmask) = strtoul(cols[route_mask_col], NULL, 16);
+@@ -1606,20 +1611,51 @@
+ /********************************************************************
+ *
+ * sifdefaultroute - assign a default route through the address given.
+- */
+-
+-int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway)
+-{
+- struct rtentry rt;
+-
+- if (defaultroute_exists(&rt) && strcmp(rt.rt_dev, ifname) != 0) {
+- if (rt.rt_flags & RTF_GATEWAY)
+- error("not replacing existing default route via %I",
+- SIN_ADDR(rt.rt_gateway));
+- else
+- error("not replacing existing default route through %s",
+- rt.rt_dev);
+- return 0;
++ *
++ * If the global default_rt_repl_rest flag is set, then this function
++ * already replaced the original system defaultroute with some other
++ * route and it should just replace the current defaultroute with
++ * another one, without saving the current route. Use: demand mode,
++ * when pppd sets first a defaultroute it it's temporary ppp0 addresses
++ * and then changes the temporary addresses to the addresses for the real
++ * ppp connection when it has come up.
++ */
++
++int sifdefaultroute (int unit, u_int32_t ouraddr, u_int32_t gateway, bool replace)
++{
++ struct rtentry rt, tmp_rt;
++ struct rtentry *del_rt = NULL;
++
++ if (default_rt_repl_rest) {
++ /* We have already reclaced the original defaultroute, if we
++ * are called again, we will delete the current default route
++ * and set the new default route in this function.
++ * - this is normally only the case the doing demand: */
++ if (defaultroute_exists( &tmp_rt ))
++ del_rt = &tmp_rt;
++ } else if ( defaultroute_exists( &old_def_rt ) &&
++ strcmp( old_def_rt.rt_dev, ifname ) != 0) {
++ /* We did not yet replace an existing default route, let's
++ * check if we should save and replace a default route:
++ */
++ u_int32_t old_gateway = SIN_ADDR(old_def_rt.rt_gateway);
++ if (old_gateway != gateway) {
++ if (!replace) {
++ error("not replacing default route to %s [%I]",
++ old_def_rt.rt_dev, old_gateway);
++ return 0;
++ } else {
++ // we need to copy rt_dev because we need it permanent too:
++ char * tmp_dev = malloc(strlen(old_def_rt.rt_dev)+1);
++ strcpy(tmp_dev, old_def_rt.rt_dev);
++ old_def_rt.rt_dev = tmp_dev;
++
++ notice("replacing old default route to %s [%I]",
++ old_def_rt.rt_dev, old_gateway);
++ default_rt_repl_rest = 1;
++ del_rt = &old_def_rt;
++ }
++ }
+ }
+
+ memset (&rt, 0, sizeof (rt));
+@@ -1638,6 +1674,12 @@
+ error("default route ioctl(SIOCADDRT): %m");
+ return 0;
+ }
++ if (default_rt_repl_rest && del_rt)
++ if (ioctl(sock_fd, SIOCDELRT, del_rt) < 0) {
++ if ( ! ok_error ( errno ))
++ error("del old default route ioctl(SIOCDELRT): %m(%d)", errno);
++ return 0;
++ }
+
+ have_default_route = 1;
+ return 1;
+@@ -1673,6 +1715,16 @@
+ return 0;
+ }
+ }
++ if (default_rt_repl_rest) {
++ notice("restoring old default route to %s [%I]",
++ old_def_rt.rt_dev, SIN_ADDR(old_def_rt.rt_gateway));
++ if (ioctl(sock_fd, SIOCADDRT, &old_def_rt) < 0) {
++ if ( ! ok_error ( errno ))
++ error("restore default route ioctl(SIOCADDRT): %m(%d)", errno);
++ return 0;
++ }
++ default_rt_repl_rest = 0;
++ }
+
+ return 1;
+ }
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/copts.patch b/recipes-connectivity/ppp/ppp-2.4.7/copts.patch
new file mode 100644
index 0000000..53ff06e
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/copts.patch
@@ -0,0 +1,21 @@
+ppp: use build system CFLAGS when compiling
+
+Upstream-Status: Pending
+
+Override the hard-coded COPTS make variables with
+CFLAGS. Add COPTS into one Makefile that did not
+use it.
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+--- a/pppd/plugins/radius/Makefile.linux
++++ b/pppd/plugins/radius/Makefile.linux
+@@ -12,7 +12,7 @@ VERSION = $(shell awk -F '"' '/VERSION/
+ INSTALL = install
+
+ PLUGIN=radius.so radattr.so radrealms.so
+-CFLAGS=-I. -I../.. -I../../../include -O2 -fPIC -DRC_LOG_FACILITY=LOG_DAEMON
++CFLAGS=-I. -I../.. -I../../../include $(COPTS) -fPIC -DRC_LOG_FACILITY=LOG_DAEMON
+
+ # Uncomment the next line to include support for Microsoft's
+ # MS-CHAP authentication protocol.
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/init b/recipes-connectivity/ppp/ppp-2.4.7/init
new file mode 100755
index 0000000..5b3b7ab
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/init
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# /etc/init.d/ppp: start or stop PPP link.
+#
+# If you want PPP started on boot time (most dialup systems won't need it)
+# rename the /etc/ppp/no_ppp_on_boot file to /etc/ppp/ppp_on_boot, and
+# follow the instructions in the comments in that file.
+
+test -x /usr/sbin/pppd -a -f /etc/ppp/ppp_on_boot || exit 0
+if [ -x /etc/ppp/ppp_on_boot ]; then RUNFILE=1; fi
+
+case "$1" in
+ start)
+ echo -n "Starting up PPP link: pppd"
+ if [ "$RUNFILE" = "1" ]; then
+ /etc/ppp/ppp_on_boot
+ else
+ pppd call provider
+ fi
+ echo "."
+ ;;
+ stop)
+ echo -n "Shutting down PPP link: pppd"
+ if [ "$RUNFILE" = "1" ]; then
+ poff
+ else
+ poff provider
+ fi
+ echo "."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting PPP link: pppd"
+ if [ "$RUNFILE" = "1" ]; then
+ poff
+ sleep 5
+ /etc/ppp/ppp_on_boot
+ else
+ poff provider
+ sleep 5
+ pppd call provider
+ fi
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/ppp {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/ip-down b/recipes-connectivity/ppp/ppp-2.4.7/ip-down
new file mode 100755
index 0000000..06d3548
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/ip-down
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# $Id: ip-down,v 1.2 1998/02/10 21:21:55 phil Exp $
+#
+# This script is run by the pppd _after_ the link is brought down.
+# It uses run-parts to run scripts in /etc/ppp/ip-down.d, so to delete
+# routes, unset IP addresses etc. you should create script(s) there.
+#
+# Be aware that other packages may include /etc/ppp/ip-down.d scripts (named
+# after that package), so choose local script names with that in mind.
+#
+# This script is called with the following arguments:
+# Arg Name Example
+# $1 Interface name ppp0
+# $2 The tty ttyS1
+# $3 The link speed 38400
+# $4 Local IP number 12.34.56.78
+# $5 Peer IP number 12.34.56.99
+# $6 Optional ``ipparam'' value foo
+
+# The environment is cleared before executing this script
+# so the path must be reset
+PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
+export PATH
+# These variables are for the use of the scripts run by run-parts
+PPP_IFACE="$1"
+PPP_TTY="$2"
+PPP_SPEED="$3"
+PPP_LOCAL="$4"
+PPP_REMOTE="$5"
+PPP_IPPARAM="$6"
+export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
+
+# as an additional convenience, $PPP_TTYNAME is set to the tty name,
+# stripped of /dev/ (if present) for easier matching.
+PPP_TTYNAME=`/usr/bin/basename "$2"`
+export PPP_TTYNAME
+
+# Main Script starts here
+
+run-parts /etc/ppp/ip-down.d
+
+# last line
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/ip-up b/recipes-connectivity/ppp/ppp-2.4.7/ip-up
new file mode 100755
index 0000000..fc2fae9
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/ip-up
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# $Id: ip-up,v 1.2 1998/02/10 21:25:34 phil Exp $
+#
+# This script is run by the pppd after the link is established.
+# It uses run-parts to run scripts in /etc/ppp/ip-up.d, so to add routes,
+# set IP address, run the mailq etc. you should create script(s) there.
+#
+# Be aware that other packages may include /etc/ppp/ip-up.d scripts (named
+# after that package), so choose local script names with that in mind.
+#
+# This script is called with the following arguments:
+# Arg Name Example
+# $1 Interface name ppp0
+# $2 The tty ttyS1
+# $3 The link speed 38400
+# $4 Local IP number 12.34.56.78
+# $5 Peer IP number 12.34.56.99
+# $6 Optional ``ipparam'' value foo
+
+# The environment is cleared before executing this script
+# so the path must be reset
+PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
+export PATH
+# These variables are for the use of the scripts run by run-parts
+PPP_IFACE="$1"
+PPP_TTY="$2"
+PPP_SPEED="$3"
+PPP_LOCAL="$4"
+PPP_REMOTE="$5"
+PPP_IPPARAM="$6"
+export PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
+
+
+# as an additional convenience, $PPP_TTYNAME is set to the tty name,
+# stripped of /dev/ (if present) for easier matching.
+PPP_TTYNAME=`/usr/bin/basename "$2"`
+export PPP_TTYNAME
+
+# Main Script starts here
+
+run-parts /etc/ppp/ip-up.d
+
+# last line
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/makefile-remove-hard-usr-reference.patch b/recipes-connectivity/ppp/ppp-2.4.7/makefile-remove-hard-usr-reference.patch
new file mode 100644
index 0000000..d59717e
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/makefile-remove-hard-usr-reference.patch
@@ -0,0 +1,37 @@
+The patch comes from OpenEmbedded.
+Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
+
+Updated from OE-Classic to include the pcap hunk.
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -urN ppp-2.4.5-orig/pppd/Makefile.linux ppp-2.4.5/pppd/Makefile.linux
+--- ppp-2.4.5-orig/pppd/Makefile.linux 2010-06-30 15:51:12.043682063 +0800
++++ ppp-2.4.5/pppd/Makefile.linux 2010-06-30 17:08:21.806363042 +0800
+@@ -117,10 +117,10 @@
+ #LIBS += -lshadow $(LIBS)
+ endif
+
+-ifneq ($(wildcard /usr/include/crypt.h),)
++#ifneq ($(wildcard /usr/include/crypt.h),)
+ CFLAGS += -DHAVE_CRYPT_H=1
+ LIBS += -lcrypt
+-endif
++#endif
+
+ ifdef NEEDDES
+ ifndef USE_CRYPT
+@@ -169,10 +169,10 @@
+ endif
+
+ ifdef FILTER
+-ifneq ($(wildcard /usr/include/pcap-bpf.h),)
++#ifneq ($(wildcard /usr/include/pcap-bpf.h),)
+ LIBS += -lpcap
+ CFLAGS += -DPPP_FILTER
+-endif
++#endif
+ endif
+
+ ifdef HAVE_INET6
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/makefile.patch b/recipes-connectivity/ppp/ppp-2.4.7/makefile.patch
new file mode 100644
index 0000000..2d09baf
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/makefile.patch
@@ -0,0 +1,95 @@
+The patch comes from OpenEmbedded
+Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -ruN ppp-2.4.5-orig/chat/Makefile.linux ppp-2.4.5/chat/Makefile.linux
+--- ppp-2.4.5-orig/chat/Makefile.linux 2010-06-30 15:51:12.050166398 +0800
++++ ppp-2.4.5/chat/Makefile.linux 2010-06-30 15:51:30.450118446 +0800
+@@ -25,7 +25,7 @@
+
+ install: chat
+ mkdir -p $(BINDIR) $(MANDIR)
+- $(INSTALL) -s -c chat $(BINDIR)
++ $(INSTALL) -c chat $(BINDIR)
+ $(INSTALL) -c -m 644 chat.8 $(MANDIR)
+
+ clean:
+diff -ruN ppp-2.4.5-orig/pppd/Makefile.linux ppp-2.4.5/pppd/Makefile.linux
+--- ppp-2.4.5-orig/pppd/Makefile.linux 2010-06-30 15:51:12.043682063 +0800
++++ ppp-2.4.5/pppd/Makefile.linux 2010-06-30 15:52:11.214170607 +0800
+@@ -99,7 +99,7 @@
+ CFLAGS += -DUSE_SRP -DOPENSSL -I/usr/local/ssl/include
+ LIBS += -lsrp -L/usr/local/ssl/lib -lcrypto
+ TARGETS += srp-entry
+-EXTRAINSTALL = $(INSTALL) -s -c -m 555 srp-entry $(BINDIR)/srp-entry
++EXTRAINSTALL = $(INSTALL) -c -m 555 srp-entry $(BINDIR)/srp-entry
+ MANPAGES += srp-entry.8
+ EXTRACLEAN += srp-entry.o
+ NEEDDES=y
+@@ -200,7 +200,7 @@
+ install: pppd
+ mkdir -p $(BINDIR) $(MANDIR)
+ $(EXTRAINSTALL)
+- $(INSTALL) -s -c -m 555 pppd $(BINDIR)/pppd
++ $(INSTALL) -c -m 555 pppd $(BINDIR)/pppd
+ if chgrp pppusers $(BINDIR)/pppd 2>/dev/null; then \
+ chmod o-rx,u+s $(BINDIR)/pppd; fi
+ $(INSTALL) -c -m 444 pppd.8 $(MANDIR)
+diff -ruN ppp-2.4.5-orig/pppd/plugins/radius/Makefile.linux ppp-2.4.5/pppd/plugins/radius/Makefile.linux
+--- ppp-2.4.5-orig/pppd/plugins/radius/Makefile.linux 2010-06-30 15:51:12.047676187 +0800
++++ ppp-2.4.5/pppd/plugins/radius/Makefile.linux 2010-06-30 15:53:47.750182267 +0800
+@@ -36,11 +36,11 @@
+
+ install: all
+ $(INSTALL) -d -m 755 $(LIBDIR)
+- $(INSTALL) -s -c -m 755 radius.so $(LIBDIR)
+- $(INSTALL) -s -c -m 755 radattr.so $(LIBDIR)
+- $(INSTALL) -s -c -m 755 radrealms.so $(LIBDIR)
+- $(INSTALL) -c -m 444 pppd-radius.8 $(MANDIR)
+- $(INSTALL) -c -m 444 pppd-radattr.8 $(MANDIR)
++ $(INSTALL) -c -m 755 radius.so $(LIBDIR)
++ $(INSTALL) -c -m 755 radattr.so $(LIBDIR)
++ $(INSTALL) -c -m 755 radrealms.so $(LIBDIR)
++ $(INSTALL) -m 444 pppd-radius.8 $(MANDIR)
++ $(INSTALL) -m 444 pppd-radattr.8 $(MANDIR)
+
+ radius.so: radius.o libradiusclient.a
+ $(CC) -o radius.so -shared radius.o libradiusclient.a
+diff -ruN ppp-2.4.5-orig/pppd/plugins/rp-pppoe/Makefile.linux ppp-2.4.5/pppd/plugins/rp-pppoe/Makefile.linux
+--- ppp-2.4.5-orig/pppd/plugins/rp-pppoe/Makefile.linux 2010-06-30 15:51:12.047676187 +0800
++++ ppp-2.4.5/pppd/plugins/rp-pppoe/Makefile.linux 2010-06-30 15:53:15.454486877 +0800
+@@ -43,9 +43,9 @@
+
+ install: all
+ $(INSTALL) -d -m 755 $(LIBDIR)
+- $(INSTALL) -s -c -m 4550 rp-pppoe.so $(LIBDIR)
++ $(INSTALL) -c -m 4550 rp-pppoe.so $(LIBDIR)
+ $(INSTALL) -d -m 755 $(BINDIR)
+- $(INSTALL) -s -c -m 555 pppoe-discovery $(BINDIR)
++ $(INSTALL) -c -m 555 pppoe-discovery $(BINDIR)
+
+ clean:
+ rm -f *.o *.so pppoe-discovery
+diff -ruN ppp-2.4.5-orig/pppdump/Makefile.linux ppp-2.4.5/pppdump/Makefile.linux
+--- ppp-2.4.5-orig/pppdump/Makefile.linux 2010-06-30 15:51:12.058183383 +0800
++++ ppp-2.4.5/pppdump/Makefile.linux 2010-06-30 15:52:25.762183537 +0800
+@@ -17,5 +17,5 @@
+
+ install:
+ mkdir -p $(BINDIR) $(MANDIR)
+- $(INSTALL) -s -c pppdump $(BINDIR)
++ $(INSTALL) -c pppdump $(BINDIR)
+ $(INSTALL) -c -m 444 pppdump.8 $(MANDIR)
+diff -ruN ppp-2.4.5-orig/pppstats/Makefile.linux ppp-2.4.5/pppstats/Makefile.linux
+--- ppp-2.4.5-orig/pppstats/Makefile.linux 2010-06-30 15:51:12.058183383 +0800
++++ ppp-2.4.5/pppstats/Makefile.linux 2010-06-30 15:52:42.486341081 +0800
+@@ -22,7 +22,7 @@
+
+ install: pppstats
+ -mkdir -p $(MANDIR)
+- $(INSTALL) -s -c pppstats $(BINDIR)
++ $(INSTALL) -c pppstats $(BINDIR)
+ $(INSTALL) -c -m 444 pppstats.8 $(MANDIR)
+
+ pppstats: $(PPPSTATSRCS)
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/pap b/recipes-connectivity/ppp/ppp-2.4.7/pap
new file mode 100644
index 0000000..093c326
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/pap
@@ -0,0 +1,22 @@
+# You can use this script unmodified to connect to sites which allow
+# authentication via PAP, CHAP and similar protocols.
+# This script can be shared among different pppd peer configurations.
+# To use it, add something like this to your /etc/ppp/peers/ file:
+#
+# connect "/usr/sbin/chat -v -f /etc/chatscripts/pap -T PHONE-NUMBER"
+# user YOUR-USERNAME-IN-PAP-SECRETS
+# noauth
+
+# Uncomment the following line to see the connect speed.
+# It will be logged to stderr or to the file specified with the -r chat option.
+#REPORT CONNECT
+
+ABORT BUSY
+ABORT VOICE
+ABORT "NO CARRIER"
+ABORT "NO DIALTONE"
+ABORT "NO DIAL TONE"
+"" ATZ
+OK ATDT\T
+CONNECT ""
+
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/poff b/recipes-connectivity/ppp/ppp-2.4.7/poff
new file mode 100644
index 0000000..0521a94
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/poff
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Lets see how many pppds are running....
+set -- `cat /var/run/ppp*.pid 2>/dev/null`
+
+case $# in
+ 0) # pppd only creates a pid file once ppp is up, so let's try killing pppd
+ # on the assumption that we've not got that far yet.
+ killall pppd
+ ;;
+ 1) # If only one was running then it can be killed (apparently killall
+ # caused problems for some, so lets try killing the pid from the file)
+ kill $1
+ ;;
+ *) # More than one! Aieehh.. Dont know which one to kill.
+ echo "More than one pppd running. None stopped"
+ exit 1
+ ;;
+esac
+
+if [ -r /var/run/ppp-quick ]
+then
+ rm -f /var/run/ppp-quick
+fi
+
+exit 0
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/pon b/recipes-connectivity/ppp/ppp-2.4.7/pon
new file mode 100644
index 0000000..91c0595
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/pon
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [ "$1" = "quick" ]
+then
+ touch /var/run/ppp-quick
+ shift
+fi
+
+/usr/sbin/pppd call ${1:-provider}
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/ppp_on_boot b/recipes-connectivity/ppp/ppp-2.4.7/ppp_on_boot
new file mode 100644
index 0000000..9793761
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/ppp_on_boot
@@ -0,0 +1,21 @@
+###!/bin/sh
+#
+# Rename this file to ppp_on_boot and pppd will be fired up as
+# soon as the system comes up, connecting to `provider'.
+#
+# If you also make this file executable, and replace the first line
+# with just "#!/bin/sh", the commands below will be executed instead.
+#
+
+# The location of the ppp daemon itself (shouldn't need to be changed)
+PPPD=/usr/sbin/pppd
+
+# The default provider to connect to
+$PPPD call provider
+
+# Additional connections, which would just use settings from
+# /etc/ppp/options.<tty>
+#$PPPD ttyS0
+#$PPPD ttyS1
+#$PPPD ttyS2
+#$PPPD ttyS3
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/pppd-resolv-varrun.patch b/recipes-connectivity/ppp/ppp-2.4.7/pppd-resolv-varrun.patch
new file mode 100644
index 0000000..a72414f
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/pppd-resolv-varrun.patch
@@ -0,0 +1,45 @@
+The patch comes from OpenEmbedded
+Rebased for ppp-2.4.5. Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+diff -ruN ppp-2.4.5-orig/pppd/ipcp.c ppp-2.4.5/pppd/ipcp.c
+--- ppp-2.4.5-orig/pppd/ipcp.c 2010-06-30 15:51:12.050166398 +0800
++++ ppp-2.4.5/pppd/ipcp.c 2010-06-30 17:02:33.930393283 +0800
+@@ -55,6 +55,8 @@
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
++#include <sys/stat.h>
++#include <unistd.h>
+
+ #include "pppd.h"
+ #include "fsm.h"
+@@ -2095,6 +2097,14 @@
+ u_int32_t peerdns1, peerdns2;
+ {
+ FILE *f;
++ struct stat dirinfo;
++
++ if(stat(_PATH_OUTDIR, &dirinfo)) {
++ if(mkdir(_PATH_OUTDIR, 0775)) {
++ error("Failed to create directory %s: %m", _PATH_OUTDIR);
++ return;
++ }
++ }
+
+ f = fopen(_PATH_RESOLV, "w");
+ if (f == NULL) {
+diff -ruN ppp-2.4.5-orig/pppd/pathnames.h ppp-2.4.5/pppd/pathnames.h
+--- ppp-2.4.5-orig/pppd/pathnames.h 2010-06-30 15:51:12.043682063 +0800
++++ ppp-2.4.5/pppd/pathnames.h 2010-06-30 17:03:20.594371055 +0800
+@@ -30,7 +30,8 @@
+ #define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options."
+ #define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors"
+ #define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/"
+-#define _PATH_RESOLV _ROOT_PATH "/etc/ppp/resolv.conf"
++#define _PATH_OUTDIR _ROOT_PATH _PATH_VARRUN "/ppp"
++#define _PATH_RESOLV _PATH_OUTDIR "/resolv.conf"
+
+ #define _PATH_USEROPT ".ppprc"
+ #define _PATH_PSEUDONYM ".ppp_pseudonym"
diff --git a/recipes-connectivity/ppp/ppp-2.4.7/provider b/recipes-connectivity/ppp/ppp-2.4.7/provider
new file mode 100644
index 0000000..e74d71a
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp-2.4.7/provider
@@ -0,0 +1,35 @@
+# example configuration for a dialup connection authenticated with PAP or CHAP
+#
+# This is the default configuration used by pon(1) and poff(1).
+# See the manual page pppd(8) for information on all the options.
+
+# MUST CHANGE: replace myusername@realm with the PPP login name given to
+# your by your provider.
+# There should be a matching entry with the password in /etc/ppp/pap-secrets
+# and/or /etc/ppp/chap-secrets.
+user "myusername@realm"
+
+# MUST CHANGE: replace ******** with the phone number of your provider.
+# The /etc/chatscripts/pap chat script may be modified to change the
+# modem initialization string.
+connect "/usr/sbin/chat -v -f /etc/chatscripts/pap -T ********"
+
+# Serial device to which the modem is connected.
+/dev/modem
+
+# Speed of the serial line.
+115200
+
+# Assumes that your IP address is allocated dynamically by the ISP.
+noipdefault
+# Try to get the name server addresses from the ISP.
+usepeerdns
+# Use this connection as the default route.
+defaultroute
+
+# Makes pppd "dial again" when the connection is lost.
+persist
+
+# Do not ask the remote to authenticate.
+noauth
+
diff --git a/recipes-connectivity/ppp/ppp_2.4.7.bb b/recipes-connectivity/ppp/ppp_2.4.7.bb
new file mode 100644
index 0000000..a106442
--- /dev/null
+++ b/recipes-connectivity/ppp/ppp_2.4.7.bb
@@ -0,0 +1,88 @@
+SUMMARY = "Point-to-Point Protocol (PPP) support"
+DESCRIPTION = "ppp (Paul's PPP Package) is an open source package which implements \
+the Point-to-Point Protocol (PPP) on Linux and Solaris systems."
+SECTION = "console/network"
+HOMEPAGE = "http://samba.org/ppp/"
+BUGTRACKER = "http://ppp.samba.org/cgi-bin/ppp-bugs"
+DEPENDS = "libpcap"
+LICENSE = "BSD & GPLv2+ & LGPLv2+ & PD"
+LIC_FILES_CHKSUM = "file://pppd/ccp.c;beginline=1;endline=29;md5=e2c43fe6e81ff77d87dc9c290a424dea \
+ file://pppd/plugins/passprompt.c;beginline=1;endline=10;md5=3bcbcdbf0e369c9a3e0b8c8275b065d8 \
+ file://pppd/tdb.c;beginline=1;endline=27;md5=4ca3a9991b011038d085d6675ae7c4e6 \
+ file://chat/chat.c;beginline=1;endline=15;md5=0d374b8545ee5c62d7aff1acbd38add2"
+PR = "r6"
+
+SRC_URI = "http://ppp.samba.org/ftp/ppp/ppp-${PV}.tar.gz \
+ file://makefile.patch \
+ file://cifdefroute.patch \
+ file://pppd-resolv-varrun.patch \
+ file://makefile-remove-hard-usr-reference.patch \
+ file://pon \
+ file://poff \
+ file://init \
+ file://ip-up \
+ file://ip-down \
+ file://08setupdns \
+ file://92removedns \
+ file://copts.patch \
+ file://pap \
+ file://ppp_on_boot \
+ file://provider \
+ file://0001-ppp-Fix-compilation-errors-in-Makefile.patch \
+"
+
+SRC_URI[md5sum] = "78818f40e6d33a1d1de68a1551f6595a"
+SRC_URI[sha256sum] = "02e0a3dd3e4799e33103f70ec7df75348c8540966ee7c948e4ed8a42bbccfb30"
+
+inherit autotools
+
+TARGET_CC_ARCH += " ${LDFLAGS}"
+EXTRA_OEMAKE = "STRIPPROG=${STRIP} MANDIR=${D}${datadir}/man/man8 INCDIR=${D}${includedir} LIBDIR=${D}${libdir}/pppd/${PV} BINDIR=${D}${sbindir}"
+EXTRA_OECONF = "--disable-strip"
+
+# Package Makefile computes CFLAGS, referencing COPTS.
+# Typically hard-coded to '-O2 -g' in the Makefile's.
+#
+EXTRA_OEMAKE += ' COPTS="${CFLAGS}"'
+
+do_install_append () {
+ make install-etcppp ETCDIR=${D}/${sysconfdir}/ppp
+ mkdir -p ${D}${bindir}/ ${D}${sysconfdir}/init.d
+ mkdir -p ${D}${sysconfdir}/ppp/ip-up.d/
+ mkdir -p ${D}${sysconfdir}/ppp/ip-down.d/
+ install -m 0755 ${WORKDIR}/pon ${D}${bindir}/pon
+ install -m 0755 ${WORKDIR}/poff ${D}${bindir}/poff
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ppp
+ install -m 0755 ${WORKDIR}/ip-up ${D}${sysconfdir}/ppp/
+ install -m 0755 ${WORKDIR}/ip-down ${D}${sysconfdir}/ppp/
+ install -m 0755 ${WORKDIR}/08setupdns ${D}${sysconfdir}/ppp/ip-up.d/
+ install -m 0755 ${WORKDIR}/92removedns ${D}${sysconfdir}/ppp/ip-down.d/
+ mkdir -p ${D}${sysconfdir}/chatscripts
+ mkdir -p ${D}${sysconfdir}/ppp/peers
+ install -m 0755 ${WORKDIR}/pap ${D}${sysconfdir}/chatscripts
+ install -m 0755 ${WORKDIR}/ppp_on_boot ${D}${sysconfdir}/ppp/ppp_on_boot
+ install -m 0755 ${WORKDIR}/provider ${D}${sysconfdir}/ppp/peers/provider
+ rm -rf ${D}/${mandir}/man8/man8
+ chmod u+s ${D}${sbindir}/pppd
+}
+
+CONFFILES_${PN} = "${sysconfdir}/ppp/pap-secrets ${sysconfdir}/ppp/chap-secrets ${sysconfdir}/ppp/options"
+PACKAGES =+ "${PN}-oa ${PN}-oe ${PN}-radius ${PN}-winbind ${PN}-minconn ${PN}-password ${PN}-l2tp ${PN}-tools"
+FILES_${PN} = "${sysconfdir} ${bindir} ${sbindir}/chat ${sbindir}/pppd"
+FILES_${PN}-dbg += "${libdir}/pppd/${PV}/.debug"
+FILES_${PN}-oa = "${libdir}/pppd/${PV}/pppoatm.so"
+FILES_${PN}-oe = "${sbindir}/pppoe-discovery ${libdir}/pppd/${PV}/rp-pppoe.so"
+FILES_${PN}-radius = "${libdir}/pppd/${PV}/radius.so ${libdir}/pppd/${PV}/radattr.so ${libdir}/pppd/${PV}/radrealms.so"
+FILES_${PN}-winbind = "${libdir}/pppd/${PV}/winbind.so"
+FILES_${PN}-minconn = "${libdir}/pppd/${PV}/minconn.so"
+FILES_${PN}-password = "${libdir}/pppd/${PV}/pass*.so"
+FILES_${PN}-l2tp = "${libdir}/pppd/${PV}/*l2tp.so"
+FILES_${PN}-tools = "${sbindir}/pppstats ${sbindir}/pppdump"
+DESCRIPTION_${PN}-oa = "Plugin for PPP needed for PPP-over-ATM"
+DESCRIPTION_${PN}-oe = "Plugin for PPP needed for PPP-over-Ethernet"
+DESCRIPTION_${PN}-radius = "Plugin for PPP that are related to RADIUS"
+DESCRIPTION_${PN}-winbind = "Plugin for PPP to authenticate against Samba or Windows"
+DESCRIPTION_${PN}-minconn = "Plugin for PPP to specify a minimum connect time before the idle timeout applies"
+DESCRIPTION_${PN}-password = "Plugin for PPP to get passwords via a pipe"
+DESCRIPTION_${PN}-l2tp = "Plugin for PPP for l2tp support"
+DESCRIPTION_${PN}-tools = "The pppdump and pppstats utitilities"
diff --git a/recipes-connectivity/usb-gadget-mode/files/usb-gadget b/recipes-connectivity/usb-gadget-mode/files/usb-gadget
new file mode 100755
index 0000000..8da88ad
--- /dev/null
+++ b/recipes-connectivity/usb-gadget-mode/files/usb-gadget
@@ -0,0 +1,69 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: usb-gadget
+# Date: 20070606 (YMD)
+#
+#################################################################################
+#
+# 20070606 - v0.0.1 - Initial release
+# 20070630 - v0.0.2 - Add forgotten host mode
+# 20090529 - add support for all gadgets in 2.6.29 (koen)
+
+CONF_FILE="/etc/default/usb-gadget"
+
+die() {
+ echo "ERROR: $1"
+ exit 1
+}
+
+go() {
+ test -e "$CONF_FILE" && . "$CONF_FILE"
+
+ case "$USB_MODE" in
+ networking) setup_usb g_ether ;;
+ zero) setup_usb g_zero ;;
+ midi) setup_usb g_midi ;;
+ printer) setup_usb g_printer ;;
+ gadgetfs) setup_usb gadgetfs ;;
+ composite) setup_usb g_cdc ;;
+ serial) setup_usb g_serial ;;
+ storage) setup_usb g_file_storage ;;
+ hostmode) unload_usb_gadgets
+ setup_usb ohci_hcd ;;
+ none) unload_usb_gadgets ;;
+ esac
+
+}
+
+setup_usb() {
+
+ if ! ( lsmod | grep -q "$1" )
+ then
+ unload_usb_gadgets
+ echo "Loading [$1]"
+ modprobe "$1" $MODULE_OPTIONS
+ else
+ echo "Already loaded: [$1]"
+ fi
+}
+
+unload_usb_gadgets() {
+ KERNEL_VERSION="`uname -r`"
+ GADGET_MODULES="`find /lib/modules/$KERNEL_VERSION/kernel/drivers/usb/gadget -name "*g_*"`"
+
+ for module in $GADGET_MODULES
+ do
+ MODULE_NAME="`basename $module | sed "s/\.ko//"`"
+
+ if ( lsmod | grep -q "$MODULE_NAME" )
+ then
+ echo "Unloading [$MODULE_NAME]"
+ rmmod "$module"
+ fi
+ done
+}
+
+go
diff --git a/recipes-connectivity/usb-gadget-mode/files/usb-gadget.conf b/recipes-connectivity/usb-gadget-mode/files/usb-gadget.conf
new file mode 100644
index 0000000..ecf0844
--- /dev/null
+++ b/recipes-connectivity/usb-gadget-mode/files/usb-gadget.conf
@@ -0,0 +1,3 @@
+USB_MODE="serial"
+MODULE_OPTIONS=""
+
diff --git a/recipes-connectivity/usb-gadget-mode/files/usb-gadget.init b/recipes-connectivity/usb-gadget-mode/files/usb-gadget.init
new file mode 100755
index 0000000..7bf456b
--- /dev/null
+++ b/recipes-connectivity/usb-gadget-mode/files/usb-gadget.init
@@ -0,0 +1,16 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: usb-gadget.init
+# Date: 20070606 (YMD)
+#
+#################################################################################
+#
+# 20070606 - v0.0.1 - Initial release
+
+case "$1" in
+start) usb-gadget ;;
+esac
+
diff --git a/recipes-connectivity/usb-gadget-mode/usb-gadget-mode.bb b/recipes-connectivity/usb-gadget-mode/usb-gadget-mode.bb
new file mode 100644
index 0000000..3b547cb
--- /dev/null
+++ b/recipes-connectivity/usb-gadget-mode/usb-gadget-mode.bb
@@ -0,0 +1,42 @@
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2007
+# License: MIT (see http://www.opensource.org/licenses/mit-license.php
+# for a copy of the license)
+#
+# Filename: usb-gadget-mode.bb
+# Date: 20070606 (YMD)
+
+DESCRIPTION = "Manage the default USB gadget mode"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+PV = "0.0.2"
+PR = "r2"
+
+SRC_URI = "\
+ file://usb-gadget.conf \
+ file://usb-gadget \
+ file://usb-gadget.init \
+"
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${bindir}
+ install -d ${D}${sysconfdir}/default
+
+ install -m 0644 ${WORKDIR}/usb-gadget.conf ${D}${sysconfdir}/default/usb-gadget
+ install -m 0755 ${WORKDIR}/usb-gadget.init ${D}${sysconfdir}/init.d/usb-gadget
+ install -m 0755 ${WORKDIR}/usb-gadget ${D}${bindir}
+}
+
+pkg_postinst_${PN}() {
+ test -n "$D" && opt="-r $D"
+ update-rc.d $opt usb-gadget defaults 50
+}
+
+pkg_postrm_${PN}() {
+ update-rc.d -f usb-gadget remove
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
diff --git a/recipes-core/base-files/base-files/mlinux/issue b/recipes-core/base-files/base-files/mlinux/issue
new file mode 100644
index 0000000..9de31d4
--- /dev/null
+++ b/recipes-core/base-files/base-files/mlinux/issue
@@ -0,0 +1,7 @@
+ _ _
+ _ __ ___ | | (_)_ __ _ ___ __
+ | '_ ` _ \\| | | | '_ \\| | | \\ \\/ /
+ | | | | | | |___| | | | | |_| |> <
+ |_| |_| |_|_____|_|_| |_|\\__,_/_/\\_\\
+
+MultiTech Systems mLinux GNU/Linux
diff --git a/recipes-core/base-files/base-files/mlinux/issue.net b/recipes-core/base-files/base-files/mlinux/issue.net
new file mode 100644
index 0000000..efd075c
--- /dev/null
+++ b/recipes-core/base-files/base-files/mlinux/issue.net
@@ -0,0 +1,7 @@
+ _ _
+ _ __ ___ | | (_)_ __ _ ___ __
+ | '_ ` _ \| | | | '_ \| | | \ \/ /
+ | | | | | | |___| | | | | |_| |> <
+ |_| |_| |_|_____|_|_| |_|\__,_/_/\_\
+
+Multi-Tech Systems mLinux GNU/Linux
diff --git a/recipes-core/base-files/base-files/mtcdt/fstab b/recipes-core/base-files/base-files/mtcdt/fstab
new file mode 100644
index 0000000..ed71d2f
--- /dev/null
+++ b/recipes-core/base-files/base-files/mtcdt/fstab
@@ -0,0 +1,12 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
+tmpfs /run tmpfs mode=0755,nodev,nosuid,strictatime 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+
+/dev/mtdblock6 /var/config jffs2 defaults 0 0
+/dev/mtdblock7 /var/oem jffs2 defaults,ro 0 0
+
+# SD card
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
diff --git a/recipes-core/base-files/base-files_3.0.14.bbappend b/recipes-core/base-files/base-files_3.0.14.bbappend
new file mode 100644
index 0000000..461f869
--- /dev/null
+++ b/recipes-core/base-files/base-files_3.0.14.bbappend
@@ -0,0 +1,4 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}"
+
+# add SD card dir
+dirs755_append = " /media/card"
diff --git a/recipes-core/busybox/busybox-1.22.1/defconfig b/recipes-core/busybox/busybox-1.22.1/defconfig
new file mode 100644
index 0000000..0387a9d
--- /dev/null
+++ b/recipes-core/busybox/busybox-1.22.1/defconfig
@@ -0,0 +1,1020 @@
+#
+# Automatically generated make config: don't edit
+# Busybox version: 1.20.2
+# Mon Aug 20 17:01:45 2012
+#
+CONFIG_HAVE_DOT_CONFIG=y
+
+#
+# Busybox Settings
+#
+
+#
+# General Configuration
+#
+# CONFIG_DESKTOP is not set
+# CONFIG_EXTRA_COMPAT is not set
+# CONFIG_INCLUDE_SUSv2 is not set
+# CONFIG_USE_PORTABLE_CODE is not set
+CONFIG_PLATFORM_LINUX=y
+CONFIG_FEATURE_BUFFERS_USE_MALLOC=y
+# CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set
+# CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
+CONFIG_SHOW_USAGE=y
+CONFIG_FEATURE_VERBOSE_USAGE=y
+CONFIG_FEATURE_COMPRESS_USAGE=y
+# CONFIG_FEATURE_INSTALLER is not set
+# CONFIG_INSTALL_NO_USR is not set
+# CONFIG_LOCALE_SUPPORT is not set
+# CONFIG_UNICODE_SUPPORT is not set
+# CONFIG_UNICODE_USING_LOCALE is not set
+# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set
+CONFIG_SUBST_WCHAR=0
+CONFIG_LAST_SUPPORTED_WCHAR=0
+# CONFIG_UNICODE_COMBINING_WCHARS is not set
+# CONFIG_UNICODE_WIDE_WCHARS is not set
+# CONFIG_UNICODE_BIDI_SUPPORT is not set
+# CONFIG_UNICODE_NEUTRAL_TABLE is not set
+# CONFIG_UNICODE_PRESERVE_BROKEN is not set
+CONFIG_LONG_OPTS=y
+CONFIG_FEATURE_DEVPTS=y
+# CONFIG_FEATURE_CLEAN_UP is not set
+CONFIG_FEATURE_UTMP=y
+# CONFIG_FEATURE_WTMP is not set
+CONFIG_FEATURE_PIDFILE=y
+CONFIG_FEATURE_SUID=y
+CONFIG_FEATURE_SUID_CONFIG=y
+CONFIG_FEATURE_SUID_CONFIG_QUIET=y
+# CONFIG_SELINUX is not set
+# CONFIG_FEATURE_PREFER_APPLETS is not set
+CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
+CONFIG_FEATURE_SYSLOG=y
+CONFIG_FEATURE_HAVE_RPC=y
+
+#
+# Build Options
+#
+# CONFIG_STATIC is not set
+# CONFIG_PIE is not set
+# CONFIG_NOMMU is not set
+# CONFIG_BUILD_LIBBUSYBOX is not set
+# CONFIG_FEATURE_INDIVIDUAL is not set
+# CONFIG_FEATURE_SHARED_BUSYBOX is not set
+CONFIG_LFS=y
+# CONFIG_CROSS_COMPILER_PREFIX is not set
+CONFIG_SYSROOT=""
+# CONFIG_EXTRA_CFLAGS is not set
+CONFIG_EXTRA_LDFLAGS=""
+CONFIG_EXTRA_LDLIBS=""
+
+#
+# Debugging Options
+#
+# CONFIG_DEBUG is not set
+# CONFIG_DEBUG_PESSIMIZE is not set
+# CONFIG_WERROR is not set
+CONFIG_NO_DEBUG_LIB=y
+# CONFIG_DMALLOC is not set
+# CONFIG_EFENCE is not set
+
+#
+# Installation Options ("make install" behavior)
+#
+CONFIG_INSTALL_APPLET_SYMLINKS=y
+# CONFIG_INSTALL_APPLET_HARDLINKS is not set
+# CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
+# CONFIG_INSTALL_APPLET_DONT is not set
+# CONFIG_INSTALL_SH_APPLET_SYMLINK is not set
+# CONFIG_INSTALL_SH_APPLET_HARDLINK is not set
+# CONFIG_INSTALL_SH_APPLET_SCRIPT_WRAPPER is not set
+CONFIG_PREFIX="./_install"
+
+#
+# Busybox Library Tuning
+#
+CONFIG_FEATURE_SYSTEMD=y
+CONFIG_FEATURE_RTMINMAX=y
+CONFIG_PASSWORD_MINLEN=6
+CONFIG_MD5_SMALL=1
+CONFIG_FEATURE_FAST_TOP=y
+# CONFIG_FEATURE_ETC_NETWORKS is not set
+CONFIG_FEATURE_USE_TERMIOS=y
+CONFIG_FEATURE_EDITING=y
+CONFIG_FEATURE_EDITING_MAX_LEN=1024
+# CONFIG_FEATURE_EDITING_VI is not set
+CONFIG_FEATURE_EDITING_HISTORY=64
+CONFIG_FEATURE_EDITING_SAVEHISTORY=y
+# CONFIG_FEATURE_EDITING_SAVE_ON_EXIT is not set
+# CONFIG_FEATURE_REVERSE_SEARCH is not set
+CONFIG_FEATURE_TAB_COMPLETION=y
+CONFIG_FEATURE_USERNAME_COMPLETION=y
+CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
+# CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
+CONFIG_FEATURE_NON_POSIX_CP=y
+CONFIG_FEATURE_VERBOSE_CP_MESSAGE=y
+CONFIG_FEATURE_COPYBUF_KB=4
+CONFIG_FEATURE_SKIP_ROOTFS=y
+CONFIG_MONOTONIC_SYSCALL=y
+CONFIG_IOCTL_HEX2STR_ERROR=y
+CONFIG_FEATURE_HWIB=y
+
+#
+# Applets
+#
+
+#
+# Archival Utilities
+#
+CONFIG_FEATURE_SEAMLESS_XZ=y
+CONFIG_FEATURE_SEAMLESS_LZMA=y
+CONFIG_FEATURE_SEAMLESS_BZ2=y
+CONFIG_FEATURE_SEAMLESS_GZ=y
+CONFIG_FEATURE_SEAMLESS_Z=y
+CONFIG_AR=y
+# CONFIG_FEATURE_AR_LONG_FILENAMES is not set
+CONFIG_FEATURE_AR_CREATE=y
+CONFIG_BUNZIP2=y
+CONFIG_BZIP2=y
+CONFIG_CPIO=y
+# CONFIG_FEATURE_CPIO_O is not set
+# CONFIG_FEATURE_CPIO_P is not set
+# CONFIG_DPKG is not set
+# CONFIG_DPKG_DEB is not set
+# CONFIG_FEATURE_DPKG_DEB_EXTRACT_ONLY is not set
+CONFIG_GUNZIP=y
+CONFIG_GZIP=y
+CONFIG_FEATURE_GZIP_LONG_OPTIONS=y
+CONFIG_GZIP_FAST=0
+CONFIG_LZOP=y
+# CONFIG_LZOP_COMPR_HIGH is not set
+# CONFIG_RPM2CPIO is not set
+# CONFIG_RPM is not set
+CONFIG_TAR=y
+CONFIG_FEATURE_TAR_CREATE=y
+CONFIG_FEATURE_TAR_AUTODETECT=y
+CONFIG_FEATURE_TAR_FROM=y
+CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y
+# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
+CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
+CONFIG_FEATURE_TAR_LONG_OPTIONS=y
+CONFIG_FEATURE_TAR_TO_COMMAND=y
+CONFIG_FEATURE_TAR_UNAME_GNAME=y
+CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y
+# CONFIG_FEATURE_TAR_SELINUX is not set
+# CONFIG_UNCOMPRESS is not set
+# CONFIG_UNLZMA is not set
+# CONFIG_FEATURE_LZMA_FAST is not set
+# CONFIG_LZMA is not set
+CONFIG_UNXZ=y
+CONFIG_XZ=y
+CONFIG_UNZIP=y
+
+#
+# Coreutils
+#
+CONFIG_BASENAME=y
+CONFIG_CAT=y
+CONFIG_DATE=y
+CONFIG_FEATURE_DATE_ISOFMT=y
+# CONFIG_FEATURE_DATE_NANO is not set
+CONFIG_FEATURE_DATE_COMPAT=y
+# CONFIG_HOSTID is not set
+CONFIG_ID=y
+CONFIG_GROUPS=y
+CONFIG_TEST=y
+CONFIG_FEATURE_TEST_64=y
+CONFIG_TOUCH=y
+CONFIG_FEATURE_TOUCH_SUSV3=y
+CONFIG_TR=y
+CONFIG_FEATURE_TR_CLASSES=y
+# CONFIG_FEATURE_TR_EQUIV is not set
+CONFIG_BASE64=y
+CONFIG_WHO=y
+CONFIG_USERS=y
+# CONFIG_CAL is not set
+# CONFIG_CATV is not set
+CONFIG_CHGRP=y
+CONFIG_CHMOD=y
+CONFIG_CHOWN=y
+CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y
+CONFIG_CHROOT=y
+# CONFIG_CKSUM is not set
+# CONFIG_COMM is not set
+CONFIG_CP=y
+CONFIG_FEATURE_CP_LONG_OPTIONS=y
+CONFIG_CUT=y
+CONFIG_DD=y
+CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
+CONFIG_FEATURE_DD_THIRD_STATUS_LINE=y
+# CONFIG_FEATURE_DD_IBS_OBS is not set
+CONFIG_DF=y
+CONFIG_FEATURE_DF_FANCY=y
+CONFIG_DIRNAME=y
+# CONFIG_DOS2UNIX is not set
+# CONFIG_UNIX2DOS is not set
+CONFIG_DU=y
+CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
+CONFIG_ECHO=y
+CONFIG_FEATURE_FANCY_ECHO=y
+CONFIG_ENV=y
+CONFIG_FEATURE_ENV_LONG_OPTIONS=y
+# CONFIG_EXPAND is not set
+# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set
+CONFIG_EXPR=y
+CONFIG_EXPR_MATH_SUPPORT_64=y
+CONFIG_FALSE=y
+# CONFIG_FOLD is not set
+CONFIG_FSYNC=y
+CONFIG_HEAD=y
+CONFIG_FEATURE_FANCY_HEAD=y
+# CONFIG_INSTALL is not set
+# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set
+CONFIG_LN=y
+CONFIG_LOGNAME=y
+CONFIG_LS=y
+CONFIG_FEATURE_LS_FILETYPES=y
+CONFIG_FEATURE_LS_FOLLOWLINKS=y
+CONFIG_FEATURE_LS_RECURSIVE=y
+CONFIG_FEATURE_LS_SORTFILES=y
+CONFIG_FEATURE_LS_TIMESTAMPS=y
+CONFIG_FEATURE_LS_USERNAME=y
+CONFIG_FEATURE_LS_COLOR=y
+# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set
+CONFIG_MD5SUM=y
+CONFIG_MKDIR=y
+CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y
+CONFIG_MKFIFO=y
+CONFIG_MKNOD=y
+CONFIG_MV=y
+CONFIG_FEATURE_MV_LONG_OPTIONS=y
+CONFIG_NICE=y
+CONFIG_NOHUP=y
+CONFIG_OD=y
+# CONFIG_PRINTENV is not set
+CONFIG_PRINTF=y
+CONFIG_PWD=y
+CONFIG_READLINK=y
+CONFIG_FEATURE_READLINK_FOLLOW=y
+CONFIG_REALPATH=y
+CONFIG_RM=y
+CONFIG_RMDIR=y
+CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y
+CONFIG_SEQ=y
+# CONFIG_SHA1SUM is not set
+CONFIG_SHA256SUM=y
+CONFIG_SHA512SUM=y
+CONFIG_SLEEP=y
+CONFIG_FEATURE_FANCY_SLEEP=y
+CONFIG_FEATURE_FLOAT_SLEEP=y
+CONFIG_SORT=y
+CONFIG_FEATURE_SORT_BIG=y
+# CONFIG_SPLIT is not set
+# CONFIG_FEATURE_SPLIT_FANCY is not set
+CONFIG_STAT=y
+CONFIG_FEATURE_STAT_FORMAT=y
+CONFIG_STTY=y
+# CONFIG_SUM is not set
+CONFIG_SYNC=y
+# CONFIG_TAC is not set
+CONFIG_TAIL=y
+CONFIG_FEATURE_FANCY_TAIL=y
+CONFIG_TEE=y
+CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
+CONFIG_TRUE=y
+CONFIG_TTY=y
+CONFIG_UNAME=y
+# CONFIG_UNEXPAND is not set
+# CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS is not set
+CONFIG_UNIQ=y
+CONFIG_USLEEP=y
+# CONFIG_UUDECODE is not set
+# CONFIG_UUENCODE is not set
+CONFIG_WC=y
+# CONFIG_FEATURE_WC_LARGE is not set
+CONFIG_WHOAMI=y
+CONFIG_YES=y
+
+#
+# Common options for cp and mv
+#
+# CONFIG_FEATURE_PRESERVE_HARDLINKS is not set
+
+#
+# Common options for ls, more and telnet
+#
+CONFIG_FEATURE_AUTOWIDTH=y
+
+#
+# Common options for df, du, ls
+#
+CONFIG_FEATURE_HUMAN_READABLE=y
+
+#
+# Common options for md5sum, sha1sum, sha256sum, sha512sum
+#
+CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
+
+#
+# Console Utilities
+#
+CONFIG_CHVT=y
+# CONFIG_FGCONSOLE is not set
+CONFIG_CLEAR=y
+CONFIG_DEALLOCVT=y
+CONFIG_DUMPKMAP=y
+# CONFIG_KBD_MODE is not set
+CONFIG_LOADFONT=y
+CONFIG_LOADKMAP=y
+CONFIG_OPENVT=y
+CONFIG_RESET=y
+# CONFIG_RESIZE is not set
+# CONFIG_FEATURE_RESIZE_PRINT is not set
+CONFIG_SETCONSOLE=y
+# CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set
+# CONFIG_SETFONT is not set
+# CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set
+CONFIG_DEFAULT_SETFONT_DIR=""
+# CONFIG_SETKEYCODES is not set
+# CONFIG_SETLOGCONS is not set
+# CONFIG_SHOWKEY is not set
+
+#
+# Common options for loadfont and setfont
+#
+# CONFIG_FEATURE_LOADFONT_PSF2 is not set
+# CONFIG_FEATURE_LOADFONT_RAW is not set
+
+#
+# Debian Utilities
+#
+CONFIG_MKTEMP=y
+# CONFIG_PIPE_PROGRESS is not set
+CONFIG_RUN_PARTS=y
+CONFIG_FEATURE_RUN_PARTS_LONG_OPTIONS=y
+CONFIG_FEATURE_RUN_PARTS_FANCY=y
+CONFIG_START_STOP_DAEMON=y
+CONFIG_FEATURE_START_STOP_DAEMON_FANCY=y
+CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS=y
+CONFIG_WHICH=y
+
+#
+# Editors
+#
+CONFIG_PATCH=y
+CONFIG_VI=y
+CONFIG_FEATURE_VI_MAX_LEN=1024
+CONFIG_FEATURE_VI_8BIT=y
+CONFIG_FEATURE_VI_COLON=y
+CONFIG_FEATURE_VI_YANKMARK=y
+CONFIG_FEATURE_VI_SEARCH=y
+CONFIG_FEATURE_VI_REGEX_SEARCH=y
+CONFIG_FEATURE_VI_USE_SIGNALS=y
+CONFIG_FEATURE_VI_DOT_CMD=y
+# CONFIG_FEATURE_VI_READONLY is not set
+CONFIG_FEATURE_VI_SETOPTS=y
+CONFIG_FEATURE_VI_SET=y
+CONFIG_FEATURE_VI_WIN_RESIZE=y
+CONFIG_FEATURE_VI_ASK_TERMINAL=y
+CONFIG_FEATURE_VI_OPTIMIZE_CURSOR=y
+CONFIG_AWK=y
+CONFIG_FEATURE_AWK_LIBM=y
+CONFIG_CMP=y
+CONFIG_DIFF=y
+CONFIG_FEATURE_DIFF_LONG_OPTIONS=y
+CONFIG_FEATURE_DIFF_DIR=y
+# CONFIG_ED is not set
+CONFIG_SED=y
+CONFIG_FEATURE_ALLOW_EXEC=y
+
+#
+# Finding Utilities
+#
+CONFIG_FIND=y
+CONFIG_FEATURE_FIND_PRINT0=y
+CONFIG_FEATURE_FIND_MTIME=y
+CONFIG_FEATURE_FIND_MMIN=y
+CONFIG_FEATURE_FIND_PERM=y
+CONFIG_FEATURE_FIND_TYPE=y
+CONFIG_FEATURE_FIND_XDEV=y
+CONFIG_FEATURE_FIND_MAXDEPTH=y
+CONFIG_FEATURE_FIND_NEWER=y
+CONFIG_FEATURE_FIND_INUM=y
+CONFIG_FEATURE_FIND_EXEC=y
+CONFIG_FEATURE_FIND_USER=y
+CONFIG_FEATURE_FIND_GROUP=y
+CONFIG_FEATURE_FIND_NOT=y
+CONFIG_FEATURE_FIND_DEPTH=y
+CONFIG_FEATURE_FIND_PAREN=y
+CONFIG_FEATURE_FIND_SIZE=y
+CONFIG_FEATURE_FIND_PRUNE=y
+CONFIG_FEATURE_FIND_DELETE=y
+CONFIG_FEATURE_FIND_PATH=y
+CONFIG_FEATURE_FIND_REGEX=y
+# CONFIG_FEATURE_FIND_CONTEXT is not set
+CONFIG_FEATURE_FIND_LINKS=y
+CONFIG_GREP=y
+CONFIG_FEATURE_GREP_EGREP_ALIAS=y
+CONFIG_FEATURE_GREP_FGREP_ALIAS=y
+CONFIG_FEATURE_GREP_CONTEXT=y
+CONFIG_XARGS=y
+# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set
+CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
+CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
+CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
+
+#
+# Init Utilities
+#
+# CONFIG_BOOTCHARTD is not set
+# CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set
+# CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set
+CONFIG_HALT=y
+# CONFIG_FEATURE_CALL_TELINIT is not set
+CONFIG_TELINIT_PATH=""
+# CONFIG_INIT is not set
+# CONFIG_FEATURE_USE_INITTAB is not set
+# CONFIG_FEATURE_KILL_REMOVED is not set
+CONFIG_FEATURE_KILL_DELAY=0
+# CONFIG_FEATURE_INIT_SCTTY is not set
+# CONFIG_FEATURE_INIT_SYSLOG is not set
+# CONFIG_FEATURE_EXTRA_QUIET is not set
+# CONFIG_FEATURE_INIT_COREDUMPS is not set
+# CONFIG_FEATURE_INITRD is not set
+CONFIG_INIT_TERMINAL_TYPE=""
+# CONFIG_MESG is not set
+# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set
+
+#
+# Login/Password Management Utilities
+#
+# CONFIG_ADD_SHELL is not set
+# CONFIG_REMOVE_SHELL is not set
+# CONFIG_FEATURE_SHADOWPASSWDS is not set
+# CONFIG_USE_BB_PWD_GRP is not set
+# CONFIG_USE_BB_SHADOW is not set
+CONFIG_USE_BB_CRYPT=y
+# CONFIG_USE_BB_CRYPT_SHA is not set
+# CONFIG_ADDUSER is not set
+# CONFIG_FEATURE_ADDUSER_LONG_OPTIONS is not set
+# CONFIG_FEATURE_CHECK_NAMES is not set
+CONFIG_FIRST_SYSTEM_ID=100
+CONFIG_LAST_SYSTEM_ID=999
+# CONFIG_ADDGROUP is not set
+# CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS is not set
+# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set
+# CONFIG_DELUSER is not set
+# CONFIG_DELGROUP is not set
+# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set
+# CONFIG_GETTY is not set
+# CONFIG_LOGIN is not set
+# CONFIG_LOGIN_SESSION_AS_CHILD is not set
+# CONFIG_PAM is not set
+# CONFIG_LOGIN_SCRIPTS is not set
+# CONFIG_FEATURE_NOLOGIN is not set
+# CONFIG_FEATURE_SECURETTY is not set
+# CONFIG_PASSWD is not set
+# CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set
+# CONFIG_CRYPTPW is not set
+# CONFIG_CHPASSWD is not set
+CONFIG_FEATURE_DEFAULT_PASSWD_ALGO=""
+# CONFIG_SU is not set
+# CONFIG_FEATURE_SU_SYSLOG is not set
+# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set
+# CONFIG_SULOGIN is not set
+# CONFIG_VLOCK is not set
+
+#
+# Linux Ext2 FS Progs
+#
+CONFIG_CHATTR=y
+CONFIG_FSCK=y
+# CONFIG_LSATTR is not set
+# CONFIG_TUNE2FS is not set
+
+#
+# Linux Module Utilities
+#
+# CONFIG_MODINFO is not set
+# CONFIG_MODPROBE_SMALL is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set
+# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set
+CONFIG_INSMOD=y
+CONFIG_RMMOD=y
+CONFIG_LSMOD=y
+# CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set
+CONFIG_MODPROBE=y
+# CONFIG_FEATURE_MODPROBE_BLACKLIST is not set
+CONFIG_DEPMOD=y
+
+#
+# Options common to multiple modutils
+#
+# CONFIG_FEATURE_2_4_MODULES is not set
+# CONFIG_FEATURE_INSMOD_TRY_MMAP is not set
+# CONFIG_FEATURE_INSMOD_VERSION_CHECKING is not set
+# CONFIG_FEATURE_INSMOD_KSYMOOPS_SYMBOLS is not set
+# CONFIG_FEATURE_INSMOD_LOADINKMEM is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP is not set
+# CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set
+CONFIG_FEATURE_CHECK_TAINTED_MODULE=y
+CONFIG_FEATURE_MODUTILS_ALIAS=y
+CONFIG_FEATURE_MODUTILS_SYMBOLS=y
+CONFIG_DEFAULT_MODULES_DIR="/lib/modules"
+CONFIG_DEFAULT_DEPMOD_FILE="modules.dep"
+
+#
+# Linux System Utilities
+#
+# CONFIG_BLOCKDEV is not set
+# CONFIG_MDEV is not set
+# CONFIG_FEATURE_MDEV_CONF is not set
+# CONFIG_FEATURE_MDEV_RENAME is not set
+# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
+# CONFIG_FEATURE_MDEV_EXEC is not set
+# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set
+# CONFIG_REV is not set
+# CONFIG_ACPID is not set
+# CONFIG_FEATURE_ACPID_COMPAT is not set
+# CONFIG_BLKID is not set
+# CONFIG_FEATURE_BLKID_TYPE is not set
+CONFIG_DMESG=y
+CONFIG_FEATURE_DMESG_PRETTY=y
+CONFIG_FBSET=y
+CONFIG_FEATURE_FBSET_FANCY=y
+CONFIG_FEATURE_FBSET_READMODE=y
+# CONFIG_FDFLUSH is not set
+# CONFIG_FDFORMAT is not set
+CONFIG_FDISK=y
+# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set
+CONFIG_FEATURE_FDISK_WRITABLE=y
+# CONFIG_FEATURE_AIX_LABEL is not set
+# CONFIG_FEATURE_SGI_LABEL is not set
+# CONFIG_FEATURE_SUN_LABEL is not set
+# CONFIG_FEATURE_OSF_LABEL is not set
+# CONFIG_FEATURE_GPT_LABEL is not set
+# CONFIG_FEATURE_FDISK_ADVANCED is not set
+# CONFIG_FINDFS is not set
+CONFIG_FLOCK=y
+# CONFIG_FREERAMDISK is not set
+CONFIG_FSCK_MINIX=y
+# CONFIG_MKFS_EXT2 is not set
+CONFIG_MKFS_MINIX=y
+CONFIG_FEATURE_MINIX2=y
+# CONFIG_MKFS_REISER is not set
+# CONFIG_MKFS_VFAT is not set
+CONFIG_GETOPT=y
+CONFIG_FEATURE_GETOPT_LONG=y
+CONFIG_HEXDUMP=y
+# CONFIG_FEATURE_HEXDUMP_REVERSE is not set
+# CONFIG_HD is not set
+CONFIG_HWCLOCK=y
+CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS=y
+CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS=y
+# CONFIG_IPCRM is not set
+# CONFIG_IPCS is not set
+CONFIG_LOSETUP=y
+# CONFIG_LSPCI is not set
+# CONFIG_LSUSB is not set
+CONFIG_MKSWAP=y
+# CONFIG_FEATURE_MKSWAP_UUID is not set
+CONFIG_MORE=y
+CONFIG_MOUNT=y
+# CONFIG_FEATURE_MOUNT_FAKE is not set
+# CONFIG_FEATURE_MOUNT_VERBOSE is not set
+# CONFIG_FEATURE_MOUNT_HELPERS is not set
+# CONFIG_FEATURE_MOUNT_LABEL is not set
+CONFIG_FEATURE_MOUNT_NFS=y
+# CONFIG_FEATURE_MOUNT_CIFS is not set
+CONFIG_FEATURE_MOUNT_FLAGS=y
+CONFIG_FEATURE_MOUNT_FSTAB=y
+CONFIG_PIVOT_ROOT=y
+CONFIG_RDATE=y
+# CONFIG_RDEV is not set
+# CONFIG_READPROFILE is not set
+# CONFIG_RTCWAKE is not set
+# CONFIG_SCRIPT is not set
+# CONFIG_SCRIPTREPLAY is not set
+# CONFIG_SETARCH is not set
+CONFIG_SWAPONOFF=y
+CONFIG_FEATURE_SWAPON_PRI=y
+CONFIG_SWITCH_ROOT=y
+CONFIG_UMOUNT=y
+CONFIG_FEATURE_UMOUNT_ALL=y
+
+#
+# Common options for mount/umount
+#
+CONFIG_FEATURE_MOUNT_LOOP=y
+CONFIG_FEATURE_MOUNT_LOOP_CREATE=y
+# CONFIG_FEATURE_MTAB_SUPPORT is not set
+# CONFIG_VOLUMEID is not set
+# CONFIG_FEATURE_VOLUMEID_EXT is not set
+# CONFIG_FEATURE_VOLUMEID_BTRFS is not set
+# CONFIG_FEATURE_VOLUMEID_REISERFS is not set
+# CONFIG_FEATURE_VOLUMEID_FAT is not set
+# CONFIG_FEATURE_VOLUMEID_HFS is not set
+# CONFIG_FEATURE_VOLUMEID_JFS is not set
+# CONFIG_FEATURE_VOLUMEID_XFS is not set
+# CONFIG_FEATURE_VOLUMEID_NTFS is not set
+# CONFIG_FEATURE_VOLUMEID_ISO9660 is not set
+# CONFIG_FEATURE_VOLUMEID_UDF is not set
+# CONFIG_FEATURE_VOLUMEID_LUKS is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXSWAP is not set
+# CONFIG_FEATURE_VOLUMEID_CRAMFS is not set
+# CONFIG_FEATURE_VOLUMEID_ROMFS is not set
+# CONFIG_FEATURE_VOLUMEID_SYSV is not set
+# CONFIG_FEATURE_VOLUMEID_OCFS2 is not set
+# CONFIG_FEATURE_VOLUMEID_LINUXRAID is not set
+
+#
+# Miscellaneous Utilities
+#
+# CONFIG_CONSPY is not set
+CONFIG_LESS=y
+CONFIG_FEATURE_LESS_MAXLINES=9999999
+CONFIG_FEATURE_LESS_BRACKETS=y
+CONFIG_FEATURE_LESS_FLAGS=y
+# CONFIG_FEATURE_LESS_MARKS is not set
+# CONFIG_FEATURE_LESS_REGEXP is not set
+# CONFIG_FEATURE_LESS_WINCH is not set
+# CONFIG_FEATURE_LESS_ASK_TERMINAL is not set
+# CONFIG_FEATURE_LESS_DASHCMD is not set
+# CONFIG_FEATURE_LESS_LINENUMS is not set
+# CONFIG_NANDWRITE is not set
+# CONFIG_NANDDUMP is not set
+# CONFIG_SETSERIAL is not set
+# CONFIG_UBIATTACH is not set
+# CONFIG_UBIDETACH is not set
+# CONFIG_UBIMKVOL is not set
+# CONFIG_UBIRMVOL is not set
+# CONFIG_UBIRSVOL is not set
+# CONFIG_UBIUPDATEVOL is not set
+# CONFIG_ADJTIMEX is not set
+# CONFIG_BBCONFIG is not set
+# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set
+# CONFIG_BEEP is not set
+CONFIG_FEATURE_BEEP_FREQ=0
+CONFIG_FEATURE_BEEP_LENGTH_MS=0
+# CONFIG_CHAT is not set
+# CONFIG_FEATURE_CHAT_NOFAIL is not set
+# CONFIG_FEATURE_CHAT_TTY_HIFI is not set
+# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set
+# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set
+# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set
+# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set
+# CONFIG_FEATURE_CHAT_CLR_ABORT is not set
+# CONFIG_CHRT is not set
+# CONFIG_CROND is not set
+# CONFIG_FEATURE_CROND_D is not set
+# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
+CONFIG_FEATURE_CROND_DIR=""
+# CONFIG_CRONTAB is not set
+CONFIG_DC=y
+# CONFIG_FEATURE_DC_LIBM is not set
+# CONFIG_DEVFSD is not set
+# CONFIG_DEVFSD_MODLOAD is not set
+# CONFIG_DEVFSD_FG_NP is not set
+# CONFIG_DEVFSD_VERBOSE is not set
+# CONFIG_FEATURE_DEVFS is not set
+# CONFIG_DEVMEM is not set
+# CONFIG_EJECT is not set
+# CONFIG_FEATURE_EJECT_SCSI is not set
+# CONFIG_FBSPLASH is not set
+# CONFIG_FLASHCP is not set
+# CONFIG_FLASH_LOCK is not set
+# CONFIG_FLASH_UNLOCK is not set
+# CONFIG_FLASH_ERASEALL is not set
+# CONFIG_IONICE is not set
+# CONFIG_INOTIFYD is not set
+# CONFIG_LAST is not set
+# CONFIG_FEATURE_LAST_SMALL is not set
+# CONFIG_FEATURE_LAST_FANCY is not set
+# CONFIG_HDPARM is not set
+# CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set
+# CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_UNREGISTER_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_DRIVE_RESET is not set
+# CONFIG_FEATURE_HDPARM_HDIO_TRISTATE_HWIF is not set
+# CONFIG_FEATURE_HDPARM_HDIO_GETSET_DMA is not set
+# CONFIG_MAKEDEVS is not set
+# CONFIG_FEATURE_MAKEDEVS_LEAF is not set
+# CONFIG_FEATURE_MAKEDEVS_TABLE is not set
+# CONFIG_MAN is not set
+CONFIG_MICROCOM=y
+# CONFIG_MOUNTPOINT is not set
+# CONFIG_MT is not set
+# CONFIG_RAIDAUTORUN is not set
+# CONFIG_READAHEAD is not set
+CONFIG_RFKILL=y
+# CONFIG_RUNLEVEL is not set
+# CONFIG_RX is not set
+# CONFIG_SETSID is not set
+CONFIG_STRINGS=y
+# CONFIG_TASKSET is not set
+# CONFIG_FEATURE_TASKSET_FANCY is not set
+CONFIG_TIME=y
+# CONFIG_TIMEOUT is not set
+# CONFIG_TTYSIZE is not set
+# CONFIG_VOLNAME is not set
+# CONFIG_WALL is not set
+# CONFIG_WATCHDOG is not set
+
+#
+# Networking Utilities
+#
+# CONFIG_NAMEIF is not set
+# CONFIG_FEATURE_NAMEIF_EXTENDED is not set
+# CONFIG_NBDCLIENT is not set
+CONFIG_NC=y
+CONFIG_NC_SERVER=y
+CONFIG_NC_EXTRA=y
+# CONFIG_NC_110_COMPAT is not set
+CONFIG_PING=y
+CONFIG_PING6=y
+CONFIG_FEATURE_FANCY_PING=y
+# CONFIG_WHOIS is not set
+CONFIG_FEATURE_IPV6=y
+# CONFIG_FEATURE_UNIX_LOCAL is not set
+CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
+# CONFIG_VERBOSE_RESOLUTION_ERRORS is not set
+# CONFIG_ARP is not set
+# CONFIG_ARPING is not set
+# CONFIG_BRCTL is not set
+# CONFIG_FEATURE_BRCTL_FANCY is not set
+# CONFIG_FEATURE_BRCTL_SHOW is not set
+# CONFIG_DNSD is not set
+# CONFIG_ETHER_WAKE is not set
+# CONFIG_FAKEIDENTD is not set
+# CONFIG_FTPD is not set
+# CONFIG_FEATURE_FTP_WRITE is not set
+# CONFIG_FEATURE_FTPD_ACCEPT_BROKEN_LIST is not set
+# CONFIG_FTPGET is not set
+# CONFIG_FTPPUT is not set
+# CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS is not set
+CONFIG_HOSTNAME=y
+# CONFIG_HTTPD is not set
+# CONFIG_FEATURE_HTTPD_RANGES is not set
+# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set
+# CONFIG_FEATURE_HTTPD_SETUID is not set
+# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set
+# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
+# CONFIG_FEATURE_HTTPD_CGI is not set
+# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set
+# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
+# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set
+# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set
+# CONFIG_FEATURE_HTTPD_PROXY is not set
+# CONFIG_FEATURE_HTTPD_GZIP is not set
+CONFIG_IFCONFIG=y
+CONFIG_FEATURE_IFCONFIG_STATUS=y
+# CONFIG_FEATURE_IFCONFIG_SLIP is not set
+# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
+CONFIG_FEATURE_IFCONFIG_HW=y
+# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set
+# CONFIG_IFENSLAVE is not set
+# CONFIG_IFPLUGD is not set
+CONFIG_IFUPDOWN=y
+CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate"
+# CONFIG_FEATURE_IFUPDOWN_IP is not set
+# CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set
+CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y
+CONFIG_FEATURE_IFUPDOWN_IPV4=y
+CONFIG_FEATURE_IFUPDOWN_IPV6=y
+CONFIG_FEATURE_IFUPDOWN_MAPPING=y
+# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set
+# CONFIG_INETD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set
+# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set
+# CONFIG_FEATURE_INETD_RPC is not set
+CONFIG_IP=y
+CONFIG_FEATURE_IP_ADDRESS=y
+CONFIG_FEATURE_IP_LINK=y
+CONFIG_FEATURE_IP_ROUTE=y
+CONFIG_FEATURE_IP_TUNNEL=y
+# CONFIG_FEATURE_IP_RULE is not set
+# CONFIG_FEATURE_IP_SHORT_FORMS is not set
+# CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
+# CONFIG_IPADDR is not set
+# CONFIG_IPLINK is not set
+# CONFIG_IPROUTE is not set
+# CONFIG_IPTUNNEL is not set
+# CONFIG_IPRULE is not set
+# CONFIG_IPCALC is not set
+# CONFIG_FEATURE_IPCALC_FANCY is not set
+# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set
+CONFIG_NETSTAT=y
+CONFIG_FEATURE_NETSTAT_WIDE=y
+CONFIG_FEATURE_NETSTAT_PRG=y
+CONFIG_NSLOOKUP=y
+# CONFIG_NTPD is not set
+# CONFIG_FEATURE_NTPD_SERVER is not set
+# CONFIG_PSCAN is not set
+CONFIG_ROUTE=y
+# CONFIG_SLATTACH is not set
+# CONFIG_TCPSVD is not set
+CONFIG_TELNET=y
+# CONFIG_FEATURE_TELNET_TTYPE is not set
+CONFIG_FEATURE_TELNET_AUTOLOGIN=y
+# CONFIG_TELNETD is not set
+# CONFIG_FEATURE_TELNETD_STANDALONE is not set
+# CONFIG_FEATURE_TELNETD_INETD_WAIT is not set
+CONFIG_TFTP=y
+# CONFIG_TFTPD is not set
+
+#
+# Common options for tftp/tftpd
+#
+CONFIG_FEATURE_TFTP_GET=y
+CONFIG_FEATURE_TFTP_PUT=y
+CONFIG_FEATURE_TFTP_BLOCKSIZE=y
+CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
+# CONFIG_TFTP_DEBUG is not set
+CONFIG_TRACEROUTE=y
+CONFIG_TRACEROUTE6=y
+CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
+CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE=y
+CONFIG_FEATURE_TRACEROUTE_USE_ICMP=y
+CONFIG_TUNCTL=y
+CONFIG_FEATURE_TUNCTL_UG=y
+# CONFIG_UDHCPC6 is not set
+CONFIG_UDHCPD=y
+# CONFIG_DHCPRELAY is not set
+CONFIG_DUMPLEASES=y
+# CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set
+# CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set
+CONFIG_DHCPD_LEASES_FILE="/var/lib/misc/udhcpd.leases"
+CONFIG_UDHCPC=y
+CONFIG_FEATURE_UDHCPC_ARPING=y
+# CONFIG_FEATURE_UDHCP_PORT is not set
+CONFIG_UDHCP_DEBUG=0
+# CONFIG_FEATURE_UDHCP_RFC3397 is not set
+# CONFIG_FEATURE_UDHCP_8021Q is not set
+CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
+CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
+CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n"
+# CONFIG_UDPSVD is not set
+# CONFIG_VCONFIG is not set
+CONFIG_WGET=y
+CONFIG_FEATURE_WGET_STATUSBAR=y
+CONFIG_FEATURE_WGET_AUTHENTICATION=y
+CONFIG_FEATURE_WGET_LONG_OPTIONS=y
+CONFIG_FEATURE_WGET_TIMEOUT=y
+# CONFIG_ZCIP is not set
+
+#
+# Print Utilities
+#
+# CONFIG_LPD is not set
+# CONFIG_LPR is not set
+# CONFIG_LPQ is not set
+
+#
+# Mail Utilities
+#
+# CONFIG_MAKEMIME is not set
+CONFIG_FEATURE_MIME_CHARSET=""
+# CONFIG_POPMAILDIR is not set
+# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set
+# CONFIG_REFORMIME is not set
+# CONFIG_FEATURE_REFORMIME_COMPAT is not set
+# CONFIG_SENDMAIL is not set
+
+#
+# Process Utilities
+#
+# CONFIG_IOSTAT is not set
+# CONFIG_LSOF is not set
+# CONFIG_MPSTAT is not set
+# CONFIG_NMETER is not set
+# CONFIG_PMAP is not set
+# CONFIG_POWERTOP is not set
+# CONFIG_PSTREE is not set
+# CONFIG_PWDX is not set
+# CONFIG_SMEMCAP is not set
+CONFIG_UPTIME=y
+# CONFIG_FEATURE_UPTIME_UTMP_SUPPORT is not set
+CONFIG_FREE=y
+CONFIG_FUSER=y
+CONFIG_KILL=y
+CONFIG_KILLALL=y
+# CONFIG_KILLALL5 is not set
+# CONFIG_PGREP is not set
+CONFIG_PIDOF=y
+CONFIG_FEATURE_PIDOF_SINGLE=y
+CONFIG_FEATURE_PIDOF_OMIT=y
+# CONFIG_PKILL is not set
+CONFIG_PS=y
+CONFIG_FEATURE_PS_WIDE=y
+CONFIG_FEATURE_PS_LONG=y
+# CONFIG_FEATURE_PS_TIME is not set
+CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y
+# CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set
+CONFIG_RENICE=y
+CONFIG_BB_SYSCTL=y
+CONFIG_TOP=y
+CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
+CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
+# CONFIG_FEATURE_TOP_SMP_CPU is not set
+# CONFIG_FEATURE_TOP_DECIMALS is not set
+# CONFIG_FEATURE_TOP_SMP_PROCESS is not set
+# CONFIG_FEATURE_TOPMEM is not set
+# CONFIG_FEATURE_SHOW_THREADS is not set
+CONFIG_WATCH=y
+
+#
+# Runit Utilities
+#
+# CONFIG_RUNSV is not set
+# CONFIG_RUNSVDIR is not set
+# CONFIG_FEATURE_RUNSVDIR_LOG is not set
+# CONFIG_SV is not set
+CONFIG_SV_DEFAULT_SERVICE_DIR=""
+# CONFIG_SVLOGD is not set
+# CONFIG_CHPST is not set
+# CONFIG_SETUIDGID is not set
+# CONFIG_ENVUIDGID is not set
+# CONFIG_ENVDIR is not set
+# CONFIG_SOFTLIMIT is not set
+# CONFIG_CHCON is not set
+# CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set
+# CONFIG_GETENFORCE is not set
+# CONFIG_GETSEBOOL is not set
+# CONFIG_LOAD_POLICY is not set
+# CONFIG_MATCHPATHCON is not set
+# CONFIG_RESTORECON is not set
+# CONFIG_RUNCON is not set
+# CONFIG_FEATURE_RUNCON_LONG_OPTIONS is not set
+# CONFIG_SELINUXENABLED is not set
+# CONFIG_SETENFORCE is not set
+# CONFIG_SETFILES is not set
+# CONFIG_FEATURE_SETFILES_CHECK_OPTION is not set
+# CONFIG_SETSEBOOL is not set
+# CONFIG_SESTATUS is not set
+
+#
+# Shells
+#
+CONFIG_ASH=y
+CONFIG_ASH_BASH_COMPAT=y
+# CONFIG_ASH_IDLE_TIMEOUT is not set
+CONFIG_ASH_JOB_CONTROL=y
+CONFIG_ASH_ALIAS=y
+CONFIG_ASH_GETOPTS=y
+CONFIG_ASH_BUILTIN_ECHO=y
+CONFIG_ASH_BUILTIN_PRINTF=y
+CONFIG_ASH_BUILTIN_TEST=y
+# CONFIG_ASH_CMDCMD is not set
+# CONFIG_ASH_MAIL is not set
+CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
+# CONFIG_ASH_RANDOM_SUPPORT is not set
+CONFIG_ASH_EXPAND_PRMT=y
+# CONFIG_CTTYHACK is not set
+# CONFIG_HUSH is not set
+# CONFIG_HUSH_BASH_COMPAT is not set
+# CONFIG_HUSH_BRACE_EXPANSION is not set
+# CONFIG_HUSH_HELP is not set
+# CONFIG_HUSH_INTERACTIVE is not set
+# CONFIG_HUSH_SAVEHISTORY is not set
+# CONFIG_HUSH_JOB is not set
+# CONFIG_HUSH_TICK is not set
+# CONFIG_HUSH_IF is not set
+# CONFIG_HUSH_LOOPS is not set
+# CONFIG_HUSH_CASE is not set
+# CONFIG_HUSH_FUNCTIONS is not set
+# CONFIG_HUSH_LOCAL is not set
+# CONFIG_HUSH_RANDOM_SUPPORT is not set
+# CONFIG_HUSH_EXPORT_N is not set
+# CONFIG_HUSH_MODE_X is not set
+# CONFIG_MSH is not set
+CONFIG_FEATURE_SH_IS_ASH=y
+# CONFIG_FEATURE_SH_IS_HUSH is not set
+# CONFIG_FEATURE_SH_IS_NONE is not set
+# CONFIG_FEATURE_BASH_IS_ASH is not set
+# CONFIG_FEATURE_BASH_IS_HUSH is not set
+CONFIG_FEATURE_BASH_IS_NONE=y
+CONFIG_SH_MATH_SUPPORT=y
+CONFIG_SH_MATH_SUPPORT_64=y
+CONFIG_FEATURE_SH_EXTRA_QUIET=y
+# CONFIG_FEATURE_SH_STANDALONE is not set
+# CONFIG_FEATURE_SH_NOFORK is not set
+CONFIG_FEATURE_SH_HISTFILESIZE=y
+
+#
+# System Logging Utilities
+#
+CONFIG_SYSLOGD=y
+CONFIG_FEATURE_ROTATE_LOGFILE=y
+CONFIG_FEATURE_REMOTE_LOG=y
+CONFIG_FEATURE_SYSLOGD_DUP=y
+CONFIG_FEATURE_SYSLOGD_CFG=y
+CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
+CONFIG_FEATURE_IPC_SYSLOG=y
+CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=64
+CONFIG_LOGREAD=y
+CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y
+CONFIG_KLOGD=y
+CONFIG_FEATURE_KLOGD_KLOGCTL=y
+CONFIG_LOGGER=y
diff --git a/recipes-core/busybox/busybox_1.22.1.bbappend b/recipes-core/busybox/busybox_1.22.1.bbappend
new file mode 100644
index 0000000..b6f475d
--- /dev/null
+++ b/recipes-core/busybox/busybox_1.22.1.bbappend
@@ -0,0 +1,8 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:${THISDIR}/files:"
+
+SRC_URI += "file://udhcpd.conf.example"
+
+do_install_append () {
+ install -m 600 ${WORKDIR}/udhcpd.conf.example ${D}${sysconfdir}/udhcpd.conf.example
+ install -m 600 ${WORKDIR}/udhcpd.conf.example ${D}${sysconfdir}/udhcpd.conf
+}
diff --git a/recipes-core/busybox/files/udhcpd.conf.example b/recipes-core/busybox/files/udhcpd.conf.example
new file mode 100644
index 0000000..f72d672
--- /dev/null
+++ b/recipes-core/busybox/files/udhcpd.conf.example
@@ -0,0 +1,6 @@
+start 192.168.2.100
+end 192.168.2.254
+interface eth0
+option subnet 255.255.255.0
+option router 192.168.2.1
+option dns 8.8.8.8 # google's DNS server
diff --git a/recipes-core/images/mlinux-base-image.bb b/recipes-core/images/mlinux-base-image.bb
new file mode 100644
index 0000000..939b309
--- /dev/null
+++ b/recipes-core/images/mlinux-base-image.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "mLinux base image"
+LICENSE = "MIT"
+
+require mlinux-minimal-image.bb
+
+FILESYSTEM_FEATURES = "dosfstools \
+ cifs-utils \
+ lsof \
+ "
+
+NETWORKING_FEATURES += "bridge-utils \
+ inetutils-ftp \
+ openssl \
+ rsync \
+ iperf \
+ mii-diag \
+ tcpdump \
+ "
+
+WIFI_FEATURES = " \
+ libnl \
+ wpa-supplicant \
+ wireless-tools \
+ iw \
+ hostap-daemon hostap-utils \
+ "
+
+BLUETOOTH_FEATURES = "bluez4"
+
+# Add all timezones available
+# ntpdate will sync time every 30 min by default via cron
+TIME_FEATURES = "tzdata tzdata-africa tzdata-americas tzdata-antarctica tzdata-arctic \
+ tzdata-asia tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific \
+ tzdata-misc \
+ cronie \
+ ntpdate \
+ "
+
+# u-boot-linux-utils: U-Boot environment access from Linux
+# ocg-scripts: sample scripts for setting up OCG for various tasks
+# reset-handler: default reset button handler
+MULTITECH_FEATURES += " \
+ u-boot-linux-utils \
+ ocg-scripts \
+ reset-handler \
+ "
+
+MISC_FEATURES = "minicom lrzsz nano"
+
+# Extra stuff to install
+IMAGE_INSTALL += " \
+ ${WIFI_FEATURES} \
+ ${BLUETOOTH_FEATURES} \
+ ${FILESYSTEM_FEATURES} \
+ ${TIME_FEATURES} \
+ ${MISC_FEATURES} \
+ "
diff --git a/recipes-core/images/mlinux-factory-image.bb b/recipes-core/images/mlinux-factory-image.bb
new file mode 100644
index 0000000..a0d1ef4
--- /dev/null
+++ b/recipes-core/images/mlinux-factory-image.bb
@@ -0,0 +1,61 @@
+require mlinux-base-image.bb
+
+LIGHTTPD = "lighttpd \
+ lighttpd-module-cgi lighttpd-module-indexfile \
+ lighttpd-module-redirect lighttpd-module-auth \
+ lighttpd-module-access lighttpd-module-accesslog \
+ lighttpd-module-rewrite lighttpd-module-proxy lighttpd-module-fastcgi \
+ lighttpd-module-scgi lighttpd-module-alias \
+ lighttpd-module-dirlisting lighttpd-module-staticfile \
+ "
+
+# Lighttpd web server
+IMAGE_INSTALL += "${LIGHTTPD}"
+
+IMAGE_INSTALL += "sqlite3"
+
+IMAGE_INSTALL += "autossh"
+
+# Perl support
+IMAGE_INSTALL += "perl"
+IMAGE_INSTALL += "perl-module-io perl-module-fcntl"
+# not in meta-oe or oe-core...
+#IMAGE_INSTALL += "libdevice-serialport-perl"
+#IMAGE_INSTALL += "libexpect-perl"
+
+# Python support
+IMAGE_INSTALL += "python"
+IMAGE_INSTALL += "python-pyserial"
+IMAGE_INSTALL += "python-simplejson"
+IMAGE_INSTALL += "python-unixadmin"
+IMAGE_INSTALL += "python-textutils"
+IMAGE_INSTALL += "python-html"
+IMAGE_INSTALL += "python-sqlite3"
+
+# Ruby support
+IMAGE_INSTALL += "ruby"
+IMAGE_INSTALL += "ruby-sqlite3"
+IMAGE_INSTALL += "ruby-serialport"
+
+# OpenJDK Java runtime
+IMAGE_INSTALL += "openjdk-7-jre"
+# OpenJDK with JamVM VM (Multi-Tech default)
+IMAGE_INSTALL += "openjdk-7-vm-jamvm"
+# OpenJDK with CACAO VM (run with 'java -cacao')
+IMAGE_INSTALL += "openjdk-7-vm-cacao"
+# OpenJDK Zero VM (run with 'java -zero')
+IMAGE_INSTALL += "openjdk-7-vm-zero"
+
+# PHP support
+IMAGE_INSTALL += "php php-cli php-cgi"
+
+# Node.js support
+IMAGE_INSTALL += "nodejs"
+
+# Multi-Tech SMS Utility (see http://git.multitech.net)
+IMAGE_INSTALL += "sms-utils"
+# Multi-Tech GPS Utility
+IMAGE_INSTALL += "venus-gps"
+
+IMAGE_INSTALL += "uvccapture"
+
diff --git a/recipes-core/images/mlinux-minimal-image.bb b/recipes-core/images/mlinux-minimal-image.bb
new file mode 100644
index 0000000..522ee2a
--- /dev/null
+++ b/recipes-core/images/mlinux-minimal-image.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "mLinux minimal image"
+LICENSE = "MIT"
+
+inherit core-image
+inherit mlinux-image
+
+IMAGE_LINGUAS = ""
+IMAGE_FEATURES += "ssh-server-openssh package-management"
+
+CORE_FEATURES = "packagegroup-core-boot packagegroup-distro-base \
+ packagegroup-base-ext2 \
+ packagegroup-base-usbhost packagegroup-base-usbgadget \
+ udev-extraconf usb-gadget-mode \
+ sysfsutils module-init-tools kernel-modules \
+ bash procps mtd-utils mtd-utils-jffs2 \
+ openssh-sftp-server \
+ util-linux-mount util-linux-umount \
+ ${CORE_IMAGE_EXTRA_INSTALL} \
+ "
+
+NETWORKING_FEATURES = "ppp curl iproute2 \
+ iptables iputils \
+ "
+
+# mts-io: IO Controller for Multi-Tech hardware.
+# (LEDs, temp sensor, serial lines, and more)
+#
+# config: Handles default config files stored in /var/config.
+# /var/config is mounted on a separate flash partition so that config
+# files survive flashing of rootfs. See recipe for details.
+MULTITECH_FEATURES = "mts-io config mts-id-eeprom"
+
+UPGRADE_FEATURES = "upgrade-reboot mtd-utils-static"
+
+IMAGE_INSTALL = "${CORE_FEATURES} \
+ ${NETWORKING_FEATURES} \
+ ${UPGRADE_FEATURES} \
+ ${MULTITECH_FEATURES} \
+ "
+
diff --git a/recipes-core/images/mlinux-mono-image.bb b/recipes-core/images/mlinux-mono-image.bb
new file mode 100644
index 0000000..f15d7d2
--- /dev/null
+++ b/recipes-core/images/mlinux-mono-image.bb
@@ -0,0 +1,3 @@
+require mlinux-base-image.bb
+
+IMAGE_INSTALL += "mono mono-helloworld"
diff --git a/recipes-core/initscripts/initscripts-1.0/umountfs b/recipes-core/initscripts/initscripts-1.0/umountfs
new file mode 100644
index 0000000..1c9a9ce
--- /dev/null
+++ b/recipes-core/initscripts/initscripts-1.0/umountfs
@@ -0,0 +1,158 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides: umountfs
+# Required-Start:
+# Required-Stop:
+# Default-Start:
+# Default-Stop: 0 6
+# Short-Description: Turn off swap and unmount all local file systems.
+# Description:
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+umount_all() {
+ echo "Deactivating swap..."
+ swapoff -a
+
+ # We leave /proc mounted.
+ echo "Unmounting local filesystems..."
+ grep -q /mnt/ram /proc/mounts && mount -o remount,ro /mnt/ram
+ umount -f -a -r > /dev/null 2>&1
+
+ mount -o remount,ro /
+}
+
+blink_leds() {
+ leds=/sys/class/leds/*
+ nleds=$(echo $leds | wc -w)
+
+ # turn LEDs off
+ for led in $leds; do
+ echo "timer" > $led/trigger
+ echo 0 > $led/delay_off
+ done
+
+ int=200
+ total=$(( int * (nleds+1) ))
+ on=$(( total - int ))
+ off=$(( total - on ))
+
+ # make a pattern
+ for led in $leds; do
+ echo "$on" > $led/delay_on
+ echo "$off" > $led/delay_off
+ on=$(( on - int ))
+ off=$(( total - on ))
+ done
+}
+
+flash_upgrade() {
+ if [ $# -ne 1 ]; then
+ echo "need to specify flash-root"
+ return
+ fi
+ # flash_root must be a mountpoint that is not the rootfs and be mounted rw
+ local flash_root=${1}
+
+ local flash_dir=${flash_root}/flash-upgrade
+ local uImage_file=${flash_dir}/uImage.bin
+ local rootfs_file=${flash_dir}/rootfs.jffs2
+
+ local reboot_cmd=/usr/sbin/upgrade-reboot
+ local nandwrite_cmd=/usr/bin/nandwrite.static
+ local mode=
+ local uImage_mtd=
+ local rootfs_mtd=
+
+ if [ ! -d "${flash_dir}" ]; then
+ echo "${flash_dir} not present, skipping"
+ return
+ fi
+
+ if ! mountpoint -q "${flash_root}"; then
+ echo "${flash_root} is not a mountpoint"
+ return
+ fi
+
+ mode=$(grep "${flash_root}" /proc/mounts | cut -d ' ' -f 4 | cut -d ',' -f 1)
+ if [ "${mode}" != "rw" ]; then
+ echo "${flash_root} is not mounted rw"
+ return
+ fi
+
+ if [ ! -x "${reboot_cmd}" ]; then
+ echo "${reboot_cmd} is not installed"
+ return
+ fi
+
+ if [ ! -x "${nandwrite_cmd}" ]; then
+ echo "${nandwrite_cmd} is not installed"
+ return
+ fi
+
+ uImage_mtd="/dev/$(cat /proc/mtd | grep uImage | cut -d : -f 1)"
+ if [ ! -c "${uImage_mtd}" ]; then
+ echo "No valid MTD partition is labeled uImage"
+ return
+ fi
+
+ rootfs_mtd="/dev/$(cat /proc/mtd | grep Rootfs | cut -d : -f 1)"
+ if [ ! -c "${rootfs_mtd}" ]; then
+ echo "No valid MTD partition is labeled Rootfs"
+ return
+ fi
+
+ echo ""
+ echo "Starting flash upgrade from ${flash_dir}..."
+
+ blink_leds
+
+ if [ -f ${uImage_file} ]; then
+ echo "Flashing ${uImage_mtd} (uImage) with ${uImage_file}..."
+
+ flash_erase ${uImage_mtd} 0 0
+ nandwrite -p ${uImage_mtd} ${uImage_file}
+ else
+ echo "uImage file ${uImage_file} not found"
+ fi
+
+ if [ -f ${rootfs_file} ]; then
+ echo "Flashing ${rootfs_mtd} (rootfs) with ${rootfs_file}..."
+
+ cp ${reboot_cmd} ${flash_dir}/upgrade-reboot
+ cp ${nandwrite_cmd} ${flash_dir}/nandwrite.static
+
+ sync
+ sleep 2
+ mount -o remount,ro ${flash_root}
+
+ # flash_root is not going to be umounted
+ sed -i -e "\\|${flash_root}| d" /etc/mtab
+
+ umount_all
+
+ flash_erase -j ${rootfs_mtd} 0 0
+ ${flash_dir}/nandwrite.static -p ${rootfs_mtd} ${rootfs_file}
+
+ echo "Rebooting..."
+
+ ${flash_dir}/upgrade-reboot
+
+ # Should not get here normally
+ echo "upgrade-reboot failed"
+ exit 1
+ else
+ echo "rootfs file ${rootfs_file} not found"
+ fi
+}
+
+# do flash on reboot if do_flash_upgrade exists
+if [ -f /var/volatile/do_flash_upgrade ]; then
+ flash_upgrade /var/volatile
+ flash_upgrade /media/card
+fi
+
+umount_all
+
+: exit 0
diff --git a/recipes-core/initscripts/initscripts_1.0.bbappend b/recipes-core/initscripts/initscripts_1.0.bbappend
new file mode 100644
index 0000000..d00d5f5
--- /dev/null
+++ b/recipes-core/initscripts/initscripts_1.0.bbappend
@@ -0,0 +1,4 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
+
+# flash on reboot/umountfs needs regular umount (not busybox)
+RDEPENDS_${PN} += "util-linux-umount util-linux-mount bash"
diff --git a/recipes-core/multitech/config/config.init b/recipes-core/multitech/config/config.init
new file mode 100644
index 0000000..874416c
--- /dev/null
+++ b/recipes-core/multitech/config/config.init
@@ -0,0 +1,105 @@
+#!/bin/sh
+
+CONFIG_MTDC=/dev/mtd6
+CONFIG_MTDB=/dev/mtdblock6
+CONFIG_DIR=/var/config
+
+OEM_MTDC=/dev/mtd7
+OEM_MTDB=/dev/mtdblock7
+OEM_DIR=/var/oem
+
+FILES="network/interfaces \
+ppp/options \
+ppp/pap-secrets \
+ppp/chap-secrets \
+ppp/peers \
+"
+
+mount_config() {
+ echo "Mounting ${CONFIG_DIR}"
+ mkdir -p ${CONFIG_DIR}
+ mount ${CONFIG_DIR}
+
+ # Prepare flash for JFFS2 if mount fails
+ if [ $? -ne 0 ]; then
+ echo "Creating ${CONFIG_DIR}"
+ flash_erase -j ${CONFIG_MTDC} 0 0
+ mount ${CONFIG_DIR}
+ fi
+}
+
+mount_oem() {
+ echo "Mounting ${OEM_DIR}"
+ mkdir -p ${OEM_DIR}
+ mount ${OEM_DIR}
+
+ # Prepare flash for JFFS2 if mount fails
+ if [ $? -ne 0 ]; then
+ echo "Creating ${OEM_DIR}"
+ flash_erase -j ${OEM_MTDC} 0 0
+ mount ${OEM_DIR}
+ fi
+}
+
+case $1 in
+ start)
+ # mount config if not already mounted
+ if ! grep -q "^${CONFIG_MTDB} " /proc/mounts; then
+ mount_config
+ else
+ echo "$CONFIG_DIR already mounted"
+ fi
+
+ # mount oem if specified in /etc/fstab and it isn't already mounted
+ if grep -qE "^${OEM_MTDB}\s+${OEM_DIR}\s+" /etc/fstab; then
+ if ! grep -q "^${OEM_MTDB} " /proc/mounts; then
+ mount_oem
+ else
+ echo "$OEM_DIR already mounted"
+ fi
+ fi
+
+ # Default all config files if requested
+ cd ${CONFIG_DIR}
+ if [ -f force_defaults ]; then
+ echo "Extracting default config files"
+ tar -xvf /etc/defaults.tar.gz
+
+ if [ -f /etc/default_pass ]; then
+ echo "Defaulting root password"
+ PASSHASH=`cat /etc/default_pass`
+ PASSFILE=/etc/shadow
+ if [ ! -e /etc/shadow ]; then
+ PASSFILE=/etc/passwd
+ fi
+ sed -i "s%^root:[^:]*:%root:${PASSHASH}:%" $PASSFILE
+ fi
+
+ rm -f force_defaults
+ fi
+
+ # Extract any missing files
+ TARFILES=`tar -tf /etc/defaults.tar.gz`
+ for file in $TARFILES; do
+ if [ ! -e $file ]; then
+ tar -xvf /etc/defaults.tar.gz $file
+ fi
+ done
+
+ # Create links in /etc
+ for file in $FILES; do
+ if [ ! -L /etc/$file ]; then
+ echo "Creating link to ${CONFIG_DIR}/$file"
+ rm -rf /etc/$file
+ ln -sf ${CONFIG_DIR}/$file /etc/$file
+ fi
+ done
+
+ ;;
+
+ *)
+ echo "Usage: $0 {start}"
+ exit 2
+ ;;
+
+esac
diff --git a/recipes-core/multitech/config/network/interfaces b/recipes-core/multitech/config/network/interfaces
new file mode 100644
index 0000000..546fd29
--- /dev/null
+++ b/recipes-core/multitech/config/network/interfaces
@@ -0,0 +1,29 @@
+# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)
+
+# The loopback interface
+auto lo
+iface lo inet loopback
+
+# Wired interface
+auto eth0
+iface eth0 inet static
+address 192.168.2.1
+netmask 255.255.255.0
+
+# Bridge interface with eth0 (comment out eth0 lines above to use with bridge)
+# iface eth0 inet manual
+#
+# auto br0
+# iface br0 inet static
+# bridge_ports eth0
+# address 192.168.2.1
+# netmask 255.255.255.0
+
+# Wifi client
+# NOTE: udev rules will bring up wlan0 automatically if a wifi device is detected
+# and the wlan0 interface is defined, therefore an "auto wlan0" line is not needed.
+# If "auto wlan0" is also specified, startup conflicts may result.
+#iface wlan0 inet dhcp
+#wpa-conf /var/config/wpa_supplicant.conf
+#wpa-driver nl80211
+
diff --git a/recipes-core/multitech/config/ppp/chap-secrets b/recipes-core/multitech/config/ppp/chap-secrets
new file mode 100644
index 0000000..60efe8f
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/chap-secrets
@@ -0,0 +1,3 @@
+# Secrets for authentication using CHAP
+# client server secret IP addresses
+* * "" *
diff --git a/recipes-core/multitech/config/ppp/options b/recipes-core/multitech/config/ppp/options
new file mode 100644
index 0000000..34654c1
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/options
@@ -0,0 +1,22 @@
+# Select tty device
+#
+# First modem AT command port (symlink to actual device)
+/dev/modem_at0
+
+# Uncomment below to run in foreground
+#nodetach
+
+# Uncomment below to emit debug
+#debug
+
+# Uncomment to keep pppd up if the connection terminates
+#persist
+# Uncomment for unlimited connection attempts
+#maxfail 0
+
+# disable logging to /etc/ppp/connect-errors
+# and only log to syslog
+logfile /dev/null
+
+lock
+
diff --git a/recipes-core/multitech/config/ppp/pap-secrets b/recipes-core/multitech/config/ppp/pap-secrets
new file mode 100644
index 0000000..f782b4a
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/pap-secrets
@@ -0,0 +1,3 @@
+# Secrets for authentication using PAP
+# client server secret IP addresses
+* * "" *
diff --git a/recipes-core/multitech/config/ppp/peers/cdma b/recipes-core/multitech/config/ppp/peers/cdma
new file mode 100644
index 0000000..3fc231f
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/peers/cdma
@@ -0,0 +1,9 @@
+linkname ppp0
+230400
+defaultroute
+replacedefaultroute
+usepeerdns
+noauth
+crtscts
+novj
+connect '/usr/sbin/chat -v -t 90 -f /etc/ppp/peers/cdma_chat'
diff --git a/recipes-core/multitech/config/ppp/peers/cdma_chat b/recipes-core/multitech/config/ppp/peers/cdma_chat
new file mode 100644
index 0000000..6ff750e
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/peers/cdma_chat
@@ -0,0 +1,18 @@
+SAY "CDMA chat\n"
+ECHO OFF
+ABORT 'NO DIAL TONE'
+ABORT 'NO DIALTONE'
+ABORT 'NO ANSWER'
+ABORT 'NO CARRIER'
+ABORT 'DELAYED'
+ABORT 'VOICE'
+ABORT 'BUSY'
+'' 'AT'
+OK 'ATZ'
+OK 'AT+CSQ'
+SAY "Dialing...\n"
+OK 'ATD#777'
+SAY "Waiting for CONNECT...\n"
+TIMEOUT 120
+CONNECT ''
+SAY "Connected\n"
diff --git a/recipes-core/multitech/config/ppp/peers/gsm b/recipes-core/multitech/config/ppp/peers/gsm
new file mode 100644
index 0000000..d23957e
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/peers/gsm
@@ -0,0 +1,11 @@
+linkname ppp0
+230400
+defaultroute
+replacedefaultroute
+usepeerdns
+ipcp-max-failure 10
+ipcp-restart 10
+noauth
+crtscts
+novj
+connect '/usr/sbin/chat -v -t 90 -f /etc/ppp/peers/gsm_chat'
diff --git a/recipes-core/multitech/config/ppp/peers/gsm_chat b/recipes-core/multitech/config/ppp/peers/gsm_chat
new file mode 100644
index 0000000..5e18e05
--- /dev/null
+++ b/recipes-core/multitech/config/ppp/peers/gsm_chat
@@ -0,0 +1,26 @@
+SAY "GSM chat\n"
+ECHO OFF
+ABORT 'NO DIAL TONE'
+ABORT 'NO DIALTONE'
+ABORT 'NO ANSWER'
+ABORT 'NO CARRIER'
+ABORT 'DELAYED'
+ABORT 'VOICE'
+ABORT 'BUSY'
+'' 'AT'
+OK 'ATZ'
+OK 'AT+CSQ'
+# ----------------------------------
+# Set the APN for your provider here
+# ----------------------------------
+#OK 'AT+CGDCONT=1,"IP","proxy"'
+#OK 'AT+CGDCONT=1,"IP","ISP.CINGULAR"'
+#OK 'AT+CGDCONT=1,"IP","internet2.voicestream.com"'
+OK 'AT+CGDCONT=1,"IP","internet"'
+SAY "Dialing...\n"
+#OK 'ATD*99#'
+OK 'ATD*99***1#'
+SAY "Waiting for CONNECT...\n"
+TIMEOUT 120
+CONNECT ''
+SAY "Connected\n"
diff --git a/recipes-core/multitech/config_1.0.bb b/recipes-core/multitech/config_1.0.bb
new file mode 100644
index 0000000..149946d
--- /dev/null
+++ b/recipes-core/multitech/config_1.0.bb
@@ -0,0 +1,40 @@
+DESCRIPTION = "Provides default system config files and /var/config fs"
+SECTION = "base"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+PR = "r4"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "config"
+INITSCRIPT_PARAMS = "start 31 S ."
+
+SRC_URI = "\
+ file://network \
+ file://ppp \
+ file://config.init \
+"
+
+CONFIGFILES = "network ppp"
+
+fakeroot do_install () {
+ cd ${WORKDIR}
+
+ # default config files
+ rm -f defaults.tar.gz
+ chown root:root -R ${CONFIGFILES}
+ tar czf defaults.tar.gz ${CONFIGFILES}
+ install -d ${D}${sysconfdir}
+ install -m 0644 ${WORKDIR}/defaults.tar.gz ${D}${sysconfdir}/defaults.tar.gz
+
+ # save root password for resetting to defaults
+ echo -n "${ROOT_PASSWORD_HASH}" > ${D}${sysconfdir}/default_pass
+ chmod 400 ${D}${sysconfdir}/default_pass
+
+ # init script
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/config.init ${D}${sysconfdir}/init.d/config
+}
+
+FILES_${PN} = "${sysconfdir}/defaults.tar.gz ${sysconfdir}/default_pass"
+FILES_${PN} += "${sysconfdir}/init.d/config"
diff --git a/recipes-core/multitech/mlinux-version.bb b/recipes-core/multitech/mlinux-version.bb
new file mode 100644
index 0000000..f2debe1
--- /dev/null
+++ b/recipes-core/multitech/mlinux-version.bb
@@ -0,0 +1,22 @@
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit mlinux_metadata_scm
+
+# always parse this file so PV can change automatically
+__BB_DONT_CACHE = "1"
+
+PV = "${DISTRO_VERSION}_${MLINUX_METADATA_REVISION}"
+PR = "r2"
+PE = "1"
+
+PACKAGES = "${PN}"
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+do_install() {
+ mkdir -p ${D}${sysconfdir}
+ echo "mLinux ${DISTRO_VERSION}" > ${D}${sysconfdir}/mlinux-version
+ echo "Built from branch: ${MLINUX_METADATA_BRANCH}" >> ${D}${sysconfdir}/mlinux-version
+ echo "Revision: ${MLINUX_METADATA_REVISION}" >> ${D}${sysconfdir}/mlinux-version
+ echo "${MLINUX_LAYERS}" > ${D}${sysconfdir}/mlinux-layers
+}
diff --git a/recipes-core/multitech/reset-handler/reset-handler.default b/recipes-core/multitech/reset-handler/reset-handler.default
new file mode 100644
index 0000000..71b3e24
--- /dev/null
+++ b/recipes-core/multitech/reset-handler/reset-handler.default
@@ -0,0 +1,2 @@
+# set to "no" to disable reset-handler starting on boot
+ENABLED="yes"
diff --git a/recipes-core/multitech/reset-handler/reset-handler.init b/recipes-core/multitech/reset-handler/reset-handler.init
new file mode 100644
index 0000000..b50e7b8
--- /dev/null
+++ b/recipes-core/multitech/reset-handler/reset-handler.init
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+DAEMON=/usr/sbin/reset-handler
+PIDFILE=/var/run/reset-handler.pid
+ENABLED="yes"
+
+[ -r /etc/default/reset-handler ] && . /etc/default/reset-handler
+[ -x $DAEMON ] || exit 0
+[ "$ENABLED" = "yes" ] || exit 0
+
+case "$1" in
+ start)
+ if [ -f $PIDFILE ]; then
+ echo "reset-handler pid file exists, not starting"
+ exit 1
+ else
+ echo "Starting reset-handler"
+ start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON
+ fi
+ ;;
+ stop)
+ echo "Stopping reset-handler"
+ start-stop-daemon --stop --oknodo --pidfile $PIDFILE
+ rm -f $PIDFILE
+ ;;
+ *)
+ echo "Usage: $0 {start|stop}"
+ exit 2
+ ;;
+esac
diff --git a/recipes-core/multitech/reset-handler/reset-handler.sh b/recipes-core/multitech/reset-handler/reset-handler.sh
new file mode 100755
index 0000000..62eeda8
--- /dev/null
+++ b/recipes-core/multitech/reset-handler/reset-handler.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+name="reset-handler"
+log="logger -t $name -s"
+pid="$$"
+
+short_signal=10 # SIGUSR1
+long_signal=12 # SIGUSR2
+extralong_signal=1 # SIGHUP
+
+do_reboot() {
+ $log "Rebooting on button press"
+ sleep 1
+ reboot
+}
+
+do_restore_defaults() {
+ $log "Setting restore defaults on reboot"
+ touch /var/config/force_defaults
+ $log "Rebooting"
+ sleep 1
+ reboot
+}
+
+log_exit() {
+ $log "Exiting on SIGTERM"
+ exit 0
+}
+
+idle_wait() {
+ pipe=/var/tmp/$name.fifo
+ rm -f $pipe
+ mkfifo -m 400 $pipe
+
+ # sneaky way to do nothing forever
+ while true; do
+ read < $pipe
+ done
+}
+
+trap do_reboot $short_signal
+trap do_restore_defaults $long_signal
+trap do_restore_defaults $extralong_signal
+trap log_exit TERM
+
+$log "Enabling reset-monitor for pid $pid"
+mts-io-sysfs store reset-monitor "$pid $short_signal $long_signal $extralong_signal"
+# set long press to 5 seconds for reset to defaults
+mts-io-sysfs store reset-monitor-intervals "5 30"
+
+# wait for signals
+idle_wait
diff --git a/recipes-core/multitech/reset-handler_1.0.bb b/recipes-core/multitech/reset-handler_1.0.bb
new file mode 100644
index 0000000..4342bdd
--- /dev/null
+++ b/recipes-core/multitech/reset-handler_1.0.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "Default reset button handler"
+SECTION = "base"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+PR = "r0"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "reset-handler"
+INITSCRIPT_PARAMS = "start 99 2 3 4 5 ."
+CONFFILES_${PN} = "${sysconfdir}/default/reset-handler"
+
+SRC_URI = "\
+ file://reset-handler.sh \
+ file://reset-handler.init \
+ file://reset-handler.default \
+"
+
+do_install () {
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/reset-handler.sh ${D}${sbindir}/reset-handler
+
+ # init script
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/reset-handler.init ${D}${sysconfdir}/init.d/reset-handler
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/reset-handler.default ${D}${sysconfdir}/default/reset-handler
+}
diff --git a/recipes-core/multitech/upgrade-reboot_1.0.0.bb b/recipes-core/multitech/upgrade-reboot_1.0.0.bb
new file mode 100644
index 0000000..c506db3
--- /dev/null
+++ b/recipes-core/multitech/upgrade-reboot_1.0.0.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Reboot command to run after firmware upgrade"
+HOMEPAGE = "http://www.multitech.net/"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+PR = "r0"
+
+# tag 1.0.0
+SRCREV = "6b917d88f41a4694a85b86cd047e10ddbd8c691f"
+
+SRC_URI = "git://git.multitech.net/upgrade-reboot.git;protocol=git"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
diff --git a/recipes-core/ocg-scripts/ocg-scripts-1.0.inc b/recipes-core/ocg-scripts/ocg-scripts-1.0.inc
new file mode 100644
index 0000000..a017f91
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts-1.0.inc
@@ -0,0 +1,18 @@
+HOMEPAGE = "www.multitech.net"
+PRIORITY = "optional"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://ocg-wifi-ap \
+ file://ocg-dhcpd \
+ file://ocg-set-apn \
+ file://ocg-cell-router"
+
+
+do_install() {
+ install -d ${D}${sbindir} ${D}${sbindir}
+ install -m 755 ${WORKDIR}/ocg-wifi-ap ${D}${sbindir}
+ install -m 755 ${WORKDIR}/ocg-dhcpd ${D}${sbindir}
+ install -m 755 ${WORKDIR}/ocg-set-apn ${D}${sbindir}
+ install -m 755 ${WORKDIR}/ocg-cell-router ${D}${sbindir}
+}
diff --git a/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-cell-router b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-cell-router
new file mode 100755
index 0000000..1607c32
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-cell-router
@@ -0,0 +1,147 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+set -e
+
+do_start() {
+ lan_interfaces=$(echo "$lan" | sed "s/,/ /g")
+
+ echo "Configuring firewall rules..."
+ # Flush all the tables first
+ iptables -t filter -F
+ iptables -t nat -F
+ iptables -t mangle -F
+
+ # Drop all incoming packets by default
+ iptables -t filter -P INPUT DROP
+ # Accept all on local loopback
+ iptables -t filter -A INPUT -i lo -j ACCEPT
+ # Allow packets in for existing socket connections
+ iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+
+ # Accept all from LAN interfaces
+ for i in $lan_interfaces; do
+ iptables -t filter -A INPUT -i $i -j ACCEPT
+
+ # Accept ssh from the LAN (Wired)
+ #iptables -t filter -A INPUT -i $i -p tcp --dport 22 -j ACCEPT
+ # Accept http from the LAN (Wired)
+ #iptables -t filter -A INPUT -i $i -p tcp --dport 80 -j ACCEPT
+ # Accept tftp from the LAN (Wired)
+ #iptables -t filter -A INPUT -i $i -p udp --dport 69 -j ACCEPT
+ done
+
+ # Accept ssh from the WAN (Wireless)
+ #iptables -t filter -A INPUT -i $wan -p tcp --dport 22 -j ACCEPT
+ # Accept http from the WAN (Wireless)
+ #iptables -t filter -A INPUT -i $wan -p tcp --dport 80 -j ACCEPT
+
+ # Allow packet fowarding from LAN interfaces to WAN (cell router)
+ iptables -t filter -P FORWARD DROP
+ iptables -t filter -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
+ for i in $lan_interfaces; do
+ iptables -t filter -A FORWARD -i $i -o $wan -j ACCEPT
+ done
+
+ # Allow all output packets
+ iptables -t filter -P OUTPUT ACCEPT
+
+ # enable NAT for cell router
+ iptables -t nat -A POSTROUTING -o $wan -j MASQUERADE
+
+ echo "Enabling packet forwarding..."
+ # turn on packet forwarding last
+ echo 1 > /proc/sys/net/ipv4/ip_forward
+ echo "Done"
+}
+
+do_stop() {
+ echo "Clearing firewall rules..."
+ # clear all tables
+ iptables -t filter -F
+ iptables -t nat -F
+ iptables -t mangle -F
+ # reset policies to ACCEPT
+ iptables -t filter -P INPUT ACCEPT
+ iptables -t filter -P OUTPUT ACCEPT
+ iptables -t filter -P FORWARD ACCEPT
+
+ # turn off packet forwarding
+ echo "Disabling packet forwarding..."
+ echo 0 > /proc/sys/net/ipv4/ip_forward
+ echo "Done"
+}
+
+usage() {
+ echo "Usage: $(basename $0) start|stop [options]"
+ echo " options:"
+ echo " -l <lan-interfaces> LAN interfaces to allow, comma-separated (defaults to \"eth0\")"
+ echo " -w <wan-interface> WAN interface to route out (defaults to \"ppp0\")"
+ exit 1
+}
+
+# main
+if [[ $# < 1 ]]; then
+ usage
+fi
+
+cmd=$1
+shift
+
+while getopts "l:w:h" opt; do
+ case "$opt" in
+ l)
+ l=$OPTARG
+ ;;
+ w)
+ w=$OPTARG
+ ;;
+ h)
+ usage
+ ;;
+ *)
+ usage
+ ;;
+ esac
+done
+
+# default lan to eth0 if not specified
+lan=${l-eth0}
+# default wan to ppp0 if not specified
+wan=${w-ppp0}
+
+case $cmd in
+ start)
+ echo "LAN: $lan"
+ echo "WAN: $wan"
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ *)
+ usage
+ ;;
+esac
+
+exit 0
+
diff --git a/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-dhcpd b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-dhcpd
new file mode 100755
index 0000000..976b138
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-dhcpd
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+do_start() {
+ echo "starting dhcp daemon"
+ udhcpd -S /etc/udhcpd.conf
+}
+
+do_stop() {
+ echo "stopping dhcp daemon"
+ killall udhcpd
+}
+
+usage() {
+ echo "Usage: $(basename $0) start|stop|restart"
+ exit 1
+}
+
+# main
+if [[ $# != 1 ]]; then
+ usage
+fi
+
+case $1 in
+ start)
+ if [[ ! -f "/etc/udhcpd.conf" ]]
+ then
+ echo "/etc/udhcpd.conf does not exist"
+ exit 1
+ fi
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ restart)
+ do_stop
+ sleep 1
+ do_start
+ ;;
+ *)
+ usage
+ ;;
+esac
+
+exit 0
diff --git a/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-set-apn b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-set-apn
new file mode 100755
index 0000000..371ba7e
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-set-apn
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+if [[ $# != 1 ]]; then
+ echo "Usage: $(basename $0) APN"
+ exit 1
+fi
+
+apn=$1
+chat_file=/etc/ppp/peers/gsm_chat
+
+sed -r -i "s/^OK\s+'AT\+CGDCONT=1,\"IP\",\"[^\"]*\"'$/OK 'AT\+CGDCONT=1,\"IP\",\"${apn}\"'/" $chat_file
+
+if [[ $? != 0 ]]; then
+ echo "Failed to change APN"
+ exit 1
+else
+ echo "Set APN to \"${apn}\" in $chat_file"
+fi
+
+exit 0
diff --git a/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-wifi-ap b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-wifi-ap
new file mode 100755
index 0000000..b0bc7ec
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts-1.0/ocg-wifi-ap
@@ -0,0 +1,165 @@
+#!/bin/bash
+
+# Copyright (C) 2014 Multi-Tech Systems
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+dhcpd_file=/etc/udhcpd.conf
+hostapd_file=/etc/hostapd.conf
+interface=wlan0
+bridge_mode=0
+
+do_start() {
+ if [ "$bridge_mode" = 1 ]; then
+ interface=$b
+ if ! grep -E -q "^bridge=$interface\s*$" $hostapd_file; then
+ echo "Enabling bridge=br0 in $hostapd_file"
+ sed -r -i "s/^#?bridge=.*$/bridge=$interface/" $hostapd_file
+ fi
+ else
+ if grep -E -q "^bridge=.*$" $hostapd_file; then
+ echo "Disabling bridge in $hostapd_file"
+ sed -r -i "s/^bridge=/#bridge=/" $hostapd_file
+ fi
+ fi
+
+ echo "Starting hostap daemon"
+ /etc/init.d/hostapd start
+
+ if [ "$bridge_mode" != 1 ]; then
+ echo "Setting IP address to $ip"
+ ifconfig $interface $ip
+ # strip off end of IP address to get subnet
+ # assumes subnet of /24
+ subnet=${ip%.*}
+ # escape periods for regex
+ subnet_regex=${subnet//./\\.}
+ ip_regex=${ip//./\\.}
+ # set default address range for dhcpd
+ addr_start=100
+ addr_end=254
+ if ! grep -E -q "^start\s+$subnet_regex\." $dhcpd_file; then
+ echo "Changing dhcpd start to $subnet.$addr_start"
+ sed -r -i "s/^start\s+.*$/start $subnet.$addr_start/" $dhcpd_file
+ fi
+ if ! grep -E -q "^end\s+$subnet_regex\." $dhcpd_file; then
+ echo "Changing dhcpd end to $subnet.$addr_end"
+ sed -r -i "s/^end\s+.*$/end $subnet.$addr_end/" $dhcpd_file
+ fi
+ # update dhcpd addresses if needed
+ if ! grep -E -q "^option\s+router\s+$ip_regex" $dhcpd_file; then
+ echo "Changing dhcpd router to $ip"
+ sed -r -i "s/^option\s+router\s+.*$/option router $ip/" $dhcpd_file
+ fi
+ else
+ # unset ip address for bridge mode
+ ifconfig wlan0 0.0.0.0
+ fi
+
+ if ! grep -E -q "^interface\s+$interface" $dhcpd_file; then
+ echo "Changing dhcpd interface to $interface"
+ sed -r -i "s/^interface\s+.*$/interface $interface/" $dhcpd_file
+ fi
+ ocg-dhcpd start
+}
+
+do_stop() {
+ echo "Stopping hostap daemon"
+ /etc/init.d/hostapd stop
+ ocg-dhcpd stop
+}
+
+usage() {
+ echo "Usage: $(basename $0) start|stop|restart [options]"
+ echo " options:"
+ echo " -a <address> Sets AP IP address (defaults to 192.168.3.1)"
+ echo " -b <interface> Add AP to specified bridge interface (conflicts with -a)"
+ exit 1
+}
+
+# main
+if [[ $# < 1 ]]; then
+ usage
+fi
+
+cmd=$1
+shift
+
+while getopts "a:b:h" opt; do
+ case "$opt" in
+ a)
+ a=$OPTARG
+ ;;
+ b)
+ b=$OPTARG
+ bridge_mode=1
+ ;;
+ h)
+ usage
+ ;;
+ *)
+ usage
+ ;;
+ esac
+done
+
+# can't specify both address and bridge mode
+if [ -n "$a" ] && [ -n "$b" ]; then
+ usage
+fi
+
+if [ -n "$a" ]; then
+ ret=1
+ if [[ $a =~ ^([0-9]{1,3}\.){3,3}[0-9]{1,3}$ ]]
+ then
+ OIFS=$IFS
+ IFS='.'
+ ip=($a)
+ IFS=$OFIS
+ [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
+ ret=$?
+ fi
+ if [[ ret -ne 0 ]]
+ then
+ echo "invalid IP address"
+ exit 1
+ fi
+ ip=$a
+else
+ ip="192.168.3.1"
+fi
+
+case $cmd in
+ start)
+ do_start
+ ;;
+ stop)
+ do_stop
+ ;;
+ restart)
+ do_stop
+ sleep 1
+ do_start
+ ;;
+ *)
+ usage
+ ;;
+esac
+
+exit 0
diff --git a/recipes-core/ocg-scripts/ocg-scripts_1.0.bb b/recipes-core/ocg-scripts/ocg-scripts_1.0.bb
new file mode 100644
index 0000000..fc2fc02
--- /dev/null
+++ b/recipes-core/ocg-scripts/ocg-scripts_1.0.bb
@@ -0,0 +1,7 @@
+DESCRIPTION = "Scripts to easily get started with common OCG use cases"
+
+require ocg-scripts-1.0.inc
+
+PR = "r3"
+
+S = "${WORKDIR}/ocg-scripts-${PV}"
diff --git a/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bbappend b/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bbappend
new file mode 100644
index 0000000..6c79846
--- /dev/null
+++ b/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bbappend
@@ -0,0 +1,2 @@
+# enable gadget serial console for supported hardware
+SERIAL_CONSOLES_append_mtcdt = " 115200;ttyGS0"
diff --git a/recipes-core/udev/udev-182/cellular_radios.rules b/recipes-core/udev/udev-182/cellular_radios.rules
new file mode 100644
index 0000000..81271ac
--- /dev/null
+++ b/recipes-core/udev/udev-182/cellular_radios.rules
@@ -0,0 +1,47 @@
+ACTION=="remove", GOTO="mlinux_end"
+SUBSYSTEM!="tty", GOTO="mlinux_end"
+KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="mlinux_end"
+
+SUBSYSTEMS=="usb", ENV{ID_IFACE}="$attr{bInterfaceNumber}"
+ENV{ID_IFACE}=="", GOTO="mlinux_end"
+
+# All modem ports
+# H5
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="02", SYMLINK+="modem1"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="04", SYMLINK+="modem2"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="06", SYMLINK+="modem3"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="08", SYMLINK+="modem4"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="0a", SYMLINK+="modem5"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="0c", SYMLINK+="modem6"
+# EV3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="01", SYMLINK+="modem1"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="02", SYMLINK+="modem2"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="03", SYMLINK+="modem3"
+# H4
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="01", SYMLINK+="modem1"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="02", SYMLINK+="modem2"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="03", SYMLINK+="modem3"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="04", SYMLINK+="modem4"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="05", SYMLINK+="modem5"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="06", SYMLINK+="modem6"
+# EV2
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="modem$env{ID_PORT}"
+
+# AT Command ports
+# H5: ttyACM0, ttyACM3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="00", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="06", SYMLINK+="modem_at1"
+# EV3: ttyUSB2, ttyUSB3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="02", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="03", SYMLINK+="modem_at1"
+# H4: ttyUSB3, ttyUSB4, ttyUSB5
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="03", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="04", SYMLINK+="modem_at1"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="05", SYMLINK+="modem_at2"
+# EV2: ttyUSB0
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ENV{ID_PORT}=="0", SYMLINK+="modem_at0"
+
+LABEL="mlinux_end"
diff --git a/recipes-core/udev/udev-182/init b/recipes-core/udev/udev-182/init
new file mode 100644
index 0000000..bd716b0
--- /dev/null
+++ b/recipes-core/udev/udev-182/init
@@ -0,0 +1,138 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: udev
+# Required-Start: mountvirtfs
+# Required-Stop:
+# Default-Start: S
+# Default-Stop:
+# Short-Description: Start udevd, populate /dev and load drivers.
+### END INIT INFO
+
+export TZ=/etc/localtime
+
+[ -d /sys/class ] || exit 1
+[ -r /proc/mounts ] || exit 1
+[ -x @UDEVD@ ] || exit 1
+[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache
+[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf
+[ -f /etc/default/rcS ] && . /etc/default/rcS
+
+readfiles () {
+ READDATA=""
+ for filename in $@; do
+ if [ -r $filename ]; then
+ while read line; do
+ READDATA="$READDATA$line"
+ done < $filename
+ fi
+ done
+}
+
+kill_udevd () {
+ pid=`pidof -x udevd`
+ [ -n "$pid" ] && kill $pid
+}
+
+case "$1" in
+ start)
+ export ACTION=add
+ # propagate /dev from /sys
+ echo "Starting udev"
+
+ # Check for requireed devtmpfs before trying to start udev and
+ # mount a no-existant fs.
+ if ! grep -q devtmpfs /proc/filesystems
+ then
+ echo "Missing devtmpfs, which is required for udev to run";
+ echo "Halting..."
+ halt
+ fi
+ # mount the devtmpfs on /dev, if not already done
+ LANG=C awk '$2 == "/dev" && ($3 == "devtmpfs") { exit 1 }' /proc/mounts && {
+ mount -n -o mode=0755 -t devtmpfs none "/dev"
+ }
+ [ -e /dev/pts ] || mkdir -m 0755 /dev/pts
+ [ -e /dev/shm ] || mkdir -m 1777 /dev/shm
+ # the automount rule for udev needs /tmp directory available, as /tmp is a symlink
+ # to /var/tmp which in turn is a symlink to /var/volatile/tmp, we need to make sure
+ # /var/volatile/tmp directory to be available.
+ mkdir -p /var/volatile/tmp
+
+ # Cache handling.
+ # A list of files which are used as a criteria to judge whether the udev cache could be reused.
+ CMP_FILE_LIST="/proc/version /proc/cmdline /proc/devices /proc/atags"
+ if [ "$DEVCACHE" != "" ]; then
+ if [ -e $DEVCACHE ]; then
+ readfiles $CMP_FILE_LIST
+ NEWDATA="$READDATA"
+ readfiles /etc/udev/cache.data
+ OLDDATA="$READDATA"
+ if [ "$OLDDATA" = "$NEWDATA" ]; then
+ (cd /; tar xf $DEVCACHE > /dev/null 2>&1)
+ not_first_boot=1
+ [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE"
+ [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache
+ else
+ # Output detailed reason why the cached /dev is not used
+ if [ "$VERBOSE" != "no" ]; then
+ echo "udev: udev cache not used"
+ echo "udev: we use $CMP_FILE_LIST as criteria to judge whether the cache /dev could be resued"
+ echo "udev: olddata: $OLDDATA"
+ echo "udev: newdata: $NEWDATA"
+ fi
+ echo "$NEWDATA" > /dev/shm/udev.cache
+ fi
+ else
+ if [ "$ROOTFS_READ_ONLY" != "yes" ]; then
+ # If rootfs is not read-only, it's possible that a new udev cache would be generated;
+ # otherwise, we do not bother to read files.
+ readfiles $CMP_FILE_LIST
+ echo "$READDATA" > /dev/shm/udev.cache
+ fi
+ fi
+ fi
+
+ # make_extra_nodes
+ kill_udevd > "/dev/null" 2>&1
+
+ # trigger the sorted events
+ echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug
+ @UDEVD@ -d
+
+ udevadm control --env=STARTUP=1
+ if [ "$not_first_boot" != "" ];then
+ if [ "$PROBE_PLATFORM_BUS" != "yes" ]; then
+ PLATFORM_BUS_NOMATCH="--subsystem-nomatch=platform"
+ else
+ PLATFORM_BUS_NOMATCH=""
+ fi
+ udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux $PLATFORM_BUS_NOMATCH
+ (udevadm settle --timeout=10; udevadm control --env=STARTUP=)&
+ else
+ udevadm trigger --action=add
+ udevadm settle
+ fi
+ ;;
+ stop)
+ echo "Stopping udevd"
+ start-stop-daemon --stop --name udevd --quiet
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ status)
+ pid=`pidof -x udevd`
+ if [ -n "$pid" ]; then
+ echo "udevd (pid $pid) is running ..."
+ else
+ echo "udevd is stopped"
+ fi
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|status|restart}"
+ exit 1
+esac
+exit 0
diff --git a/recipes-core/udev/udev-182/mtcdt/mtcdt.rules b/recipes-core/udev/udev-182/mtcdt/mtcdt.rules
new file mode 100644
index 0000000..3bdbe5d
--- /dev/null
+++ b/recipes-core/udev/udev-182/mtcdt/mtcdt.rules
@@ -0,0 +1,12 @@
+ACTION=="remove", GOTO="mlinux_end"
+SUBSYSTEM!="tty", GOTO="mlinux_end"
+KERNEL!="ttyXRUSB[0-9]*", GOTO="mlinux_end"
+
+SUBSYSTEMS=="usb", ENV{ID_IFACE}="$attr{bInterfaceNumber}"
+ENV{ID_IFACE}=="", GOTO="mlinux_end"
+
+# Accessory Ports
+ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ENV{ID_IFACE}=="00", SYMLINK+="ttyAP1"
+ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1412", ENV{ID_IFACE}=="02", SYMLINK+="ttyAP2"
+
+LABEL="mlinux_end"
diff --git a/recipes-core/udev/udev-extraconf/automount.rules b/recipes-core/udev/udev-extraconf/automount.rules
new file mode 100644
index 0000000..b4a8f22
--- /dev/null
+++ b/recipes-core/udev/udev-extraconf/automount.rules
@@ -0,0 +1,24 @@
+# There are a number of modifiers that are allowed to be used in some
+# of the different fields. They provide the following subsitutions:
+#
+# %n the "kernel number" of the device.
+# For example, 'sda3' has a "kernel number" of '3'
+# %e the smallest number for that name which does not matches an existing node
+# %k the kernel name for the device
+# %M the kernel major number for the device
+# %m the kernel minor number for the device
+# %b the bus id for the device
+# %c the string returned by the PROGRAM
+# %s{filename} the content of a sysfs attribute
+# %% the '%' char itself
+#
+
+SUBSYSTEM!="block", GOTO="automount_end"
+# only mount SD cards and mass storage devices
+KERNEL!="sd[a-z][0-9]*|mmcblk[0-9]p[0-9]*", GOTO="automount_end"
+
+# Media automounting
+SUBSYSTEM=="block", ACTION=="add" RUN+="/etc/udev/scripts/mount.sh"
+SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
+
+LABEL="automount_end"
diff --git a/recipes-core/udev/udev-extraconf_1.0.bbappend b/recipes-core/udev/udev-extraconf_1.0.bbappend
new file mode 100644
index 0000000..6d4804d
--- /dev/null
+++ b/recipes-core/udev/udev-extraconf_1.0.bbappend
@@ -0,0 +1,2 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
diff --git a/recipes-core/udev/udev_182.bbappend b/recipes-core/udev/udev_182.bbappend
new file mode 100644
index 0000000..60665f9
--- /dev/null
+++ b/recipes-core/udev/udev_182.bbappend
@@ -0,0 +1,11 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-${PV}:"
+
+# add custom rules for persistent modem device names
+SRC_URI += " file://cellular_radios.rules \
+ file://${MACHINE}.rules \
+ "
+
+do_install_append() {
+ install -m 644 ${WORKDIR}/cellular_radios.rules ${D}${sysconfdir}/udev/rules.d/
+ install -m 644 ${WORKDIR}/${MACHINE}.rules ${D}${sysconfdir}/udev/rules.d/
+}
diff --git a/recipes-devtools/mtd/mtd-utils-static_git.bb b/recipes-devtools/mtd/mtd-utils-static_git.bb
new file mode 100644
index 0000000..8f64be4
--- /dev/null
+++ b/recipes-devtools/mtd/mtd-utils-static_git.bb
@@ -0,0 +1,17 @@
+require recipes-devtools/mtd/mtd-utils_git.bb
+
+# search for files in original recipe location
+FILESPATH .= ":${@bb.utils.which(BBPATH, 'recipes-devtools/mtd/mtd-utils', direction=True)}"
+
+PR = "r0"
+
+PACKAGES = "${PN} ${PN}-dbg"
+
+# build static version of nandwrite for flash upgrading
+CFLAGS += "-static"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/nandwrite ${D}${bindir}/nandwrite.static
+}
+
diff --git a/recipes-devtools/nodejs/nodejs/0001-gcc-has-a-builtin-define-to-denote-hard-abi-when-in-.patch b/recipes-devtools/nodejs/nodejs/0001-gcc-has-a-builtin-define-to-denote-hard-abi-when-in-.patch
new file mode 100644
index 0000000..6268d69
--- /dev/null
+++ b/recipes-devtools/nodejs/nodejs/0001-gcc-has-a-builtin-define-to-denote-hard-abi-when-in-.patch
@@ -0,0 +1,60 @@
+From bf701e7cb3616631a354ed9ecbed6dd16f60c60d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 30 Jan 2013 10:43:47 +0100
+Subject: [PATCH] gcc has a builtin define to denote hard abi when in use, e.g.
+ when using -mfloat-abi=hard it will define __ARM_PCS_VFP to 1 and therefore
+ we should check that to determine which calling convention is in use and not
+ __VFP_FP__ which merely indicates presence of VFP unit
+
+The fix has been provided by Khem Raj <raj.khem@gmail.com>
+
+Upstream-Status: Forwarded
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ deps/v8/src/arm/assembler-arm.cc | 4 ++--
+ deps/v8/src/platform-linux.cc | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/deps/v8/src/arm/assembler-arm.cc b/deps/v8/src/arm/assembler-arm.cc
+index 1787d15..c64ef58 100644
+--- a/deps/v8/src/arm/assembler-arm.cc
++++ b/deps/v8/src/arm/assembler-arm.cc
+@@ -71,10 +71,10 @@ static unsigned CpuFeaturesImpliedByCompiler() {
+ // If the compiler is allowed to use VFP then we can use VFP too in our code
+ // generation even when generating snapshots. ARMv7 and hardware floating
+ // point support implies VFPv3, see ARM DDI 0406B, page A1-6.
+-#if defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__VFP_FP__) \
++#if defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__ARM_PCS_VFP) \
+ && !defined(__SOFTFP__)
+ answer |= 1u << VFP3 | 1u << ARMv7 | 1u << VFP2;
+-#endif // defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__VFP_FP__)
++#endif // defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(__ARM_PCS_VFP)
+ // && !defined(__SOFTFP__)
+ #endif // _arm__
+
+diff --git a/deps/v8/src/platform-linux.cc b/deps/v8/src/platform-linux.cc
+index ed9eb79..10d1879 100644
+--- a/deps/v8/src/platform-linux.cc
++++ b/deps/v8/src/platform-linux.cc
+@@ -170,7 +170,7 @@ bool OS::ArmCpuHasFeature(CpuFeature feature) {
+ // calling this will return 1.0 and otherwise 0.0.
+ static void ArmUsingHardFloatHelper() {
+ asm("mov r0, #0":::"r0");
+-#if defined(__VFP_FP__) && !defined(__SOFTFP__)
++#if defined(__ARM_PCS_VFP) && !defined(__SOFTFP__)
+ // Load 0x3ff00000 into r1 using instructions available in both ARM
+ // and Thumb mode.
+ asm("mov r1, #3":::"r1");
+@@ -195,7 +195,7 @@ static void ArmUsingHardFloatHelper() {
+ #else
+ asm("vmov d0, r0, r1");
+ #endif // __thumb__
+-#endif // defined(__VFP_FP__) && !defined(__SOFTFP__)
++#endif // defined(__ARM_PCS_VFP) && !defined(__SOFTFP__)
+ asm("mov r1, #0":::"r1");
+ }
+
+--
+1.8.1
+
diff --git a/recipes-devtools/nodejs/nodejs_0.8.27.bb b/recipes-devtools/nodejs/nodejs_0.8.27.bb
new file mode 100644
index 0000000..7a2b1d7
--- /dev/null
+++ b/recipes-devtools/nodejs/nodejs_0.8.27.bb
@@ -0,0 +1,56 @@
+DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
+HOMEPAGE = "http://nodejs.org"
+LICENSE = "MIT & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=95a589a3257ab7dfe37d8a8379e3c72d"
+
+DEPENDS = "openssl"
+
+# use newer npm version that supports caret (^) versions
+# https://github.com/npm/npm/issues/4849
+SRCREV_npm = "v1.4.23"
+
+SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.gz \
+ file://0001-gcc-has-a-builtin-define-to-denote-hard-abi-when-in-.patch \
+ git://github.com/npm/npm.git;destsuffix=npm;name=npm \
+"
+SRC_URI[md5sum] = "afb113584498d2248825650b94e590a9"
+SRC_URI[sha256sum] = "30608f9dcd9ad122f7e8e6212f95969979e3dc35309d0c422a56486334a9369e"
+
+S = "${WORKDIR}/node-v${PV}"
+
+# v8 errors out if you have set CCACHE
+CCACHE = ""
+
+ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)}"
+ARCHFLAGS ?= ""
+
+# Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi
+do_configure () {
+ export LD="${CXX}"
+
+ ./configure --prefix=${prefix} --without-snapshot ${ARCHFLAGS}
+}
+
+do_compile () {
+ export LD="${CXX}"
+ make BUILDTYPE=Release
+}
+
+do_install () {
+ # backup original bundled npm
+ if [ ! -d deps/npm.orig ]; then
+ mv deps/npm deps/npm.orig
+ else
+ rm -rf deps/npm
+ fi
+ # install updated npm from git repo
+ cp -r ${WORKDIR}/npm deps/npm
+
+ oe_runmake install DESTDIR=${D}
+}
+
+RDEPENDS_${PN} = "curl python-shell python-datetime python-subprocess python-crypt python-textutils python-netclient "
+RDEPENDS_${PN}_class-native = ""
+
+FILES_${PN} += "${libdir}/node/wafadmin ${libdir}/node_modules ${libdir}/dtrace"
+BBCLASSEXTEND = "native"
diff --git a/recipes-examples/multitech/helloworld-autotools_1.0.0.bb b/recipes-examples/multitech/helloworld-autotools_1.0.0.bb
new file mode 100644
index 0000000..8b2eafb
--- /dev/null
+++ b/recipes-examples/multitech/helloworld-autotools_1.0.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Hello World Recipe using autotools"
+HOMEPAGE = "http://www.multitech.net/"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+PR = "r0"
+
+SRC_URI = "git://git.multitech.net/helloworld-autotools.git;protocol=git;tag=1.0.0"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
diff --git a/recipes-extended/autossh/autossh_1.4c.bb b/recipes-extended/autossh/autossh_1.4c.bb
new file mode 100644
index 0000000..b40b53f
--- /dev/null
+++ b/recipes-extended/autossh/autossh_1.4c.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Keeps ssh tunnels alive"
+HOMEPAGE = "http://www.harding.motd.ca/autossh"
+LICENSE = "custom-freely-distributable"
+LIC_FILES_CHKSUM = "file://autossh.c;start_line=10;end_line=22;md5=60abb4e02db9c8a062426f574d2fccae"
+SECTION = "console/utils"
+PRIORITY = "optional"
+
+PR = "r1"
+
+SRC_URI = "http://www.harding.motd.ca/autossh/autossh-1.4c.tgz"
+SRC_URI[md5sum] = "26520eea934f296be0783dabe7fcfd28"
+SRC_URI[sha256sum] = "6fcaba6a409a46bdf832086736bb8f09d245ebce11027f41d39588a95dc7fd1d"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+inherit autotools
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 755 ${S}/autossh ${D}/${bindir}/autossh
+}
diff --git a/recipes-extended/bash/bash-4.2/build-tests.patch b/recipes-extended/bash/bash-4.2/build-tests.patch
new file mode 100644
index 0000000..0360881
--- /dev/null
+++ b/recipes-extended/bash/bash-4.2/build-tests.patch
@@ -0,0 +1,48 @@
+Add 'ptest' target to Makefile, to run tests without checking dependencies.
+
+Signed-off-by: Anders Roxell <anders.roxell@enea.com>
+Upstream-Status: Pending
+---
+diff -uNr a/Makefile.in b/Makefile.in
+--- a/Makefile.in 2012-11-06 08:40:07.552403063 +0100
++++ b/Makefile.in 2012-11-06 11:13:36.958297555 +0100
+@@ -827,20 +827,34 @@
+ fi
+
+ recho$(EXEEXT): $(SUPPORT_SRC)recho.c
+- @$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) -o $@ $(SUPPORT_SRC)recho.c ${LIBS_FOR_BUILD}
++ @$(CC) $(CCFLAGS) -o $@ $<
+
+ zecho$(EXEEXT): $(SUPPORT_SRC)zecho.c
+- @$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) -o $@ $(SUPPORT_SRC)zecho.c ${LIBS_FOR_BUILD}
++ @$(CC) $(CCFLAGS) -o $@ $<
+
+ printenv$(EXEEXT): $(SUPPORT_SRC)printenv.c
+- @$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) -o $@ $(SUPPORT_SRC)printenv.c ${LIBS_FOR_BUILD}
++ @$(CC) $(CCFLAGS) -o $@ $<
+
+ xcase$(EXEEXT): $(SUPPORT_SRC)xcase.c
+- @$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) -o $@ $(SUPPORT_SRC)xcase.c ${LIBS_FOR_BUILD}
++ @$(CC) $(CCFLAGS) -o $@ $<
+
+-test tests check: force $(Program) $(TESTS_SUPPORT)
++test tests check:
++ @$(MAKE) install-test
++ @$(MAKE) runtest
++
++install-test: buildtest
++ifeq ($(origin INSTALL_TEST_DIR), undefined)
+ @-test -d tests || mkdir tests
+ @cp $(TESTS_SUPPORT) tests
++else
++ @-test -d $(INSTALL_TEST_DIR) || mkdir -p $(INSTALL_TEST_DIR)
++ @cp -r $(srcdir)/tests/* $(INSTALL_TEST_DIR)/
++ @cp $(TESTS_SUPPORT) $(INSTALL_TEST_DIR)
++endif
++
++buildtest: force $(Program) $(TESTS_SUPPORT)
++
++runtest:
+ @( cd $(srcdir)/tests && \
+ PATH=$(BUILD_DIR)/tests:$$PATH THIS_SH=$(THIS_SH) $(SHELL) ${TESTSCRIPT} )
+
diff --git a/recipes-extended/bash/bash-4.2/execute_cmd.patch b/recipes-extended/bash/bash-4.2/execute_cmd.patch
new file mode 100644
index 0000000..81f8f0a
--- /dev/null
+++ b/recipes-extended/bash/bash-4.2/execute_cmd.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Inappropriate [embedded specific]
+
+--- execute_cmd.c.orig Fri Jun 3 13:34:42 2011
++++ execute_cmd.c Fri Jun 3 13:36:41 2011
+@@ -2202,7 +2202,11 @@
+ /* If the `lastpipe' option is set with shopt, and job control is not
+ enabled, execute the last element of non-async pipelines in the
+ current shell environment. */
+- if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
++ if (lastpipe_opt &&
++#if defined(JOB_CONTROL)
++ job_control == 0 &&
++#endif
++ asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
+ {
+ lstdin = move_to_high_fd (0, 0, 255);
+ if (lstdin > 0)
diff --git a/recipes-extended/bash/bash-4.2/mkbuiltins_have_stringize.patch b/recipes-extended/bash/bash-4.2/mkbuiltins_have_stringize.patch
new file mode 100644
index 0000000..a9391d6
--- /dev/null
+++ b/recipes-extended/bash/bash-4.2/mkbuiltins_have_stringize.patch
@@ -0,0 +1,26 @@
+On hosts with FORTIFY_SOURCES, stringize support is required, as it's used by
+the macros to wrap functions (e.g. read and open in unistd.h). Those wrappers
+use the STRING() macro from unistd.h. A header in the bash sources overrides
+the unistd.h macro to 'x' when HAVE_STRINGIZE is not defined, causing the
+wrappers to generate calls to 'xread' and 'xopen', which do not exist,
+resulting in a failure to link.
+
+Assume we have stringize support when cross-compiling, which works around the
+issue.
+
+It may be best for upstream to either give up on supporting compilers without
+stringize support, or to not define STRING() at all when FORTIFY_SOURCES is
+defined, letting the unistd.h one be used, instead.
+
+Upstream-Status: Pending
+
+--- bash-4.2.orig/builtins/mkbuiltins.c
++++ bash-4.2/builtins/mkbuiltins.c
+@@ -28,6 +28,7 @@
+ # define HAVE_STDLIB_H
+
+ # define HAVE_RENAME
++# define HAVE_STRINGIZE
+ #endif /* CROSS_COMPILING */
+
+ #if defined (HAVE_UNISTD_H)
diff --git a/recipes-extended/bash/bash-4.2/run-ptest b/recipes-extended/bash/bash-4.2/run-ptest
new file mode 100644
index 0000000..8dd3b99
--- /dev/null
+++ b/recipes-extended/bash/bash-4.2/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+make -k THIS_SH=/bin/bash BUILD_DIR=. runtest
diff --git a/recipes-extended/bash/bash-4.2/test-output.patch b/recipes-extended/bash/bash-4.2/test-output.patch
new file mode 100644
index 0000000..2b09b7d
--- /dev/null
+++ b/recipes-extended/bash/bash-4.2/test-output.patch
@@ -0,0 +1,25 @@
+Add FAIL/PASS output to test output.
+
+Signed-off-by: Björn Stenberg <bjst@enea.com>
+Upstream-Status: Pending
+---
+diff -uNr a/tests/run-all b/tests/run-all
+--- a/tests/run-all 1999-10-08 17:07:46.000000000 +0200
++++ b/tests/run-all 2012-10-27 21:04:18.663331887 +0200
+@@ -22,7 +22,15 @@
+ case $x in
+ $0|run-minimal|run-gprof) ;;
+ *.orig|*~) ;;
+- *) echo $x ; sh $x ;;
++ *) echo $x
++ output=`sh $x`
++ if [ -n "$output" ]; then
++ echo "$output"
++ echo "FAIL: $x"
++ else
++ echo "PASS: $x"
++ fi
++ ;;
+ esac
+ done
+
diff --git a/recipes-extended/bash/bash.inc b/recipes-extended/bash/bash.inc
new file mode 100644
index 0000000..64b476f
--- /dev/null
+++ b/recipes-extended/bash/bash.inc
@@ -0,0 +1,50 @@
+DESCRIPTION = "An sh-compatible command language interpreter."
+HOMEPAGE = "http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html"
+SECTION = "base/shell"
+
+DEPENDS = "ncurses bison-native"
+
+inherit autotools gettext update-alternatives ptest
+
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF = "--enable-job-control"
+
+ALTERNATIVE_${PN} = "sh"
+ALTERNATIVE_LINK_NAME[sh] = "${base_bindir}/sh"
+ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash"
+ALTERNATIVE_PRIORITY = "100"
+
+export AUTOHEADER = "true"
+
+RDEPENDS_${PN}-ptest += "make"
+
+do_configure_prepend () {
+ if [ ! -e ${S}/acinclude.m4 ]; then
+ cat ${S}/aclocal.m4 > ${S}/acinclude.m4
+ fi
+}
+
+do_compile_ptest () {
+ oe_runmake buildtest
+}
+
+do_install_append () {
+ # Move /usr/bin/bash to /bin/bash, if need
+ if [ "${base_bindir}" != "${bindir}" ]; then
+ mkdir -p ${D}${base_bindir}
+ mv ${D}${bindir}/bash ${D}${base_bindir}
+ fi
+}
+
+do_install_ptest () {
+ make INSTALL_TEST_DIR=${D}${PTEST_PATH}/tests install-test
+ cp ${B}/Makefile ${D}${PTEST_PATH}
+ sed -i 's/^Makefile/_Makefile/' ${D}${PTEST_PATH}/Makefile
+}
+
+pkg_postinst_${PN} () {
+ touch $D${sysconfdir}/shells
+ grep -q "bin/bash" $D${sysconfdir}/shells || echo /bin/bash >> $D${sysconfdir}/shells
+ grep -q "bin/sh" $D${sysconfdir}/shells || echo /bin/sh >> $D${sysconfdir}/shells
+}
diff --git a/recipes-extended/bash/bash_4.2.bb b/recipes-extended/bash/bash_4.2.bb
new file mode 100644
index 0000000..df196a7
--- /dev/null
+++ b/recipes-extended/bash/bash_4.2.bb
@@ -0,0 +1,173 @@
+require bash.inc
+
+# GPLv2+ (< 4.0), GPLv3+ (>= 4.0)
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+PR = "r7"
+
+SRC_URI = "${GNU_MIRROR}/bash/${BPN}-${PV}.tar.gz;name=tarball \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-001;apply=yes;striplevel=0;name=patch001 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-002;apply=yes;striplevel=0;name=patch002 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-003;apply=yes;striplevel=0;name=patch003 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-004;apply=yes;striplevel=0;name=patch004 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-005;apply=yes;striplevel=0;name=patch005 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-006;apply=yes;striplevel=0;name=patch006 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-007;apply=yes;striplevel=0;name=patch007 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-008;apply=yes;striplevel=0;name=patch008 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-009;apply=yes;striplevel=0;name=patch009 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-010;apply=yes;striplevel=0;name=patch010 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-011;apply=yes;striplevel=0;name=patch011 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-012;apply=yes;striplevel=0;name=patch012 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-013;apply=yes;striplevel=0;name=patch013 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-014;apply=yes;striplevel=0;name=patch014 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-015;apply=yes;striplevel=0;name=patch015 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-016;apply=yes;striplevel=0;name=patch016 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-017;apply=yes;striplevel=0;name=patch017 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-018;apply=yes;striplevel=0;name=patch018 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-019;apply=yes;striplevel=0;name=patch019 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-020;apply=yes;striplevel=0;name=patch020 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-021;apply=yes;striplevel=0;name=patch021 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-022;apply=yes;striplevel=0;name=patch022 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-023;apply=yes;striplevel=0;name=patch023 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-024;apply=yes;striplevel=0;name=patch024 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-025;apply=yes;striplevel=0;name=patch025 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-026;apply=yes;striplevel=0;name=patch026 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-027;apply=yes;striplevel=0;name=patch027 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-028;apply=yes;striplevel=0;name=patch028 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-029;apply=yes;striplevel=0;name=patch029 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-030;apply=yes;striplevel=0;name=patch030 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-031;apply=yes;striplevel=0;name=patch031 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-032;apply=yes;striplevel=0;name=patch032 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-033;apply=yes;striplevel=0;name=patch033 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-034;apply=yes;striplevel=0;name=patch034 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-035;apply=yes;striplevel=0;name=patch035 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-036;apply=yes;striplevel=0;name=patch036 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-037;apply=yes;striplevel=0;name=patch037 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-038;apply=yes;striplevel=0;name=patch038 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-039;apply=yes;striplevel=0;name=patch039 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-040;apply=yes;striplevel=0;name=patch040 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-041;apply=yes;striplevel=0;name=patch041 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-042;apply=yes;striplevel=0;name=patch042 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-043;apply=yes;striplevel=0;name=patch043 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-044;apply=yes;striplevel=0;name=patch044 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-045;apply=yes;striplevel=0;name=patch045 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-046;apply=yes;striplevel=0;name=patch046 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-047;apply=yes;striplevel=0;name=patch047 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-048;apply=yes;striplevel=0;name=patch048 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-049;apply=yes;striplevel=0;name=patch049 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-050;apply=yes;striplevel=0;name=patch050 \
+ ${GNU_MIRROR}/bash/bash-4.2-patches/bash42-051;apply=yes;striplevel=0;name=patch051 \
+ file://execute_cmd.patch;striplevel=0 \
+ file://mkbuiltins_have_stringize.patch \
+ file://build-tests.patch \
+ file://test-output.patch \
+ file://run-ptest \
+ "
+
+SRC_URI[tarball.md5sum] = "3fb927c7c33022f1c327f14a81c0d4b0"
+SRC_URI[tarball.sha256sum] = "a27a1179ec9c0830c65c6aa5d7dab60f7ce1a2a608618570f96bfa72e95ab3d8"
+SRC_URI[patch001.md5sum] = "1100bc1dda2cdc06ac44d7e5d17864a3"
+SRC_URI[patch001.sha256sum] = "8d6ca028576c4af23e660a2fbc2112221a11c8a785c0b37f033967e5cd12b47a"
+SRC_URI[patch002.md5sum] = "30e7948079921d3261efcc6a40722135"
+SRC_URI[patch002.sha256sum] = "febac927e199aceeba2004908d971d4afb49b521796c3f42d1166f9fbbfbcef9"
+SRC_URI[patch003.md5sum] = "9ea06decec43a198f3d7cf29acc602f8"
+SRC_URI[patch003.sha256sum] = "5a0a7c15018c87348ea87cb0beea14345faf878dbb0e25c17fa70677194cb4cd"
+SRC_URI[patch004.md5sum] = "fb48f6134d7b013135929476aa0c250c"
+SRC_URI[patch004.sha256sum] = "4e34b0f830d2583d56e14225a66937abc81f45bbafcd2eb49daf61c9462140c1"
+SRC_URI[patch005.md5sum] = "e70e45de33426b38153b390be0dbbcd4"
+SRC_URI[patch005.sha256sum] = "a81749e73004b81cfdf0fe075bec365dc1fef756ee5e3fd142821e317d1459a0"
+SRC_URI[patch006.md5sum] = "ce4e5c484993705b27daa151eca242c2"
+SRC_URI[patch006.sha256sum] = "c91148945a2ddafa792682d7c8668c59e7e645eae1334b15b0d5d9ad22634bd1"
+SRC_URI[patch007.md5sum] = "88d1f96db29461767602e2546803bda7"
+SRC_URI[patch007.sha256sum] = "405826acf443dd1084f236a15cb76d7f0ee2dbe5edff45c5fb836db571fb7e95"
+SRC_URI[patch008.md5sum] = "24c574bf6d6a581e300823d9c1276af6"
+SRC_URI[patch008.sha256sum] = "23080d11a60a78941210e2477f6bca066b45db03defa60da86fd765107ba2437"
+SRC_URI[patch009.md5sum] = "4c5835f2fbab36c4292bb334977e5b6d"
+SRC_URI[patch009.sha256sum] = "e7ed5440b4c19765786e90e4f1ded43195d38b3e4d1c4b39fcc23de9a74ccb20"
+SRC_URI[patch010.md5sum] = "0a51602b535ef661ee707be6c8bdb373"
+SRC_URI[patch010.sha256sum] = "acfc5482c25e6923116fcf4b4f7f6345b80f75ad7299749db4b736ad67aa43dc"
+SRC_URI[patch011.md5sum] = "58deacf3d57cbd75575444ff6a3b0806"
+SRC_URI[patch011.sha256sum] = "a491ae359a7ebbd7321aede561728289d71e1fc84777f402766a8afd4d261532"
+SRC_URI[patch012.md5sum] = "72d5059820015231483bb7415d09e9db"
+SRC_URI[patch012.sha256sum] = "354433f1d2da02f1b9652cd20a5b85bbfb5bc2aaf79c42461ebd929d89b9b7b8"
+SRC_URI[patch013.md5sum] = "608336ebe215984ef126e3c29d2d3409"
+SRC_URI[patch013.sha256sum] = "3412c5c6cbbce6c88592604aec054d8182ce64410038b5ecea69fc3968cf85ea"
+SRC_URI[patch014.md5sum] = "ed19da878e3f630834c62b9d9dcc6fce"
+SRC_URI[patch014.sha256sum] = "b5a678e609858532735f94faedb5fabce00dfd6577a4e9ec5eec85fe682c8b33"
+SRC_URI[patch015.md5sum] = "2d07daba0b8ca8f876d2aa052ff594b4"
+SRC_URI[patch015.sha256sum] = "2d876a8304bdf3d664e87e0a8d73bc4ccc100a9dd8c0d054e8649472d8748a98"
+SRC_URI[patch016.md5sum] = "53d246537e1fffd1aaa02ba5c056211c"
+SRC_URI[patch016.sha256sum] = "2895ccbcf7fc98da73a8fa3ba7440aaf2bfaef6c0af8bdd3a9c39403cf03e2a6"
+SRC_URI[patch017.md5sum] = "304fd129a58fee2d8a34f8b4704db0aa"
+SRC_URI[patch017.sha256sum] = "73552444498c761d6073dd67ccfe043b36ef24bb418c266d91d9750884daee7f"
+SRC_URI[patch018.md5sum] = "6921a0b4228fe89b6537a5c29f027c89"
+SRC_URI[patch018.sha256sum] = "e2a9457172370d454d31b84bbcba758ee6394316dbe755374553b52aadbb494d"
+SRC_URI[patch019.md5sum] = "1195d85447f3d048d2c9bcd075fa765c"
+SRC_URI[patch019.sha256sum] = "a8b7cd02207656976016d93cab48e073cb5da002ceb27b7a63fc5ea62007eb56"
+SRC_URI[patch020.md5sum] = "b09000bba08da6ac753124593850cdf7"
+SRC_URI[patch020.sha256sum] = "494773f0d0078cb35372d24caa523b00d8fdbbaed71e41dc14c9e47579da3c6f"
+SRC_URI[patch021.md5sum] = "09d3f96a16b881334cfaee0cf320b47e"
+SRC_URI[patch021.sha256sum] = "a887a97be226575ecf483be2c76655bd6d1edde1cdfe199c27bd2e6baf32badc"
+SRC_URI[patch022.md5sum] = "597bf71a2aac6feb510b7505cdd3d4f7"
+SRC_URI[patch022.sha256sum] = "9dcdf69df7f8cd2ba88d18c45a0d8f55fbe4f0e273411179db94dd6198b85c6b"
+SRC_URI[patch023.md5sum] = "3fab459b4e09daea529cacad025b13b3"
+SRC_URI[patch023.sha256sum] = "5dc11394f1a6c887373c081396efd4f4cc04492696722c57a4811c207965f0bf"
+SRC_URI[patch024.md5sum] = "4ad8d11e72afc6090e701073ff034cf4"
+SRC_URI[patch024.sha256sum] = "99c826bdd33bee281d0a9191550d62a24d0b256cd41c90afd10abd63a66b99e6"
+SRC_URI[patch025.md5sum] = "c7d2493e44490f01dd20bdc8feb0a6a7"
+SRC_URI[patch025.sha256sum] = "0db0646fd7a559d5702911192bdd387acbbc61cf3c29a34007c3ec840e275515"
+SRC_URI[patch026.md5sum] = "9f19c199dd8d1fa9254eebe738759272"
+SRC_URI[patch026.sha256sum] = "e7e90cfaabbce3b4b9c699994e9d9ea4a2f084fd9f37788a80b0b70b47d323d2"
+SRC_URI[patch027.md5sum] = "a6ed82daf034587aee2f2581ba5fe829"
+SRC_URI[patch027.sha256sum] = "0c1f6b7256fcc17f42c05f9bbb4138f8e8bb67e79c622c3485711b6f37f7ed42"
+SRC_URI[patch028.md5sum] = "da9265aa2527fd4a7481baa3e0550287"
+SRC_URI[patch028.sha256sum] = "204226de39ba81aaf3dd5a29cd59de052ec9f648538bb9e7f1c8150852b1ed7a"
+SRC_URI[patch029.md5sum] = "ec444d229e8899fbaaf6fc7de2d82ae6"
+SRC_URI[patch029.sha256sum] = "d0b08c0817bc5acdb28b466727622a8422ca4d61188313cf162443b7f338f581"
+SRC_URI[patch030.md5sum] = "b4bc1c4dc1b508ff9cdfc44f1a5039b5"
+SRC_URI[patch030.sha256sum] = "12594366591a136d8ccdcb8e218010f2ddab6be28a7f96d0ed32ca927e44afae"
+SRC_URI[patch031.md5sum] = "89390ff6a3c2ef7e09dd4b8b097a8e56"
+SRC_URI[patch031.sha256sum] = "55f38c4d34775fbb063510c4222b195d998dd86f88288b64a6103e3812f8d9f9"
+SRC_URI[patch032.md5sum] = "eee08003395c417f677d1a4bf8c548ee"
+SRC_URI[patch032.sha256sum] = "e3a8b563dbb1e5cb7ca85a53515da8b2941213973496d48c4cc5a11c604791ed"
+SRC_URI[patch033.md5sum] = "2fe070dd6d75d8ff16f269184a16e9c4"
+SRC_URI[patch033.sha256sum] = "f5d12790d69fdfb2f47ac86fa1ea1ecc088880141570273f38dfd3fa4a46434b"
+SRC_URI[patch034.md5sum] = "4e610506c1711bf3483b965800ac3d5d"
+SRC_URI[patch034.sha256sum] = "01c1f332101389cedf347c7736102966722a3b213900954e5d625bbc2f1e41b8"
+SRC_URI[patch035.md5sum] = "7cd9bfdf7cbfd45274d07620ee94c8d9"
+SRC_URI[patch035.sha256sum] = "cecde463b038b4849635ff0993d9b264fc92403e7ae0accb52c7877aeaed78df"
+SRC_URI[patch036.md5sum] = "9c3142956064d175a880bcb186e51ef9"
+SRC_URI[patch036.sha256sum] = "fe293a1bc92ac4d272ae9b9a0de3afef7c06145a2b52337a09cacccc5305aafa"
+SRC_URI[patch037.md5sum] = "c10692f447d4966c879f8fb8d7c8ebc9"
+SRC_URI[patch037.sha256sum] = "c7578cddd3bb2430689c740f58a03403800726dcd1268b28f91bf37f368e1674"
+SRC_URI[patch038.md5sum] = "9ef3c308cde413e95866c1266cfb4e98"
+SRC_URI[patch038.sha256sum] = "b8c9a81bdf206be58ba491dfad80373b3348af769e80aaf72f7611ddbbbe6d57"
+SRC_URI[patch039.md5sum] = "cd48f57a404498d4e5c73a3501c4b1a5"
+SRC_URI[patch039.sha256sum] = "f4f9300a60321a5088ae9e54052a64c4d3e876f9a3a17ca104d58fa38b9c1791"
+SRC_URI[patch040.md5sum] = "00a2371b6c05acbfce6bc850c6d982f8"
+SRC_URI[patch040.sha256sum] = "b265f9caf3c7321f95bc8e0b9e2c46bd86c226f00f05e823699aafb83c4aaa6c"
+SRC_URI[patch041.md5sum] = "7bc4942a66ca4024ee964db7ede07896"
+SRC_URI[patch041.sha256sum] = "05cc1951bd9f6624088dd6067486ff47f1825e333273d7df5f1b06b23baaf5eb"
+SRC_URI[patch042.md5sum] = "1cf7701017ebfc8e129de92c8f8b798c"
+SRC_URI[patch042.sha256sum] = "faaa5c1f456517b258b2a65eaa664dd6a01eeff73c8ca4447c3a6de371bbf304"
+SRC_URI[patch043.md5sum] = "9e61168fca692d8d1a733c389a63712e"
+SRC_URI[patch043.sha256sum] = "dc2683840f3e890a9c5f85338366ff6cd923285e558eb46aa818a03fa67c5c57"
+SRC_URI[patch044.md5sum] = "b4b11d64b45ea9ec50dcc74c6c3861f6"
+SRC_URI[patch044.sha256sum] = "10d32d6c9ccdedb1d826f46468631d475f9dcf983fac087766e16df7b99766e6"
+SRC_URI[patch045.md5sum] = "1661bcc83c4715f54368877452ff2247"
+SRC_URI[patch045.sha256sum] = "ddb7eff0f59d394a483b09feec3771d9026f81ba90afac32846a19b172b2986d"
+SRC_URI[patch046.md5sum] = "1b68157ac0f7140e1ceafbbad4a14fee"
+SRC_URI[patch046.sha256sum] = "95c1323b68c0ecc0ca09565ef2d5218625ced3957b702e04c8bcaad9e7b3816d"
+SRC_URI[patch047.md5sum] = "10fbe341bd6b5dd1e94c2384f24e98b4"
+SRC_URI[patch047.sha256sum] = "c1979201d0345011c419a1c82407cd2a00c60a0c75b7f07e145d17f3718daf7a"
+SRC_URI[patch048.md5sum] = "87c31c1ace423d3ce8d1e26ba13bc724"
+SRC_URI[patch048.sha256sum] = "751a5d2330b21ac9aba7323acbbc91c948285f30a4bb41f56796f9a36b983d24"
+SRC_URI[patch049.md5sum] = "07083eeb372bd8215050a8146acc1efd"
+SRC_URI[patch049.sha256sum] = "901cd74cdd9f3e9bb5cc907d563e3d4dcdf9d5f6a751e85b706a958f51bc510e"
+SRC_URI[patch050.md5sum] = "d7b28ed8e839463f4554d67afb4f15e9"
+SRC_URI[patch050.sha256sum] = "1a19b84455e83b46fcaa27759a5dd643dde2e11ceacd1e84e351970ea04d8ba6"
+SRC_URI[patch051.md5sum] = "7dfd10542744c75aa1fd9be7109573bb"
+SRC_URI[patch051.sha256sum] = "3e15347bc23a116b8ee898acec9d0ac744612ce9bbc0096fff47c4cf1149051c"
+
+BBCLASSEXTEND = "nativesdk"
diff --git a/recipes-extended/lighttpd/lighttpd_1.4.33.bbappend b/recipes-extended/lighttpd/lighttpd_1.4.33.bbappend
new file mode 100644
index 0000000..885737e
--- /dev/null
+++ b/recipes-extended/lighttpd/lighttpd_1.4.33.bbappend
@@ -0,0 +1,5 @@
+# build with openssl support
+DEPENDS += " openssl "
+RDEPENDS_${PN} += " openssl "
+
+EXTRA_OECONF += "--with-openssl"
diff --git a/recipes-extended/mii-diag/mii-diag-2.11/libmii.c b/recipes-extended/mii-diag/mii-diag-2.11/libmii.c
new file mode 100644
index 0000000..96f0060
--- /dev/null
+++ b/recipes-extended/mii-diag/mii-diag-2.11/libmii.c
@@ -0,0 +1,630 @@
+/* libmii.c: MII diagnostic and setup library.
+
+ Copyright 1997-2003 by Donald Becker.
+ This version released under the Gnu General Public License,
+ incorporated herein by reference.
+ This source code may be distributed without modification using the
+ existing notice. Any modification to this source code must include a
+ full notice as described in the GPL
+ Contact the author for use under other terms.
+
+ The author may be reached as becker@scyld.com, or C/O
+ Scyld Computing Corporation
+ 914 Bay Ridge Road, Suite 220
+ Annapolis MD 21403
+
+ References
+ http://www.scyld.com/expert/NWay.html
+ http://www.national.com/pf/DP/DP83840A.html
+*/
+
+static const char version_msg[] =
+"libmii.c:v2.11 2/28/2005 Donald Becker (becker@scyld.com)\n"
+" http://www.scyld.com/diag/index.html\n";
+
+/* This library exports the following functions:
+ IOADDR: A token passed to the mdio_read() function.
+ PHY_ID: The MII transceiver address, passed uninterpreted to mdio_read().
+*/
+void show_mii_details(long ioaddr, int phy_id);
+int monitor_mii(long ioaddr, int phy_id);
+
+/* This library expects to be able to call the following functions: */
+extern int mdio_read(long ioaddr, int phy_id, int mii_reg_num);
+
+#include <unistd.h>
+#include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
+
+#include <sys/types.h>
+typedef u_int32_t u32;
+typedef u_int16_t u16;
+typedef u_int8_t u8;
+
+static const char *media_names[] = {
+ "10baseT", "10baseT-FD", "100baseTx", "100baseTx-FD", "100baseT4",
+ "Flow-control", 0,
+};
+
+static void ns83843(long ioaddr, int phy_id);
+static void qs6612(long ioaddr, int phy_id);
+static void smsc83c180(long ioaddr, int phy_id);
+static void tdk78q2120(long ioaddr, int phy_id);
+static void davicom_dm9101(long ioaddr, int phy_id);
+static void intel_i553(long ioaddr, int phy_id);
+static void enablesemi(long ioaddr, int phy_id);
+static void amd_pna(long ioaddr, int phy_id);
+static void amd_tx(long ioaddr, int phy_id);
+static void admtek(long ioaddr, int phy_id);
+static void lu3x31(long ioaddr, int phy_id);
+static void myson981(long ioaddr, int phy_id);
+static void via_tahoe(long ioaddr, int phy_id);
+static void via_vt6103(long ioaddr, int phy_id);
+static void via_vt6105(long ioaddr, int phy_id);
+static void intel(long ioaddr, int phy_id);
+
+struct mii_partnum {
+ const char *vendor; /* Vendor name. */
+ u16 phy_id0; /* Vendor ID (alternate ver. of ieee_oui[]) */
+ u16 phy_id1; /* Vendor ID (alternate ver. of ieee_oui[]) */
+ unsigned char ieee_oui[3]; /* IEEE-assigned organizationally unique ID */
+ char flags;
+ void (*(func))(long xcvr_if, int phy_id);/* Function to emit more info. */
+} static oui_map[] = {
+ {"Unknown transceiver type", 0x0000, 0x0000, {0,}, 0, NULL,},
+ {"National Semiconductor 83840A", 0x2000, 0x5c01, {0,}, 0, NULL,},
+ {"National Semiconductor 83843", 0x2000, 0x5c10, {0,}, 0, ns83843, },
+ {"Level One LXT970", 0x7810, 0x0000, {0,}, 0, NULL, },
+ {"Level One LXT971", 0x7810, 0x0001, {0,}, 0, NULL, },
+ {"Level One LXT971A",0x7810, 0x0003, {0,}, 0, NULL, },
+ {"Level One (unknown type)", 0, 0, {0x1e,0x04,0x00}, 0, NULL, },
+ {"Davicom DM9101", 0x0181, 0xB800, {0,}, 0, davicom_dm9101, },
+ {"Davicom (unknown type)", 0, 0, {0x00, 0x60, 0x6e}, 0, davicom_dm9101, },
+ {"Quality Semiconductor QS6612", 0x0181, 0x4410, {0,}, 0, qs6612},
+ {"Quality Semiconductor (unknown type)", 0,0, {0x00, 0x60, 0x51}, 0, NULL},
+ {"SMSC 83c180", 0x0282, 0x1C51, {0}, 0, smsc83c180, },
+ {"TDK Semi 78Q2120 rev. 2", 0x0300, 0xE542, {0,}, 0, tdk78q2120, },
+ {"TDK Semi 78Q2120 rev. 3", 0x0300, 0xE543, {0,}, 0, tdk78q2120, },
+ {"TDK Semi 78Q2120 rev. 11", 0x0300, 0xE54B, {0,}, 0, tdk78q2120, },
+ {"TDK transceiver (unknown type)", 0,0, {0x00, 0xc0, 0x39}, 0, tdk78q2120},
+ {"Intel (unknown type)", 0,0, {0x00, 0xf8, 0x00}, 0, intel_i553},
+ {"Enable Semiconductor EL40-331", 0x0043, 0x7411, {0,}, 0, enablesemi},
+ {"AMD 79c901A.1 HomePNA", 0x0000, 0x6B91, {0,}, 0, amd_pna},
+ {"AMD 79c901A.2 HomePNA", 0x0000, 0x6B92, {0,}, 0, amd_pna},
+ {"AMD 79c901A.3 HomePNA", 0x0000, 0x6B93, {0,}, 0, amd_pna},
+ {"AMD 79c901A.3 10baseT", 0x0000, 0x6B71, {0,}, 0, amd_tx},
+ {"AdHoc Technology AH101LF", 0x0022, 0x561B, {0,}, 0, tdk78q2120},
+ {"Altimata Communications AC101LF", 0x0022, 0x5523, {0,}, 0, tdk78q2120},
+ {"Altimata Comm (unknown type)", 0, 0, {0x00,0x10,0xA9}, 0, tdk78q2120},
+ {"ASIX (unknown type)", 0, 0, {0x00,0xC0,0xB4}, 0, tdk78q2120},
+ {"ADMtek AN983 Comet", 0x0022, 0x5410, {0,}, 0, admtek},
+ {"ADMtek AN985 Comet", 0x0022, 0x5513, {0,}, 0, admtek},
+ {"ADMtek (unknown type)", 0, 0, {0x00,0xe0,0x92}, 0, admtek},
+ {"Lucent LU6612", 0x0180, 0x7641, {0,}, 0, qs6612},
+ {"Lucent LU3X31", 0x0043, 0x7411, {0,}, 0, lu3x31},
+ {"LSI Logic (Seeq) 80225", 0, 0, {0x00,0xA0,0x7D}, 0, NULL},
+ {"Myson MTD981", 0x0302, 0xD000, {0,}, 0, myson981},
+ {"Myson (unknown type)", 0, 0, {0x00,0xC0,0xB4,}, 0, myson981},
+ {"Alta/Kendin Sundance", 0x0022, 0x1720, {0,}, 0, NULL},
+ {"Alta/Kendin Sundance", 0, 0, {0x00,0x08,0x85}, 0, NULL},
+ {"VIA Tahoe VT6103", 0x0101, 0x8f20, {0,}, 0, via_vt6103},
+ {"VIA Tahoe VT6104", 0x0101, 0x8f30, {0,}, 0, via_tahoe},
+ {"VIA Rhine VT6105", 0x0101, 0x8f22, {0,}, 0, via_vt6105},
+ {"Intel 82557 series", 0x02a8, 0x0150, {0,}, 0, intel},
+ {"Intel 82555 rev 1", 0x02a8, 0x0151, {0,}, 0, intel},
+ {"Intel 82559 transceiver", 0x02a8, 0x0154, {0,}, 0, intel},
+ {"Intel 82555 series transceiver", 0,0, {0x00,0xaa,0x00}, 0, intel},
+ {0, },
+};
+
+static u16 mii_val[32];
+
+void show_mii_details(long ioaddr, int phy_id)
+{
+ int mii_reg, i, vendor = 0;
+ u16 bmcr, bmsr, new_bmsr;
+
+ /* This may not be omitted from the output. */
+ printf("%s", version_msg);
+ printf(" MII PHY #%d transceiver registers:", phy_id);
+ for (mii_reg = 0; mii_reg < 32; mii_reg++) {
+ mii_val[mii_reg] = mdio_read(ioaddr, phy_id, mii_reg);
+ printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n " : "",
+ mii_val[mii_reg]);
+ }
+ printf(".\n");
+ if (mii_val[0] == 0xffff) {
+ printf(" No MII transceiver present!.\n");
+ return;
+ }
+ bmcr = mii_val[0];
+ bmsr = mii_val[1];
+ printf(" Basic mode control register 0x%4.4x:", bmcr);
+ if (bmcr & 0x1000)
+ printf(" Auto-negotiation enabled.\n");
+ else
+ printf(" Auto-negotiation disabled!\n"
+ " Speed fixed at 10%s mbps, %s-duplex.\n",
+ bmcr & 0x2000 ? "0" : "",
+ bmcr & 0x0100 ? "full":"half");
+ if (bmcr & 0x8000)
+ printf(" Transceiver currently being reset!\n");
+ if (bmcr & 0x4000)
+ printf(" Transceiver in loopback mode!\n");
+ if (bmcr & 0x0800)
+ printf(" Transceiver powered down!\n");
+ if (bmcr & 0x0400)
+ printf(" Transceiver isolated from the MII!\n");
+ if (bmcr & 0x0200)
+ printf(" Restarted auto-negotiation in progress!\n");
+ if (bmcr & 0x0080)
+ printf(" Internal Collision-Test enabled!\n");
+
+ new_bmsr = mdio_read(ioaddr, phy_id, 1);
+ printf(" Basic mode status register 0x%4.4x ... %4.4x.\n"
+ " Link status: %sestablished.\n"
+ " Capable of ",
+ bmsr, new_bmsr,
+ bmsr & 0x0004 ? "" :
+ (new_bmsr & 0x0004) ? "previously broken, but now re" : "not ");
+ if (bmsr & 0xF800) {
+ for (i = 15; i >= 11; i--)
+ if (bmsr & (1<<i))
+ printf(" %s", media_names[i-11]);
+ } else
+ printf("<Warning! No media capabilities>");
+
+ printf(".\n"
+ " %s to perform Auto-negotiation, negotiation %scomplete.\n",
+ bmsr & 0x0008 ? "Able" : "Unable",
+ bmsr & 0x0020 ? "" : "not ");
+
+ if (bmsr & 0x0010)
+ printf(" Remote fault detected!\n");
+ if (bmsr & 0x0002)
+ printf(" *** Link Jabber! ***\n");
+
+ if (mii_val[2] ^ mii_val[3]) { /* Eliminate 0x0000 and 0xffff IDs. */
+ unsigned char oui_0 = mii_val[2] >> 10;
+ unsigned char oui_1 = mii_val[2] >> 2;
+ unsigned char oui_2 = (mii_val[2] << 6) | (mii_val[3] >> 10);
+
+ printf(" Vendor ID is %2.2x:%2.2x:%2.2x:--:--:--, model %d rev. %d.\n",
+ oui_0, oui_1, oui_2,
+ ((mii_val[3] >> 4) & 0x3f), mii_val[3] & 0x0f);
+ for ( i = 0; oui_map[i].vendor; i++)
+ /* We match either the Phy ID or the IEEE OUI. */
+ if ((oui_map[i].phy_id0 == mii_val[2] &&
+ oui_map[i].phy_id1 == mii_val[3]) ||
+ (oui_map[i].ieee_oui[0] == oui_0 &&
+ oui_map[i].ieee_oui[1] == oui_1 &&
+ oui_map[i].ieee_oui[2] == oui_2)) {
+ printf(" Vendor/Part: %s.\n", oui_map[i].vendor);
+ vendor = i;
+ break;
+ }
+ if (oui_map[i].vendor == NULL)
+ printf(" No specific information is known about this transceiver"
+ " type.\n");
+ } else
+ printf(" This transceiver has no vendor identification.\n");
+
+ {
+ int nway_advert = mii_val[4];
+ int lkpar = mii_val[5];
+ printf(" I'm advertising %4.4x:", nway_advert);
+ for (i = 10; i >= 5; i--)
+ if (nway_advert & (1<<i))
+ printf(" %s", media_names[i-5]);
+ printf("\n Advertising %sadditional info pages.\n",
+ nway_advert & 0x8000 ? "" : "no ");
+ if ((nway_advert & 31) == 1)
+ printf(" IEEE 802.3 CSMA/CD protocol.\n");
+ else
+ printf(" Using an unknown (non 802.3) encapsulation.\n");
+ printf(" Link partner capability is %4.4x:",
+ lkpar);
+ for (i = 10; i >= 5; i--)
+ if (lkpar & (1<<i))
+ printf(" %s", media_names[i-5]);
+ printf(".\n Negotiation %s.\n",
+ lkpar & 0x4000 ? " completed" : "did not complete");
+ }
+ if (oui_map[vendor].func)
+ oui_map[vendor].func(ioaddr, phy_id);
+
+}
+
+int monitor_mii(long ioaddr, int phy_id)
+{
+ int i, last_event = 0;
+ unsigned short new_1, baseline_1 = mdio_read(ioaddr, phy_id, 1);
+ struct timeval tv, sleepval;
+ time_t cur_time;
+ char timebuf[12];
+
+ if (baseline_1 == 0xffff) {
+ fprintf(stderr, "No MII transceiver present to monitor.\n");
+ return -1;
+ }
+
+ gettimeofday(&tv, NULL);
+ cur_time = tv.tv_sec;
+ strftime(timebuf, sizeof(timebuf), "%H:%M:%S", localtime(&cur_time));
+
+ printf("Monitoring the MII transceiver status.\n"
+ "%s.%03d Baseline value of MII BMSR (basic mode status register)"
+ " is %4.4x.\n", timebuf, (int)tv.tv_usec/1000, baseline_1);
+ while (1) {
+ new_1 = mdio_read(ioaddr, phy_id, 1);
+ if (new_1 == 0xffff) {
+ fprintf(stderr, "The MII transceiver is no longer accessable!\n");
+ return -1;
+ }
+ if (new_1 != baseline_1) {
+ gettimeofday(&tv, NULL);
+ cur_time = tv.tv_sec;
+ strftime(timebuf, sizeof(timebuf), "%H:%M:%S",
+ localtime(&cur_time));
+ printf("%s.%03d MII BMSR now %4.4x: %4s link, NWay %s, "
+ "%3sJabber%s (%4.4x).\n",
+ timebuf, (int)tv.tv_usec/1000, new_1,
+ new_1 & 0x04 ? "Good" : "no",
+ new_1 & 0x20 ? "done" : "busy",
+ new_1 & 0x02 ? "" : "No ",
+ new_1 & 0x10 ? ", remote fault" : "",
+ mdio_read(ioaddr, phy_id, 5)
+ );
+ if (!(baseline_1 & 0x20) && (new_1 & 0x20)) {
+ int lkpar = mdio_read(ioaddr, phy_id, 5);
+ printf(" New link partner capability is %4.4x %4.4x:",
+ lkpar, mdio_read(ioaddr, phy_id, 6));
+ switch (lkpar) {
+ case 0x45e1: printf(" 10/100 switch w/ flow control"); break;
+ case 0x41e1: printf(" 10/100 HD+FD switch"); break;
+ case 0x40a1: printf(" 10/100 bridged repeater"); break;
+ case 0x4081: printf(" 100baseTx repeater w/autonegotation");
+ break;
+ case 0x0081: printf(" 100baseTx (no autonegotation)"); break;
+ case 0x4021: printf(" 10baseT repeater w/autonegotation");
+ break;
+ case 0x0021: printf(" 10baseT (no autonegotation)"); break;
+ default:
+ for (i = 9; i >= 5; i--)
+ if (lkpar & (1<<i))
+ printf(" %s", media_names[i-5]);
+ }
+ printf(".\n");
+ }
+ fflush(stdout);
+ baseline_1 = new_1;
+ last_event = 0;
+ }
+ sleepval.tv_sec = 0;
+ sleepval.tv_usec = last_event++ > 30 ? 200000 : 1000;
+ select(0, 0, 0, 0, &sleepval); /* Or just sleep(1); */
+ }
+ printf(" Value of MII BMSR (basic mode status register) is %4.4x.\n",
+ mdio_read(ioaddr, phy_id, 1));
+ return 0;
+}
+
+/* Emit transceiver-specific info. */
+
+struct msg_tbl { int bitmask; char *msg; };
+
+static void msg_if_set(const int val, const struct msg_tbl msg_tbl[])
+{
+ int i;
+ for (i = 0; msg_tbl[i].bitmask; i++)
+ if (msg_tbl[i].bitmask & val)
+ printf(" %s\n", msg_tbl[i].msg);
+}
+
+static void msg_if_set_fmt(const int val, const struct msg_tbl msg_tbl[],
+ const char *fmt)
+{
+ int i;
+ for (i = 0; msg_tbl[i].bitmask; i++)
+ if (msg_tbl[i].bitmask & val)
+ printf(fmt, msg_tbl[i].msg);
+}
+
+static void qs6612(long ioaddr, int phy_id)
+{
+ printf(" QS6612 extra registers: Mode %4.4x.\n"
+ " Interrupt source %4.4x, mask %4.4x.\n"
+ " PHY control %4.4x.\n",
+ mii_val[17], mii_val[29], mii_val[30], mii_val[31]);
+ return;
+}
+
+static void ns83843(long ioaddr, int phy_id)
+{
+ printf(" NatSemi 83843 extra registers:\n"
+ " PHY status %4.4x\n"
+ " %s link, %d Mb/sec %s duplex\n"
+ " MII interrupts %sabled, %s pending.\n"
+ " Events since last read\n"
+ " Link disconnects %d\n"
+ " False carriers %d\n"
+ " Receive errors %d\n"
+ " Link beat is currently %sstable\n",
+ mii_val[0x10],
+ mii_val[10] & 0x0001 ? "Valid" : "Invalid",
+ mii_val[10] & 0x0002 ? 10 : 100,
+ mii_val[10] & 0x0004 ? "full" : "half",
+ mii_val[0x11] & 0x0002 ? "en":"dis",
+ mii_val[0x10] & 0x0100 ? "interrupt": "none",
+ mii_val[0x13], mii_val[0x14], mii_val[0x15],
+ mii_val[0x16] & 0x0010 ? "UN" : "");
+ return;
+}
+static void smsc83c180(long ioaddr, int phy_id)
+{
+ int mii_reg25 = mii_val[25];
+ printf(" SMSC 83c180 extra registers:\n"
+ " Auto-negotiation status 0x%4.4x.\n"
+ " 10baseT polarity is %s.\n"
+ " PHY address is %d.\n"
+ " Auto-negotiation %scomplete, 1%s0Mbps %s duplex.\n"
+ " Rx symbol errors since last read %d.\n",
+ mii_reg25,
+ mii_reg25 & 0x2000 ? "normal" : "reversed",
+ (mii_reg25>>8) & 0x1F,
+ mii_reg25 & 0x0080 ? "did not " : "",
+ mii_reg25 & 0x0020 ? "0" : "",
+ mii_reg25 & 0x0040 ? "full" : "half",
+ mdio_read(ioaddr, phy_id, 26));
+ return;
+}
+
+static const char *tdk_events[8] = {
+ "Jabber", "Rx error", "Negotiation page received", "Link detection fault",
+ "Link partner acknowledge", "Link status change", "Remote partner fault",
+ "Auto-Negotiation complete"};
+
+static const struct msg_tbl tdk_reg16[] = {
+ {0x8000, " Transceiver is in repeater mode!"},
+ {0x4000, " Interrupt pin set to active high."},
+ {0x2000, " Reserved bit 12 is unexpectedly set."},
+ {0x1000, " Transmit pins are internally disconnected."},
+ {0x0800, " 10baseT signal quality test is disabled."},
+ {0x0400, " 10baseT loopback mode."},
+ {0, 0},
+};
+
+static void tdk78q2120(long ioaddr, int phy_id)
+{
+ int mii_reg16 = mii_val[16];
+ int mii_reg17 = mii_val[17];
+ int mii_reg18 = mii_val[18];
+ int i;
+ printf(" TDK format vendor-specific registers 16..18 are "
+ "0x%4.4x 0x%4.4x 0x%4.4x\n", mii_reg16, mii_reg17, mii_reg18);
+ printf(" Link polarity is %s %s.\n"
+ "%s%s"
+ " Auto-negotiation %s, 1%s0Mbps %s duplex.\n"
+ " Rx link in %s state, PLL %s.\n",
+ mii_reg16 & 0x0020 ? "OVERRIDDEN to" : "detected as",
+ mii_reg16 & 0x0010 ? "reversed" : "normal",
+ mii_reg16 & 0x0002 ?
+ " 100baseTx Coding and scrambling is disabled!\n":"",
+ mii_reg16 & 0x0001 ? " Rx_CLK power-save mode is enabled!\n":"",
+ mii_reg18 & 0x1000 ? "had no common media" : "complete",
+ mii_reg18 & 0x0400 ? "0" : "",
+ mii_reg18 & 0x0800 ? "full" : "half",
+ mii_reg18 & 0x0200 ? "pass" : "fail",
+ mii_reg18 & 0x0100 ? "slipped since last read" : "locked");
+
+ msg_if_set(mii_reg16, tdk_reg16);
+ if (mii_reg17 & 0x00ff) {
+ printf(" Events since last read:");
+ for (i = 0; i < 8; i++)
+ if (mii_reg17 & (1 << i))
+ printf(" %s", tdk_events[i]);
+ } else
+ printf(" No new link status events.");
+
+ if (mii_reg17 & 0xff00) {
+ printf("\n Events that will raise an interrupt:");
+ for (i = 0; i < 8; i++)
+ if (mii_reg17 & (0x100 << i))
+ printf(" %s", tdk_events[i]);
+ }
+ printf("\n");
+ return;
+}
+
+static void davicom_dm9101(long ioaddr, int phy_id)
+{
+ printf(" Davicom vendor specific registers: 0x%4.4x 0x%4.4x 0x%4.4x.\n",
+ mii_val[16], mii_val[17], mii_val[18]);
+}
+static void intel_i553(long ioaddr, int phy_id)
+{
+ printf(" This transceiver is 100baseT4 only! Register 16 is %4.4x.\n",
+ mii_val[16]);
+}
+/* http://www.enablesemi.com/cgi-bin/byteserve/Products/Docs/3VCardBus.pdf */
+static void enablesemi(long ioaddr, int phy_id)
+{
+ printf(" Isolated %d times, %d false carrier events, %d Rx errors.\n",
+ mii_val[18], mii_val[19], mii_val[21]);
+ printf(" Cable polarity is %s, 100Mb PLL is %slocked.\n",
+ mii_val[28]&0x8000 ? "reversed" : "normal",
+ mii_val[27]&0x2000 ? "" : "un");
+}
+/* The amd79c901 contains both PNA and 10/100 management registers.
+ http://www.amd.com/products/npd/techdocs/22304.pdf
+*/
+static void amd_pna(long ioaddr, int phy_id)
+{
+ printf(" HomePNA transceiver in %s speed, %s power mode.\n",
+ mii_val[16] & 4 ? "high" : "low",
+ mii_val[16] & 2 ? "high" : "low");
+ printf(" HomePNA noise level %d, peak power %d..\n",
+ mii_val[25] >> 8, mii_val[25] & 0xff);
+}
+static void amd_tx(long ioaddr, int phy_id)
+{
+ int mii_reg25 = mii_val[25];
+ printf(" AMD vendor specific registers: 0x%4.4x 0x%4.4x 0x%4.4x.\n",
+ mii_val[16], mii_val[17], mii_val[18]);
+ printf(" The link is %s in 10%s %s duplex mode, autonegotiation state "
+ "has%s changed.\n",
+ mii_reg25 & 8 ? "up" : "down",
+ mii_reg25 & 1 ? "0baseTx" : "baseT",
+ mii_reg25 & 4 ? "full" : "half",
+ mii_reg25 & 2 ? "" : " not");
+}
+
+static const struct msg_tbl admtek_reg21[] = {
+ {0x4000, " Link test diabled: Ignoring lack of 10baseT link beat."},
+ {0x2000, " Link forced up."},
+ {0x1000, " Tx jabber check disabled."},
+ {0x0080, " Transmitting 'Far End Fault'!"},
+ {0x0040, " Rx error count full."},
+ {0x0008, " Remote loop back enabled."},
+ {0, 0},
+};
+
+static void admtek(long ioaddr, int phy_id)
+{
+
+ printf(" ADMtek vendor specific registers information:\n"
+ " Cable length is approximately %d meters.\n"
+ " The receiver has lost lock %d times since last check and "
+ "had %d error events.\n",
+ ((mii_val[20] & 0x00f0) >> 4)*10,
+ mii_val[23], mii_val[23]);
+ msg_if_set(mii_val[21], admtek_reg21);
+ tdk78q2120(ioaddr, phy_id);
+}
+
+static void lu3x31(long ioaddr, int phy_id)
+{
+ printf(" Lucent vendor specific registers 17: 0x%4.4x"
+ " 29: 0x%4.4x 30: 0x%4.4x 31: 0x%4.4x.\n",
+ mii_val[17], mii_val[29], mii_val[30], mii_val[31]);
+}
+
+static const struct msg_tbl myson_reg16[] = {
+ {0x0080, " Far end fault enabled."},
+ {0x0040, " Transformer ratio 1.25:1."},
+ {0x0020, " Polarity correction diabled."},
+ {0x0010, " Link is forced up regardless of link beat."},
+ {0x0004, " Bypass Jabber check."},
+ {0x0001, " 100baseFx mode selected."},
+ {0, 0},
+};
+
+static void myson981(long ioaddr, int phy_id)
+{
+ int i, mii_reg17 = mii_val[17];
+
+ printf(" Myson mtd981 extra registers: %4.4x %4.4x %4.4x %4.4x.\n",
+ mii_val[16], mii_val[17], mii_val[18], mii_val[19]);
+ msg_if_set(mii_val[16] & 0xC800, tdk_reg16);
+ msg_if_set(mii_val[16], myson_reg16);
+
+ if (mii_reg17 & 0x00ff) {
+ printf(" Events since last read:");
+ for (i = 0; i < 8; i++)
+ if (mii_reg17 & (1 << i))
+ printf(" %s", tdk_events[i]);
+ } else
+ printf(" No new link status events.");
+ if (mii_reg17 & 0xff00) {
+ printf("\n Events that will raise an interrupt:");
+ for (i = 0; i < 8; i++)
+ if (mii_reg17 & (0x100 << i))
+ printf(" %s", tdk_events[i]);
+ }
+ printf("\n");
+
+ return;
+}
+
+/* These are much like the TDK events in reversed order. */
+static const struct msg_tbl via_reg17[] = {
+ {0x0001, "Auto-Negotiation complete"},
+ {0x0002, "Remote fault detected"},
+ {0x0004, "Link failure detected"},
+ {0x0008, "Bad Start Stream detected"},
+ {0x0010, "Parallel detection fault"},
+ {0x0020, "Extended negotiation page received"},
+ {0x0040, "5B/4B code error detected"},
+ {0x0080, "Jabber detected"},
+ {0, 0},
+};
+
+static void via_tahoe(long ioaddr, int phy_id)
+{
+ int mii_reg16 = mii_val[16];
+ int mii_reg17 = mii_val[17];
+ int mii_reg18 = mii_val[18];
+
+ printf(" VIA Tahoe extended registers: 16 %4.4x #17 %4.4x #18 %4.4x.\n",
+ mii_reg16, mii_reg17, mii_reg18);
+ msg_if_set_fmt(mii_reg17, via_reg17, " %s\n");
+ printf(" Link %s 10%s Mbps %s duplex\n",
+ mii_reg18 & 0x2000 ? "up" : "down",
+ mii_reg18 & 0x0400 ? "0" : "",
+ mii_reg18 & 0x0800 ? "full" : "half");
+}
+
+/* Information from
+ http://www.via.com.tw/en/datasheet/DS6103110.pdf
+*/
+
+static void via_vt6103(long ioaddr, int phy_id)
+{
+ printf(" VIA vt6103 error counts since the last check:\n"
+ " The link has failed %d times.\n"
+ " The receiver has lost lock %d times.\n"
+ " There have been %d false carrier/SQE error.\n",
+ mii_val[21], mii_val[22], mii_val[23]);
+}
+
+/* Information from
+ http://www.via.com.tw/en/Networking/DS6105LOM100.pdf
+*/
+
+static void via_vt6105(long ioaddr, int phy_id)
+{
+ printf(" VIA vt6105 PHY status:\n"
+ " Duplex %s speed %s\n",
+ mii_val[20] & 0x0001 ? "full" : "half",
+ mii_val[20] & 0x0002 ? "100" : "10");
+}
+
+/* Information from
+ http://www.via.com.tw/en/Networking/DS6105LOM100.pdf
+*/
+static void intel(long ioaddr, int phy_id)
+{
+ printf(" Intel 8255* PHY #%d extended management registers:\n"
+ " Error counts, cleared when read:\n"
+ " False carriers %d\n"
+ " Link disconnects %d\n"
+ " Receive errors %d\n"
+ " Rx symbol errors %d.\n"
+ " Rx 10Mbps Early End-Of-Frame errors %d.\n"
+ " Rx 100Mbps Early End-Of-Frame errors %d.\n"
+ " Tx jabber errors %d.\n",
+ mii_val[18],
+ mii_val[19], mii_val[20], mii_val[21], mii_val[22], mii_val[23],
+ mii_val[24], mii_val[25]);
+}
+
+
+/*
+ * Local variables:
+ * compile-command: "cc -O -Wall -c libmii.c"
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * tab-width: 4
+ * End:
+ */
diff --git a/recipes-extended/mii-diag/mii-diag-2.11/mii-diag.c b/recipes-extended/mii-diag/mii-diag-2.11/mii-diag.c
new file mode 100644
index 0000000..3c47e4a
--- /dev/null
+++ b/recipes-extended/mii-diag/mii-diag-2.11/mii-diag.c
@@ -0,0 +1,648 @@
+/* Mode: C;
+ * mii-diag.c: Examine and set the MII registers of a network interfaces.
+
+ Usage: mii-diag [-vw] interface.
+
+ This program reads and writes the Media Independent Interface (MII)
+ management registers on network transceivers. The registers control
+ and report network link settings and errors. Examples are link speed,
+ duplex, capabilities advertised to the link partner, status LED
+ indications and link error counters.
+
+ Notes:
+ The compile-command is at the end of this source file.
+ This program works with drivers that implement MII ioctl() calls.
+
+ Written/copyright 1997-2003 by Donald Becker <becker@scyld.com>
+
+ This program is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation.
+
+ The author may be reached as becker@scyld.com, or C/O
+ Scyld Computing Corporation
+ 914 Bay Ridge Road, Suite 220
+ Annapolis MD 21403
+
+ References
+ http://scyld.com/expert/mii-status.html
+ http://scyld.com/expert/NWay.html
+ http://www.national.com/pf/DP/DP83840.html
+*/
+
+static char version[] =
+"mii-diag.c:v2.11 3/21/2005 Donald Becker (becker@scyld.com)\n"
+" http://www.scyld.com/diag/index.html\n";
+
+static const char usage_msg[] =
+"Usage: %s [--help] [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>.\n";
+static const char long_usage_msg[] =
+"Usage: %s [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>.\n"
+"\n"
+" This program configures and monitors the transceiver management registers\n"
+" for network interfaces. It uses the Media Independent Interface (MII)\n"
+" standard with additional Linux-specific controls to communicate with the\n"
+" underlying device driver. The MII registers control and report network\n"
+" link settings and errors. Examples are link speed, duplex, capabilities\n"
+" advertised to the link partner, status LED indications and link error\n"
+" counters.\n"
+"\n"
+" The common usage is\n"
+" mii-diag eth0\n"
+"\n"
+" The default interface is \"eth0\".\n"
+" Frequently used options are\n"
+" -A --advertise <speed|setting>\n"
+" -F --fixed-speed <speed>\n"
+" Speed is one of: 100baseT4, 100baseTx, 100baseTx-FD, 100baseTx-HD,\n"
+" 10baseT, 10baseT-FD, 10baseT-HD\n"
+" -s --status Return exit status 2 if there is no link beat.\n"
+"\n"
+" Less frequently used options are\n"
+" -a --all-interfaces Show the status all interfaces\n"
+" (Not recommended with options that change settings.)\n"
+" -D --debug\n"
+" -g --read-parameters Get driver-specific parameters.\n"
+" -G --set-parameters PARMS Set driver-specific parameters.\n"
+" Parameters are comma separated, missing elements retain existing value.\n"
+" -M --msg-level LEVEL Set the driver message bit map.\n"
+" -p --phy ADDR Set the PHY (MII address) to report.\n"
+" -r --restart Restart the link autonegotiation.\n"
+" -R --reset Reset the transceiver.\n"
+" -v --verbose Report each action taken.\n"
+" -V --version Emit version information.\n"
+" -w --watch Continuously monitor the transceiver and report changes.\n"
+"\n"
+" This command returns success (zero) if the interface information can be\n"
+" read. If the --status option is passed, a zero return means that the\n"
+" interface has link beat.\n";
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#ifdef use_linux_libc5
+#include <linux/if_arp.h>
+#include <linux/if_ether.h>
+#endif
+
+typedef u_int32_t u32;
+typedef u_int16_t u16;
+typedef u_int8_t u8;
+
+#if defined(SIOCGPARAMS) && SIOCGPARAMS != SIOCDEVPRIVATE+3
+#error Changed definition for SIOCGPARAMS
+#else
+#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters. */
+#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters. */
+#endif
+
+const char shortopts[] = "aA:C:DfF:gG:hmM:p:rRsvVw?";
+struct option longopts[] = {
+ /* { name has_arg *flag val } */
+ {"all-interfaces", 0, 0, 'a'}, /* Show all interfaces. */
+ {"advertise", 1, 0, 'A'}, /* Change the capabilities advertised. */
+ {"BMCR", 1, 0, 'C'}, /* Set the control register. */
+ {"debug", 0, 0, 'D'}, /* Increase the debug level. */
+ {"force", 0, 0, 'f'}, /* Force the operation. */
+ {"fixed-speed", 1, 0, 'F'}, /* Fixed speed name. */
+ {"read-parameters", 0, 0, 'g'}, /* Show general settings values. */
+ {"set-parameters", 1, 0, 'G'}, /* Write general settings values. */
+ {"help", 0, 0, 'h'}, /* Print a long usage message. */
+ {"monitor", 0, 0, 'm'}, /* Monitor status register. */
+ {"msg-level", 1, 0, 'M'}, /* Set the driver message level. */
+ {"phy", 1, 0, 'p'}, /* Set the PHY (MII address) to report. */
+ {"restart", 0, 0, 'r'}, /* Restart the link negotiation */
+ {"reset", 0, 0, 'R'}, /* Reset the transceiver. */
+ {"status", 0, 0, 's'}, /* Non-zero exit status w/ no link beat. */
+ {"verbose", 0, 0, 'v'}, /* Report each action taken. */
+ {"version", 0, 0, 'V'}, /* Emit version information. */
+ {"watch", 0, 0, 'w'}, /* Constantly monitor the port. */
+ {"error", 0, 0, '?'}, /* Return the error message. */
+ { 0, 0, 0, 0 }
+};
+
+/* Usually in libmii.c, but trivial substitions are below. */
+extern int show_mii_details(long ioaddr, int phy_id);
+extern void monitor_mii(long ioaddr, int phy_id);
+int show_mii_details(long ioaddr, int phy_id) __attribute__((weak));
+void monitor_mii(long ioaddr, int phy_id) __attribute__((weak));
+
+
+/* Command-line flags. */
+unsigned int opt_a = 0, /* Show-all-interfaces flag. */
+ opt_f = 0, /* Force the operation. */
+ opt_g = 0,
+ opt_G = 0,
+ verbose = 0, /* Verbose flag. */
+ debug = 0,
+ opt_version = 0,
+ opt_restart = 0,
+ opt_reset = 0,
+ opt_status = 0,
+ opt_watch = 0;
+static int msg_level = -1;
+static int set_BMCR = -1;
+static int nway_advertise = 0;
+static int fixed_speed = -1;
+static int override_phy = -1;
+char *opt_G_string = NULL;
+
+/* Internal values. */
+int new_ioctl_nums;
+int skfd = -1; /* AF_INET socket for ioctl() calls. */
+struct ifreq ifr;
+
+int do_one_xcvr(int skfd);
+int show_basic_mii(long ioaddr, int phy_id);
+int mdio_read(int skfd, int phy_id, int location);
+void mdio_write(int skfd, int phy_id, int location, int value);
+static int parse_advertise(const char *capabilities);
+static void monitor_status(long ioaddr, int phy_id);
+
+
+int
+main(int argc, char **argv)
+{
+ int c, errflag = 0;
+ char **spp, *ifname;
+ char *progname = rindex(argv[0], '/') ? rindex(argv[0], '/')+1 : argv[0];
+
+ while ((c = getopt_long(argc, argv, shortopts, longopts, 0)) != EOF)
+ switch (c) {
+ case 'a': opt_a++; break;
+ case 'A': nway_advertise |= parse_advertise(optarg);
+ if (nway_advertise == -1) errflag++;
+ break;
+ case 'C': set_BMCR = strtoul(optarg, NULL, 16); break;
+ case 'D': debug++; break;
+ case 'f': opt_f++; break;
+ case 'F': fixed_speed = parse_advertise(optarg);
+ if (fixed_speed == -1) errflag++;
+ break;
+ case 'g': opt_g++; break;
+ case 'G': opt_G++; opt_G_string = strdup(optarg); break;
+ case 'm': opt_watch++; opt_status++; break;
+ case 'M': msg_level = strtoul(optarg, NULL, 0); break;
+ case 'h': fprintf(stderr, long_usage_msg, progname); return 0;
+ case 'p': override_phy = atoi(optarg); break;
+ case 'r': opt_restart++; break;
+ case 'R': opt_reset++; break;
+ case 's': opt_status++; break;
+ case 'v': verbose++; break;
+ case 'V': opt_version++; break;
+ case 'w': opt_watch++; break;
+ case '?': errflag++; break;
+ }
+ if (errflag) {
+ fprintf(stderr, usage_msg, progname);
+ return 2;
+ }
+
+ if (verbose || opt_version)
+ printf(version);
+
+ /* Open a basic socket. */
+ if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
+ perror("socket");
+ return 1;
+ }
+
+ if (debug)
+ fprintf(stderr, "DEBUG: argc=%d, optind=%d and argv[optind] is %s.\n",
+ argc, optind, argv[optind]);
+
+ /* No remaining args means show all interfaces. */
+ if (optind == argc) {
+ ifname = "eth0";
+ fprintf(stderr, "Using the default interface 'eth0'.\n");
+ } else {
+ /* Copy the interface name. */
+ spp = argv + optind;
+ ifname = *spp++;
+ }
+
+ if (ifname == NULL) {
+ ifname = "eth0";
+ fprintf(stderr, "Using the default interface 'eth0'.\n");
+ }
+
+ /* Verify that the interface supports the ioctl(), and if
+ it is using the new or old SIOCGMIIPHY value (grrr...).
+ */
+ {
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ data[0] = 0;
+
+ if (ioctl(skfd, 0x8947, &ifr) >= 0) {
+ new_ioctl_nums = 1;
+ } else if (ioctl(skfd, SIOCDEVPRIVATE, &ifr) >= 0) {
+ new_ioctl_nums = 0;
+ } else {
+ fprintf(stderr, "SIOCGMIIPHY on %s failed: %s\n", ifname,
+ strerror(errno));
+ (void) close(skfd);
+ return 1;
+ }
+ if (verbose)
+ printf(" Using the %s SIOCGMIIPHY value on PHY %d "
+ "(BMCR 0x%4.4x).\n",
+ new_ioctl_nums ? "new" : "old", data[0], data[3]);
+ }
+
+ do_one_xcvr(skfd);
+
+ (void) close(skfd);
+ return 0;
+}
+
+int do_one_xcvr(int skfd)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+ u32 *data32 = (u32 *)(&ifr.ifr_data);
+ unsigned phy_id = data[0];
+
+ if (override_phy >= 0) {
+ printf("Using the specified MII PHY index %d.\n", override_phy);
+ phy_id = override_phy;
+ }
+
+ if (opt_g || opt_G || msg_level >= 0) {
+ if (ioctl(skfd, SIOCGPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCGPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+ if (opt_g) {
+ int i;
+ printf("Driver general parameter settings:");
+ for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
+ printf(" %d", data32[i]);
+ }
+ printf(".\n");
+ }
+ if (opt_G) {
+ /* Set up to four arbitrary driver parameters from the -G parameter.
+ The format is comma separated integers, with a missing element
+ retaining the previous value.
+ */
+ char *str = opt_G_string;
+ int i;
+ for (i = 0; str && i < 4; i++) {
+ char *endstr;
+ u32 newval = strtol(str, &endstr, 0);
+ if (debug)
+ printf(" parse string '%s' value %d end '%s'.\n",
+ str, newval, endstr);
+ if (str == endstr) {
+ if (endstr[0] == ',') /* No parameter */
+ str = endstr+1;
+ else {
+ fprintf(stderr, "Invalid driver parameter '%s'.\n", str);
+ str = index(str, ',');
+ }
+ } else if (endstr[0] == ',') {
+ data32[i] = newval;
+ str = endstr + 1;
+ } else if (endstr[0] == 0) {
+ data32[i] = newval;
+ break;
+ }
+ }
+ printf("Setting new driver general parameters:");
+ for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
+ printf(" %d", data32[i]);
+ }
+ printf(".\n");
+ if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+ if (msg_level >= 0) {
+ data32[0] = msg_level;
+ if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+
+ if (opt_reset) {
+ printf("Resetting the transceiver...\n");
+ mdio_write(skfd, phy_id, 0, 0x8000);
+ }
+ /* Note: PHY addresses > 32 are pseudo-MII devices, usually built-in. */
+ if (phy_id < 64 && nway_advertise > 0) {
+ printf(" Setting the media capability advertisement register of "
+ "PHY #%d to 0x%4.4x.\n", phy_id, nway_advertise | 1);
+ mdio_write(skfd, phy_id, 4, nway_advertise | 1);
+ mdio_write(skfd, phy_id, 0, 0x1000);
+ }
+
+ if (opt_restart) {
+ printf("Restarting negotiation...\n");
+ mdio_write(skfd, phy_id, 0, 0x0000);
+ mdio_write(skfd, phy_id, 0, 0x1200);
+ }
+ /* To force 100baseTx-HD do mdio_write(skfd, phy_id, 0, 0x2000); */
+ if (fixed_speed >= 0) {
+ int reg0_val = 0;
+ if (fixed_speed & 0x0180) /* 100mpbs */
+ reg0_val |= 0x2000;
+ if ((fixed_speed & 0x0140) && /* A full duplex type and */
+ ! (fixed_speed & 0x0820)) /* no half duplex types. */
+ reg0_val |= 0x0100;
+ printf("Setting the speed to \"fixed\", Control register %4.4x.\n",
+ reg0_val);
+ mdio_write(skfd, phy_id, 0, reg0_val);
+ }
+ if (set_BMCR >= 0) {
+ printf("Setting the Basic Mode Control Register to 0x%4.4x.\n",
+ set_BMCR);
+ mdio_write(skfd, phy_id, 0, set_BMCR);
+ }
+
+ if (opt_watch && opt_status)
+ monitor_status(skfd, phy_id);
+
+ show_basic_mii(skfd, phy_id);
+#ifdef LIBMII
+ if (verbose)
+ show_mii_details(skfd, phy_id);
+#else
+ if (verbose || debug) {
+ int mii_reg, mii_val;
+ printf(" MII PHY #%d transceiver registers:", phy_id);
+ for (mii_reg = 0; mii_reg < 32; mii_reg++) {
+ mii_val = mdio_read(skfd, phy_id, mii_reg);
+ printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n " : "",
+ mii_val);
+ }
+ printf("\n");
+ }
+#endif
+
+ if (opt_watch)
+ monitor_mii(skfd, phy_id);
+ if (opt_status &&
+ (mdio_read(skfd, phy_id, 1) & 0x0004) == 0)
+ exit(2);
+ return 0;
+}
+
+int mdio_read(int skfd, int phy_id, int location)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ data[0] = phy_id;
+ data[1] = location;
+
+ if (ioctl(skfd, new_ioctl_nums ? 0x8948 : SIOCDEVPRIVATE+1, &ifr) < 0) {
+ fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ return data[3];
+}
+
+void mdio_write(int skfd, int phy_id, int location, int value)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ data[0] = phy_id;
+ data[1] = location;
+ data[2] = value;
+
+ if (ioctl(skfd, new_ioctl_nums ? 0x8949 : SIOCDEVPRIVATE+2, &ifr) < 0) {
+ fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ }
+}
+
+/* Parse the command line argument for advertised capabilities. */
+static int parse_advertise(const char *capabilities)
+{
+ const char *mtypes[] = {
+ "100baseT4", "100baseTx", "100baseTx-FD", "100baseTx-HD",
+ "10baseT", "10baseT-FD", "10baseT-HD", 0,
+ };
+ char *endptr;
+ int cap_map[] = { 0x0200, 0x0180, 0x0100, 0x0080, 0x0060, 0x0040, 0x0020,};
+ int i;
+ if ( ! capabilities) {
+ fprintf(stderr, "You passed -A 'NULL'. You must provide a media"
+ " list to advertise!\n");
+ return -1;
+ }
+ if (debug)
+ fprintf(stderr, "Advertise string is '%s'.\n", capabilities);
+ for (i = 0; mtypes[i]; i++)
+ if (strcasecmp(mtypes[i], capabilities) == 0)
+ return cap_map[i];
+ if ((i = strtol(capabilities, &endptr, 16)) <= 0xffff && endptr[0] == 0)
+ return i;
+ fprintf(stderr, "Invalid media advertisement value '%s'.\n"
+ " Either pass a numeric value or one of the following names:\n",
+ capabilities);
+ for (i = 0; mtypes[i]; i++)
+ fprintf(stderr, " %-14s %3.3x\n", mtypes[i], cap_map[i]);
+ return -1;
+}
+
+/* Trivial versions if we don't link against libmii.c */
+static const char *media_names[] = {
+ "10baseT", "10baseT-FD", "100baseTx", "100baseTx-FD", "100baseT4",
+ "Flow-control", 0,
+};
+/* Various non-good bits in the command register. */
+static const char *bmcr_bits[] = {
+ " Internal Collision-Test enabled!\n", "", /* 0x0080,0x0100 */
+ " Restarted auto-negotiation in progress!\n",
+ " Transceiver isolated from the MII!\n",
+ " Transceiver powered down!\n", "", "",
+ " Transceiver in loopback mode!\n",
+ " Transceiver currently being reset!\n",
+};
+
+int show_basic_mii(long ioaddr, int phy_id)
+{
+ int mii_reg, i;
+ u16 mii_val[32];
+ u16 bmcr, bmsr, new_bmsr, nway_advert, lkpar;
+
+ for (mii_reg = 0; mii_reg < 8; mii_reg++)
+ mii_val[mii_reg] = mdio_read(ioaddr, phy_id, mii_reg);
+ if ( ! verbose) {
+ printf("Basic registers of MII PHY #%d: ", phy_id);
+ for (mii_reg = 0; mii_reg < 8; mii_reg++)
+ printf(" %4.4x", mii_val[mii_reg]);
+ printf(".\n");
+ }
+
+ if (mii_val[0] == 0xffff || mii_val[1] == 0x0000) {
+ printf(" No MII transceiver present!.\n");
+ if (! opt_f) {
+ printf(" Use '--force' to view the information anyway.\n");
+ return -1;
+ }
+ }
+ /* Descriptive rename. */
+ bmcr = mii_val[0];
+ bmsr = mii_val[1];
+ nway_advert = mii_val[4];
+ lkpar = mii_val[5];
+
+ if (lkpar & 0x4000) {
+ int negotiated = nway_advert & lkpar & 0x3e0;
+ int max_capability = 0;
+ /* Scan for the highest negotiated capability, highest priority
+ (100baseTx-FDX) to lowest (10baseT-HDX). */
+ int media_priority[] = {8, 9, 7, 6, 5}; /* media_names[i-5] */
+ printf(" The autonegotiated capability is %4.4x.\n", negotiated);
+ for (i = 0; media_priority[i]; i++)
+ if (negotiated & (1 << media_priority[i])) {
+ max_capability = media_priority[i];
+ break;
+ }
+ if (max_capability)
+ printf("The autonegotiated media type is %s.\n",
+ media_names[max_capability - 5]);
+ else
+ printf("No common media type was autonegotiated!\n"
+ "This is extremely unusual and typically indicates a "
+ "configuration error.\n" "Perhaps the advertised "
+ "capability set was intentionally limited.\n");
+ }
+ printf(" Basic mode control register 0x%4.4x:", bmcr);
+ if (bmcr & 0x1000)
+ printf(" Auto-negotiation enabled.\n");
+ else
+ printf(" Auto-negotiation disabled, with\n"
+ " Speed fixed at 10%s mbps, %s-duplex.\n",
+ bmcr & 0x2000 ? "0" : "",
+ bmcr & 0x0100 ? "full":"half");
+ for (i = 0; i < 9; i++)
+ if (bmcr & (0x0080<<i))
+ printf(bmcr_bits[i]);
+
+ new_bmsr = mdio_read(ioaddr, phy_id, 1);
+ if ((bmsr & 0x0016) == 0x0004)
+ printf( " You have link beat, and everything is working OK.\n");
+ else
+ printf(" Basic mode status register 0x%4.4x ... %4.4x.\n"
+ " Link status: %sestablished.\n",
+ bmsr, new_bmsr,
+ bmsr & 0x0004 ? "" :
+ (new_bmsr & 0x0004) ? "previously broken, but now re" : "not ");
+ if (verbose) {
+ printf(" This transceiver is capable of ");
+ if (bmsr & 0xF800) {
+ for (i = 15; i >= 11; i--)
+ if (bmsr & (1<<i))
+ printf(" %s", media_names[i-11]);
+ } else
+ printf("<Warning! No media capabilities>");
+ printf(".\n");
+ printf(" %s to perform Auto-negotiation, negotiation %scomplete.\n",
+ bmsr & 0x0008 ? "Able" : "Unable",
+ bmsr & 0x0020 ? "" : "not ");
+ }
+
+ if (bmsr & 0x0010)
+ printf(" Remote fault detected!\n");
+ if (bmsr & 0x0002)
+ printf(" *** Link Jabber! ***\n");
+
+ if (lkpar & 0x4000) {
+ printf(" Your link partner advertised %4.4x:",
+ lkpar);
+ for (i = 5; i >= 0; i--)
+ if (lkpar & (0x20<<i))
+ printf(" %s", media_names[i]);
+ printf("%s.\n", lkpar & 0x0400 ? ", w/ 802.3X flow control" : "");
+ } else if (lkpar & 0x00A0)
+ printf(" Your link partner is generating %s link beat (no"
+ " autonegotiation).\n",
+ lkpar & 0x0080 ? "100baseTx" : "10baseT");
+ else if ( ! (bmcr & 0x1000))
+ printf(" Link partner information is not exchanged when in"
+ " fixed speed mode.\n");
+ else if ( ! (new_bmsr & 0x004))
+ ; /* If no partner, do not report status. */
+ else if (lkpar == 0x0001 || lkpar == 0x0000) {
+ printf(" Your link partner does not do autonegotiation, and this "
+ "transceiver type\n does not report the sensed link "
+ "speed.\n");
+ } else
+ printf(" Your link partner is strange, status %4.4x.\n", lkpar);
+
+ printf(" End of basic transceiver information.\n\n");
+ return 0;
+}
+
+static void monitor_status(long ioaddr, int phy_id)
+{
+ unsigned int baseline_1 = 0x55555555; /* Always show initial status. */
+
+ while (1) {
+ unsigned int new_1 = mdio_read(ioaddr, phy_id, 1);
+ if (new_1 != baseline_1) {
+ printf("%-12s 0x%4.4x 0x%4.4x\n",
+ new_1 & 0x04 ? (new_1==0xffff ? "unknown" : "up") :
+ new_1 & 0x20 ? "negotiating" : "down",
+ new_1, mdio_read(ioaddr, phy_id, 5));
+ fflush(stdout);
+ baseline_1 = new_1;
+ }
+ sleep(1);
+ }
+}
+
+int show_mii_details(long ioaddr, int phy_id)
+{
+ int mii_reg, mii_val;
+ printf(" MII PHY #%d transceiver registers:", phy_id);
+ for (mii_reg = 0; mii_reg < 32; mii_reg++) {
+ mii_val = mdio_read(skfd, phy_id, mii_reg);
+ printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n " : "",
+ mii_val);
+ }
+ printf("\nThis version of 'mii-diag' has not been linked with "
+ "the libmii.c library.\n"
+ " That library provides extended transceiver status reports.\n");
+ return 0;
+}
+
+void monitor_mii(long ioaddr, int phy_id)
+{
+ fprintf(stderr, "\nThis version of 'mii-diag' has not been linked with "
+ "the libmii.c library \n"
+ " required for the media monitor option.\n");
+}
+
+
+
+/*
+ * Local variables:
+ * version-control: t
+ * kept-new-versions: 5
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * tab-width: 4
+ * compile-command: "gcc -Wall -Wstrict-prototypes -O mii-diag.c -DLIBMII libmii.c -o mii-diag"
+ * simple-compile-command: "gcc mii-diag.c -o mii-diag"
+ * End:
+ */
diff --git a/recipes-extended/mii-diag/mii-diag_2.11.bb b/recipes-extended/mii-diag/mii-diag_2.11.bb
new file mode 100644
index 0000000..708789f
--- /dev/null
+++ b/recipes-extended/mii-diag/mii-diag_2.11.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Examines and sets the MII registers of network cards."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+SECTION = "console/network"
+PRIORITY = "optional"
+PR = "r0"
+
+S = "${WORKDIR}/"
+
+#PACKAGE_STRIP = "no"
+
+SRC_URI = "file://mii-diag.c \
+ file://libmii.c"
+
+FILES_${PN} = "${base_sbindir}/mii-diag"
+
+do_compile() {
+${CC} -O -c libmii.c
+${CC} -O -DLIBMII mii-diag.c libmii.o -o mii-diag ${LDFLAGS}
+}
+
+do_install() {
+ install -d ${D}/${base_sbindir}
+ install -m 0755 ${S}/mii-diag ${D}/${base_sbindir}/
+}
diff --git a/recipes-extended/multitech/sms-utils.inc b/recipes-extended/multitech/sms-utils.inc
new file mode 100644
index 0000000..9deea31
--- /dev/null
+++ b/recipes-extended/multitech/sms-utils.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "SMS Utilities"
+HOMEPAGE = "http://www.multitech.net/"
+SECTION = "console/utils"
+PRIORITY = "optional"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "libesmtp libyaml"
+
+SRCREV = "${PV}"
+SRC_URI = "git://git.multitech.net/sms-utils.git;protocol=git"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
+
+do_install_append() {
+ install -d ${D}${datadir}/${PN}
+ install -m 0644 src/sms.config.example ${D}${datadir}/${PN}/
+}
+
+FILES_${PN} += "${datadir}/${PN}/sms.config.example"
diff --git a/recipes-extended/multitech/sms-utils_0.0.5.bb b/recipes-extended/multitech/sms-utils_0.0.5.bb
new file mode 100644
index 0000000..a6177d7
--- /dev/null
+++ b/recipes-extended/multitech/sms-utils_0.0.5.bb
@@ -0,0 +1,3 @@
+require sms-utils.inc
+
+PR = "r1"
diff --git a/recipes-extended/multitech/venus-gps_0.1.0.bb b/recipes-extended/multitech/venus-gps_0.1.0.bb
new file mode 100644
index 0000000..a518297
--- /dev/null
+++ b/recipes-extended/multitech/venus-gps_0.1.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "SkyTraq Venus GPS Example"
+HOMEPAGE = "http://www.multitech.net/"
+SECTION = "console/network"
+PRIORITY = "optional"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+PR = "r0"
+
+SRC_URI = "git://git.multitech.net/venus-gps.git;protocol=git;tag=${PV}"
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
diff --git a/recipes-extended/stressapptest/stressapptest_svn.bb b/recipes-extended/stressapptest/stressapptest_svn.bb
new file mode 100644
index 0000000..bba0077
--- /dev/null
+++ b/recipes-extended/stressapptest/stressapptest_svn.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Stressful Application Test"
+HOMEPAGE = "https://code.google.com/p/stressapptest/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ea9d559f985fb4834317d8ed6b9e58"
+#DEPENDS = ""
+
+SRCREV = "r48"
+PV = "1.0.7+svn${SRCPV}"
+
+SRC_URI = "svn://stressapptest.googlecode.com/svn;module=trunk;protocol=http"
+S = "${WORKDIR}/trunk"
+
+inherit autotools
diff --git a/recipes-extended/uvccapture/files/makefile.patch b/recipes-extended/uvccapture/files/makefile.patch
new file mode 100644
index 0000000..4733154
--- /dev/null
+++ b/recipes-extended/uvccapture/files/makefile.patch
@@ -0,0 +1,29 @@
+Index: uvccapture-0.5/Makefile
+===================================================================
+--- uvccapture-0.5.orig/Makefile 2011-08-18 14:02:17.757628553 -0500
++++ uvccapture-0.5/Makefile 2011-08-18 14:10:09.627899608 -0500
+@@ -1,8 +1,8 @@
+-CC=gcc
+-CPP=g++
++#CC=gcc
++#CPP=g++
+ APP_BINARY=uvccapture
+-VERSION = 0.4
+-PREFIX=/usr/local/bin
++VERSION = 0.5
++PREFIX=/usr/bin
+
+ WARNINGS = -Wall
+
+@@ -20,8 +20,9 @@
+ rm -f *.a *.o $(APP_BINARY) core *~ log errlog
+
+ install:
+- install $(APP_BINARY) $(PREFIX)
++ install -d $(DESTDIR)$(PREFIX)
++ install -m755 $(APP_BINARY) $(DESTDIR)$(PREFIX)
+
+ # Applications:
+ uvccapture: $(OBJECTS)
+- $(CC) $(OBJECTS) $(XPM_LIB) $(MATH_LIB) -ljpeg -o $(APP_BINARY)
++ $(CC) $(OBJECTS) $(XPM_LIB) $(MATH_LIB) -ljpeg $(LDFLAGS) -o $(APP_BINARY)
diff --git a/recipes-extended/uvccapture/files/uvccapture_use_videodev2.patch b/recipes-extended/uvccapture/files/uvccapture_use_videodev2.patch
new file mode 100644
index 0000000..b6e4617
--- /dev/null
+++ b/recipes-extended/uvccapture/files/uvccapture_use_videodev2.patch
@@ -0,0 +1,24 @@
+--- a/uvccapture.c 2008-08-03 22:02:38 +0000
++++ b/uvccapture.c 2011-06-09 16:31:30 +0000
+@@ -31,7 +31,7 @@
+ #include <unistd.h>
+ #include <jpeglib.h>
+ #include <time.h>
+-#include <linux/videodev.h>
++#include <linux/videodev2.h>
+
+ #include "v4l2uvc.h"
+
+
+--- a/v4l2uvc.c 2008-03-28 19:13:23 +0000
++++ b/v4l2uvc.c 2011-06-09 16:31:30 +0000
+@@ -28,7 +28,7 @@
+ #include <errno.h>
+ #include <unistd.h>
+ #include <fcntl.h>
+-#include <linux/videodev.h>
++#include <linux/videodev2.h>
+ #include <sys/mman.h>
+ #include <sys/ioctl.h>
+ #include "v4l2uvc.h"
+
diff --git a/recipes-extended/uvccapture/uvccapture_0.5.bb b/recipes-extended/uvccapture/uvccapture_0.5.bb
new file mode 100644
index 0000000..57fe424
--- /dev/null
+++ b/recipes-extended/uvccapture/uvccapture_0.5.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Command-line tool to capture webcam images"
+DEPENDS = "jpeg virtual/kernel"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM="file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+PR = "r1"
+
+inherit autotools
+
+SRC_URI = "http://staticwave.ca/source/uvccapture/${PN}-${PV}.tar.bz2 \
+ file://uvccapture_use_videodev2.patch \
+ file://makefile.patch \
+ "
+
+SRC_URI[md5sum] = "2ac901069a35b8954c11b11f6e036989"
+SRC_URI[sha256sum] = "b7c262d2428f23a4c64feddd2c37c43fb39ce4c92a5a6ae0dddf28e3adc5b60e"
diff --git a/recipes-java/openjdk/openjdk-7/jvm.cfg b/recipes-java/openjdk/openjdk-7/jvm.cfg
new file mode 100644
index 0000000..5a21e4e
--- /dev/null
+++ b/recipes-java/openjdk/openjdk-7/jvm.cfg
@@ -0,0 +1,43 @@
+# Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+#
+# List of JVMs that can be used as an option to java, javac, etc.
+# Order is important -- first in this list is the default JVM.
+# NOTE that this both this file and its format are UNSUPPORTED and
+# WILL GO AWAY in a future release.
+#
+# You may also select a JVM in an arbitrary location with the
+# "-XXaltjvm=<jvm_dir>" option, but that too is unsupported
+# and may not be available in a future release.
+#
+-jamvm ERROR
+-server ERROR
+-client IGNORE
+-hotspot ERROR
+-classic WARN
+-native ERROR
+-green ERROR
+-zero ALIASED_TO -server
+-shark ERROR
+-cacao ERROR
diff --git a/recipes-java/openjdk/openjdk-7_25b30-2.3.12.bbappend b/recipes-java/openjdk/openjdk-7_25b30-2.3.12.bbappend
new file mode 100644
index 0000000..c7a6e78
--- /dev/null
+++ b/recipes-java/openjdk/openjdk-7_25b30-2.3.12.bbappend
@@ -0,0 +1,6 @@
+# provides custom jvm.cfg to set the default JVM
+
+# openjdk-7 recipe is prepending to FILESPATH, so use
+# FILESPATH instead of FILESEXTRAPATH or our file doesn't
+# get picked up
+FILESPATH_prepend := "${THISDIR}/openjdk-7:"
diff --git a/recipes-java/v4l4j/v4l4j-0.9.1/makefile.patch b/recipes-java/v4l4j/v4l4j-0.9.1/makefile.patch
new file mode 100644
index 0000000..52639fa
--- /dev/null
+++ b/recipes-java/v4l4j/v4l4j-0.9.1/makefile.patch
@@ -0,0 +1,13 @@
+Index: v4l4j-0.9.1/src/Makefile
+===================================================================
+--- v4l4j-0.9.1.orig/src/Makefile 2014-09-16 16:52:05.753059188 -0500
++++ v4l4j-0.9.1/src/Makefile 2014-09-16 16:52:15.260916249 -0500
+@@ -51,7 +51,7 @@
+ all: $(LIB)
+
+ $(LIB): $(OBJ)
+- $(LD) $(OBJ) $(LDFLAGS) -o $(LIB)
++ $(CC) $(OBJ) $(LDFLAGS) -o $(LIB)
+
+ test-debug: $(LIBVIDEO_PATH)/lib$(LIBVIDEO_NAME).so
+ $(CC) $(INCLUDES) -DDEBUG -Wall -ggdb -DMAKETEST -c jpeg.c
diff --git a/recipes-java/v4l4j/v4l4j_0.9.1.bb b/recipes-java/v4l4j/v4l4j_0.9.1.bb
new file mode 100644
index 0000000..605c746
--- /dev/null
+++ b/recipes-java/v4l4j/v4l4j_0.9.1.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "A java package to access the Capture interface of the Video4Linux API"
+DEPENDS = "jpeg icedtea6-native libv4l"
+PR = "r0"
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=87212b5f1ae096371049a12f80034f32"
+
+SRC_URI = "http://v4l4j.googlecode.com/files/v4l4j-${PV}.tar.gz \
+ file://makefile.patch \
+ "
+
+SRC_URI[md5sum] = "88756ca604a4701b7c453be24f948a09"
+SRC_URI[sha256sum] = "cb20aad827442960090660d85f9fa24eed9417e732fdefb66e57083df3c88cf7"
+
+export JDK_HOME = "${STAGING_LIBDIR_NATIVE}/jvm/icedtea6-native"
+STAGING_DATADIR_JAVA_NATIVE = "${STAGING_DATADIR_NATIVE}/java"
+
+# run ant with icedtea6-native so things get compiled with java 1.6
+ANT = "${JDK_HOME}/bin/java \
+ -cp ${STAGING_DATADIR_JAVA_NATIVE}/ant.jar:${JDK_HOME}/lib/tools.jar \
+ org.apache.tools.ant.launch.Launcher"
+
+do_compile () {
+ ${ANT} clean all
+}
+
+do_install () {
+ install -d ${D}${libdir}
+ install libvideo/libvideo.so.0 ${D}${libdir}
+
+ install -d ${D}/usr/share/java
+ install v4l4j.jar ${D}/usr/share/java
+
+ install -d ${D}/usr/lib/jni
+ install libv4l4j.so ${D}/usr/lib/jni
+}
+
+FILES_${PN} += "/usr/share/java /usr/lib/jni"
+FILES_${PN}-dbg += "/usr/lib/jni/.debug"
diff --git a/recipes-ruby/ruby-serialport/ruby-serialport_1.1.0.bb b/recipes-ruby/ruby-serialport/ruby-serialport_1.1.0.bb
new file mode 100644
index 0000000..a020f90
--- /dev/null
+++ b/recipes-ruby/ruby-serialport/ruby-serialport_1.1.0.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "A Ruby library that provides a class for using RS-232 serial ports"
+HOMEPAGE = "https://github.com/hparra/ruby-serialport"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe"
+SECTION = "console/utils"
+PRIORITY = "optional"
+
+DEPENDS = "ruby"
+
+PR = "r2"
+
+# tag v1.1.0
+SRCREV = "709e385f6d20aaadc7f3252af59250336d27e607"
+
+SRC_URI = "git://github.com/hparra/ruby-serialport.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -Iext/native -I${STAGING_INCDIR}/ruby-1.9.1 -I${STAGING_INCDIR}/ruby-1.9.1/arm-linux-eabi -c ext/native/*.c
+ ${CC} ${CFLAGS} ${LDFLAGS} --shared -o ext/native/serialport.so serialport.o posix_serialport_impl.o
+}
+
+do_install() {
+ install -d ${D}${libdir}/ruby/serialport
+ install lib/serialport.rb ${D}${libdir}/ruby/serialport.rb
+ install ext/native/serialport.so -t ${D}${libdir}/ruby
+}
+
+FILES_${PN} = "${libdir}/ruby/serialport*"
+FILES_${PN}-dbg += "${libdir}/ruby/.debug"
diff --git a/recipes-ruby/ruby-sqlite3/ruby-sqlite3_1.3.7.bb b/recipes-ruby/ruby-sqlite3/ruby-sqlite3_1.3.7.bb
new file mode 100644
index 0000000..b3210e6
--- /dev/null
+++ b/recipes-ruby/ruby-sqlite3/ruby-sqlite3_1.3.7.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Ruby bindings for the SQLite3 embedded database"
+HOMEPAGE = "https://github.com/luislavena/sqlite3-ruby"
+LICENSE = "custom-freely-distributable"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f24ce0d57c8f8576a36e2803d35bcfec"
+SECTION = "console/utils"
+PRIORITY = "optional"
+
+DEPENDS = "ruby sqlite3"
+
+PR = "r0"
+
+SRC_URI = "git://github.com/luislavena/sqlite3-ruby.git;tag=v${PV};protocol=git"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -Iext/sqlite3 -Iext/native -I${STAGING_INCDIR}/ruby-1.9.1 -I${STAGING_INCDIR}/ruby-1.9.1/arm-linux-eabi -c ext/sqlite3/*.c
+ ${CC} ${CFLAGS} ${LDFLAGS} --shared -o ext/sqlite3/sqlite3_native.so *.o -lsqlite3
+}
+
+do_install() {
+ install -d ${D}${libdir}/ruby ${D}${libdir}/ruby/sqlite3
+ install lib/sqlite3.rb ${D}${libdir}/ruby/sqlite3.rb
+ install lib/sqlite3/* ext/sqlite3/sqlite3_native.so -t ${D}${libdir}/ruby/sqlite3
+}
+
+FILES_${PN} = "${libdir}/ruby/sqlite3*"
+FILES_${PN}-dbg += "${libdir}/ruby/sqlite3/.debug*"
diff --git a/recipes-ruby/ruby/ruby_1.9.3-p429.bbappend b/recipes-ruby/ruby/ruby_1.9.3-p429.bbappend
new file mode 100644
index 0000000..b31d44c
--- /dev/null
+++ b/recipes-ruby/ruby/ruby_1.9.3-p429.bbappend
@@ -0,0 +1,4 @@
+# remove /usr/share/ri from main ruby package
+# using FILES_${PN}_remove doesn't work...
+FILES_ruby_remove = "${datadir}/ri"
+FILES_${PN}-doc += "${datadir}/ri"
diff --git a/recipes-support/jsoncpp/jsoncpp-0.5.0/Makefile b/recipes-support/jsoncpp/jsoncpp-0.5.0/Makefile
new file mode 100644
index 0000000..bee6876
--- /dev/null
+++ b/recipes-support/jsoncpp/jsoncpp-0.5.0/Makefile
@@ -0,0 +1,46 @@
+includedir ?= /usr/include
+libdir ?= /usr/lib
+
+CPP_SRCS += \
+src/lib_json/json_reader.cpp \
+src/lib_json/json_value.cpp \
+src/lib_json/json_writer.cpp
+
+OBJS += \
+json_reader.o \
+json_value.o \
+json_writer.o
+
+CPP_DEPS += \
+json_reader.d \
+json_value.d \
+json_writer.d
+
+all: libjsoncpp.a
+
+libjsoncpp.a: $(OBJS)
+ @echo 'Building target: $@'
+ $(AR) -r libjsoncpp.a $(OBJS)
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+%.o: src/lib_json/%.cpp
+ @echo 'Building file: $<'
+ $(CXX) $(CFLAGS) -Iinclude -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+ @echo 'Finished building: $<'
+ @echo ' '
+
+install:
+ mkdir -p $(DESTDIR)$(libdir)
+ mkdir -p $(DESTDIR)$(includedir)/json
+ cp libjsoncpp.a $(DESTDIR)$(libdir)/
+ cp include/json/* $(DESTDIR)$(includedir)/json/
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS)$(CPP_DEPS) libjsoncpp.a
+ -@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
diff --git a/recipes-support/jsoncpp/jsoncpp-0.5.0/jsoncpp-0.5.0-p1.patch b/recipes-support/jsoncpp/jsoncpp-0.5.0/jsoncpp-0.5.0-p1.patch
new file mode 100644
index 0000000..ce0f890
--- /dev/null
+++ b/recipes-support/jsoncpp/jsoncpp-0.5.0/jsoncpp-0.5.0-p1.patch
@@ -0,0 +1,13 @@
+Index: jsoncpp-src-0.5.0/include/json/value.h
+===================================================================
+--- jsoncpp-src-0.5.0.orig/include/json/value.h 2012-07-11 10:26:55.766138435 -0500
++++ jsoncpp-src-0.5.0/include/json/value.h 2012-07-11 10:30:09.816144678 -0500
+@@ -204,7 +204,7 @@
+ # endif
+ Value( bool value );
+ Value( const Value &other );
+- ~Value();
++ virtual ~Value();
+
+ Value &operator=( const Value &other );
+ /// Swap values.
diff --git a/recipes-support/jsoncpp/jsoncpp_0.5.0.bb b/recipes-support/jsoncpp/jsoncpp_0.5.0.bb
new file mode 100644
index 0000000..18f1c86
--- /dev/null
+++ b/recipes-support/jsoncpp/jsoncpp_0.5.0.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Json C++ Library"
+HOMEPAGE = "http://jsoncpp.sourceforge.net/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+DEPENDS = ""
+BBCLASSEXTEND = "native"
+NATIVE_INSTALL_WORKS = "1"
+
+SRC_URI = " \
+ http://sw.multitech.prv/openembedded/sources/jsoncpp-src-0.5.0.tar.gz \
+ file://jsoncpp-0.5.0-p1.patch \
+ file://Makefile \
+"
+
+PR = "r2"
+
+# For tarball packages (as opposed to git / svn which include the commit in the URI)
+SRC_URI[md5sum] = "24482b67c1cb17aac1ed1814288a3a8f"
+SRC_URI[sha256sum] = "22b14ecd0de8cdad2b6b6839f6d0804d3b84e91f42861ebd843832a26a927433"
+
+S = "${WORKDIR}/jsoncpp-src-${PV}"
+
+do_compile() {
+ cp ../Makefile .
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
+
+
diff --git a/recipes-support/libesmtp/libesmtp_1.0.6.bb b/recipes-support/libesmtp/libesmtp_1.0.6.bb
new file mode 100644
index 0000000..e421e63
--- /dev/null
+++ b/recipes-support/libesmtp/libesmtp_1.0.6.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "LibESMTP is a library to manage posting \
+(or submission of) electronic mail using SMTP to a \
+preconfigured Mail Transport Agent (MTA) such as Exim or PostFix."
+LICENSE = "LGPLv2.1 GPLv2"
+LIC_FILES_CHKSUM= "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LIB;md5=e3eda01d9815f8d24aae2dbd89b68b06 \
+"
+SECTION = "libs/network"
+DEPENDS = "openssl"
+PR = "r0"
+
+SRC_URI = "http://www.stafford.uklinux.net/libesmtp/libesmtp-${PV}.tar.bz2"
+
+inherit autotools binconfig
+
+EXTRA_OECONF = "--disable-isoc --with-openssl=${STAGING_LIBDIR}/.."
+
+FILES_${PN} = "${libdir}/lib*${SOLIBS} \
+ ${libdir}/esmtp-plugins/*${SOLIBSDEV}"
+FILES_${PN}-dev += "${libdir}/esmtp-plugins/*.la"
+FILES_${PN}-staticdev += "${libdir}/esmtp-plugins/*.a"
+FILES_${PN}-dbg += "${libdir}/esmtp-plugins/.debug/"
+
+SRC_URI[md5sum] = "bf3915e627fd8f35524a8fdfeed979c8"
+SRC_URI[sha256sum] = "d0a61a5c52d99fa7ce7d00ed0a07e341dbda67101dbed1ab0cdae3f37db4eb0b"