Blame lib/ipmi_session.c

Packit Service ed0f68
/*
Packit Service ed0f68
 * Copyright (c) 2003 Sun Microsystems, Inc.  All Rights Reserved.
Packit Service ed0f68
 * 
Packit Service ed0f68
 * Redistribution and use in source and binary forms, with or without
Packit Service ed0f68
 * modification, are permitted provided that the following conditions
Packit Service ed0f68
 * are met:
Packit Service ed0f68
 * 
Packit Service ed0f68
 * Redistribution of source code must retain the above copyright
Packit Service ed0f68
 * notice, this list of conditions and the following disclaimer.
Packit Service ed0f68
 * 
Packit Service ed0f68
 * Redistribution in binary form must reproduce the above copyright
Packit Service ed0f68
 * notice, this list of conditions and the following disclaimer in the
Packit Service ed0f68
 * documentation and/or other materials provided with the distribution.
Packit Service ed0f68
 * 
Packit Service ed0f68
 * Neither the name of Sun Microsystems, Inc. or the names of
Packit Service ed0f68
 * contributors may be used to endorse or promote products derived
Packit Service ed0f68
 * from this software without specific prior written permission.
Packit Service ed0f68
 * 
Packit Service ed0f68
 * This software is provided "AS IS," without a warranty of any kind.
Packit Service ed0f68
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
Packit Service ed0f68
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
Packit Service ed0f68
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
Packit Service ed0f68
 * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE
Packit Service ed0f68
 * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
Packit Service ed0f68
 * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.  IN NO EVENT WILL
Packit Service ed0f68
 * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA,
Packit Service ed0f68
 * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
Packit Service ed0f68
 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
Packit Service ed0f68
 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
Packit Service ed0f68
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Packit Service ed0f68
 */
Packit Service ed0f68
Packit Service ed0f68
#include <stdlib.h>
Packit Service ed0f68
#include <stdio.h>
Packit Service ed0f68
#include <string.h>
Packit Service ed0f68
#include <sys/types.h>
Packit Service ed0f68
#include <sys/socket.h>
Packit Service ed0f68
#include <netinet/in.h>
Packit Service ed0f68
#include <arpa/inet.h>
Packit Service ed0f68
#include <errno.h>
Packit Service ed0f68
#include <unistd.h>
Packit Service ed0f68
#include <signal.h>
Packit Service ed0f68
Packit Service ed0f68
#include <ipmitool/ipmi.h>
Packit Service ed0f68
#include <ipmitool/ipmi_intf.h>
Packit Service ed0f68
#include <ipmitool/helper.h>
Packit Service ed0f68
#include <ipmitool/log.h>
Packit Service ed0f68
#include <ipmitool/ipmi_lanp.h>
Packit Service ed0f68
#include <ipmitool/ipmi_session.h>
Packit Service ed0f68
#include <ipmitool/ipmi_strings.h>
Packit Service ed0f68
#include <ipmitool/bswap.h>
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
typedef enum {
Packit Service ed0f68
	IPMI_SESSION_REQUEST_CURRENT = 0,
Packit Service ed0f68
	IPMI_SESSION_REQUEST_ALL,
Packit Service ed0f68
	IPMI_SESSION_REQUEST_BY_ID,
Packit Service ed0f68
	IPMI_SESSION_REQUEST_BY_HANDLE
Packit Service ed0f68
} Ipmi_Session_Request_Type;
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * print_session_info_csv
Packit Service ed0f68
 */
Packit Service ed0f68
static void
Packit Service ed0f68
print_session_info_csv(const struct  get_session_info_rsp * session_info,
Packit Service ed0f68
					   int data_len)
