diff options
Diffstat (limited to 'meta-google')
30 files changed, 938 insertions, 73 deletions
diff --git a/meta-google/conf/distro/gbmc.conf b/meta-google/conf/distro/gbmc.conf index 354c93991..0aca6318c 100644 --- a/meta-google/conf/distro/gbmc.conf +++ b/meta-google/conf/distro/gbmc.conf @@ -16,3 +16,5 @@ DISTRO_FEATURES_append = " ipmi-fru" WATCHDOG_PKG ?= "watchdog" SANITY_TESTED_DISTROS_append = " Debian-rodete \n debian-rodete \n " + +PREFERRED_PROVIDER_virtual/bmc-update ?= "inplace-gbmc-update" diff --git a/meta-google/recipes-core/busybox/files/gbmc.cfg b/meta-google/recipes-core/busybox/files/gbmc.cfg index e097a921a..158f771b3 100644 --- a/meta-google/recipes-core/busybox/files/gbmc.cfg +++ b/meta-google/recipes-core/busybox/files/gbmc.cfg @@ -16,3 +16,6 @@ CONFIG_FEATURE_UDHCPC6_RFC3646=y CONFIG_FEATURE_UDHCPC6_RFC4704=y CONFIG_FEATURE_UDHCPC6_RFC4833=y CONFIG_FEATURE_UDHCPC6_RFC5970=y + +# Misc +CONFIG_BC=y diff --git a/meta-google/recipes-extended/libconfig/conf2struct-native_git.bb b/meta-google/recipes-extended/libconfig/conf2struct-native_git.bb index 1a77f4de1..ab5c3d829 100644 --- a/meta-google/recipes-extended/libconfig/conf2struct-native_git.bb +++ b/meta-google/recipes-extended/libconfig/conf2struct-native_git.bb @@ -1,9 +1,9 @@ LICENSE = "BSD" -LIC_FILES_CHKSUM = "file://COPYING;md5=1b886630cdc9a17c26250934beda407d" +LIC_FILES_CHKSUM = "file://COPYING;md5=667d4ad55f5fbf4c3e853e8acd0f74de" PV = "0.1+git${SRCPV}" SRC_URI = "git://github.com/yrutschle/conf2struct" -SRCREV = "e8468017b27211b1c452f8df0afe6f19e97035a4" +SRCREV = "6bc9eed1eb50175e5fda791f27d85e72f5a6ac78" S = "${WORKDIR}/git" SRC_URI += " \ diff --git a/meta-google/recipes-extended/networking/sslh_git.bb b/meta-google/recipes-extended/networking/sslh_git.bb index b683571c1..ba26e2999 100644 --- a/meta-google/recipes-extended/networking/sslh_git.bb +++ b/meta-google/recipes-extended/networking/sslh_git.bb @@ -1,10 +1,10 @@ -PR = "r1" +PR = "r2" PV = "0.1+git${SRCPV}" LICENSE = "GPLv2" LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" SRC_URI = "git://github.com/yrutschle/sslh" -SRCREV = "517e4ad5b4d57dae396790882bd4629947be1632" +SRCREV = "63f9c4a582f79f4d0e484efe0ccaeed77a79f7df" S = "${WORKDIR}/git" inherit perlnative @@ -14,7 +14,7 @@ DEPENDS += "libbsd" DEPENDS += "libcap" DEPENDS += "libconfig" DEPENDS += "systemd" -DEPENDS += "pcre" +DEPENDS += "pcre2" EXTRA_OEMAKE += "DESTDIR=${D}" EXTRA_OEMAKE += "PREFIX=${prefix}" @@ -22,10 +22,16 @@ EXTRA_OEMAKE += "USELIBCAP=1" EXTRA_OEMAKE += "USELIBBSD=1" EXTRA_OEMAKE += "USESYSTEMD=1" +do_configure() { + oe_runmake distclean +} + do_compile() { - oe_runmake + # Workaround for the broken dependencies in the Makefile + oe_runmake sslh-conf.h + oe_runmake } do_install() { - oe_runmake install + oe_runmake install } diff --git a/meta-google/recipes-google/google-misc/google-misc.inc b/meta-google/recipes-google/google-misc/google-misc.inc index 20b4e0536..36ad141de 100644 --- a/meta-google/recipes-google/google-misc/google-misc.inc +++ b/meta-google/recipes-google/google-misc/google-misc.inc @@ -6,7 +6,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://../../LICENSE;md5=34400b68072d710fecd0a2940a0d1658" SRC_URI += "git://github.com/openbmc/google-misc" -SRCREV = "548f3ad151678fc3ee87b7bef25b6601611af978" +SRCREV = "d237c6cc59e731c2a8a3a1bdcd91ad39bd67e182" S = "${WORKDIR}/git/subprojects/${GOOGLE_MISC_PROJ}" inherit meson diff --git a/meta-google/recipes-google/ipmi/google-ipmi-sys_git.bb b/meta-google/recipes-google/ipmi/google-ipmi-sys_git.bb index 6acf234cf..801de4361 100644 --- a/meta-google/recipes-google/ipmi/google-ipmi-sys_git.bb +++ b/meta-google/recipes-google/ipmi/google-ipmi-sys_git.bb @@ -19,7 +19,7 @@ DEPENDS += " \ S = "${WORKDIR}/git" SRC_URI = "git://github.com/openbmc/google-ipmi-sys" -SRCREV = "bc62b193aec2991397a7f671cd3a74492a961d5c" +SRCREV = "b69209b498bf9b1c009c528e40280d13e68f8dbd" FILES_${PN} += "${libdir}/ipmid-providers" diff --git a/meta-google/recipes-google/kcs/gbmc-kcs-config.bb b/meta-google/recipes-google/kcs/gbmc-kcs-config.bb deleted file mode 100644 index ca7110660..000000000 --- a/meta-google/recipes-google/kcs/gbmc-kcs-config.bb +++ /dev/null @@ -1,46 +0,0 @@ -SUMMARY = "Configures KCS for a gBMC system" -PR = "r1" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" - -inherit systemd - -S = "${WORKDIR}" - -PROVIDES += "virtual-obmc-host-ipmi-hw" -RPROVIDES_${PN} += "virtual-obmc-host-ipmi-hw" - -FILES_${PN} += "${systemd_system_unitdir}" -RDEPENDS_${PN} += "google-kcsbridge" - -GBMC_KCS_DEV ?= "" - -def systemd_escape_char(c): - return '\\x{:x}'.format(ord(c)) - -def systemd_escape(unit): - import string - ret = '' - if len(unit) > 0 and unit[0] == '.': - ret += systemd_escape_char(unit[0]) - unit = unit[1:] - for c in unit: - if c == '/': - ret += '-' - elif c not in {*string.ascii_letters, *string.digits, ':', '_', '.'}: - ret += systemd_escape_char(c) - else: - ret += c - return ret - -do_install_append() { - if [ -z '${GBMC_KCS_DEV}' ]; then - echo "Missing GBMC_KCS_DEV" >&2 - exit 1 - fi - - wantdir=${D}${systemd_system_unitdir}/multi-user.target.wants - install -d -m0755 $wantdir - inst="${@systemd_escape(GBMC_KCS_DEV)}" - ln -sv ../kcsbridge@.service $wantdir/kcsbridge@$inst.service -} diff --git a/meta-google/recipes-google/kcs/google-kcsbridge_git.bb b/meta-google/recipes-google/kcs/google-kcsbridge_git.bb deleted file mode 100644 index 4b3138eee..000000000 --- a/meta-google/recipes-google/kcs/google-kcsbridge_git.bb +++ /dev/null @@ -1,16 +0,0 @@ -SUMMARY = "Google NCSI daemon" -DESCRIPTION = "Google NCSI daemon." -GOOGLE_MISC_PROJ = "kcsbridge" - -require ../google-misc/google-misc.inc - -inherit systemd - -DEPENDS += " \ - fmt \ - sdbusplus \ - sdeventplus \ - stdplus \ -" - -SYSTEMD_SERVICE_${PN} += "kcsbridge@.service" diff --git a/meta-google/recipes-google/networking/google-usb-network/00-bmc-usb0.network.m4 b/meta-google/recipes-google/networking/google-usb-network/00-bmc-usb0.network.m4 new file mode 100644 index 000000000..699ee8538 --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network/00-bmc-usb0.network.m4 @@ -0,0 +1,7 @@ +[Match] +Name=usb0 +[Address] +Address=M_BMC_IP_ADDR +[Network] +LinkLocalAddressing=ipv6 +IPv6AcceptRA=no diff --git a/meta-google/recipes-google/networking/google-usb-network/usb_network.service.m4 b/meta-google/recipes-google/networking/google-usb-network/usb_network.service.m4 new file mode 100644 index 000000000..581c29b66 --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network/usb_network.service.m4 @@ -0,0 +1,28 @@ +divert(-1) +define(`HOST_MAC_ARG', `ifelse($1, `invalid', `', + ifelse($1, `', `', + ` --host-mac "$1"'))') + +define(`DEV_MAC_ARG', `ifelse($1, `invalid', `', + ifelse($1, `', `', + ` --dev-mac "$1"'))') + +divert(0)dnl +dnl +[Unit] +Description=USB ECM Gadget +After=phosphor-ipmi-host.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=M_SCRIPT_INSTALL_DIR/usb_network.sh \ + --product-id "M_BMC_USB_ECM_PRODUCT_ID" \ + --product-name "M_BMC_USB_ECM_PRODUCT_NAME" \ + HOST_MAC_ARG(M_BMC_USB_ECM_HOST_MAC) \ + DEV_MAC_ARG(M_BMC_USB_ECM_DEV_MAC) \ + --bind-device "M_BMC_USB_ECM_BIND_DEV" +ExecStop=M_SCRIPT_INSTALL_DIR/usb_network.sh stop + +[Install] +WantedBy=multi-user.target diff --git a/meta-google/recipes-google/networking/google-usb-network/usb_network.sh b/meta-google/recipes-google/networking/google-usb-network/usb_network.sh new file mode 100755 index 000000000..08f9ad23b --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network/usb_network.sh @@ -0,0 +1,165 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# List of options the script accepts. Trailing column means that the option +# requires an argument. +ARGUMENT_LIST=( + "help" + "product-id:" + "product-name:" + "host-mac:" + "bind-device:" + "dev-mac:" + "gadget-dir-name:" + "iface-name:" +) + +print_usage() { + cat <<HELP +$0 [OPTIONS] [stop|start] + Create USB Gadget Configuration + --product-id USB Product Id for the gadget. + --product-name Product name string (en) for the gadget. + --host-mac MAC address of the host part of the connection. Optional. + --dev-mac MAC address of the device (gadget) part of the connection. Optional. + --bind-device Name of the device to bind, as listed in /sys/class/udc/ + --gadget-dir-name Optional base name for gadget directory. Default: "g1" + --iface-name Optional name of the network interface. Default: "usb0" + --help Print this help and exit. +HELP +} + +gadget_start() { + local gadget_dir="${CONFIGFS_HOME}/usb_gadget/${GADGET_DIR_NAME}" + mkdir -p "${gadget_dir}" + echo ${ID_VENDOR} > "${gadget_dir}/idVendor" + echo ${ID_PRODUCT} > "${gadget_dir}/idProduct" + + local str_en_dir="${gadget_dir}/strings/0x409" + mkdir -p "${str_en_dir}" + echo ${STR_EN_VENDOR} > "${str_en_dir}/manufacturer" + echo ${STR_EN_PRODUCT} > "${str_en_dir}/product" + + local config_dir="${gadget_dir}/configs/c.1" + mkdir -p "${config_dir}" + echo 100 > "${config_dir}/MaxPower" + mkdir -p "${config_dir}/strings/0x409" + echo "ECM" > "${config_dir}/strings/0x409/configuration" + + local func_dir="${gadget_dir}/functions/ecm.${IFACE_NAME}" + mkdir -p "${func_dir}" + + if [[ -n $HOST_MAC_ADDR ]]; then + echo ${HOST_MAC_ADDR} > ${func_dir}/host_addr + fi + + if [[ -n $DEV_MAC_ADDR ]]; then + echo ${DEV_MAC_ADDR} > ${func_dir}/dev_addr + fi + + ln -s "${func_dir}" "${config_dir}" + + echo "${BIND_DEVICE}" > ${gadget_dir}/UDC +} + +gadget_stop() { + local gadget_dir="${CONFIGFS_HOME}/usb_gadget/${GADGET_DIR_NAME}" + rm -f ${gadget_dir}/configs/c.1/ecm.${IFACE_NAME} + rm -rf ${gadget_dir}/configs/c.1/strings/0x409 + rm -rf ${gadget_dir}/configs/c.1 + rm -rf ${gadget_dir}/strings/0x409 + rm -rf ${gadget_dir}/functions/ecm.${IFACE_NAME} + rm -rf ${gadget_dir} +} + +opts=$(getopt \ + --longoptions "$(printf "%s," "${ARGUMENT_LIST[@]}")" \ + --name "$(basename "$0")" \ + --options "" \ + -- "$@" +) + +eval set --$opts + +CONFIGFS_HOME=${CONFIGFS_HOME:-/sys/kernel/config} +ID_VENDOR="0x18d1" # Google +ID_PRODUCT="" +STR_EN_VENDOR="Google" +STR_EN_PRODUCT="" +DEV_MAC_ADDR="" +HOST_MAC_ADDR="" +BIND_DEVICE="" +ACTION="start" +GADGET_DIR_NAME="g1" +IFACE_NAME="usb0" +while [[ $# -gt 0 ]]; do + case "$1" in + --product-id) + ID_PRODUCT=$2 + shift 2 + ;; + --product-name) + STR_EN_PRODUCT=$2 + shift 2 + ;; + --host-mac) + HOST_MAC_ADDR=$2 + shift 2 + ;; + --dev-mac) + DEV_MAC_ADDR=$2 + shift 2 + ;; + --bind-device) + BIND_DEVICE=$2 + shift 2 + ;; + --gadget-dir-name) + GADGET_DIR_NAME=$2 + shift 2 + ;; + --iface-name) + IFACE_NAME=$2 + shift 2 + ;; + --help) + print_usage + exit 0 + ;; + start) + ACTION="start" + shift 1 + break + ;; + stop) + ACTION="stop" + shift 1 + break + ;; + --) + shift 1 + ;; + *) + break + ;; + esac +done + +if [[ $ACTION == "stop" ]]; then + gadget_stop +else + gadget_start +fi diff --git a/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh b/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh new file mode 100755 index 000000000..e5894338b --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network/usb_network_test.sh @@ -0,0 +1,295 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +TEMPDIRS="" +TEMPFILES="" +# Script under test +SUT=$PWD/usb_network.sh + +TEST_STATUS="OK" + +test_setup() { + echo -n "Testing $1 ..." + FAKE_CONFIGFS=$(mktemp -d) + TEMPDIRS="${TEMPDIRS} ${FAKE_CONFIGFS}" + FAKE_GADGETFS=$FAKE_CONFIGFS/usb_gadget + mkdir -p "$FAKE_GADGETFS" +} + +test_teardown() { + echo ${TEST_STATUS} + if test -n "$TEMPDIRS"; then + rm -rf ${TEMPDIRS} + fi + if test -n "$TEMPFILES"; then + rm -f $TEMPFILES + fi +} + +test_fail() { + echo -n " $@ " >&2 + TEST_STATUS="FAIL" + + test_teardown + exit 1 +} + +check_file_content() { + local filename="$1" + local expected_content="$2" + + if ! test -f "${filename}"; then + test_fail "File ${filename} does not exist!" + fi + + local actual_content=$(cat ${filename}) + if [[ $expected_content != $actual_content ]]; then + test_fail "Expected ${expected_content}, got ${actual_content}" + fi +} + +test_gadget_creation_with_defaults() { + local extra_args=() + local gadget_dir="$1" + if [[ $gadget_dir == "" ]]; then + gadget_dir="g1"; + else + extra_args=(${extra_args} --gadget-dir-name "${gadget_dir}") + fi + local product_name="Souvenier BMC" + local product_id="0xcafe" + local host_mac="ab:cd:ef:10:11:12" + local dev_mac="12:11:10:ef:cd:ab" + local bind_device="f80002000.udc" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --host-mac "${host_mac}" \ + --dev-mac "${dev_mac}" \ + --bind-device "${bind_device}" \ + ${extra_args[@]} + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/dev_addr "${dev_mac}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/host_addr "${host_mac}" + + if ! test -d ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0; then + test_fail "Function directory was not created" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.usb0" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0 ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + +test_gadget_creation_with_override() { + mkdir -p ${FAKE_GADGETFS}/g1/{strings,configs,functions} + touch ${FAKE_GADGETFS}/g1/{idVendor,idProduct} + + test_gadget_creation_with_defaults +} + +test_gadget_stopping() { + local extra_args=() + local gadget_dir="$1" + local iface_name="$2" + if [[ $gadget_dir == "" ]]; then + gadget_dir="g1"; + else + extra_args=(${extra_args} --gadget-dir-name "${gadget_dir}") + fi + + if [[ $iface_name == "" ]]; then + iface_name="usb0"; + else + extra_args=(${extra_args} --iface-name "${iface_name}") + fi + + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} ${extra_args[@]} stop + + if test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not removed!" + fi +} + +test_gadget_creation_no_macs() { + local gadget_dir="g1"; + local product_name="Souvenier BMC" + local product_id="0xcafe" + local bind_device="f80002000.udc" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --bind-device "${bind_device}" + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/dev_addr; then + test_fail "dev_addr should not be set" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0/host_addr; then + test_fail "host_addr should not be set" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.usb0" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.usb0 ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + +test_gadget_creation_alt_iface() { + local gadget_dir="g1"; + local product_name="Souvenier BMC" + local product_id="0xcafe" + local bind_device="f80002000.udc" + local iface_name="iface0" + CONFIGFS_HOME=${FAKE_CONFIGFS} ${SUT} --product-id "${product_id}" \ + --product-name "${product_name}" \ + --bind-device "${bind_device}" \ + --iface-name "${iface_name}" + + if test $? -ne 0; then + test_fail "${SUT} failed" + fi + + if ! test -d "${FAKE_GADGETFS}/${gadget_dir}"; then + test_fail "Gadget was not created!" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idVendor "0x18d1" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/idProduct "${product_id}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/manufacturer "Google" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/strings/0x409/product "${product_name}" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/MaxPower "100" + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/strings/0x409/configuration "ECM" + + if ! test -d ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}; then + test_fail "Function directory was not created" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}/dev_addr; then + test_fail "dev_addr should not be set" + fi + + if test -e ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name}/host_addr; then + test_fail "host_addr should not be set" + fi + + local func_link="${FAKE_GADGETFS}/${gadget_dir}/configs/c.1/ecm.${iface_name}" + if ! test -L "${func_link}"; then + test_fail "Symlink to the function was not created in the config" + fi + + local link_dest=$(realpath ${func_link}) + if [[ $link_dest != ${FAKE_GADGETFS}/${gadget_dir}/functions/ecm.${iface_name} ]]; then + test_fail "Symlink points to the wrong file/dir" + fi + + check_file_content ${FAKE_GADGETFS}/${gadget_dir}/UDC "${bind_device}" +} + + +# ------------------------------------------------------------------- +test_setup "Device Creation" + +test_gadget_creation_with_defaults + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation With Override" + +test_gadget_creation_with_override + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Test Device Stop" + +test_gadget_creation_with_defaults +test_gadget_stopping + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation/Stopping, Alternative Name" + +test_gadget_creation_with_defaults "gAlt" +test_gadget_stopping "gAlt" + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation without MAC Addrs" + +test_gadget_creation_no_macs + +test_teardown +# ------------------------------------------------------------------- + +# ------------------------------------------------------------------- +test_setup "Device Creation/Stopping, Alternative Interface" + +test_gadget_creation_alt_iface + +test_teardown +# ------------------------------------------------------------------- + +echo "SUCCESS!" diff --git a/meta-google/recipes-google/networking/google-usb-network_git.bb b/meta-google/recipes-google/networking/google-usb-network_git.bb new file mode 100644 index 000000000..ec51eaa5b --- /dev/null +++ b/meta-google/recipes-google/networking/google-usb-network_git.bb @@ -0,0 +1,64 @@ +SUMMARY = "Google USB ECM Gadget Configuration Script" +DESCRIPTION = "Google USB ECM Gadget Configuration Script" +PR = "r1" +PV = "0.2" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +FILESEXTRAPATHS_prepend = "${THISDIR}/${PN}:" + +inherit systemd + +DEPENDS += "m4-native" +DEPENDS += "systemd" +RDEPENDS_${PN} += "bash" + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "usb_network.service" + +BMC_IP_ADDR ??= "169.254.95.118/16" +BMC_USB_ECM_PRODUCT_ID ??= "" +BMC_USB_ECM_PRODUCT_NAME ??= "${MACHINE} BMC" +BMC_USB_ECM_HOST_MAC ??= "invalid" +BMC_USB_ECM_DEV_MAC ??= "invalid" +BMC_USB_ECM_BIND_DEV ??= "" +BMC_USB_CONFIG_PRIORITY ??= "" +BMC_USB_CONFIG_FILENAME ??= "${BMC_USB_CONFIG_PRIORITY}-bmc-usb0.network" + +SRC_URI += "file://00-bmc-usb0.network.m4" +SRC_URI += "file://usb_network.service.m4" +SRC_URI += "file://usb_network.sh" + +FILES_${PN} = "${bindir}/usb_network.sh" +FILES_${PN}_append = " ${systemd_unitdir}/network/${BMC_USB_CONFIG_FILENAME}" + +do_compile() { + test "X${BMC_IP_ADDR}" != "X" || bberror "Please define BMC_IP_ADDR" + m4 -DM_BMC_IP_ADDR=${BMC_IP_ADDR} ${WORKDIR}/00-bmc-usb0.network.m4 > ${S}/00-bmc-usb0.network + + test "X${BMC_USB_ECM_PRODUCT_ID}" != "X" || bberror "Please define BMC_USB_ECM_PRODUCT_ID" + test "X${BMC_USB_ECM_PRODUCT_NAME}" != "X" || bberror "Please define BMC_USB_ECM_PRODUCT_NAME" + test "X${BMC_USB_ECM_BIND_DEV}" != "X" || bberror "Please define BMC_USB_ECM_BIND_DEV" + + m4 \ + -DM_BMC_USB_ECM_PRODUCT_ID="${BMC_USB_ECM_PRODUCT_ID}" \ + -DM_BMC_USB_ECM_PRODUCT_NAME="${BMC_USB_ECM_PRODUCT_NAME}" \ + -DM_BMC_USB_ECM_HOST_MAC="${BMC_USB_ECM_HOST_MAC}" \ + -DM_BMC_USB_ECM_DEV_MAC="${BMC_USB_ECM_DEV_MAC}" \ + -DM_BMC_USB_ECM_BIND_DEV="${BMC_USB_ECM_BIND_DEV}" \ + -DM_SCRIPT_INSTALL_DIR="${bindir}" \ + ${WORKDIR}/usb_network.service.m4 > ${S}/usb_network.service +} + +do_install() { + install -d ${D}/${bindir} + install -m 0755 ${WORKDIR}/usb_network.sh ${D}/${bindir} + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${S}/usb_network.service ${D}${systemd_system_unitdir} + + install -d ${D}${systemd_unitdir}/network + install -m 0644 ${S}/00-bmc-usb0.network \ + ${D}${systemd_unitdir}/network/${BMC_USB_CONFIG_FILENAME} +} diff --git a/meta-google/recipes-phosphor/flash/dummy-gbmc-update.bb b/meta-google/recipes-phosphor/flash/dummy-gbmc-update.bb new file mode 100644 index 000000000..7eba3b0fc --- /dev/null +++ b/meta-google/recipes-phosphor/flash/dummy-gbmc-update.bb @@ -0,0 +1,23 @@ +SUMMARY = "Dummy image uploader for sending debug binaries" +DESCRIPTION = "Dummy image uploader for sending debug binaries" +PR = "r1" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd + +SRC_URI += "file://config-dummy.json" +SRC_URI += "file://dummy-verify.service" + +FILES_${PN} += "${datadir}/phosphor-ipmi-flash" + +SYSTEMD_SERVICE_${PN} += "dummy-verify.service" + +do_install() { + install -d ${D}${datadir}/phosphor-ipmi-flash + install -m 0644 ${WORKDIR}/config-dummy.json ${D}${datadir}/phosphor-ipmi-flash + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/dummy-verify.service ${D}${systemd_system_unitdir} +} diff --git a/meta-google/recipes-phosphor/flash/dummy-gbmc-update/config-dummy.json b/meta-google/recipes-phosphor/flash/dummy-gbmc-update/config-dummy.json new file mode 100644 index 000000000..e68e9105b --- /dev/null +++ b/meta-google/recipes-phosphor/flash/dummy-gbmc-update/config-dummy.json @@ -0,0 +1,19 @@ +[{ + "blob": "/flash/dummy", + "handler": { + "type": "file", + "path": "/run/initramfs/bmc-image" + }, + "actions": { + "preparation": { + "type": "skip" + }, + "verification": { + "type": "systemd", + "unit": "dummy-verify.service" + }, + "update": { + "type": "skip" + } + } +}] diff --git a/meta-google/recipes-phosphor/flash/dummy-gbmc-update/dummy-verify.service b/meta-google/recipes-phosphor/flash/dummy-gbmc-update/dummy-verify.service new file mode 100644 index 000000000..ec320d551 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/dummy-gbmc-update/dummy-verify.service @@ -0,0 +1,6 @@ +[Unit] +Description=Dummy flash file verification + +[Service] +Type=oneshot +ExecStart=/bin/mv /run/initramfs/bmc-image /run/initramfs/dummy diff --git a/meta-google/recipes-phosphor/flash/google-key.bb b/meta-google/recipes-phosphor/flash/google-key.bb new file mode 100644 index 000000000..220211526 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/google-key.bb @@ -0,0 +1,26 @@ +SUMMARY = "Google Key installation Script" +DESCRIPTION = "Google Key installation Script" +PR = "r1" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +RDEPENDS_${PN} += "bash" +RDEPENDS_${PN} += "gnupg" + +SRC_URI += " \ + file://platforms_gbmc_bringup.gpg \ + file://platforms_gbmc_secure.gpg \ + file://verify-bmc-image.sh \ +" + +do_install() { + # Install keys into image. + install -d -m 0755 ${D}${datadir}/google-key + install -m 0644 ${WORKDIR}/platforms_gbmc_secure.gpg ${D}${datadir}/google-key/prod.key + install -m 0644 ${WORKDIR}/platforms_gbmc_bringup.gpg ${D}${datadir}/google-key/dev.key + + # Install the verification helper + install -d -m 0755 ${D}${bindir} + install -m 0755 ${WORKDIR}/verify-bmc-image.sh ${D}${bindir} +} diff --git a/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_bringup.gpg b/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_bringup.gpg Binary files differnew file mode 100644 index 000000000..f347e224b --- /dev/null +++ b/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_bringup.gpg diff --git a/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_secure.gpg b/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_secure.gpg Binary files differnew file mode 100644 index 000000000..9281f7790 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/google-key/platforms_gbmc_secure.gpg diff --git a/meta-google/recipes-phosphor/flash/google-key/verify-bmc-image.sh b/meta-google/recipes-phosphor/flash/google-key/verify-bmc-image.sh new file mode 100755 index 000000000..cac229a94 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/google-key/verify-bmc-image.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +help_out() { + echo "$ARG0 [--allow-dev] <image file> <sig file>" >&2 + exit 2 +} + +opts="$(getopt -o 'd' -l 'allow-dev' -- "$@")" || exit +dev= +eval set -- "$opts" +while true; do + case "$1" in + --allow-dev|-d) + dev=1 + shift + ;; + --) + shift + break + ;; + *) + echo "Bad option: $1" >&2 + help_out + ;; + esac +done +image_file="${1?Missing image file}" || help_out +sig_file="${2?Missing sig file}" || help_out + +# gnupg needs a home directory even though we don't want to persist any +# information. We always make a new temporary directory for this +GNUPGHOME= +cleanup() { + test -n "$GNUPGHOME" && rm -rf "$GNUPGHOME" +} +trap cleanup ERR EXIT INT +export GNUPGHOME="$(mktemp -d)" || exit + +gpg() { + command gpg --batch --allow-non-selfsigned-uid --no-tty "$@" +} +import_key() { + gpg --import "/usr/share/google-key/$1.key" +} + +import_key prod +if [ -n "$dev" ]; then + import_key dev +fi +gpg --verify --ignore-time-conflict "$sig_file" "$image_file" diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update.bb b/meta-google/recipes-phosphor/flash/inplace-gbmc-update.bb new file mode 100644 index 000000000..c71a579e1 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update.bb @@ -0,0 +1,44 @@ +SUMMARY = "Google BMC Inplace Update Script" +DESCRIPTION = "Google BMC Inplace Update Script" +PR = "r1" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit obmc-phosphor-systemd + +PROVIDES += "virtual/bmc-update" +RPROVIDES_${PN} += "virtual/bmc-update" + +RDEPENDS_${PN} += "google-key" +RDEPENDS_${PN} += "bash" + +SRC_URI += " \ + file://config-bmc.json \ + file://inplace-gbmc-verify.service \ + file://inplace-gbmc-verify.sh \ + file://inplace-gbmc-version.service \ + file://inplace-gbmc-version.sh \ +" + +SYSTEMD_SERVICE_${PN} += "inplace-gbmc-verify.service" +SYSTEMD_SERVICE_${PN} += "inplace-gbmc-version.service" + +FILES_${PN} += "${datadir}/phosphor-ipmi-flash" + +do_install() { + sed -i 's,@ALLOW_DEV@,,' ${WORKDIR}/inplace-gbmc-verify.sh + + install -d ${D}${bindir} + install -m 0755 ${WORKDIR}/*.sh ${D}${bindir} + + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/*.service ${D}${systemd_system_unitdir} + + install -d ${D}${datadir}/phosphor-ipmi-flash + install -m 0644 ${WORKDIR}/config-bmc.json ${D}${datadir}/phosphor-ipmi-flash +} + +do_install_prepend_dev() { + sed -i 's,@ALLOW_DEV@,--allow-dev,' ${WORKDIR}/inplace-gbmc-verify.sh +} diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update/config-bmc.json b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/config-bmc.json new file mode 100644 index 000000000..8bd11f2e1 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/config-bmc.json @@ -0,0 +1,33 @@ +[{ + "blob": "/flash/image", + "version": { + "handler": { + "type": "file", + "path": "/run/inplace-gbmc-version" + }, + "actions":{ + "open": { + "type": "systemd", + "unit": "inplace-gbmc-version.service" + } + } + }, + "handler": { + "type": "file", + "path": "/run/initramfs/bmc-image" + }, + "actions": { + "preparation": { + "type": "skip" + }, + "verification": { + "type": "systemd", + "unit": "inplace-gbmc-verify.service" + }, + "update": { + "type": "systemd", + "unit": "reboot.target", + "mode": "replace-irreversibly" + } + } +}] diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.service b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.service new file mode 100644 index 000000000..4552780af --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.service @@ -0,0 +1,6 @@ +[Unit] +Description=Verify the Flash Image File + +[Service] +Type=oneshot +ExecStart=/usr/bin/inplace-gbmc-verify.sh diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.sh b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.sh new file mode 100644 index 000000000..d5307d3d1 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-verify.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This script will check the signature for the BMC image against +# the baked in keyring available. If any aspect of this fails, +# the scripts returns non-zero and this can be reported to the +# host. +# +# 1. Verify the image +# 2. Rename the image + +KEYRING=/etc/googlekeys/gbmc/gbmc.gpg +SIGNATURE_FILE=/tmp/bmc.sig +STATUS_FILE=/tmp/bmc.verify + +# Store in /run/initramfs because the behaviour of mv changes +# depending on whether the file is moving within a tree or not. +IMAGE_FILE=/run/initramfs/bmc-image +VERIFIED_FILE=/run/initramfs/image-bmc + +# Make sure we run ERR traps when a function returns an error +set -e + +# Write out the result of the script to a status file upon exiting +# normally or due to an error +exit_handler() { + local status="$?" + if (( status == 0 )); then + echo "success" >"${STATUS_FILE}" + else + echo "failed" >"${STATUS_FILE}" + fi + trap - EXIT ERR + exit "$status" +} +trap exit_handler EXIT ERR + +echo "running" > ${STATUS_FILE} + +# Verify the image. +verify-bmc-image.sh @ALLOW_DEV@ "$IMAGE_FILE" "$SIGNATURE_FILE" || exit + +# Rename the staged file for initramfs updates. +mv ${IMAGE_FILE} ${VERIFIED_FILE}#!/bin/bash diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.service b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.service new file mode 100644 index 000000000..3f6b67179 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.service @@ -0,0 +1,9 @@ +[Unit] +Description=Version string for inplace BMC + +[Service] +Type=oneshot +StandardOutput=file:/run/inplace-gbmc-version +StandardError=journal +ExecStartPre=/bin/rm -f /run/inplace-gbmc-version +ExecStart=/usr/bin/inplace-gbmc-version.sh diff --git a/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.sh b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.sh new file mode 100644 index 000000000..0c5c4e787 --- /dev/null +++ b/meta-google/recipes-phosphor/flash/inplace-gbmc-update/inplace-gbmc-version.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +grep '^VERSION_ID=' /etc/os-release | sed 's,.*-\([^-]*\),\1,g' | tr -d '\n'#!/bin/bash diff --git a/meta-google/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-google/recipes-phosphor/images/obmc-phosphor-image.bbappend index 0c74fc8bb..942dfc14c 100644 --- a/meta-google/recipes-phosphor/images/obmc-phosphor-image.bbappend +++ b/meta-google/recipes-phosphor/images/obmc-phosphor-image.bbappend @@ -4,6 +4,7 @@ OBMC_IMAGE_EXTRA_INSTALL_append = " phosphor-ipmi-blobs" OBMC_IMAGE_EXTRA_INSTALL_append = " phosphor-ipmi-ethstats" OBMC_IMAGE_EXTRA_INSTALL_append = " phosphor-ipmi-flash" +# Google BMC (gBMC) specific installs OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " iproute2 iproute2-ss" OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " gbmc-systemd-config" OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " gbmc-iperf3" @@ -13,5 +14,12 @@ OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = \ '${@"" if not d.getVar("GBMC_NCSI_IF_NAME") else " gbmc-ncsi-config"}' OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = \ '${@"" if not d.getVar("GBMC_MAC_EEPROM_OF_NAME") else " gbmc-mac-config"}' -OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = \ - '${@"" if not d.getVar("GBMC_KCS_DEV") else " gbmc-kcs-config"}' + +# Include these useful utilities for all gbmc platforms +OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " ipmitool" +OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " iotools" +OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " lrzsz" + +# Add gBMC update recipes +OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " dummy-gbmc-update" +OBMC_IMAGE_EXTRA_INSTALL_append_gbmc = " virtual/bmc-update" diff --git a/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend b/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend new file mode 100644 index 000000000..03e99b2d0 --- /dev/null +++ b/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config.bbappend @@ -0,0 +1,22 @@ +FILESEXTRAPATHS_prepend_gbmc := "${THISDIR}/${PN}:" + +SRC_URI_append_gbmc = " file://gbmc_bridge.json" + +DEPENDS_append_gbmc = " jq-native" + +GBMCBR_IPMI_CHANNEL ?= "11" + +# Replace a channel in config.json to add gbmcbr reporting +do_install_append_gbmc() { + chjson=${D}${datadir}/ipmi-providers/channel_config.json + overlapping="$(jq '."${GBMCBR_IPMI_CHANNEL}" | .is_valid and .name != "gbmcbr"' $chjson)" + if [ "$overlapping" != "false" ]; then + echo "gBMC channel config overlaps on ${GBMCBR_IPMI_CHANNEL}" >&2 + cat $chjson + exit 1 + fi + jq --slurpfile brcfg ${WORKDIR}/gbmc_bridge.json \ + '. + {"${GBMCBR_IPMI_CHANNEL}": $brcfg[0]}' $chjson >${WORKDIR}/tmp + mv ${WORKDIR}/tmp $chjson +} + diff --git a/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config/gbmc_bridge.json b/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config/gbmc_bridge.json new file mode 100644 index 000000000..f87728388 --- /dev/null +++ b/meta-google/recipes-phosphor/ipmi/phosphor-ipmi-config/gbmc_bridge.json @@ -0,0 +1,11 @@ +{ + "name" : "gbmcbr", + "is_valid" : true, + "active_sessions" : 0, + "channel_info" : { + "medium_type" : "lan-802.3", + "protocol_type" : "ipmb-1.0", + "session_supported" : "multi-session", + "is_ipmi" : true + } +} diff --git a/meta-google/recipes-phosphor/settings/phosphor-settings-manager/timemanager-default-HOST-MANUAL.override.yml b/meta-google/recipes-phosphor/settings/phosphor-settings-manager/timemanager-default-HOST-MANUAL.override.yml index 77c0dff08..d7d46ec03 100644 --- a/meta-google/recipes-phosphor/settings/phosphor-settings-manager/timemanager-default-HOST-MANUAL.override.yml +++ b/meta-google/recipes-phosphor/settings/phosphor-settings-manager/timemanager-default-HOST-MANUAL.override.yml @@ -1,3 +1,17 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + --- /xyz/openbmc_project/time/sync_method: - Interface: xyz.openbmc_project.Time.Synchronization |