]>
git.proxmox.com Git - ovs.git/blob - vswitchd/xenserver.c
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"
27 #include "openvswitch/vlog.h"
29 VLOG_DEFINE_THIS_MODULE(xenserver
);
31 /* If running on a XenServer, the XenServer host UUID as a 36-character string,
33 static char *host_uuid
;
38 static const char filename
[] = "/etc/xensource-inventory";
42 file
= fopen(filename
, "r");
44 if (errno
== ENOENT
) {
45 VLOG_DBG("not running on a XenServer");
47 VLOG_INFO("%s: open: %s", filename
, ovs_strerror(errno
));
52 while (fgets(line
, sizeof line
, file
)) {
53 static const char leader
[] = "INSTALLATION_UUID='";
54 const int leader_len
= strlen(leader
);
55 const int uuid_len
= 36;
56 static const char trailer
[] = "'\n";
57 const int trailer_len
= strlen(trailer
);
59 if (strlen(line
) == leader_len
+ uuid_len
+ trailer_len
60 && !memcmp(line
, leader
, leader_len
)
61 && !memcmp(line
+ leader_len
+ uuid_len
, trailer
, trailer_len
)) {
62 host_uuid
= xmemdup0(line
+ leader_len
, uuid_len
);
63 VLOG_INFO("running on XenServer, host-uuid %s", host_uuid
);
69 VLOG_ERR("%s: INSTALLATION_UUID not found", filename
);
73 xenserver_get_host_uuid(void)
75 static pthread_once_t once
= PTHREAD_ONCE_INIT
;
76 pthread_once(&once
, read_host_uuid
);