Packit Service ed0f68
{
Packit Service ed0f68
	char     buffer[18];
Packit Service ed0f68
	uint16_t console_port_tmp;
Packit Service ed0f68
	
Packit Service ed0f68
	printf("%d", session_info->session_handle);
Packit Service ed0f68
	printf(",%d", session_info->session_slot_count);
Packit Service ed0f68
	printf(",%d", session_info->active_session_count);
Packit Service ed0f68
Packit Service ed0f68
	if (data_len == 3)
Packit Service ed0f68
	{
Packit Service ed0f68
		/* There is no session data here*/
Packit Service ed0f68
		printf("\n");
Packit Service ed0f68
		return;
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	printf(",%d", session_info->user_id);
Packit Service ed0f68
	printf(",%s", val2str(session_info->privilege_level, ipmi_privlvl_vals));
Packit Service ed0f68
Packit Service ed0f68
	printf(",%s", session_info->auxiliary_data?
Packit Service ed0f68
		   "IPMIv2/RMCP+" : "IPMIv1.5");
Packit Service ed0f68
Packit Service ed0f68
	printf(",0x%02x", session_info->channel_number);
Packit Service ed0f68
Packit Service ed0f68
	if (data_len == 18)
Packit Service ed0f68
	{
Packit Service ed0f68
		/* We have 802.3 LAN data */
Packit Service ed0f68
		printf(",%s",
Packit Service ed0f68
			   inet_ntop(AF_INET,
Packit Service ed0f68
						 &(session_info->channel_data.lan_data.console_ip),
Packit Service ed0f68
						 buffer,
Packit Service ed0f68
						 16));
Packit Service ed0f68
Packit Service ed0f68
		printf(",%s", mac2str(
Packit Service ed0f68
			session_info->channel_data.lan_data.console_mac));
Packit Service ed0f68
Packit Service ed0f68
		console_port_tmp = session_info->channel_data.lan_data.console_port;
Packit Service ed0f68
		#if WORDS_BIGENDIAN
Packit Service ed0f68
		console_port_tmp = BSWAP_16(console_port_tmp);
Packit Service ed0f68
		#endif
Packit Service ed0f68
		printf(",%d", console_port_tmp);
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
	else if ((data_len == 12) || (data_len == 14))
Packit Service ed0f68
	{
Packit Service ed0f68
		/* Channel async serial/modem */
Packit Service ed0f68
		printf(",%s",
Packit Service ed0f68
			   val2str(session_info->channel_data.modem_data.session_channel_activity_type,
Packit Service ed0f68
					   ipmi_channel_activity_type_vals));
Packit Service ed0f68
Packit Service ed0f68
		printf(",%d",
Packit Service ed0f68
			   session_info->channel_data.modem_data.destination_selector);
Packit Service ed0f68
Packit Service ed0f68
		printf(",%s",
Packit Service ed0f68
			   inet_ntop(AF_INET,
Packit Service ed0f68
						 &(session_info->channel_data.modem_data.console_ip),
Packit Service ed0f68
						 buffer,
Packit Service ed0f68
						 16));
Packit Service ed0f68
Packit Service ed0f68
		if (data_len == 14)
Packit Service ed0f68
		{
Packit Service ed0f68
			/* Connection is PPP */
Packit Service ed0f68
			console_port_tmp = session_info->channel_data.lan_data.console_port;
Packit Service ed0f68
			#if WORDS_BIGENDIAN
Packit Service ed0f68
			console_port_tmp = BSWAP_16(console_port_tmp);
Packit Service ed0f68
			#endif
Packit Service ed0f68
			printf(",%d", console_port_tmp);
Packit Service ed0f68
		}
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	printf("\n");
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * print_session_info_verbose
Packit Service ed0f68
 */
Packit Service ed0f68
static void
Packit Service ed0f68
print_session_info_verbose(const struct  get_session_info_rsp * session_info,
Packit Service ed0f68
						   int data_len)
Packit Service ed0f68
{
Packit Service ed0f68
	char     buffer[18];
Packit Service ed0f68
	uint16_t console_port_tmp;
Packit Service ed0f68
	
Packit Service ed0f68
	printf("session handle                : %d\n", session_info->session_handle);
Packit Service ed0f68
	printf("slot count                    : %d\n", session_info->session_slot_count);
Packit Service ed0f68
	printf("active sessions               : %d\n", session_info->active_session_count);
Packit Service ed0f68
Packit Service ed0f68
	if (data_len == 3)
Packit Service ed0f68
	{
Packit Service ed0f68
		/* There is no session data here */
Packit Service ed0f68
		printf("\n");
Packit Service ed0f68
		return;
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	printf("user id                       : %d\n", session_info->user_id);
Packit Service ed0f68
	printf("privilege level               : %s\n",
Packit Service ed0f68
		   val2str(session_info->privilege_level, ipmi_privlvl_vals));
Packit Service ed0f68
	
Packit Service ed0f68
	printf("session type                  : %s\n", session_info->auxiliary_data?
Packit Service ed0f68
		   "IPMIv2/RMCP+" : "IPMIv1.5");
Packit Service ed0f68
Packit Service ed0f68
	printf("channel number                : 0x%02x\n", session_info->channel_number);
Packit Service ed0f68
Packit Service ed0f68
	
Packit Service ed0f68
	if (data_len == 18)
Packit Service ed0f68
	{
Packit Service ed0f68
		/* We have 802.3 LAN data */
Packit Service ed0f68
		printf("console ip                    : %s\n",
Packit Service ed0f68
			   inet_ntop(AF_INET,
Packit Service ed0f68
						 &(session_info->channel_data.lan_data.console_ip),
Packit Service ed0f68
						 buffer,
Packit Service ed0f68
						 16));
Packit Service ed0f68
Packit Service ed0f68
		printf("console mac                   : %s\n", mac2str(
Packit Service ed0f68
			session_info->channel_data.lan_data.console_mac));
Packit Service ed0f68
Packit Service ed0f68
		console_port_tmp = session_info->channel_data.lan_data.console_port;
Packit Service ed0f68
		#if WORDS_BIGENDIAN
Packit Service ed0f68
		console_port_tmp = BSWAP_16(console_port_tmp);
Packit Service ed0f68
		#endif
Packit Service ed0f68
		printf("console port                  : %d\n", console_port_tmp);
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
	else if ((data_len == 12) || (data_len == 14))
Packit Service ed0f68
	{
Packit Service ed0f68
		/* Channel async serial/modem */
Packit Service ed0f68
		printf("Session/Channel Activity Type : %s\n",
Packit Service ed0f68
			   val2str(session_info->channel_data.modem_data.session_channel_activity_type,
Packit Service ed0f68
					   ipmi_channel_activity_type_vals));
Packit Service ed0f68
Packit Service ed0f68
		printf("Destination selector          : %d\n",
Packit Service ed0f68
			   session_info->channel_data.modem_data.destination_selector);
Packit Service ed0f68
Packit Service ed0f68
		printf("console ip                    : %s\n",
Packit Service ed0f68
			   inet_ntop(AF_INET,
Packit Service ed0f68
						 &(session_info->channel_data.modem_data.console_ip),
Packit Service ed0f68
						 buffer,
Packit Service ed0f68
						 16));
Packit Service ed0f68
Packit Service ed0f68
		if (data_len == 14)
Packit Service ed0f68
		{
Packit Service ed0f68
			/* Connection is PPP */
Packit Service ed0f68
			console_port_tmp = session_info->channel_data.lan_data.console_port;
Packit Service ed0f68
			#if WORDS_BIGENDIAN
Packit Service ed0f68
			console_port_tmp = BSWAP_16(console_port_tmp);
Packit Service ed0f68
			#endif
Packit Service ed0f68
			printf("console port                  : %d\n", console_port_tmp);
Packit Service ed0f68
		}
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	printf("\n");
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
static void print_session_info(const struct  get_session_info_rsp * session_info,
Packit Service ed0f68
							   int data_len)
Packit Service ed0f68
{
Packit Service ed0f68
	if (csv_output)
Packit Service ed0f68
		print_session_info_csv(session_info, data_len);
Packit Service ed0f68
	else
Packit Service ed0f68
		print_session_info_verbose(session_info, data_len);
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * ipmi_get_session_info
Packit Service ed0f68
 *
Packit Service ed0f68
 * returns 0 on success
Packit Service ed0f68
 *         -1 on error
Packit Service ed0f68
 */
Packit Service ed0f68
int
Packit Service ed0f68
ipmi_get_session_info(struct ipmi_intf         * intf,
Packit Service ed0f68
					  Ipmi_Session_Request_Type  session_request_type,
Packit Service ed0f68
					  uint32_t                   id_or_handle)
Packit Service ed0f68
{
Packit Service ed0f68
	int i, retval = 0;
Packit Service ed0f68
Packit Service ed0f68
	struct ipmi_rs * rsp;
Packit Service ed0f68
	struct ipmi_rq req;
Packit Service ed0f68
	uint8_t rqdata[5]; //  max length of the variable length request
Packit Service ed0f68
	struct get_session_info_rsp   session_info;
Packit Service ed0f68
Packit Service ed0f68
	memset(&req, 0, sizeof(req));
Packit Service ed0f68
	memset(&session_info, 0, sizeof(session_info));
Packit Service ed0f68
	req.msg.netfn = IPMI_NETFN_APP;        // 0x06
Packit Service ed0f68
	req.msg.cmd   = IPMI_GET_SESSION_INFO; // 0x3D
Packit Service ed0f68
	req.msg.data = rqdata;
Packit Service ed0f68
Packit Service ed0f68
	switch (session_request_type)
Packit Service ed0f68
	{
Packit Service ed0f68
		
Packit Service ed0f68
	case IPMI_SESSION_REQUEST_CURRENT:
Packit Service ed0f68
	case IPMI_SESSION_REQUEST_BY_ID:	
Packit Service ed0f68
	case IPMI_SESSION_REQUEST_BY_HANDLE:
Packit Service ed0f68
		switch (session_request_type)
Packit Service ed0f68
		{
Packit Service ed0f68
		case IPMI_SESSION_REQUEST_CURRENT:
Packit Service ed0f68
			rqdata[0]        = 0x00;
Packit Service ed0f68
			req.msg.data_len = 1;
Packit Service ed0f68
			break;
Packit Service ed0f68
		case IPMI_SESSION_REQUEST_BY_ID:	
Packit Service ed0f68
			rqdata[0]        = 0xFF;
Packit Service ed0f68
			rqdata[1]        = id_or_handle         & 0x000000FF;
Packit Service ed0f68
			rqdata[2]        = (id_or_handle >> 8)  & 0x000000FF;
Packit Service ed0f68
			rqdata[3]        = (id_or_handle >> 16) & 0x000000FF;
Packit Service ed0f68
			rqdata[4]        = (id_or_handle >> 24) & 0x000000FF;
Packit Service ed0f68
			req.msg.data_len = 5;
Packit Service ed0f68
			break;
Packit Service ed0f68
		case IPMI_SESSION_REQUEST_BY_HANDLE:
Packit Service ed0f68
			rqdata[0]        = 0xFE;
Packit Service ed0f68
			rqdata[1]        = (uint8_t)id_or_handle;
Packit Service ed0f68
			req.msg.data_len = 2;
Packit Service ed0f68
			break;
Packit Service ed0f68
		case IPMI_SESSION_REQUEST_ALL:
Packit Service ed0f68
			break;
Packit Service ed0f68
		}
Packit Service ed0f68
Packit Service ed0f68
		rsp = intf->sendrecv(intf, &req;;
Packit Service ed0f68
		if (rsp == NULL)
Packit Service ed0f68
		{
Packit Service ed0f68
			lprintf(LOG_ERR, "Get Session Info command failed");
Packit Service ed0f68
			retval = -1;
Packit Service ed0f68
		}
Packit Service ed0f68
		else if (rsp->ccode > 0)
Packit Service ed0f68
		{
Packit Service ed0f68
			lprintf(LOG_ERR, "Get Session Info command failed: %s",
Packit Service ed0f68
				val2str(rsp->ccode, completion_code_vals));
Packit Service ed0f68
			retval = -1;
Packit Service ed0f68
		}
Packit Service ed0f68
Packit Service ed0f68
		if (retval < 0)
Packit Service ed0f68
		{
Packit Service ed0f68
			if ((session_request_type == IPMI_SESSION_REQUEST_CURRENT) &&
Packit Service ed0f68
			    (strncmp(intf->name, "lan", 3) != 0))
Packit Service ed0f68
				lprintf(LOG_ERR, "It is likely that the channel in use "
Packit Service ed0f68
					"does not support sessions");
Packit Service ed0f68
		}
Packit Service ed0f68
		else
Packit Service ed0f68
		{
Packit Service ed0f68
			memcpy(&session_info,  rsp->data, rsp->data_len);
Packit Service ed0f68
			print_session_info(&session_info, rsp->data_len);
Packit Service ed0f68
		}
Packit Service ed0f68
		break;
Packit Service ed0f68
		
Packit Service ed0f68
	case IPMI_SESSION_REQUEST_ALL:
Packit Service ed0f68
		req.msg.data_len = 1;
Packit Service ed0f68
		i = 1;
Packit Service ed0f68
		do
Packit Service ed0f68
		{
Packit Service ed0f68
			rqdata[0] = i++;
Packit Service ed0f68
			rsp = intf->sendrecv(intf, &req;;
Packit Service ed0f68
			
Packit Service ed0f68
			if (rsp == NULL)
Packit Service ed0f68
			{
Packit Service ed0f68
				lprintf(LOG_ERR, "Get Session Info command failed");
Packit Service ed0f68
				retval = -1;
Packit Service ed0f68
				break;
Packit Service ed0f68
			}
Packit Service ed0f68
			else if (rsp->ccode > 0 && rsp->ccode != 0xCC && rsp->ccode != 0xCB)
Packit Service ed0f68
			{
Packit Service ed0f68
				lprintf(LOG_ERR, "Get Session Info command failed: %s",
Packit Service ed0f68
					val2str(rsp->ccode, completion_code_vals));
Packit Service ed0f68
				retval = -1;
Packit Service ed0f68
				break;
Packit Service ed0f68
			}
Packit Service ed0f68
			else if (rsp->data_len < 3)
Packit Service ed0f68
			{
Packit Service ed0f68
				retval = -1;
Packit Service ed0f68
				break;
Packit Service ed0f68
			}
Packit Service ed0f68
Packit Service ed0f68
			memcpy(&session_info,  rsp->data, rsp->data_len);
Packit Service ed0f68
			print_session_info(&session_info, rsp->data_len);
Packit Service ed0f68
			
Packit Service ed0f68
		} while (i <= session_info.session_slot_count);
Packit Service ed0f68
		break;
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	return retval;
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
static void
Packit Service ed0f68
printf_session_usage(void)
Packit Service ed0f68
{
Packit Service ed0f68
	lprintf(LOG_NOTICE, "Session Commands: info <active | all | id 0xnnnnnnnn | handle 0xnn>");
Packit Service ed0f68
}
Packit Service ed0f68
Packit Service ed0f68
Packit Service ed0f68
int
Packit Service ed0f68
ipmi_session_main(struct ipmi_intf * intf, int argc, char ** argv)
Packit Service ed0f68
{
Packit Service ed0f68
	int retval = 0;
Packit Service ed0f68
Packit Service ed0f68
	if (argc == 0 || strncmp(argv[0], "help", 4) == 0)
Packit Service ed0f68
	{
Packit Service ed0f68
		printf_session_usage();
Packit Service ed0f68
	}
Packit Service ed0f68
	else if (strncmp(argv[0], "info", 4) == 0)
Packit Service ed0f68
	{
Packit Service ed0f68
Packit Service ed0f68
		if ((argc < 2) || strncmp(argv[1], "help", 4) == 0)
Packit Service ed0f68
		{
Packit Service ed0f68
				printf_session_usage();
Packit Service ed0f68
		}
Packit Service ed0f68
		else
Packit Service ed0f68
		{
Packit Service ed0f68
			Ipmi_Session_Request_Type session_request_type = 0;
Packit Service ed0f68
			uint32_t                  id_or_handle = 0;
Packit Service ed0f68
Packit Service ed0f68
			if (strncmp(argv[1], "active", 6) == 0)
Packit Service ed0f68
				session_request_type = IPMI_SESSION_REQUEST_CURRENT;
Packit Service ed0f68
			else if (strncmp(argv[1], "all", 3) == 0)
Packit Service ed0f68
				session_request_type = IPMI_SESSION_REQUEST_ALL;
Packit Service ed0f68
			else if (strncmp(argv[1], "id", 2) == 0)
Packit Service ed0f68
			{
Packit Service ed0f68
				if (argc >= 3)
Packit Service ed0f68
				{
Packit Service ed0f68
					session_request_type = IPMI_SESSION_REQUEST_BY_ID;
Packit Service ed0f68
					if (str2uint(argv[2], &id_or_handle) != 0) {
Packit Service ed0f68
						lprintf(LOG_ERR, "HEX number expected, but '%s' given.",
Packit Service ed0f68
								argv[2]);
Packit Service ed0f68
						printf_session_usage();
Packit Service ed0f68
						retval = -1;
Packit Service ed0f68
					}
Packit Service ed0f68
				}
Packit Service ed0f68
				else
Packit Service ed0f68
				{
Packit Service ed0f68
					lprintf(LOG_ERR, "Missing id argument");
Packit Service ed0f68
					printf_session_usage();
Packit Service ed0f68
					retval = -1;
Packit Service ed0f68
				}
Packit Service ed0f68
			}
Packit Service ed0f68
			else if (strncmp(argv[1], "handle", 6) == 0)
Packit Service ed0f68
			{
Packit Service ed0f68
				if (argc >= 3)
Packit Service ed0f68
				{
Packit Service ed0f68
					session_request_type = IPMI_SESSION_REQUEST_BY_HANDLE;
Packit Service ed0f68
					if (str2uint(argv[2], &id_or_handle) != 0) {
Packit Service ed0f68
						lprintf(LOG_ERR, "HEX number expected, but '%s' given.",
Packit Service ed0f68
								argv[2]);
Packit Service ed0f68
						printf_session_usage();
Packit Service ed0f68
						retval = -1;
Packit Service ed0f68
					}
Packit Service ed0f68
				}
Packit Service ed0f68
				else
Packit Service ed0f68
				{
Packit Service ed0f68
					lprintf(LOG_ERR, "Missing handle argument");
Packit Service ed0f68
					printf_session_usage();
Packit Service ed0f68
					retval = -1;
Packit Service ed0f68
				}
Packit Service ed0f68
			}
Packit Service ed0f68
			else
Packit Service ed0f68
			{
Packit Service ed0f68
				lprintf(LOG_ERR, "Invalid SESSION info parameter: %s", argv[1]);
Packit Service ed0f68
				printf_session_usage();
Packit Service ed0f68
				retval = -1;
Packit Service ed0f68
			}
Packit Service ed0f68
			
Packit Service ed0f68
Packit Service ed0f68
			if (retval == 0)
Packit Service ed0f68
				retval = ipmi_get_session_info(intf,
Packit Service ed0f68
											   session_request_type,
Packit Service ed0f68
											   id_or_handle);
Packit Service ed0f68
		}
Packit Service ed0f68
	}
Packit Service ed0f68
	else
Packit Service ed0f68
	{
Packit Service ed0f68
		lprintf(LOG_ERR, "Invalid SESSION command: %s", argv[0]);
Packit Service ed0f68
		printf_session_usage();
Packit Service ed0f68
		retval = -1;
Packit Service ed0f68
	}
Packit Service ed0f68
Packit Service ed0f68
	return retval;
Packit Service ed0f68
}
Packit Service ed0f68