1 /* Copyright (c) 2009, 2010, 2013 Nicira, Inc.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
17 #include "xenserver.h"
24 #include "dynamic-string.h"
28 VLOG_DEFINE_THIS_MODULE(xenserver);
30 /* If running on a XenServer, the XenServer host UUID as a 36-character string,
32 static char *host_uuid;
37 static const char filename[] = "/etc/xensource-inventory";
41 file = fopen(filename, "r");
43 if (errno == ENOENT) {
44 VLOG_DBG("not running on a XenServer");
46 VLOG_INFO("%s: open: %s", filename, ovs_strerror(errno));
51 while (fgets(line, sizeof line, file)) {
52 static const char leader[] = "INSTALLATION_UUID='";
53 const int leader_len = strlen(leader);
54 const int uuid_len = 36;
55 static const char trailer[] = "'\n";
56 const int trailer_len = strlen(trailer);
58 if (strlen(line) == leader_len + uuid_len + trailer_len
59 && !memcmp(line, leader, leader_len)
60 && !memcmp(line + leader_len + uuid_len, trailer, trailer_len)) {
61 host_uuid = xmemdup0(line + leader_len, uuid_len);
62 VLOG_INFO("running on XenServer, host-uuid %s", host_uuid);
68 VLOG_ERR("%s: INSTALLATION_UUID not found", filename);
72 xenserver_get_host_uuid(void)
74 static pthread_once_t once = PTHREAD_ONCE_INIT;
75 pthread_once(&once, read_host_uuid);