|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* Copyright (C) 2017-2018 Red Hat, Inc.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* This program is free software: you can redistribute it and/or modify
|
|
Packit |
eace71 |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
eace71 |
* the Free Software Foundation, either version 3 of the License, or
|
|
Packit |
eace71 |
* (at your option) any later version.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
eace71 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
eace71 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
eace71 |
* GNU General Public License for more details.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
eace71 |
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* Author: Gris Ge <fge@redhat.com>
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#ifndef __ISCSI_USR_IFACE_H__
|
|
Packit |
eace71 |
#define __ISCSI_USR_IFACE_H__
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#include "libopeniscsiusr/libopeniscsiusr_common.h"
|
|
Packit |
eace71 |
#include <stdint.h>
|
|
Packit |
eace71 |
#include <netdb.h>
|
|
Packit |
eace71 |
#include <net/if.h>
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define VALUE_MAXVAL 256 /* the maximum length of 223 bytes in the RFC. */
|
|
Packit |
eace71 |
/* ^ VALUE_MAXVAL is copied from usr/idbm.h
|
|
Packit |
eace71 |
* The RFC 3720 only said:
|
|
Packit |
eace71 |
* If not otherwise specified, the maximum length of a simple-value (not
|
|
Packit |
eace71 |
* its encoded representation) is 255 bytes, not including the delimiter
|
|
Packit |
eace71 |
* (comma or zero byte).
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define ISCSI_MAX_IFACE_LEN 65
|
|
Packit |
eace71 |
#define ISCSI_TRANSPORT_NAME_MAXLEN 16
|
|
Packit |
eace71 |
#define ISCSI_MAX_STR_LEN 80
|
|
Packit |
eace71 |
#define ISCSI_HWADDRESS_BUF_SIZE 18
|
|
Packit |
eace71 |
#define TARGET_NAME_MAXLEN VALUE_MAXVAL
|
|
Packit |
eace71 |
/* ^ TODO(Gris Ge): Above 5 constants are copy from usr/config.h, need to
|
|
Packit |
eace71 |
* verify them in linux kernel code
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct iscsi_iface {
|
|
Packit |
eace71 |
/* iscsi iface record name */
|
|
Packit |
eace71 |
char name[ISCSI_MAX_IFACE_LEN];
|
|
Packit |
eace71 |
uint32_t iface_num;
|
|
Packit |
eace71 |
/* network layer iface name (eth0) */
|
|
Packit |
eace71 |
char netdev[IFNAMSIZ];
|
|
Packit |
eace71 |
char ipaddress[NI_MAXHOST];
|
|
Packit |
eace71 |
char subnet_mask[NI_MAXHOST];
|
|
Packit |
eace71 |
char gateway[NI_MAXHOST];
|
|
Packit |
eace71 |
char bootproto[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char ipv6_linklocal[NI_MAXHOST];
|
|
Packit |
eace71 |
char ipv6_router[NI_MAXHOST];
|
|
Packit |
eace71 |
char ipv6_autocfg[NI_MAXHOST];
|
|
Packit |
eace71 |
char linklocal_autocfg[NI_MAXHOST];
|
|
Packit |
eace71 |
char router_autocfg[NI_MAXHOST];
|
|
Packit |
eace71 |
uint8_t prefix_len;
|
|
Packit |
eace71 |
/* ^ prefix_len is removed, as linux kernel has no such sysfs property
|
|
Packit |
eace71 |
* and there is no actual code in usr/ folder set this property
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* Added back, we need to be backward compatible with iface records
|
|
Packit |
eace71 |
* created by older tools. Look at fixing code to ignore in record
|
|
Packit |
eace71 |
* files instead? - cleech
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
uint16_t vlan_id;
|
|
Packit |
eace71 |
uint8_t vlan_priority;
|
|
Packit |
eace71 |
char vlan_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char state[ISCSI_MAX_STR_LEN]; /* 0 = disable,
|
|
Packit |
eace71 |
* 1 = enable */
|
|
Packit |
eace71 |
uint16_t mtu;
|
|
Packit |
eace71 |
uint16_t port;
|
|
Packit |
eace71 |
char delayed_ack[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char nagle[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char tcp_wsf_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
uint8_t tcp_wsf;
|
|
Packit |
eace71 |
uint8_t tcp_timer_scale;
|
|
Packit |
eace71 |
char tcp_timestamp[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_dns[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_slp_da[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char tos_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
uint8_t tos;
|
|
Packit |
eace71 |
char gratuitous_arp[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_alt_client_id_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_alt_client_id[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_req_vendor_id_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_vendor_id_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_vendor_id[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char dhcp_learn_iqn[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char fragmentation[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char incoming_forwarding[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
uint8_t ttl;
|
|
Packit |
eace71 |
char gratuitous_neighbor_adv[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char redirect[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char mld[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
uint32_t flow_label;
|
|
Packit |
eace71 |
uint32_t traffic_class;
|
|
Packit |
eace71 |
uint8_t hop_limit;
|
|
Packit |
eace71 |
uint32_t nd_reachable_tmo;
|
|
Packit |
eace71 |
uint32_t nd_rexmit_time;
|
|
Packit |
eace71 |
uint32_t nd_stale_tmo;
|
|
Packit |
eace71 |
uint8_t dup_addr_detect_cnt;
|
|
Packit |
eace71 |
uint32_t router_adv_link_mtu;
|
|
Packit |
eace71 |
uint16_t def_task_mgmt_tmo;
|
|
Packit |
eace71 |
char header_digest[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char data_digest[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char immediate_data[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char initial_r2t[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char data_seq_inorder[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char data_pdu_inorder[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
uint8_t erl;
|
|
Packit |
eace71 |
uint32_t max_recv_dlength;
|
|
Packit |
eace71 |
uint32_t first_burst_len;
|
|
Packit |
eace71 |
uint16_t max_out_r2t;
|
|
Packit |
eace71 |
uint32_t max_burst_len;
|
|
Packit |
eace71 |
char chap_auth[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char bidi_chap[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char strict_login_comp[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char discovery_auth[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char discovery_logout[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char port_state[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
char port_speed[ISCSI_MAX_STR_LEN];
|
|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* TODO: we may have to make this bigger and interconnect
|
|
Packit |
eace71 |
* specific for infiniband
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
char hwaddress[ISCSI_HWADDRESS_BUF_SIZE];
|
|
Packit |
eace71 |
char transport_name[ISCSI_TRANSPORT_NAME_MAXLEN];
|
|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* This is only used for boot now, but the iser guys
|
|
Packit |
eace71 |
* can use this for their virtualization idea.
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
char alias[TARGET_NAME_MAXLEN + 1];
|
|
Packit |
eace71 |
char iname[TARGET_NAME_MAXLEN + 1];
|
|
Packit |
eace71 |
bool is_ipv6;
|
|
Packit |
eace71 |
};
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
__DLL_LOCAL int _iscsi_iface_get_from_sysfs(struct iscsi_context *ctx,
|
|
Packit |
eace71 |
uint32_t host_id, uint32_t sid,
|
|
Packit |
eace71 |
char *iface_kern_id,
|
|
Packit |
eace71 |
struct iscsi_iface **iface);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
__DLL_LOCAL bool _iface_is_valid(struct iscsi_iface *iface);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#endif /* End of __ISCSI_USR_IFACE_H__ */
|