void
ipmi_register_pps(gint proto_ipmi _U_)
{
	static guint8 sig_pps[3] = { 0x0a, 0x40, 0x00 };
	static guint8 sig_pps_rev[3] = { 0x00, 0x40, 0x0a };

	ipmi_register_netfn_cmdtab(IPMI_OEM_REQ, IPMI_OEM_NONE, sig_pps, 3,
			"Pigeon Point Systems", cmd_pps, array_length(cmd_pps));
	ipmi_register_netfn_cmdtab(IPMI_OEM_REQ, IPMI_OEM_NONE, sig_pps_rev, 3,
			"Pigeon Point Systems (reversed)", cmd_pps, array_length(cmd_pps));
}
void
ipmi_register_update(gint proto_ipmi _U_)
{
	ipmi_register_netfn_cmdtab(IPMI_UPDATE_REQ, IPMI_OEM_PPS, NULL, 0, NULL,
			cmd_update, array_length(cmd_update));
}
void
ipmi_register_bridge(gint proto_ipmi _U_)
{
    ipmi_register_netfn_cmdtab(IPMI_BRIDGE_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
                               cmd_bridge, array_length(cmd_bridge));
}
Esempio n. 4
0
void
ipmi_register_chassis(gint proto_ipmi)
{
	static hf_register_info hf[] = {
		{ &hf_ipmi_chs_bo00_sip,
			{ "Set In Progress",
				"ipmi.bootopt00.sip", FT_UINT8, BASE_HEX, bo00_sip_vals, 0x03, NULL, HFILL }},
		{ &hf_ipmi_chs_bo01_spsel,
			{ "Service Partition Selector",
				"ipmi.bootopt01.spsel", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo02_request,
			{ "Request BIOS to scan for specified service partition",
				"ipmi.bootopt02.spscan.request", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_bo02_discovered,
			{ "Service Partition discovered",
				"ipmi.bootopt02.spscan.discovered", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_bo03_pef,
			{ "Reset/power cycle caused by PEF",
				"ipmi.bootopt03.bmcboot.pef", FT_BOOLEAN, 8, TFS(&bo03_dontclear_tfs), 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_bo03_cctrl_timeout,
			{ "Chassis Control command not received within 60s timeout",
				"ipmi.bootopt03.bmcboot.cctrl_timeout", FT_BOOLEAN, 8, TFS(&bo03_dontclear_tfs), 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_bo03_wd_timeout,
			{ "Reset/power cycle caused by watchdog timeout",
				"ipmi.bootopt03.bmcboot.wd_timeout", FT_BOOLEAN, 8, TFS(&bo03_dontclear_tfs), 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_bo03_softreset,
			{ "Pushbutton reset / soft reset",
				"ipmi.bootopt03.bmcboot.softreset", FT_BOOLEAN, 8, TFS(&bo03_dontclear_tfs), 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_bo03_powerup,
			{ "Power up via pushbutton or wake event",
				"ipmi.bootopt03.bmcboot.powerup", FT_BOOLEAN, 8, TFS(&bo03_dontclear_tfs), 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_write_mask,
			{ "Write mask",
				"ipmi.bootopt04.write_mask", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_bootinit_ack_oem,
			{ "OEM",
				"ipmi.bootopt04.bootinit_ack.oem", FT_BOOLEAN, 8, TFS(&bo04_bootinit_ack_tfs), 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_bootinit_ack_sms,
			{ "SMS",
				"ipmi.bootopt04.bootinit_ack.sms", FT_BOOLEAN, 8, TFS(&bo04_bootinit_ack_tfs), 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_bootinit_ack_os,
			{ "OS / Service Partition",
				"ipmi.bootopt04.bootinit_ack.os", FT_BOOLEAN, 8, TFS(&bo04_bootinit_ack_tfs), 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_bootinit_ack_osloader,
			{ "OS Loader",
				"ipmi.bootopt04.bootinit_ack.osloader", FT_BOOLEAN, 8, TFS(&bo04_bootinit_ack_tfs), 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_bo04_bootinit_ack_bios,
			{ "BIOS/POST",
				"ipmi.bootopt04.bootinit_ack.bios", FT_BOOLEAN, 8, TFS(&bo04_bootinit_ack_tfs), 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_bootflags_valid,
			{ "Boot flags valid",
				"ipmi.bootopt05.boot_flags_valid", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_permanent,
			{ "Permanency",
				"ipmi.bootopt05.permanent", FT_BOOLEAN, 8, TFS(&bo05_permanent_tfs), 0x40, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_boottype,
			{ "Boot type",
				"ipmi.bootopt05.boottype", FT_BOOLEAN, 8, TFS(&bo05_boottype_tfs), 0x20, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_cmos_clear,
			{ "CMOS Clear",
				"ipmi.bootopt05.cmos_clear", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_lock_kbd,
			{ "Lock Keyboard",
				"ipmi.bootopt05.lock_kbd", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_bootdev,
			{ "Boot Device Selector",
				"ipmi.bootopt05.bootdev", FT_UINT8, BASE_HEX, bo05_bootdev_vals, 0x3c, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_screen_blank,
			{ "Screen Blank",
				"ipmi.bootopt05.screen_blank", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_lockout_reset,
			{ "Lock out Reset buttons",
				"ipmi.bootopt05.lockout_reset", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_lockout_poweroff,
			{ "Lock out (power off / sleep request) via Power Button",
				"ipmi.bootopt05.lockout_poweroff", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_bios_verbosity,
			{ "BIOS verbosity",
				"ipmi.bootopt05.bios_verbosity", FT_UINT8, BASE_HEX, bo05_bios_verbosity_vals, 0x60, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_progress_traps,
			{ "Force Progress Event Traps",
				"ipmi.bootopt05.progress_traps", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_pwd_bypass,
			{ "User password bypass",
				"ipmi.bootopt05.pwd_bypass", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_lock_sleep,
			{ "Lock Out Sleep Button",
				"ipmi.bootopt05.lock_sleep", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_console_redirection,
			{ "Console redirection",
				"ipmi.bootopt05.console_redirection", FT_UINT8, BASE_HEX, bo05_console_redir_vals, 0x03, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_bios_shared_override,
			{ "BIOS Shared Mode Override",
				"ipmi.bootopt05.bios_shared_override", FT_BOOLEAN, 8, TFS(&bo05_bios_shared_tfs), 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_bios_muxctl_override,
			{ "BIOS Mux Control Override",
				"ipmi.bootopt05.bios_muxctl_override", FT_UINT8, BASE_HEX, bo05_bios_muxctl_vals, 0x07, NULL, HFILL }},
		{ &hf_ipmi_chs_bo05_byte5,
			{ "Data 5 (reserved)",
				"ipmi.bootopt05.byte5", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo06_chan_num,
			{ "Channel",
				"ipmi.bootopt06.chan_num", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0x0f, NULL, HFILL }},
		{ &hf_ipmi_chs_bo06_session_id,
			{ "Session ID",
				"ipmi.bootopt06.session_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo06_bootinfo_timestamp,
			{ "Boot Info Timestamp",
				"impi.bootopt06.bootinfo_timestamp", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo07_block_selector,
			{ "Block selector",
				"ipmi.bootopt07.block_selector", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_bo07_block_data,
			{ "Block data",
				"ipmi.bootopt07.block_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_00_capflags_ppi,
			{ "Power interlock",
				"ipmi.ch00.cap.power_interlock", FT_BOOLEAN, 8, TFS(&tfs_00_provided), 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_00_capflags_di,
			{ "Diagnostic Interrupt",
				"ipmi.ch00.cap.diag_int", FT_BOOLEAN, 8, TFS(&tfs_00_provided), 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_00_capflags_fpl,
			{ "Front Panel Lockout",
				"ipmi.ch00.cap.fpl", FT_BOOLEAN, 8, TFS(&tfs_00_provided), 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_00_capflags_is,
			{ "Intrusion sensor",
				"ipmi.ch00.cap.intrusion", FT_BOOLEAN, 8, TFS(&tfs_00_provided), 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_00_fru_dev_addr,
			{ "Chassis FRU Info Device Address",
				"ipmi.ch00.fru_info", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_00_sdr_dev_addr,
			{ "Chassis SDR Device Address",
				"ipmi.ch00.sdr", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_00_sel_dev_addr,
			{ "Chassis SEL Device Address",
				"ipmi.ch00.sel", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_00_sm_dev_addr,
			{ "Chassis System Management Device Address",
				"ipmi.ch00.sm", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_00_bridge_dev_addr,
			{ "Chassis Bridge Device Address",
				"ipmi.ch00.bridge", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_01_pwr_state_policy,
			{ "Power Restore Policy",
				"ipmi.ch01.cur_pwr.policy", FT_UINT8, BASE_HEX, vals_01_pwr_policy, 0x60, NULL, HFILL }},
		{ &hf_ipmi_chs_01_pwr_state_ctl_fault,
			{ "Power Control Fault",
				"ipmi.ch01.cur_pwr.ctl_fault", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_01_pwr_state_fault,
			{ "Power Fault",
				"ipmi.ch01.cur_pwr.fault", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_01_pwr_state_ilock,
			{ "Interlock",
				"ipmi.ch01.cur_pwr.interlock", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_01_pwr_state_overload,
			{ "Overload",
				"ipmi.ch01.cur_pwr.overload", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_01_pwr_state_powered,
			{ "Power is on",
				"ipmi.ch01.cur_pwr.powered", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_01_last_event_via_ipmi,
			{ "Last `Power is on' state was entered via IPMI command",
				"ipmi.ch01.last.on_via_ipmi", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_01_last_event_down_by_fault,
			{ "Last power down caused by power fault",
				"ipmi.ch01.last.down_by_fault", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_01_last_event_interlock,
			{ "Last power down caused by a power interlock being activated",
				"ipmi.ch01.last.interlock", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_01_last_event_overload,
			{ "Last power down caused by a power overload",
				"ipmi.ch01.last.overload", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_01_last_event_ac_failed,
			{ "AC failed",
				"ipmi.ch01.last.ac_failed", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_identsupp,
			{ "Chassis Identify command and state info supported",
				"ipmi.ch01.identsupp", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_identstate,
			{ "Chassis Identify state (if supported)",
				"ipmi.ch01.identstate", FT_UINT8, BASE_HEX, vals_01_identstate, 0x30, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_fan,
			{ "Cooling/fan fault detected",
				"ipmi.ch01.misc.fan", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_drive,
			{ "Drive Fault",
				"ipmi.ch01.misc.drive", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_fpl_active,
			{ "Front Panel Lockout active",
				"ipmi.ch01.misc.fpl_active", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_01_misc_intrusion,
			{ "Chassis intrusion active",
				"ipmi.ch01.misc.intrusion", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_standby_allowed,
			{ "Standby disable allowed",
				"ipmi.ch01.fpb.standby_allowed", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_diagintr_allowed,
			{ "Diagnostic interrupt disable allowed",
				"ipmi.ch01.fpb.diagintr_allowed", FT_BOOLEAN, 8, NULL, 0x40, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_reset_allowed,
			{ "Reset disable allowed",
				"ipmi.ch01.fpb.reset_allowed", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_poweroff_allowed,
			{ "Poweroff disable allowed",
				"ipmi.ch01.fpb.poweroff_allowed", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_standby_disabled,
			{ "Standby disabled",
				"ipmi.ch01.fpb.standby_disabled", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_diagintr_disabled,
			{ "Diagnostic interrupt disabled",
				"ipmi.ch01.fpb.diagintr_disabled", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_reset_disabled,
			{ "Reset disabled",
				"ipmi.ch01.fpb.reset_disabled", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_01_fpb_poweroff_disabled,
			{ "Poweroff disabled",
				"ipmi.ch01.fpb.poweroff_disabled", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},

		{ &hf_ipmi_chs_02_cctrl,
			{ "Chassis Control",
				"ipmi.ch02.chassis_control", FT_UINT8, BASE_HEX, vals_02_cctrl, 0x0f, NULL, HFILL }},

		{ &hf_ipmi_chs_04_ival,
			{ "Identify Interval in seconds",
				"ipmi.ch04.interval", FT_UINT8, BASE_CUSTOM, ipmi_fmt_1s_1based, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_04_perm_on,
			{ "Turn on Identify indefinitely",
				"ipmi.ch04.perm_on", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},

		{ &hf_ipmi_chs_05_flags_fpl,
			{ "Provides Front Panel Lockout",
				"ipmi.ch05.flags.fpl", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_05_flags_intrusion,
			{ "Provides intrusion sensor",
				"ipmi.ch05.flags.intrusion", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
		{ &hf_ipmi_chs_05_fru_dev_addr,
			{ "Chassis FRU Info Device Address",
				"ipmi.ch05.fru_info", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_05_sdr_dev_addr,
			{ "Chassis SDR Device Address",
				"ipmi.ch05.sdr", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_05_sel_dev_addr,
			{ "Chassis SEL Device Address",
				"ipmi.ch05.sel", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_05_sm_dev_addr,
			{ "Chassis System Management Device Address",
				"ipmi.ch05.sm", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_05_bridge_dev_addr,
			{ "Chassis Bridge Device Address",
				"ipmi.ch05.bridge", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_06_rq_policy,
			{ "Power Restore Policy",
				"ipmi.ch06.rq_policy", FT_UINT8, BASE_HEX, vals_06_policy, 0x07, NULL, HFILL }},
		{ &hf_ipmi_chs_06_rs_policy_support_powerup,
			{ "Always powering up",
				"ipmi.ch06.rs_support.powerup", FT_BOOLEAN, 8, TFS(&tfs_06_supported), 0x04, NULL, HFILL }},
		{ &hf_ipmi_chs_06_rs_policy_support_restore,
			{ "Restoring previous state",
				"ipmi.ch06.rs_support.restore", FT_BOOLEAN, 8, TFS(&tfs_06_supported), 0x02, NULL, HFILL }},
		{ &hf_ipmi_chs_06_rs_policy_support_poweroff,
			{ "Staying powered off",
				"ipmi.ch06.rs_support.poweroff", FT_BOOLEAN, 8, TFS(&tfs_06_supported), 0x01, NULL, HFILL }},

		{ &hf_ipmi_chs_07_cause,
			{ "Restart Cause",
				"ipmi.ch07.cause", FT_UINT8, BASE_HEX, vals_07_cause, 0x0f, NULL, HFILL }},
		{ &hf_ipmi_chs_07_chan,
			{ "Channel",
				"ipmi.ch07.chan", FT_UINT8, BASE_CUSTOM, ipmi_fmt_channel, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_08_valid,
			{ "Validity",
				"ipmi.ch08.valid", FT_BOOLEAN, 8, TFS(&tfs_08_valid), 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_08_selector,
			{ "Boot option parameter selector",
				"ipmi.ch08.selector", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
		{ &hf_ipmi_chs_08_data,
			{ "Boot option parameter data",
				"ipmi.ch08.data", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_09_rq_param_select,
			{ "Parameter selector",
				"ipmi.ch09.rq_param_select", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rq_set_select,
			{ "Set Selector",
				"ipmi.ch09.rq_set_select", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rq_block_select,
			{ "Block Selector",
				"ipmi.ch09.rq_block_select", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rs_param_version,
			{ "Parameter Version",
				"ipmi.ch09.rs_param_version", FT_UINT8, BASE_HEX, NULL, 0x0f, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rs_valid,
			{ "Parameter Valid",
				"ipmi.ch09.rs_valid", FT_BOOLEAN, 8, TFS(&tfs_09_valid), 0x80, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rs_param_select,
			{ "Parameter Selector",
				"ipmi.ch09.rs_param_select", FT_UINT8, BASE_HEX, NULL, 0x7f, NULL, HFILL }},
		{ &hf_ipmi_chs_09_rs_param_data,
			{ "Configuration parameter data",
				"ipmi.ch09.rs_param_data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},

		{ &hf_ipmi_chs_0f_minpercnt,
			{ "Minutes per count",
				"ipmi.ch0f.minpercnt", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
		{ &hf_ipmi_chs_0f_counter,
			{ "Counter reading",
				"ipmi.ch0f.counter", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
	};

	static gint *ett[] = {
		&ett_ipmi_chs_bo00_byte1,
		&ett_ipmi_chs_bo02_byte1,
		&ett_ipmi_chs_bo03_byte1,
		&ett_ipmi_chs_bo04_byte2,
		&ett_ipmi_chs_bo05_byte1,
		&ett_ipmi_chs_bo05_byte2,
		&ett_ipmi_chs_bo05_byte3,
		&ett_ipmi_chs_bo05_byte4,
		&ett_ipmi_chs_bo06_byte1,
		&ett_ipmi_chs_00_capflags,
		&ett_ipmi_chs_01_pwr_state,
		&ett_ipmi_chs_01_last_event,
		&ett_ipmi_chs_01_misc,
		&ett_ipmi_chs_01_fpb,
		&ett_ipmi_chs_02_byte1,
		&ett_ipmi_chs_04_byte2,
		&ett_ipmi_chs_05_flags,
		&ett_ipmi_chs_06_byte1,
		&ett_ipmi_chs_06_policy_support,
		&ett_ipmi_chs_07_byte1,
		&ett_ipmi_chs_08_byte1,
		&ett_ipmi_chs_09_rq_byte1,
		&ett_ipmi_chs_09_rs_byte1,
		&ett_ipmi_chs_09_rs_byte2,
	};

	proto_register_field_array(proto_ipmi, hf, array_length(hf));
	proto_register_subtree_array(ett, array_length(ett));
	ipmi_register_netfn_cmdtab(IPMI_CHASSIS_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
			cmd_chassis, array_length(cmd_chassis));
}
Esempio n. 5
0
void
ipmi_register_storage(gint proto_ipmi)
{
    static hf_register_info hf[] = {
        {   &hf_ipmi_stor_10_fruid,
            {   "FRU ID",
                "ipmi.st10.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_10_size,
            {   "FRU Inventory area size",
                "ipmi.st10.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_10_access,
            {   "Device is accessed",
                "ipmi.st10.access", FT_BOOLEAN, 8, TFS(&tfs_10_access), 0x01, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_11_fruid,
            {   "FRU ID",
                "ipmi.st11.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_11_offset,
            {   "Offset to read",
                "ipmi.st11.offset", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_11_count,
            {   "Count to read",
                "ipmi.st11.count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_11_ret_count,
            {   "Returned count",
                "ipmi.st11.ret_count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_11_data,
            {   "Requested data",
                "ipmi.st11.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_12_fruid,
            {   "FRU ID",
                "ipmi.st12.fruid", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_12_offset,
            {   "Offset to read",
                "ipmi.st12.offset", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_12_data,
            {   "Requested data",
                "ipmi.st12.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_12_ret_count,
            {   "Returned count",
                "ipmi.st12.ret_count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_20_sdr_version,
            {   "SDR Version",
                "ipmi.st20.sdr_version", FT_UINT8, BASE_CUSTOM, ipmi_fmt_version, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_rec_count,
            {   "Record Count",
                "ipmi.st20.rec_count", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_free_space,
            {   "Free Space",
                "ipmi.st20.free_space", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_ts_add,
            {   "Most recent addition timestamp",
                "ipmi.st20.ts_add", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_ts_erase,
            {   "Most recent erase timestamp",
                "ipmi.st20.ts_erase", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_overflow,
            {   "Overflow",
                "ipmi.st20.op_overflow", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_update,
            {   "SDR Repository Update",
                "ipmi.st20.op_update", FT_UINT8, BASE_HEX, vals_20_update, 0x60, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_delete,
            {   "Delete SDR",
                "ipmi.st20.op_delete", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_partial_add,
            {   "Partial Add SDR",
                "ipmi.st20.op_partial_add", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_reserve,
            {   "Reserve SDR Repository",
                "ipmi.st20.op_reserve", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_20_op_allocinfo,
            {   "Get SDR Repository Allocation Info",
                "ipmi.st20.op_allocinfo", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_21_units,
            {   "Number of allocation units",
                "ipmi.st21.units", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_21_size,
            {   "Allocation unit size",
                "ipmi.st21.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_21_free,
            {   "Number of free units",
                "ipmi.st21.free", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_21_largest,
            {   "Largest free block (in units)",
                "ipmi.st21.largest", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_21_maxrec,
            {   "Maximum record size (in units)",
                "ipmi.st21.maxrec", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_22_rsrv_id,
            {   "Reservation ID",
                "ipmi.st22.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_23_rsrv_id,
            {   "Reservation ID",
                "ipmi.st23.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_23_rec_id,
            {   "Record ID",
                "ipmi.st23.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_23_offset,
            {   "Offset into record",
                "ipmi.st23.offset", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_23_count,
            {   "Bytes to read",
                "ipmi.st23.count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_23_next,
            {   "Next Record ID",
                "ipmi.st23.next", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_23_data,
            {   "Record Data",
                "ipmi.st23.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_24_data,
            {   "SDR Data",
                "ipmi.st24.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_24_added_rec_id,
            {   "Record ID for added record",
                "ipmi.st23.added_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_25_rsrv_id,
            {   "Reservation ID",
                "ipmi.st25.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_25_rec_id,
            {   "Record ID",
                "ipmi.st25.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_25_offset,
            {   "Offset into record",
                "ipmi.st25.offset", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_25_inprogress,
            {   "In progress",
                "ipmi.st25.inprogress", FT_UINT8, BASE_HEX, vals_25_inprogress, 0x0f, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_25_data,
            {   "SDR Data",
                "ipmi.st25.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_25_added_rec_id,
            {   "Record ID for added record",
                "ipmi.st25.added_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_26_rsrv_id,
            {   "Reservation ID",
                "ipmi.st26.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_26_rec_id,
            {   "Record ID",
                "ipmi.st26.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_26_del_rec_id,
            {   "Deleted Record ID",
                "ipmi.st26.del_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_27_rsrv_id,
            {   "Reservation ID",
                "ipmi.st27.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_27_clr,
            {   "Confirmation (should be CLR)",
                "ipmi.st27.clr", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_27_action,
            {   "Action",
                "ipmi.st27.action", FT_UINT8, BASE_HEX, vals_27_action, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_27_status,
            {   "Erasure Status",
                "ipmi.st27.status", FT_UINT8, BASE_HEX, vals_27_status, 0x0f, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_28_time,
            {   "Time",
                "ipmi.st28.time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_29_time,
            {   "Time",
                "ipmi.st29.time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_2c_init_agent,
            {   "Initialization agent",
                "ipmi.st2c.init_agent", FT_BOOLEAN, 8, TFS(&tfs_2c_init_agent), 0x01, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_2c_init_state,
            {   "Initialization",
                "ipmi.st2c.init_state", FT_BOOLEAN, 8, TFS(&tfs_2c_init_state), 0x01, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_40_sel_version,
            {   "SEL Version",
                "ipmi.st40.sel_version", FT_UINT8, BASE_CUSTOM, ipmi_fmt_version, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_entries,
            {   "Entries",
                "ipmi.st40.rec_count", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_free_space,
            {   "Free Space",
                "ipmi.st40.free_space", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_ts_add,
            {   "Most recent addition timestamp",
                "ipmi.st40.ts_add", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_ts_erase,
            {   "Most recent erase timestamp",
                "ipmi.st40.ts_erase", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_op_overflow,
            {   "Overflow",
                "ipmi.st40.op_overflow", FT_BOOLEAN, 8, NULL, 0x80, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_op_delete,
            {   "Delete SEL",
                "ipmi.st40.op_delete", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_op_partial_add,
            {   "Partial Add SEL Entry",
                "ipmi.st40.op_partial_add", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_op_reserve,
            {   "Reserve SEL",
                "ipmi.st40.op_reserve", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_40_op_allocinfo,
            {   "Get SEL Allocation Info",
                "ipmi.st40.op_allocinfo", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_41_units,
            {   "Number of allocation units",
                "ipmi.st41.units", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_41_size,
            {   "Allocation unit size",
                "ipmi.st41.size", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_41_free,
            {   "Number of free units",
                "ipmi.st41.free", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_41_largest,
            {   "Largest free block (in units)",
                "ipmi.st41.largest", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_41_maxrec,
            {   "Maximum record size (in units)",
                "ipmi.st41.maxrec", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_42_rsrv_id,
            {   "Reservation ID",
                "ipmi.st42.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_43_rsrv_id,
            {   "Reservation ID",
                "ipmi.st43.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_43_rec_id,
            {   "Record ID",
                "ipmi.st43.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_43_offset,
            {   "Offset into record",
                "ipmi.st43.offset", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_43_count,
            {   "Bytes to read",
                "ipmi.st43.count", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_43_next,
            {   "Next Record ID",
                "ipmi.st43.next", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_43_data,
            {   "Record Data",
                "ipmi.st43.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_44_data,
            {   "SDR Data",
                "ipmi.st44.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_44_added_rec_id,
            {   "Record ID for added record",
                "ipmi.st43.added_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_45_rsrv_id,
            {   "Reservation ID",
                "ipmi.st45.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_45_rec_id,
            {   "Record ID",
                "ipmi.st45.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_45_offset,
            {   "Offset into record",
                "ipmi.st45.offset", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_45_inprogress,
            {   "In progress",
                "ipmi.st45.inprogress", FT_UINT8, BASE_HEX, vals_45_inprogress, 0x0f, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_45_data,
            {   "Record Data",
                "ipmi.st45.data", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_45_added_rec_id,
            {   "Record ID for added record",
                "ipmi.st45.added_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_46_rsrv_id,
            {   "Reservation ID",
                "ipmi.st46.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_46_rec_id,
            {   "Record ID",
                "ipmi.st46.rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_46_del_rec_id,
            {   "Deleted Record ID",
                "ipmi.st46.del_rec_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_47_rsrv_id,
            {   "Reservation ID",
                "ipmi.st47.rsrv_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_47_clr,
            {   "Confirmation (should be CLR)",
                "ipmi.st47.clr", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_47_action,
            {   "Action",
                "ipmi.st47.action", FT_UINT8, BASE_HEX, vals_47_action, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_47_status,
            {   "Erasure Status",
                "ipmi.st47.status", FT_UINT8, BASE_HEX, vals_47_status, 0x0f, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_48_time,
            {   "Time",
                "ipmi.st48.time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_49_time,
            {   "Time",
                "ipmi.st49.time", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_5a_log_type,
            {   "Log type",
                "ipmi.st5a.log_type", FT_UINT8, BASE_HEX, log_type_vals, 0x0f, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5a_ts_add,
            {   "Last addition timestamp",
                "ipmi.st5a.ts_add", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5a_num_entries,
            {   "Number of entries in MCA Log",
                "ipmi.st5a.num_entries", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5a_iana,
            {   "OEM IANA",
                "ipmi.st5a.iana", FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5a_bytes,
            {   "Log status bytes",
                "ipmi.st5a.bytes", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5a_unknown,
            {   "Unknown log format (cannot parse data)",
                "ipmi.st5a.unknown", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },

        {   &hf_ipmi_stor_5b_log_type,
            {   "Log type",
                "ipmi.st5b.log_type", FT_UINT8, BASE_HEX, log_type_vals, 0x0f, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5b_ts_add,
            {   "Last addition timestamp",
                "ipmi.st5b.ts_add", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5b_num_entries,
            {   "Number of entries in MCA Log",
                "ipmi.st5b.num_entries", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5b_iana,
            {   "OEM IANA",
                "ipmi.st5b.iana", FT_UINT24, BASE_HEX, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5b_bytes,
            {   "Log status bytes",
                "ipmi.st5b.bytes", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },
        {   &hf_ipmi_stor_5b_unknown,
            {   "Unknown log format (cannot parse data)",
                "ipmi.st5b.unknown", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL
            }
        },

    };
    static gint *ett[] = {
        &ett_ipmi_stor_10_flags,
        &ett_ipmi_stor_20_ops,
        &ett_ipmi_stor_25_byte6,
        &ett_ipmi_stor_27_status,
        &ett_ipmi_stor_2c_rq_byte1,
        &ett_ipmi_stor_2c_rs_byte1,
        &ett_ipmi_stor_40_ops,
        &ett_ipmi_stor_45_byte6,
        &ett_ipmi_stor_47_status,
        &ett_ipmi_stor_5a_byte1,
        &ett_ipmi_stor_5b_byte1,
    };

    proto_register_field_array(proto_ipmi, hf, array_length(hf));
    proto_register_subtree_array(ett, array_length(ett));
    ipmi_register_netfn_cmdtab(IPMI_STORAGE_REQ, IPMI_OEM_NONE, NULL, 0, NULL,
                               cmd_storage, array_length(cmd_storage));
}