54 lines
1.6 KiB
C
54 lines
1.6 KiB
C
|
/*
|
||
|
* Copyright (c) 2023 Meta
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#include "version.h"
|
||
|
#include <string.h>
|
||
|
#include <zephyr/kernel.h>
|
||
|
#include <zephyr/net/hostname.h>
|
||
|
#include <zephyr/posix/sys/utsname.h>
|
||
|
|
||
|
#ifdef CONFIG_NET_HOSTNAME_ENABLE
|
||
|
#define UTSNAME_NODENAME CONFIG_NET_HOSTNAME
|
||
|
#else
|
||
|
#define UTSNAME_NODENAME "zephyr"
|
||
|
#endif
|
||
|
|
||
|
#if defined(__DATE__) && defined(__TIME__)
|
||
|
#define UTSNAME_VERSION(_ver) _ver " " __DATE__ " " __TIME__
|
||
|
#else
|
||
|
#define UTSNAME_VERSION(_ver) _ver
|
||
|
#endif
|
||
|
|
||
|
#ifdef BUILD_VERSION
|
||
|
#define VERSION_BUILD STRINGIFY(BUILD_VERSION)
|
||
|
#else
|
||
|
#define VERSION_BUILD KERNEL_VERSION_STRING
|
||
|
#endif
|
||
|
|
||
|
#define UTSNAME_INITIALIZER(_sys, _node, _rel, _ver, _mach) \
|
||
|
{ \
|
||
|
.sysname = _sys, .nodename = _node, .release = _rel, \
|
||
|
.version = UTSNAME_VERSION(_ver), .machine = _mach, \
|
||
|
}
|
||
|
|
||
|
static const struct utsname z_name = UTSNAME_INITIALIZER(
|
||
|
"Zephyr", UTSNAME_NODENAME, KERNEL_VERSION_STRING, VERSION_BUILD, CONFIG_ARCH);
|
||
|
|
||
|
BUILD_ASSERT(sizeof(z_name.sysname) >= sizeof("Zephyr"));
|
||
|
BUILD_ASSERT(sizeof(z_name.release) >= sizeof(KERNEL_VERSION_STRING));
|
||
|
BUILD_ASSERT(sizeof(z_name.version) >= sizeof(UTSNAME_VERSION(VERSION_BUILD)));
|
||
|
BUILD_ASSERT(sizeof(z_name.machine) >= sizeof(CONFIG_ARCH));
|
||
|
|
||
|
int uname(struct utsname *name)
|
||
|
{
|
||
|
memcpy(name, &z_name, sizeof(*name));
|
||
|
if (IS_ENABLED(CONFIG_NET_HOSTNAME_ENABLE)) {
|
||
|
strncpy(name->nodename, net_hostname_get(), sizeof(name->nodename));
|
||
|
name->nodename[sizeof(name->nodename) - 1] = '\0';
|
||
|
}
|
||
|
return 0;
|
||
|
}
|