1 /** @file
2 * @brief Hostname configuration
3 */
4
5 /*
6 * Copyright (c) 2017 Intel Corporation
7 *
8 * SPDX-License-Identifier: Apache-2.0
9 */
10
11 #include <zephyr/logging/log.h>
12 LOG_MODULE_REGISTER(net_hostname, CONFIG_NET_HOSTNAME_LOG_LEVEL);
13
14 #include <zephyr/kernel.h>
15
16 #include <zephyr/net/hostname.h>
17 #include <zephyr/net/net_core.h>
18
19 static char hostname[NET_HOSTNAME_MAX_LEN + 1];
20
net_hostname_get(void)21 const char *net_hostname_get(void)
22 {
23 return hostname;
24 }
25
26 #if defined(CONFIG_NET_HOSTNAME_UNIQUE)
net_hostname_set_postfix(const uint8_t * hostname_postfix,int postfix_len)27 int net_hostname_set_postfix(const uint8_t *hostname_postfix,
28 int postfix_len)
29 {
30 #if !defined(CONFIG_NET_HOSTNAME_UNIQUE_UPDATE)
31 static bool postfix_set;
32 #endif
33 int pos = 0;
34 int i;
35
36 #if !defined(CONFIG_NET_HOSTNAME_UNIQUE_UPDATE)
37 if (postfix_set) {
38 return -EALREADY;
39 }
40 #endif
41
42 NET_ASSERT(postfix_len > 0);
43
44 /* Note that we convert the postfix to hex (2 chars / byte) */
45 if ((postfix_len * 2) >
46 (NET_HOSTNAME_MAX_LEN - (sizeof(CONFIG_NET_HOSTNAME) - 1))) {
47 return -EMSGSIZE;
48 }
49
50 for (i = 0; i < postfix_len; i++, pos += 2) {
51 snprintk(&hostname[sizeof(CONFIG_NET_HOSTNAME) - 1 + pos],
52 2 + 1, "%02x", hostname_postfix[i]);
53 }
54
55 NET_DBG("New hostname %s", hostname);
56
57 #if !defined(CONFIG_NET_HOSTNAME_UNIQUE_UPDATE)
58 postfix_set = true;
59 #endif
60
61 return 0;
62 }
63 #endif /* CONFIG_NET_HOSTNAME_UNIQUE */
64
net_hostname_init(void)65 void net_hostname_init(void)
66 {
67 memcpy(hostname, CONFIG_NET_HOSTNAME, sizeof(CONFIG_NET_HOSTNAME) - 1);
68
69 NET_DBG("Hostname set to %s", CONFIG_NET_HOSTNAME);
70 }
71