1255570Strasz/*- 2255570Strasz * Copyright (c) 2012 The FreeBSD Foundation 3255570Strasz * All rights reserved. 4255570Strasz * 5255570Strasz * This software was developed by Edward Tomasz Napierala under sponsorship 6255570Strasz * from the FreeBSD Foundation. 7255570Strasz * 8255570Strasz * Redistribution and use in source and binary forms, with or without 9255570Strasz * modification, are permitted provided that the following conditions 10255570Strasz * are met: 11255570Strasz * 1. Redistributions of source code must retain the above copyright 12255570Strasz * notice, this list of conditions and the following disclaimer. 13255570Strasz * 2. Redistributions in binary form must reproduce the above copyright 14255570Strasz * notice, this list of conditions and the following disclaimer in the 15255570Strasz * documentation and/or other materials provided with the distribution. 16255570Strasz * 17255570Strasz * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18255570Strasz * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19255570Strasz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20255570Strasz * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21255570Strasz * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22255570Strasz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23255570Strasz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24255570Strasz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25255570Strasz * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26255570Strasz * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27255570Strasz * SUCH DAMAGE. 28255570Strasz * 29255570Strasz * $FreeBSD: releng/10.3/usr.sbin/iscsid/iscsid.h 288698 2015-10-05 07:31:51Z mav $ 30255570Strasz */ 31255570Strasz 32255570Strasz#ifndef ISCSID_H 33255570Strasz#define ISCSID_H 34255570Strasz 35255570Strasz#include <stdbool.h> 36255570Strasz#include <stdint.h> 37255570Strasz 38255570Strasz#include <iscsi_ioctl.h> 39255570Strasz 40255570Strasz#define DEFAULT_PIDFILE "/var/run/iscsid.pid" 41255570Strasz 42255570Strasz#define CONN_DIGEST_NONE 0 43255570Strasz#define CONN_DIGEST_CRC32C 1 44255570Strasz 45255570Strasz#define CONN_MUTUAL_CHALLENGE_LEN 1024 46279001Smav#define SOCKBUF_SIZE 1048576 47255570Strasz 48255570Straszstruct connection { 49255570Strasz int conn_iscsi_fd; 50255570Strasz int conn_socket; 51255570Strasz unsigned int conn_session_id; 52255570Strasz struct iscsi_session_conf conn_conf; 53255570Strasz char conn_target_alias[ISCSI_ADDR_LEN]; 54255570Strasz uint8_t conn_isid[6]; 55268703Smav uint16_t conn_tsih; 56255570Strasz uint32_t conn_statsn; 57255570Strasz int conn_header_digest; 58255570Strasz int conn_data_digest; 59255570Strasz bool conn_initial_r2t; 60255570Strasz bool conn_immediate_data; 61255570Strasz size_t conn_max_data_segment_length; 62255570Strasz size_t conn_max_burst_length; 63255570Strasz size_t conn_first_burst_length; 64274866Strasz struct chap *conn_mutual_chap; 65255570Strasz}; 66255570Strasz 67255570Straszstruct pdu { 68255570Strasz struct connection *pdu_connection; 69255570Strasz struct iscsi_bhs *pdu_bhs; 70255570Strasz char *pdu_data; 71255570Strasz size_t pdu_data_len; 72255570Strasz}; 73255570Strasz 74255570Strasz#define KEYS_MAX 1024 75255570Strasz 76255570Straszstruct keys { 77255570Strasz char *keys_names[KEYS_MAX]; 78255570Strasz char *keys_values[KEYS_MAX]; 79255570Strasz char *keys_data; 80255570Strasz size_t keys_data_len; 81255570Strasz}; 82255570Strasz 83274866Strasz#define CHAP_CHALLENGE_LEN 1024 84286219Strasz#define CHAP_DIGEST_LEN 16 /* Equal to MD5 digest size. */ 85274866Strasz 86274866Straszstruct chap { 87274866Strasz unsigned char chap_id; 88274866Strasz char chap_challenge[CHAP_CHALLENGE_LEN]; 89286219Strasz char chap_response[CHAP_DIGEST_LEN]; 90274866Strasz}; 91274866Strasz 92274866Straszstruct rchap { 93274866Strasz char *rchap_secret; 94274866Strasz unsigned char rchap_id; 95274866Strasz void *rchap_challenge; 96274866Strasz size_t rchap_challenge_len; 97274866Strasz}; 98274866Strasz 99274866Straszstruct chap *chap_new(void); 100274866Straszchar *chap_get_id(const struct chap *chap); 101274866Straszchar *chap_get_challenge(const struct chap *chap); 102274866Straszint chap_receive(struct chap *chap, const char *response); 103274866Straszint chap_authenticate(struct chap *chap, 104274866Strasz const char *secret); 105274866Straszvoid chap_delete(struct chap *chap); 106274866Strasz 107274866Straszstruct rchap *rchap_new(const char *secret); 108274866Straszint rchap_receive(struct rchap *rchap, 109274866Strasz const char *id, const char *challenge); 110274866Straszchar *rchap_get_response(struct rchap *rchap); 111274866Straszvoid rchap_delete(struct rchap *rchap); 112274866Strasz 113255570Straszstruct keys *keys_new(void); 114255570Straszvoid keys_delete(struct keys *key); 115255570Straszvoid keys_load(struct keys *keys, const struct pdu *pdu); 116255570Straszvoid keys_save(struct keys *keys, struct pdu *pdu); 117255570Straszconst char *keys_find(struct keys *keys, const char *name); 118255570Straszvoid keys_add(struct keys *keys, 119255570Strasz const char *name, const char *value); 120255570Straszvoid keys_add_int(struct keys *keys, 121255570Strasz const char *name, int value); 122255570Strasz 123255570Straszstruct pdu *pdu_new(struct connection *ic); 124255570Straszstruct pdu *pdu_new_response(struct pdu *request); 125255570Straszvoid pdu_receive(struct pdu *request); 126255570Straszvoid pdu_send(struct pdu *response); 127255570Straszvoid pdu_delete(struct pdu *ip); 128255570Strasz 129255570Straszvoid login(struct connection *ic); 130255570Strasz 131255570Straszvoid discovery(struct connection *ic); 132255570Strasz 133255570Straszvoid log_init(int level); 134255570Straszvoid log_set_peer_name(const char *name); 135255570Straszvoid log_set_peer_addr(const char *addr); 136255570Straszvoid log_err(int, const char *, ...) 137262844Strasz __dead2 __printflike(2, 3); 138255570Straszvoid log_errx(int, const char *, ...) 139262844Strasz __dead2 __printflike(2, 3); 140262844Straszvoid log_warn(const char *, ...) __printflike(1, 2); 141255570Straszvoid log_warnx(const char *, ...) __printflike(1, 2); 142262844Straszvoid log_debugx(const char *, ...) __printflike(1, 2); 143255570Strasz 144255570Straszchar *checked_strdup(const char *); 145255570Straszbool timed_out(void); 146255570Straszvoid fail(const struct connection *, const char *); 147255570Strasz 148255570Strasz#endif /* !ISCSID_H */ 149