Home | History | Annotate | Line # | Download | only in include
      1 
      2 /*
      3  * Licensed Materials - Property of IBM
      4  *
      5  * trousers - An open source TCG Software Stack
      6  *
      7  * (C) Copyright International Business Machines Corp. 2004
      8  *
      9  */
     10 
     11 
     12 #ifndef _TCSD_H_
     13 #define _TCSD_H_
     14 
     15 #include <signal.h>
     16 
     17 #include "rpc_tcstp.h"
     18 
     19 /* Platform Class structures */
     20 struct platform_class
     21 {
     22 	unsigned int simpleID;	/* Platform specific spec identifier */
     23 	unsigned int classURISize;	/* Size of the classURI */
     24 	char *classURI;	/* Specific spec. Can be NULL */
     25 	struct platform_class *next;
     26 };
     27 
     28 /* config structures */
     29 struct tcsd_config
     30 {
     31 	int port;		/* port the TCSD will listen on */
     32 	unsigned int num_threads;	/* max number of threads the TCSD allows simultaneously */
     33 	char *system_ps_dir;	/* the directory the system PS file sits in */
     34 	char *system_ps_file;	/* the name of the system PS file */
     35 	char *firmware_log_file;/* the name of the firmware PCR event file */
     36 	char *kernel_log_file;	/* the name of the kernel PCR event file */
     37 	unsigned int kernel_pcrs;	/* bitmask of PCRs the kernel controls */
     38 	unsigned int firmware_pcrs;	/* bitmask of PCRs the firmware controls */
     39 	char *platform_cred;		/* location of the platform credential */
     40 	char *conformance_cred;		/* location of the conformance credential */
     41 	char *endorsement_cred;		/* location of the endorsement credential */
     42 	int remote_ops[TCSD_MAX_NUM_ORDS];	/* array of ordinals executable by remote hosts */
     43 	unsigned int unset;	/* bitmask of options which are still unset */
     44 	int exclusive_transport; /* allow applications to open exclusive transport sessions with
     45 				    the TPM and enforce their exclusivity (possible DOS issue) */
     46 	struct platform_class *host_platform_class; /* Host platform class of this TCS System */
     47 	struct platform_class *all_platform_classes;	/* List of platform classes
     48 							of this TCS System */
     49 	int disable_ipv4;
     50 	int disable_ipv6;
     51 };
     52 
     53 #define TCSD_DEFAULT_CONFIG_FILE	ETC_PREFIX "/tcsd.conf"
     54 extern char *tcsd_config_file;
     55 
     56 #ifdef __NetBSD__
     57 #define TSS_USER_NAME		"_tss"
     58 #define TSS_GROUP_NAME		"_tss"
     59 #else
     60 #define TSS_USER_NAME		"tss"
     61 #define TSS_GROUP_NAME		"tss"
     62 #endif
     63 
     64 #define TCSD_DEFAULT_MAX_THREADS	10
     65 #define TCSD_DEFAULT_SYSTEM_PS_FILE	VAR_PREFIX "/lib/tpm/system.data"
     66 #define TCSD_DEFAULT_SYSTEM_PS_DIR	VAR_PREFIX "/lib/tpm"
     67 #define TCSD_DEFAULT_FIRMWARE_LOG_FILE	"/sys/kernel/security/tpm0/binary_bios_measurements"
     68 #define TCSD_DEFAULT_KERNEL_LOG_FILE	"/sys/kernel/security/ima/binary_runtime_measurements"
     69 #define TCSD_DEFAULT_FIRMWARE_PCRS	0x00000000
     70 #define TCSD_DEFAULT_KERNEL_PCRS	0x00000000
     71 #define TCSD_DEFAULT_DISABLE_IPV4 0
     72 #define TCSD_DEFAULT_DISABLE_IPV6 0
     73 
     74 /* This will change when a system with more than 32 PCR's exists */
     75 #define TCSD_MAX_PCRS			32
     76 
     77 /* this is the 2nd param passed to the listen() system call */
     78 #define TCSD_MAX_SOCKETS_QUEUED		50
     79 #define TCSD_TXBUF_SIZE			1024
     80 
     81 /* The Available Tcs Platform Classes */
     82 struct tcg_platform_spec {
     83 	char *name;
     84 	TPM_PLATFORM_SPECIFIC specNo;
     85 	char *specURI;
     86 };
     87 
     88 /* The Specific URI's for the platforms specs on TCG website */
     89 #define TPM_PS_PC_11_URI	"https://www.trustedcomputinggroup.org/groups/pc_client/TCG_PCSpecificSpecification_v1_1.pdf"
     90 #define TPM_PS_PC_12_URI	"https://www.trustedcomputinggroup.org/specs/PCClient/TCG_PCClientImplementationforBIOS_1-20_1-00.pdf"
     91 #define TPM_PS_PDA_12_URI	"https://www.trustedcomputinggroup.org/specs/mobilephone/tcg-mobile-reference-architecture-1.0.pdf"
     92 #define TPM_PS_Server_12_URI	"https://www.trustedcomputinggroup.org/specs/Server/TCG_Generic_Server_Specification_v1_0_rev0_8.pdf"
     93 #define TPM_PS_Mobile_12_URI	"https://www.trustedcomputinggroup.org/specs/mobilephone/tcg-mobile-reference-architecture-1.0.pdf"
     94 
     95 /* for detecting whether an option has been set */
     96 #define TCSD_OPTION_PORT		0x0001
     97 #define TCSD_OPTION_MAX_THREADS		0x0002
     98 #define TCSD_OPTION_FIRMWARE_PCRS	0x0004
     99 #define TCSD_OPTION_KERNEL_PCRS		0x0008
    100 #define TCSD_OPTION_SYSTEM_PSFILE	0x0010
    101 #define TCSD_OPTION_KERNEL_LOGFILE	0x0020
    102 #define TCSD_OPTION_FIRMWARE_LOGFILE	0x0040
    103 #define TCSD_OPTION_PLATFORM_CRED	0x0080
    104 #define TCSD_OPTION_CONFORMANCE_CRED	0x0100
    105 #define TCSD_OPTION_ENDORSEMENT_CRED	0x0200
    106 #define TCSD_OPTION_REMOTE_OPS		0x0400
    107 #define TCSD_OPTION_EXCLUSIVE_TRANSPORT	0x0800
    108 #define TCSD_OPTION_HOST_PLATFORM_CLASS	0x1000
    109 #define TCSD_OPTION_DISABLE_IPV4 0x2000
    110 #define TCSD_OPTION_DISABLE_IPV6 0x4000
    111 
    112 #define TSS_TCP_RPC_MAX_DATA_LEN	1048576
    113 #define TSS_TCP_RPC_BAD_PACKET_TYPE	0x10000000
    114 
    115 enum tcsd_config_option_code {
    116 	opt_port = 1,
    117 	opt_max_threads,
    118 	opt_system_ps_file,
    119 	opt_firmware_log,
    120 	opt_kernel_log,
    121 	opt_firmware_pcrs,
    122 	opt_kernel_pcrs,
    123 	opt_platform_cred,
    124 	opt_conformance_cred,
    125 	opt_endorsement_cred,
    126 	opt_remote_ops,
    127 	opt_exclusive_transport,
    128 	opt_host_platform_class,
    129 	opt_all_platform_classes,
    130 	opt_disable_ipv4,
    131 	opt_disable_ipv6
    132 };
    133 
    134 struct tcsd_config_options {
    135 	char *name;
    136 	enum tcsd_config_option_code option;
    137 };
    138 
    139 extern struct tcsd_config tcsd_options;
    140 
    141 TSS_RESULT conf_file_init(struct tcsd_config *);
    142 void	   conf_file_final(struct tcsd_config *);
    143 TSS_RESULT ps_dirs_init();
    144 void	   tcsd_signal_handler(int);
    145 
    146 /* threading structures */
    147 struct tcsd_thread_data
    148 {
    149 	int sock;
    150 	UINT32 context;
    151 	THREAD_TYPE *thread_id;
    152 	char *hostname;
    153 	struct tcsd_comm_data comm;
    154 };
    155 
    156 struct tcsd_thread_mgr
    157 {
    158 	MUTEX_DECLARE(lock);
    159 	struct tcsd_thread_data *thread_data;
    160 
    161 	int shutdown;
    162 	UINT32 num_active_threads;
    163 	UINT32 max_threads;
    164 };
    165 
    166 TSS_RESULT tcsd_threads_init();
    167 TSS_RESULT tcsd_threads_final();
    168 TSS_RESULT tcsd_thread_create(int, char *);
    169 void	   *tcsd_thread_run(void *);
    170 void	   thread_signal_init();
    171 
    172 /* signal handling */
    173 #if !defined(__APPLE__) && !defined(__NetBSD__)
    174 struct sigaction tcsd_sa_int;
    175 struct sigaction tcsd_sa_chld;
    176 #endif
    177 
    178 #endif
    179