1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-26 10:03:40 +03:00

remove chassis_id program

Broken and unmaintained!

Signed-off-by: Kay Sievers <kay.sievers@suse.de>
This commit is contained in:
Kay Sievers 2005-09-12 14:28:59 +02:00
parent 17d3cb1288
commit 852cc0f58d
8 changed files with 0 additions and 379 deletions

View File

@ -1,51 +0,0 @@
# *
# * Makefile
# *
# * Copyright (C) 2004 Intel Corporation. All rights reserved.
# *
# * This program is free software; you can redistribute it and/or
# * modify it under the terms of the GNU General Public
# * License v2.0 as published by the Free Software Foundation;
# *
# * 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.
# *
# * You should have received a copy of the GNU General Public
# * License along with this program; if not, write to the
# * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# * Boston, MA 021110-1307, USA.
# *
# * Authors: Atul Sabharwal
# *
# *
TARGET = chassis_id
exec_prefix = ${prefix}
sbindir = ${exec_prefix}/sbin
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
all: chassis_id
ifneq ($(strip $(USE_KLIBC)),true)
chassis_id: chassis_id.c table.c
$(QUIET) $(CC) -o $(TARGET) $(CFLAGS) chassis_id.c table.c
install: all
$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(sbindir)/$(TARGET)
else
chassis_id:
@echo
@echo "!!! chassis_id is incompatible with klibc !!!"
@echo
@exit 0
install: all
endif
clean:
rm -rf core a.out $(TARGET)

View File

