X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vswitchd%2Fxenserver.c;h=bc57f0eadbe9a0437cf2268f368b036a360301d0;hb=fe29af4c888d48cc1f16b1a247c2ffb6f0864522;hp=7a8d255f9a528748ad6415b272db78d2f447c0c7;hpb=064af42167bf4fc9aaea2702d80ce08074b889c0;p=sliver-openvswitch.git diff --git a/vswitchd/xenserver.c b/vswitchd/xenserver.c index 7a8d255f9..bc57f0ead 100644 --- a/vswitchd/xenserver.c +++ b/vswitchd/xenserver.c @@ -1,43 +1,37 @@ -/* Copyright (c) 2009 Nicira Networks +/* Copyright (c) 2009, 2010, 2013 Nicira, Inc. * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * 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: * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * http://www.apache.org/licenses/LICENSE-2.0 * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * In addition, as a special exception, Nicira Networks gives permission - * to link the code of its release of vswitchd with the OpenSSL project's - * "OpenSSL" library (or with modified versions of it that use the same - * license as the "OpenSSL" library), and distribute the linked - * executables. You must obey the GNU General Public License in all - * respects for all of the code used other than "OpenSSL". If you modify - * this file, you may extend this exception to your version of the file, - * but you are not obligated to do so. If you do not wish to do so, - * delete this exception statement from your version. + * 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. */ #include #include "xenserver.h" #include #include +#include #include #include #include #include "dynamic-string.h" #include "process.h" - #include "vlog.h" -#define THIS_MODULE VLM_xenserver -static char * +VLOG_DEFINE_THIS_MODULE(xenserver); + +/* If running on a XenServer, the XenServer host UUID as a 36-character string, + * otherwise null. */ +static char *host_uuid; + +static void read_host_uuid(void) { static const char filename[] = "/etc/xensource-inventory"; @@ -47,11 +41,11 @@ read_host_uuid(void) file = fopen(filename, "r"); if (!file) { if (errno == ENOENT) { - VLOG_INFO("not running on a XenServer"); + VLOG_DBG("not running on a XenServer"); } else { - VLOG_INFO("%s: open: %s", filename, strerror(errno)); + VLOG_INFO("%s: open: %s", filename, ovs_strerror(errno)); } - return NULL; + return; } while (fgets(line, sizeof line, file)) { @@ -64,27 +58,21 @@ read_host_uuid(void) if (strlen(line) == leader_len + uuid_len + trailer_len && !memcmp(line, leader, leader_len) && !memcmp(line + leader_len + uuid_len, trailer, trailer_len)) { - char *host_uuid = xmemdup0(line + leader_len, uuid_len); + host_uuid = xmemdup0(line + leader_len, uuid_len); VLOG_INFO("running on XenServer, host-uuid %s", host_uuid); fclose(file); - return host_uuid; + return; } } fclose(file); VLOG_ERR("%s: INSTALLATION_UUID not found", filename); - return NULL; } const char * xenserver_get_host_uuid(void) { - static char *host_uuid; - static bool inited; - - if (!inited) { - host_uuid = read_host_uuid(); - inited = true; - } + static pthread_once_t once = PTHREAD_ONCE_INIT; + pthread_once(&once, read_host_uuid); return host_uuid; }