@ -1,28 +0,0 @@
README.txt
~~~~~~~~~~
Chassis_id is a callout program which is used to give geographic names to devices. It uses
another callout program scsi_id to determine the serial number of a device and then looks up
the provisioning table based on this key. It retrieves geographic information
( chassis#, slot# and host# ) about the device and prints it to stdout. These fields are
used by udev to create the device entry.
Using Udev:
~~~~~~~~~~
Chassis_id gets invoked by udev using the udev as below:
BUS="scsi", PROGRAM="/usr/local/bin/chassis_id", NAME="/chassis%c{1}/slot%c{2}/host%c{3}/disk-%c{4}
The provisioning table ( file provision.tbl ) has to be put in /usr/local/bin and as of now has
to be populated manually. This is the only place where the geographic map of devices is kept
in the system.
Usage Model:
~~~~~~~~~~~~
On ATCA based blade architecture systems, blade insertion/removal is common. We create names
in a 3 level deep tree which represent the geographic map of the devices.
CONTACT:
~~~~~~~~
Please feel free to contact atul.sabharwal@intel.com with questions, comments, suggestions.

View File

@ -1,91 +0,0 @@
/*
* chassis_id.c
*
* Copyright (C) 2004 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v 2.0 as published by the Free Software Foundation;
*
* 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.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*
* Authors: Atul Sabharwal
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include "chassis_id.h"
//#define DEBUG 1
/* Run SCSI id to find serial number of the device */
static int getserial_number(char * devpath, char * snumber)
{
FILE *fp;
char vendor[255], model[255], cmd[255];
int retval;
sprintf(cmd, "/sbin/scsi_id -s %s -p 0x80", devpath);
fp = popen(cmd, "r");
if (fp == NULL)
return -ERROR_BAD_SNUMBER;
fscanf(fp, "%s %s %s", vendor, model, snumber);
#ifdef DEBUG
syslog(LOG_PID| LOG_DAEMON| LOG_ERR, "\n%s", snumber );
#endif
retval = pclose(fp);
if (retval == -1)
return -ERROR_BAD_SNUMBER;
else
return NO_ERROR;
}
int main(int argc, char **argv, char **envp)
{
int chassis_num, slot_num, retval;
char disk_snum[255], devpath[255];
char *ptr;
int disk_index;
syslog( LOG_PID| LOG_DAEMON| LOG_ERR, "\n%s", "starting chassis_id" );
ptr = getenv("DEVPATH");
if (ptr == NULL)
return -ERROR_NO_DEVPATH;
sscanf(ptr, "%s", &devpath[0]);
#ifdef DEBUG
syslog(LOG_PID|LOG_DAEMON| LOG_ERR, "Devpath %s", devpath);
#endif
retval = table_init();
if (retval < 0)
return -ERROR_BAD_TABLE;
getserial_number(devpath, disk_snum);
/* Now we open the provisioning table t find actual entry for the serial number*/
disk_index = table_find_disk(disk_snum, &chassis_num, &slot_num);
if ( disk_index == -1 ) {
// typical provisioning error
return -ERROR_NO_DISK;
} else {
table_select_disk( disk_index );
}
return 0;
}

View File

@ -1,42 +0,0 @@
/*
* chassis_id.h
*
* Copyright (C) 2004 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v 2.0 as published by the Free Software Foundation;
*
* 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.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*
* Authors: Atul Sabharwal
*
*/
#ifndef _CHASSIS_ID_H
#define _CHASSIS_ID_H
//#define DEBUG 1
#define ERROR 1
#define ERROR_NO_SLOT 2
#define ERROR_NO_CHASSIS 3
#define ERROR_NO_DEVPATH 4
#define ERROR_BAD_SNUMBER 5
#define ERROR_NO_DISK 6
#define ERROR_BAD_TABLE 7
#define ERROR_BAD_SCAN 8
#define NO_ERROR 0
extern int table_init(void);
extern int table_find_disk(const char *serialnumber , int *chassis_num, int *slot_num);
extern int table_select_disk(int diskindex);
#endif

View File

@ -1,49 +0,0 @@
Udev does not come pre-installed on a Linux system. Hence, we need to do the following before
a Linux system is ready ::
Steps:
~~~~~
1. Install libsysfs shared libraries by installing sysfsutils-0.4.0.
2. Download latest version of udev from www.kernel.org site. It is
under repository->utils->kernel path chain.
Do make and make install so as to install udev. To install scsi_id,
go into extras/scsi_id folder to compile scsi_id. Typically, this
would be in /sbin folder. Now, change scsi_id.cfg and set the
global option to work with all devices ( -g) and comment out the
black list option ( -b ).
3. Download chassis_id callout code and compile. Install chassis_id and
provision.tbl file in /usr/local/bin.
4. In /etc/rc.sysinit, add mount command to mount the sys memory file
system. ( mount -t sysfs sys /sys ). The /sys is necessary as
lot of the software components expect it to be in /sys.
5. Now, in /etc/udev/udev.rules, install the udev rules file. This
is the GDN config file which is used by udev to create folders
in the form chasis<N>/slot<M>/port<O>/disk<P>.
6. Now, you are almost there. Refer to PROVISIONING file.
PROVISIONING:
1. For GDN, the provisioning file is in the format :
<id> <host> <number_of_disks> <chassis#> <slot#> <serial#> <name>
<host> SCSI host on which the device is connected
<Number of disks> how many disks on this blade ?
<chassis#> chassis Number
<slot#> Physical slot number
<serial#> Serial Number for the disk
<name> Name of the disk device.
2. To fill the provisioning table, the user needs to collect this information and
fill provision.tbl.
The serial number is found from the command scsi_id -p 0x80 -s <device name>.
The host number is availble from the sys file system. The chassis & slot
are visual data and should be enetered into provision.tbl.

View File

@ -1,5 +0,0 @@
id host number_of_disks chassis# slot# serial# name
1 1 2 1 2 3BM07NKA000070456Z6B disk1
2 1 2 1 2 3BM07R68000070456ZCK disk2
3 2 2 1 3 3EV08ANK00007219JAVA disk3
4 2 2 1 4 3EV00NZB000072190Y90 disk4

View File

@ -1,106 +0,0 @@
/*
* table.c
*
* Copyright (C) 2004 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License v2.0 as published by the Free Software Foundation;
*
* 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.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 021110-1307, USA.
*
* Authors: Atul Sabharwal
*
*/
#include <stdio.h>
#include <string.h>
#include "chassis_id.h"
#define TABLE_SIZE 100
#define PROVISION_DB "/usr/local/bin/provision.tbl"
struct provision_record
{
int id;
int num_disks;
int chassis_num;
int slot_num;
char serial_num[32];
char name[32];
} ptable[TABLE_SIZE];
int ptable_size;
/* Initialize the provisioning table by reading the data from special file provision.tbl *
Return error if something does not work appropriately. */
int table_init(void)
{
FILE *fp;
char ptr[255];
int i;
fp = fopen( PROVISION_DB, "r");
if ((fp== NULL) || feof(fp))
return -1;
// skip the first line of text which contains descriptive details.
fgets(ptr, 80, fp);
i = 0;
while (!feof(fp)) {
fgets(ptr, 80, fp);
sscanf(ptr, "%d %d %d %d %s %s", &ptable[i].id,
&ptable[i].num_disks,
&ptable[i].chassis_num, &ptable[i].slot_num,
ptable[i].serial_num, ptable[i].name);
i++;
}
ptable_size = i;
fclose(fp);
return 0;
}
/* return -1 when no disk found. Otherwise return index of disk */
int table_find_disk(const char *serialnumber , int *chassis_num, int *slot_num)
{
int i;
for (i = 0; i < ptable_size; i++) {
if (strcmp(ptable[i].serial_num, serialnumber) == 0) {
*chassis_num = ptable[i].chassis_num;
*slot_num = ptable[i].slot_num;
break;
}
}
if (i == ptable_size)
return -1;
else
return i;
}
/* This function is primarily there for passing the selected disk entry to udev
* so that it can create descriptive GDN for it. So, for that we need to output
* this data to stdout.
*/
int table_select_disk(int diskindex)
{
printf("%d ", ptable[diskindex].chassis_num);
printf("%d ", ptable[diskindex].slot_num);
printf("%s ", ptable[diskindex].name);
return 0;
}

View File

@ -1,7 +0,0 @@
# There are a number of modifiers that are allowed to be used in some of the
# fields. See the udev man page for a full description of them.
#
# See the udev.rules.examples file for more examples of how to create rules
#
BUS="scsi", PROGRAM="/usr/local/bin/chassis_id", NAME="/chassis%c{1}/slot%c{2}/%c{3}"